@dynamic-labs/ethereum 2.1.0-alpha.3 → 2.1.0-alpha.31

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,103 +1,89 @@
1
1
  'use client'
2
2
  import { __rest, __awaiter } from '../../_virtual/_tslib.js';
3
- import { createWalletClient, custom } from 'viem';
4
- import { findWalletBookWallet } from '@dynamic-labs/wallet-book';
3
+ import { toHex, toBytes, createWalletClient, custom } from 'viem';
5
4
  import { eventListenerHandlers } from '@dynamic-labs/wallet-connector-core';
6
- import { EthProviderHelper } from '../ethProviderHelper.js';
5
+ import { chainsMap } from '@dynamic-labs/viem-utils';
7
6
  import { EthWalletConnector } from '../EthWalletConnector.js';
8
- import { getCoinbaseClient, getAddress, signMessage, killCoinbaseSession } from './client/client.js';
7
+ import { getCoinbaseProvider } from './helpers.js';
9
8
 
10
9
  class Coinbase extends EthWalletConnector {
11
10
  constructor(_a) {
12
- var { appName, appLogoUrl, evmNetworks } = _a, props = __rest(_a, ["appName", "appLogoUrl", "evmNetworks"]);
11
+ var { appName, appLogoUrl, evmNetworks, coinbaseWalletPreference } = _a, props = __rest(_a, ["appName", "appLogoUrl", "evmNetworks", "coinbaseWalletPreference"]);
13
12
  super(Object.assign({ evmNetworks }, props));
14
13
  this.name = 'Coinbase';
15
14
  this.overrideKey = 'coinbase';
16
15
  this.supportedChains = ['EVM', 'ETH'];
17
16
  this.connectedChain = 'EVM';
18
- this.canConnectViaQrCode = true;
19
- this.coinbaseProviderOpts = {
20
- appLogoUrl: appLogoUrl,
21
- appName: appName,
22
- evmNetworks: evmNetworks,
23
- };
24
- const wallet = findWalletBookWallet(this.walletBook, this.key);
25
- if (!wallet)
26
- return;
27
- this.ethProviderHelper = new EthProviderHelper(wallet, this);
28
- }
29
- setupEventListeners() {
30
- var _a, _b, _c;
31
- if (!this.isInstalledOnBrowser()) {
32
- this.setupCoinbaseProviderEventListeners();
33
- return;
34
- }
35
- const provider = (_a = this.ethProviderHelper) === null || _a === void 0 ? void 0 : _a.findProvider();
36
- if (!provider) {
37
- return;
38
- }
39
- const setupResponse = (_c = (_b = this.ethProviderHelper) === null || _b === void 0 ? void 0 : _b._setupEventListeners) === null || _c === void 0 ? void 0 : _c.call(_b, this);
40
- if (!(setupResponse === null || setupResponse === void 0 ? void 0 : setupResponse.tearDownEventListeners))
41
- return;
42
- this.teardownEventListeners = setupResponse.tearDownEventListeners;
43
- }
44
- getWalletClient(chainId) {
45
- var _a;
46
- if (this.isInstalledOnBrowser()) {
47
- return (_a = this.ethProviderHelper) === null || _a === void 0 ? void 0 : _a.findWalletClient(chainId);
48
- }
49
- return createWalletClient({
50
- transport: custom(getCoinbaseClient({
51
- opts: this.coinbaseProviderOpts,
52
- }).provider),
17
+ this.canConnectViaQrCode = false;
18
+ this.canConnectViaCustodialService = true;
19
+ this.coinbaseProvider = getCoinbaseProvider({
20
+ opts: {
21
+ appLogoUrl: appLogoUrl,
22
+ appName: appName,
23
+ evmNetworks: evmNetworks,
24
+ walletPreference: coinbaseWalletPreference,
25
+ },
53
26
  });
54
27
  }
55
- isInstalledOnBrowser() {
56
- var _a;
57
- return ((_a = this.ethProviderHelper) === null || _a === void 0 ? void 0 : _a.findProvider()) !== undefined;
58
- }
59
- getAddress(opts) {
28
+ getConnectedAccounts() {
60
29
  return __awaiter(this, void 0, void 0, function* () {
61
- var _a;
62
- if (this.isInstalledOnBrowser()) {
63
- return (_a = this.ethProviderHelper) === null || _a === void 0 ? void 0 : _a.getAddress();
30
+ try {
31
+ const accounts = yield this.coinbaseProvider.request({
32
+ method: 'eth_accounts',
33
+ });
34
+ if (accounts[0]) {
35
+ this.setActiveAccount(accounts[0]);
36
+ }
37
+ return accounts;
38
+ }
39
+ catch (error) {
40
+ return [];
64
41
  }
65
- return getAddress(this.coinbaseProviderOpts, opts);
66
42
  });
67
43
  }
68
- signMessage(messageToSign) {
44
+ getAddress() {
69
45
  return __awaiter(this, void 0, void 0, function* () {
70
- var _a;
71
- if (this.isInstalledOnBrowser()) {
72
- return (_a = this.ethProviderHelper) === null || _a === void 0 ? void 0 : _a.signMessage(messageToSign);
73
- }
74
- return signMessage(this.coinbaseProviderOpts, messageToSign);
46
+ const [address] = yield this.coinbaseProvider.request({
47
+ method: 'eth_requestAccounts',
48
+ });
49
+ this.setActiveAccount(address);
50
+ return address;
75
51
  });
76
52
  }
77
- endSession() {
53
+ signMessage(messageToSign) {
78
54
  return __awaiter(this, void 0, void 0, function* () {
79
- if (this.isInstalledOnBrowser())
80
- return;
81
- killCoinbaseSession();
55
+ const [address] = yield this.coinbaseProvider.request({
56
+ method: 'eth_requestAccounts',
57
+ });
58
+ try {
59
+ return yield this.coinbaseProvider.request({
60
+ method: 'personal_sign',
61
+ params: [toHex(toBytes(messageToSign)), address.toLowerCase()],
62
+ });
63
+ }
64
+ catch (err) {
65
+ return undefined;
66
+ }
82
67
  });
83
68
  }
84
- setupCoinbaseProviderEventListeners() {
85
- const { provider } = getCoinbaseClient({
86
- opts: this.coinbaseProviderOpts,
87
- });
88
- if (!provider) {
89
- return;
90
- }
69
+ setupEventListeners() {
91
70
  const { handleAccountChange, handleChainChange, handleDisconnect } = eventListenerHandlers(this);
92
- provider.on('accountsChanged', handleAccountChange);
93
- provider.on('chainChanged', handleChainChange);
94
- provider.on('disconnect', handleDisconnect);
71
+ this.coinbaseProvider.on('accountsChanged', handleAccountChange);
72
+ this.coinbaseProvider.on('chainChanged', handleChainChange);
73
+ this.coinbaseProvider.on('disconnect', handleDisconnect);
95
74
  this.teardownEventListeners = () => {
96
- provider.removeListener('accountsChanged', handleAccountChange);
97
- provider.removeListener('chainChanged', handleChainChange);
98
- provider.removeListener('disconnect', handleDisconnect);
75
+ this.coinbaseProvider.removeListener('accountsChanged', handleAccountChange);
76
+ this.coinbaseProvider.removeListener('chainChanged', handleChainChange);
77
+ this.coinbaseProvider.removeListener('disconnect', handleDisconnect);
99
78
  };
100
79
  }
80
+ getWalletClient(chainId) {
81
+ return createWalletClient({
82
+ account: this.getActiveAccount(),
83
+ chain: chainId ? chainsMap[chainId] : undefined,
84
+ transport: custom(this.coinbaseProvider),
85
+ });
86
+ }
101
87
  }
102
88
 
103
89
  export { Coinbase };
@@ -0,0 +1,35 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var walletSdk = require('@coinbase/wallet-sdk');
7
+
8
+ // storing a reference to the coinbase provider because the provider methods work better when
9
+ // they are called on the same instance
10
+ let coinbaseProvider;
11
+ const getCoinbaseProvider = ({ opts: { appLogoUrl, appName, evmNetworks, walletPreference } = {}, }) => {
12
+ // favoring base sepolia since that is the only chain that works for now
13
+ // when coinbase launches in mainnet, customers can simply disable the base sepolia chain
14
+ // from their dynamic settings, and everything will still work
15
+ const hasBaseSepolia = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.some((network) => network.chainId === 84532);
16
+ const appChainIds = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.map((network) => Number(network.chainId));
17
+ if (hasBaseSepolia) {
18
+ // just brings base sepolia to the front, because that is the chain that the coinbase
19
+ // provider returns when calling getNetwork
20
+ appChainIds === null || appChainIds === void 0 ? void 0 : appChainIds.sort((a, b) => (a === 84532 ? -1 : b === 84532 ? 1 : 0));
21
+ }
22
+ if (!coinbaseProvider) {
23
+ const coinbaseSdk = new walletSdk.CoinbaseWalletSDK({
24
+ appChainIds,
25
+ appLogoUrl,
26
+ appName,
27
+ });
28
+ coinbaseProvider = coinbaseSdk.makeWeb3Provider({
29
+ options: walletPreference !== null && walletPreference !== void 0 ? walletPreference : 'all',
30
+ });
31
+ }
32
+ return coinbaseProvider;
33
+ };
34
+
35
+ exports.getCoinbaseProvider = getCoinbaseProvider;
@@ -0,0 +1,3 @@
1
+ import { type GetCoinbaseProvider } from './types';
2
+ export declare const getCoinbaseProvider: GetCoinbaseProvider;
3
+ export declare const resetCoinbaseProvider: () => void;
@@ -0,0 +1,31 @@
1
+ 'use client'
2
+ import { CoinbaseWalletSDK } from '@coinbase/wallet-sdk';
3
+
4
+ // storing a reference to the coinbase provider because the provider methods work better when
5
+ // they are called on the same instance
6
+ let coinbaseProvider;
7
+ const getCoinbaseProvider = ({ opts: { appLogoUrl, appName, evmNetworks, walletPreference } = {}, }) => {
8
+ // favoring base sepolia since that is the only chain that works for now
9
+ // when coinbase launches in mainnet, customers can simply disable the base sepolia chain
10
+ // from their dynamic settings, and everything will still work
11
+ const hasBaseSepolia = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.some((network) => network.chainId === 84532);
12
+ const appChainIds = evmNetworks === null || evmNetworks === void 0 ? void 0 : evmNetworks.map((network) => Number(network.chainId));
13
+ if (hasBaseSepolia) {
14
+ // just brings base sepolia to the front, because that is the chain that the coinbase
15
+ // provider returns when calling getNetwork
16
+ appChainIds === null || appChainIds === void 0 ? void 0 : appChainIds.sort((a, b) => (a === 84532 ? -1 : b === 84532 ? 1 : 0));
17
+ }
18
+ if (!coinbaseProvider) {
19
+ const coinbaseSdk = new CoinbaseWalletSDK({
20
+ appChainIds,
21
+ appLogoUrl,
22
+ appName,
23
+ });
24
+ coinbaseProvider = coinbaseSdk.makeWeb3Provider({
25
+ options: walletPreference !== null && walletPreference !== void 0 ? walletPreference : 'all',
26
+ });
27
+ }
28
+ return coinbaseProvider;
29
+ };
30
+
31
+ export { getCoinbaseProvider };
@@ -0,0 +1,21 @@
1
+ import { type ProviderInterface } from '@coinbase/wallet-sdk';
2
+ import { type CoinbaseWalletPreference, type GenericNetwork } from '@dynamic-labs/types';
3
+ import { type EthWalletConnectorOpts } from '../EthWalletConnector';
4
+ export type GetCoinbaseProviderOpts = {
5
+ appLogoUrl?: string;
6
+ appName?: string;
7
+ evmNetworks?: GenericNetwork[];
8
+ walletPreference?: CoinbaseWalletPreference;
9
+ };
10
+ export type CoinbaseProviderHandlerOpts = {
11
+ onDisconnect(): Promise<void>;
12
+ };
13
+ export type GetCoinbaseProvider = (args: {
14
+ handlers?: CoinbaseProviderHandlerOpts;
15
+ opts?: GetCoinbaseProviderOpts;
16
+ }) => ProviderInterface;
17
+ export type CoinbaseOpts = EthWalletConnectorOpts & {
18
+ appLogoUrl?: string;
19
+ appName?: string;
20
+ coinbaseWalletPreference?: CoinbaseWalletPreference;
21
+ };
package/src/index.cjs CHANGED
@@ -7,6 +7,7 @@ require('./polyfills.cjs');
7
7
  var turnkey = require('@dynamic-labs/turnkey');
8
8
  var PhantomEvm = require('./injected/PhantomEvm.cjs');
9
9
  var ExodusEvm = require('./injected/ExodusEvm.cjs');
10
+ var UnknownInjected = require('./injected/UnknownInjected.cjs');
10
11
  var fetchInjectedWalletConnectors = require('./injected/fetchInjectedWalletConnectors.cjs');
11
12
  require('./walletConnect/walletConnect.cjs');
12
13
  var fetchWalletConnectWallets = require('./walletConnect/fetchWalletConnectWallets.cjs');
@@ -24,11 +25,13 @@ const EthereumWalletConnectors = (props) => [
24
25
  ...fetchWalletConnectWallets.fetchWalletConnectWallets(props),
25
26
  ...turnkey.TurnkeyEVMWalletConnectors(props),
26
27
  coinbase.Coinbase,
28
+ UnknownInjected.UnknownInjected,
27
29
  fetchWalletConnectWallets.getWalletConnectConnector(),
28
30
  ];
29
31
 
30
32
  exports.PhantomEvm = PhantomEvm.PhantomEvm;
31
33
  exports.ExodusEvm = ExodusEvm.ExodusEvm;
34
+ exports.UnknownInjected = UnknownInjected.UnknownInjected;
32
35
  exports.fetchInjectedWalletConnector = fetchInjectedWalletConnectors.fetchInjectedWalletConnector;
33
36
  exports.injectedWalletOverrides = fetchInjectedWalletConnectors.injectedWalletOverrides;
34
37
  exports.EthWalletConnector = EthWalletConnector.EthWalletConnector;
package/src/index.js CHANGED
@@ -3,6 +3,8 @@ import './polyfills.js';
3
3
  import { TurnkeyEVMWalletConnectors } from '@dynamic-labs/turnkey';
4
4
  export { PhantomEvm } from './injected/PhantomEvm.js';
5
5
  export { ExodusEvm } from './injected/ExodusEvm.js';
6
+ import { UnknownInjected } from './injected/UnknownInjected.js';
7
+ export { UnknownInjected } from './injected/UnknownInjected.js';
6
8
  import { injectedWalletOverrides, fetchInjectedWalletConnector } from './injected/fetchInjectedWalletConnectors.js';
7
9
  export { fetchInjectedWalletConnector, injectedWalletOverrides } from './injected/fetchInjectedWalletConnectors.js';
8
10
  import './walletConnect/walletConnect.js';
@@ -21,6 +23,7 @@ const EthereumWalletConnectors = (props) => [
21
23
  ...fetchWalletConnectWallets(props),
22
24
  ...TurnkeyEVMWalletConnectors(props),
23
25
  Coinbase,
26
+ UnknownInjected,
24
27
  getWalletConnectConnector(),
25
28
  ];
26
29
 
@@ -11,7 +11,7 @@ var InjectedWalletBase = require('./InjectedWalletBase.cjs');
11
11
  class PhantomEvm extends InjectedWalletBase {
12
12
  constructor(props) {
13
13
  super(props);
14
- this.name = 'PhantomEvm';
14
+ this.name = 'Phantom';
15
15
  this.overrideKey = 'phantomevm';
16
16
  this.wallet = walletBook.findWalletBookWallet(this.walletBook, this.key);
17
17
  }
@@ -7,7 +7,7 @@ import InjectedWalletBase from './InjectedWalletBase.js';
7
7
  class PhantomEvm extends InjectedWalletBase {
8
8
  constructor(props) {
9
9
  super(props);
10
- this.name = 'PhantomEvm';
10
+ this.name = 'Phantom';
11
11
  this.overrideKey = 'phantomevm';
12
12
  this.wallet = findWalletBookWallet(this.walletBook, this.key);
13
13
  }
@@ -0,0 +1,21 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var walletBook = require('@dynamic-labs/wallet-book');
7
+ var InjectedWalletBase = require('./InjectedWalletBase.cjs');
8
+
9
+ class UnknownInjected extends InjectedWalletBase {
10
+ constructor(props) {
11
+ super(props);
12
+ this.name = 'Unknown';
13
+ this.overrideKey = 'unknown';
14
+ this.wallet = walletBook.findWalletBookWallet(this.walletBook, this.key);
15
+ }
16
+ isInstalledOnBrowser() {
17
+ return false;
18
+ }
19
+ }
20
+
21
+ exports.UnknownInjected = UnknownInjected;
@@ -0,0 +1,8 @@
1
+ import { EthWalletConnectorOpts } from '..';
2
+ import InjectedWalletBase from './InjectedWalletBase';
3
+ export declare class UnknownInjected extends InjectedWalletBase {
4
+ name: string;
5
+ overrideKey: string;
6
+ constructor(props: EthWalletConnectorOpts);
7
+ isInstalledOnBrowser(): boolean;
8
+ }
@@ -0,0 +1,17 @@
1
+ 'use client'
2
+ import { findWalletBookWallet } from '@dynamic-labs/wallet-book';
3
+ import InjectedWalletBase from './InjectedWalletBase.js';
4
+
5
+ class UnknownInjected extends InjectedWalletBase {
6
+ constructor(props) {
7
+ super(props);
8
+ this.name = 'Unknown';
9
+ this.overrideKey = 'unknown';
10
+ this.wallet = findWalletBookWallet(this.walletBook, this.key);
11
+ }
12
+ isInstalledOnBrowser() {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ export { UnknownInjected };
@@ -8,18 +8,15 @@ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
8
  var InjectedWalletBase = require('./InjectedWalletBase.cjs');
9
9
  var PhantomEvm = require('./PhantomEvm.cjs');
10
10
  var ExodusEvm = require('./ExodusEvm.cjs');
11
- var Zerion = require('./Zerion.cjs');
12
11
 
13
12
  const injectedWalletOverrides = [
14
13
  PhantomEvm.PhantomEvm,
15
14
  ExodusEvm.ExodusEvm,
16
- Zerion.Zerion,
17
15
  ];
18
16
  const filteredInjectedWalletKeysOverrides = [
19
17
  'phantomevm',
20
18
  'coinbase',
21
19
  'exodusevm',
22
- 'zerion',
23
20
  ];
24
21
  const fetchInjectedWalletConnector = ({ walletBook, }) => {
25
22
  var _a;
@@ -4,18 +4,15 @@ import { logger } from '@dynamic-labs/wallet-connector-core';
4
4
  import InjectedWalletBase from './InjectedWalletBase.js';
5
5
  import { PhantomEvm } from './PhantomEvm.js';
6
6
  import { ExodusEvm } from './ExodusEvm.js';
7
- import { Zerion } from './Zerion.js';
8
7
 
9
8
  const injectedWalletOverrides = [
10
9
  PhantomEvm,
11
10
  ExodusEvm,
12
- Zerion,
13
11
  ];
14
12
  const filteredInjectedWalletKeysOverrides = [
15
13
  'phantomevm',
16
14
  'coinbase',
17
15
  'exodusevm',
18
- 'zerion',
19
16
  ];
20
17
  const fetchInjectedWalletConnector = ({ walletBook, }) => {
21
18
  var _a;
@@ -1,3 +1,4 @@
1
1
  export * from './PhantomEvm';
2
2
  export * from './ExodusEvm';
3
+ export * from './UnknownInjected';
3
4
  export * from './fetchInjectedWalletConnectors';