@wagmi/connectors 5.9.2 → 5.9.3
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/esm/exports/index.js +1 -0
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/gemini.js +150 -0
- package/dist/esm/gemini.js.map +1 -0
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/exports/index.d.ts +1 -0
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/gemini.d.ts +18 -0
- package/dist/types/gemini.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -1
- package/src/exports/index.ts +1 -2
- package/src/gemini.ts +183 -0
- package/src/version.ts +1 -1
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '5.9.
|
|
1
|
+
export const version = '5.9.3';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { type InjectedParameters, injected, type MockParameters, mock, } from '@wagmi/core';
|
|
2
2
|
export { type BaseAccountParameters, baseAccount } from '../baseAccount.js';
|
|
3
3
|
export { type CoinbaseWalletParameters, coinbaseWallet, } from '../coinbaseWallet.js';
|
|
4
|
+
export { type GeminiParameters, gemini } from '../gemini.js';
|
|
4
5
|
export { type MetaMaskParameters, metaMask } from '../metaMask.js';
|
|
5
6
|
export { type SafeParameters, safe } from '../safe.js';
|
|
6
7
|
export { version } from '../version.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,QAAQ,EACR,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exports/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EACvB,QAAQ,EACR,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3E,OAAO,EACL,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,KAAK,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,KAAK,uBAAuB,EAC5B,aAAa,GACd,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AppMetadata } from '@gemini-wallet/core';
|
|
2
|
+
import type { Address } from 'viem';
|
|
3
|
+
export type GeminiParameters = {
|
|
4
|
+
appMetadata?: AppMetadata;
|
|
5
|
+
};
|
|
6
|
+
export declare function gemini(parameters?: GeminiParameters): import("@wagmi/core").CreateConnectorFn<ProviderInterface, {
|
|
7
|
+
connect(parameters?: {
|
|
8
|
+
chainId?: number | undefined;
|
|
9
|
+
isReconnecting?: boolean | undefined;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
accounts: readonly Address[];
|
|
12
|
+
chainId: number;
|
|
13
|
+
}>;
|
|
14
|
+
}, Record<string, unknown>>;
|
|
15
|
+
export declare namespace gemini {
|
|
16
|
+
var type: "gemini";
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,qBAAqB,CAAA;AAOzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAGD,wBAAgB,MAAM,CAAC,UAAU,GAAE,gBAAqB;yBAG/B;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KACrC,GAAG,OAAO,CAAC;QACV,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;QAC5B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;4BAyJL;yBAlKe,MAAM"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.9.
|
|
1
|
+
export declare const version = "5.9.3";
|
|
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": "5.9.
|
|
4
|
+
"version": "5.9.3",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@base-org/account": "1.1.1",
|
|
42
42
|
"@coinbase/wallet-sdk": "4.3.6",
|
|
43
|
+
"@gemini-wallet/core": "0.1.1",
|
|
43
44
|
"@metamask/sdk": "0.32.0",
|
|
44
45
|
"@safe-global/safe-apps-provider": "0.18.6",
|
|
45
46
|
"@safe-global/safe-apps-sdk": "9.1.0",
|
package/src/exports/index.ts
CHANGED
|
@@ -12,9 +12,8 @@ export {
|
|
|
12
12
|
type CoinbaseWalletParameters,
|
|
13
13
|
coinbaseWallet,
|
|
14
14
|
} from '../coinbaseWallet.js'
|
|
15
|
-
|
|
15
|
+
export { type GeminiParameters, gemini } from '../gemini.js'
|
|
16
16
|
export { type MetaMaskParameters, metaMask } from '../metaMask.js'
|
|
17
|
-
|
|
18
17
|
export { type SafeParameters, safe } from '../safe.js'
|
|
19
18
|
export { version } from '../version.js'
|
|
20
19
|
export {
|
package/src/gemini.ts
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { AppMetadata, ProviderInterface } from '@gemini-wallet/core'
|
|
2
|
+
import { GeminiWalletProvider } from '@gemini-wallet/core'
|
|
3
|
+
import {
|
|
4
|
+
ChainNotConfiguredError,
|
|
5
|
+
type Connector,
|
|
6
|
+
createConnector,
|
|
7
|
+
} from '@wagmi/core'
|
|
8
|
+
import type { Address } from 'viem'
|
|
9
|
+
import {
|
|
10
|
+
getAddress,
|
|
11
|
+
numberToHex,
|
|
12
|
+
SwitchChainError,
|
|
13
|
+
UserRejectedRequestError,
|
|
14
|
+
} from 'viem'
|
|
15
|
+
|
|
16
|
+
export type GeminiParameters = {
|
|
17
|
+
appMetadata?: AppMetadata
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
gemini.type = 'gemini' as const
|
|
21
|
+
export function gemini(parameters: GeminiParameters = {}) {
|
|
22
|
+
type Provider = ProviderInterface
|
|
23
|
+
type Properties = {
|
|
24
|
+
connect(parameters?: {
|
|
25
|
+
chainId?: number | undefined
|
|
26
|
+
isReconnecting?: boolean | undefined
|
|
27
|
+
}): Promise<{
|
|
28
|
+
accounts: readonly Address[]
|
|
29
|
+
chainId: number
|
|
30
|
+
}>
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let walletProvider: Provider | undefined
|
|
34
|
+
let onAccountsChanged: Connector['onAccountsChanged'] | undefined
|
|
35
|
+
let onChainChanged: Connector['onChainChanged'] | undefined
|
|
36
|
+
let onDisconnect: Connector['onDisconnect'] | undefined
|
|
37
|
+
|
|
38
|
+
return createConnector<Provider, Properties>((config) => ({
|
|
39
|
+
id: 'gemini',
|
|
40
|
+
name: 'Gemini Wallet',
|
|
41
|
+
type: gemini.type,
|
|
42
|
+
icon: 'https://keys.gemini.com/images/gemini-wallet-logo.svg',
|
|
43
|
+
async connect({ chainId } = {}) {
|
|
44
|
+
try {
|
|
45
|
+
const provider = await this.getProvider()
|
|
46
|
+
const accounts = (await provider.request({
|
|
47
|
+
method: 'eth_requestAccounts',
|
|
48
|
+
})) as string[]
|
|
49
|
+
|
|
50
|
+
if (!onAccountsChanged) {
|
|
51
|
+
onAccountsChanged = this.onAccountsChanged.bind(this)
|
|
52
|
+
provider.on('accountsChanged', onAccountsChanged)
|
|
53
|
+
}
|
|
54
|
+
if (!onChainChanged) {
|
|
55
|
+
onChainChanged = this.onChainChanged.bind(this)
|
|
56
|
+
provider.on('chainChanged', onChainChanged)
|
|
57
|
+
}
|
|
58
|
+
if (!onDisconnect) {
|
|
59
|
+
onDisconnect = this.onDisconnect.bind(this)
|
|
60
|
+
provider.on('disconnect', onDisconnect)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
let currentChainId = await this.getChainId()
|
|
64
|
+
if (chainId && currentChainId !== chainId) {
|
|
65
|
+
const chain = await this.switchChain!({ chainId }).catch((error) => {
|
|
66
|
+
if (error.code === UserRejectedRequestError.code) throw error
|
|
67
|
+
return { id: currentChainId }
|
|
68
|
+
})
|
|
69
|
+
currentChainId = chain?.id ?? currentChainId
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
accounts: accounts.map((x) => getAddress(x)),
|
|
74
|
+
chainId: currentChainId,
|
|
75
|
+
}
|
|
76
|
+
} catch (error) {
|
|
77
|
+
if (
|
|
78
|
+
/(user closed modal|accounts received is empty|user denied account|request rejected)/i.test(
|
|
79
|
+
(error as Error).message,
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
throw new UserRejectedRequestError(error as Error)
|
|
83
|
+
throw error
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
async disconnect() {
|
|
87
|
+
const provider = await this.getProvider()
|
|
88
|
+
|
|
89
|
+
if (onAccountsChanged) {
|
|
90
|
+
provider.removeListener('accountsChanged', onAccountsChanged)
|
|
91
|
+
onAccountsChanged = undefined
|
|
92
|
+
}
|
|
93
|
+
if (onChainChanged) {
|
|
94
|
+
provider.removeListener('chainChanged', onChainChanged)
|
|
95
|
+
onChainChanged = undefined
|
|
96
|
+
}
|
|
97
|
+
if (onDisconnect) {
|
|
98
|
+
provider.removeListener('disconnect', onDisconnect)
|
|
99
|
+
onDisconnect = undefined
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
await provider.disconnect()
|
|
103
|
+
},
|
|
104
|
+
async getAccounts() {
|
|
105
|
+
const provider = await this.getProvider()
|
|
106
|
+
const accounts = (await provider.request({
|
|
107
|
+
method: 'eth_accounts',
|
|
108
|
+
})) as string[]
|
|
109
|
+
return accounts.map((x) => getAddress(x))
|
|
110
|
+
},
|
|
111
|
+
async getChainId() {
|
|
112
|
+
const provider = await this.getProvider()
|
|
113
|
+
const chainId = (await provider.request({
|
|
114
|
+
method: 'eth_chainId',
|
|
115
|
+
})) as string
|
|
116
|
+
return Number(chainId)
|
|
117
|
+
},
|
|
118
|
+
async getProvider() {
|
|
119
|
+
if (!walletProvider) {
|
|
120
|
+
walletProvider = new GeminiWalletProvider({
|
|
121
|
+
appMetadata: parameters.appMetadata ?? {},
|
|
122
|
+
chain: {
|
|
123
|
+
id: config.chains[0]?.id ?? 1,
|
|
124
|
+
rpcUrl: config.chains[0]?.rpcUrls?.default?.http[0],
|
|
125
|
+
},
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
return walletProvider
|
|
129
|
+
},
|
|
130
|
+
async isAuthorized() {
|
|
131
|
+
try {
|
|
132
|
+
const accounts = await this.getAccounts()
|
|
133
|
+
return Boolean(accounts.length)
|
|
134
|
+
} catch {
|
|
135
|
+
return false
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
async switchChain({ chainId }) {
|
|
139
|
+
const chain = config.chains.find((chain) => chain.id === chainId)
|
|
140
|
+
if (!chain) throw new SwitchChainError(new ChainNotConfiguredError())
|
|
141
|
+
|
|
142
|
+
const provider = await this.getProvider()
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
await provider.request({
|
|
146
|
+
method: 'wallet_switchEthereumChain',
|
|
147
|
+
params: [{ chainId: numberToHex(chainId) }],
|
|
148
|
+
})
|
|
149
|
+
return chain
|
|
150
|
+
} catch (error) {
|
|
151
|
+
throw new SwitchChainError(error as Error)
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
onAccountsChanged(accounts) {
|
|
155
|
+
if (accounts.length === 0) this.onDisconnect()
|
|
156
|
+
else
|
|
157
|
+
config.emitter.emit('change', {
|
|
158
|
+
accounts: accounts.map((x: string) => getAddress(x)),
|
|
159
|
+
})
|
|
160
|
+
},
|
|
161
|
+
onChainChanged(chain) {
|
|
162
|
+
const chainId = Number(chain)
|
|
163
|
+
config.emitter.emit('change', { chainId })
|
|
164
|
+
},
|
|
165
|
+
async onDisconnect() {
|
|
166
|
+
config.emitter.emit('disconnect')
|
|
167
|
+
|
|
168
|
+
const provider = await this.getProvider()
|
|
169
|
+
if (onAccountsChanged) {
|
|
170
|
+
provider.removeListener('accountsChanged', onAccountsChanged)
|
|
171
|
+
onAccountsChanged = undefined
|
|
172
|
+
}
|
|
173
|
+
if (onChainChanged) {
|
|
174
|
+
provider.removeListener('chainChanged', onChainChanged)
|
|
175
|
+
onChainChanged = undefined
|
|
176
|
+
}
|
|
177
|
+
if (onDisconnect) {
|
|
178
|
+
provider.removeListener('disconnect', onDisconnect)
|
|
179
|
+
onDisconnect = undefined
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
}))
|
|
183
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.9.
|
|
1
|
+
export const version = '5.9.3'
|