@dynamic-labs/ethereum-aa 2.0.0-alpha.4 → 2.0.0-alpha.6

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/CHANGELOG.md CHANGED
@@ -1,4 +1,35 @@
1
1
 
2
+ ## [2.0.0-alpha.6](https://github.com/dynamic-labs/DynamicAuth/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2024-02-26)
3
+
4
+
5
+ ### ⚠ BREAKING CHANGES
6
+
7
+ * setShowAuthFlow opens dynamic profile in non-multi-wallet states
8
+
9
+ ### Features
10
+
11
+ * allow passing prop to hide embedded wallet action confirmation UIs ([#4775](https://github.com/dynamic-labs/DynamicAuth/issues/4775)) ([d7c6a46](https://github.com/dynamic-labs/DynamicAuth/commit/d7c6a4699e41f6a62d31880c3bd0346ebfa0e3ba))
12
+ * make sms mobile keyboard numeric ([#4755](https://github.com/dynamic-labs/DynamicAuth/issues/4755)) ([f36844a](https://github.com/dynamic-labs/DynamicAuth/commit/f36844aeaae240c520181b3242492db8ffc64a50))
13
+ * setShowAuthFlow opens dynamic profile in non-multi-wallet states ([42dbbc0](https://github.com/dynamic-labs/DynamicAuth/commit/42dbbc00a5cebe937dca5a80397cdd3c577f6a45))
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * demo one-time codes for solana wallets fix ([#4760](https://github.com/dynamic-labs/DynamicAuth/issues/4760)) ([a5ab2a8](https://github.com/dynamic-labs/DynamicAuth/commit/a5ab2a8bc348a35a898e03db0900bfab88184c17))
19
+ * only store passcode in backend when auto-generated by dynamic ([#4764](https://github.com/dynamic-labs/DynamicAuth/issues/4764)) ([528bedc](https://github.com/dynamic-labs/DynamicAuth/commit/528bedce5cbd3022ddafe4242954a04f5b70ae74))
20
+ * use enableForcedNetworkValidation on connect-only ([#4750](https://github.com/dynamic-labs/DynamicAuth/issues/4750)) ([6299f7c](https://github.com/dynamic-labs/DynamicAuth/commit/6299f7c3ce705ddb19714f6b7a3a488851ed8dde))
21
+
22
+ ## [2.0.0-alpha.5](https://github.com/dynamic-labs/DynamicAuth/compare/v2.0.0-alpha.4...v2.0.0-alpha.5) (2024-02-22)
23
+
24
+
25
+ ### ⚠ BREAKING CHANGES
26
+
27
+ * wagmi v2 (#4660)
28
+
29
+ ### Features
30
+
31
+ * wagmi v2 ([#4660](https://github.com/dynamic-labs/DynamicAuth/issues/4660)) ([d8894e6](https://github.com/dynamic-labs/DynamicAuth/commit/d8894e61393b90ccf44904c33394b54286f0f9e9))
32
+
2
33
  ## [2.0.0-alpha.4](https://github.com/dynamic-labs/DynamicAuth/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2024-02-22)
3
34
 
4
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/ethereum-aa",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.0-alpha.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -26,16 +26,17 @@
26
26
  "./package.json": "./package.json"
27
27
  },
28
28
  "dependencies": {
29
- "@zerodev/sdk": "^4.1.5",
30
- "@dynamic-labs/sdk-api": "0.0.373",
31
- "@dynamic-labs/logger": "2.0.0-alpha.4",
32
- "@dynamic-labs/types": "2.0.0-alpha.4",
33
- "@dynamic-labs/utils": "2.0.0-alpha.4",
34
- "@dynamic-labs/viem-utils": "2.0.0-alpha.4",
35
- "@dynamic-labs/wallet-book": "2.0.0-alpha.4",
36
- "@dynamic-labs/wallet-connector-core": "2.0.0-alpha.4"
29
+ "@dynamic-labs/sdk-api": "0.0.376",
30
+ "@zerodev/presets": "5.1.2",
31
+ "@zerodev/sdk": "5.0.9",
32
+ "@dynamic-labs/logger": "2.0.0-alpha.6",
33
+ "@dynamic-labs/types": "2.0.0-alpha.6",
34
+ "@dynamic-labs/utils": "2.0.0-alpha.6",
35
+ "@dynamic-labs/viem-utils": "2.0.0-alpha.6",
36
+ "@dynamic-labs/wallet-book": "2.0.0-alpha.6",
37
+ "@dynamic-labs/wallet-connector-core": "2.0.0-alpha.6"
37
38
  },
38
39
  "peerDependencies": {
39
- "viem": "^1.19.13 || ^2.2.0"
40
+ "viem": "^2.7.6"
40
41
  }
41
42
  }
@@ -1,4 +1,4 @@
1
- import { ECDSAProvider } from '@zerodev/sdk';
1
+ import { KernelAccountClient } from '@zerodev/sdk';
2
2
  import { PublicClient, RpcTransactionRequest, WalletClient } from 'viem';
3
3
  import { Provider, ProviderEnum } from '@dynamic-labs/sdk-api';
4
4
  import { Chain, IAccountAbstractionWalletConnector, WalletConnector, WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
@@ -14,7 +14,7 @@ type ZeroDevConnectorProps = {
14
14
  };
15
15
  export declare class ZeroDevConnector extends WalletConnectorBase implements IAccountAbstractionWalletConnector {
16
16
  projectId: string;
17
- zeroDevProvider: ECDSAProvider | undefined;
17
+ zeroDevProvider: KernelAccountClient | undefined;
18
18
  eoaConnector: WalletConnector | undefined;
19
19
  private providerWithSponsorship;
20
20
  connectedChain: Chain;
@@ -33,7 +33,7 @@ export declare class ZeroDevConnector extends WalletConnectorBase implements IAc
33
33
  private _walletUiUtils;
34
34
  constructor(opts: ZeroDevConnectorProps);
35
35
  getEOAConnector(): WalletConnector | undefined;
36
- getAccountAbstractionProvider(): ECDSAProvider | undefined;
36
+ getAccountAbstractionProvider(): KernelAccountClient | undefined;
37
37
  setEoaConnector(connector: WalletConnector): Promise<void>;
38
38
  private checkIsProjectChainEnabled;
39
39
  private getProviderWithSponsorshipValidation;
package/src/index.cjs CHANGED
@@ -2,14 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var ZeroDevConnector = require('./ZeroDevConnector.cjs');
5
+ var logger = require('./utils/logger.cjs');
6
6
  var ethereumAa = require('./ethereum-aa.cjs');
7
7
  var isZeroDevConnector = require('./utils/isZeroDevConnector.cjs');
8
8
 
9
9
  const ZeroDevSmartWalletConnectors = (props) => {
10
10
  var _a;
11
11
  if ((_a = props.apiProviders) === null || _a === void 0 ? void 0 : _a.zerodev) {
12
- return [ZeroDevConnector.ZeroDevConnector];
12
+ logger.logger.warn('ZeroDevConnector is not currently available in v2 alpha. Please try again in a future release.');
13
+ return [];
13
14
  }
14
15
  return [];
15
16
  };
package/src/index.js CHANGED
@@ -1,11 +1,12 @@
1
- import { ZeroDevConnector } from './ZeroDevConnector.js';
1
+ import { logger } from './utils/logger.js';
2
2
  export { EthereumAaConnector } from './ethereum-aa.js';
3
3
  export { isZeroDevConnector } from './utils/isZeroDevConnector.js';
4
4
 
5
5
  const ZeroDevSmartWalletConnectors = (props) => {
6
6
  var _a;
7
7
  if ((_a = props.apiProviders) === null || _a === void 0 ? void 0 : _a.zerodev) {
8
- return [ZeroDevConnector];
8
+ logger.warn('ZeroDevConnector is not currently available in v2 alpha. Please try again in a future release.');
9
+ return [];
9
10
  }
10
11
  return [];
11
12
  };
@@ -1,35 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- /******************************************************************************
6
- Copyright (c) Microsoft Corporation.
7
-
8
- Permission to use, copy, modify, and/or distribute this software for any
9
- purpose with or without fee is hereby granted.
10
-
11
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
- PERFORMANCE OF THIS SOFTWARE.
18
- ***************************************************************************** */
19
-
20
- function __awaiter(thisArg, _arguments, P, generator) {
21
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
22
- return new (P || (P = Promise))(function (resolve, reject) {
23
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
24
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
- step((generator = generator.apply(thisArg, _arguments || [])).next());
27
- });
28
- }
29
-
30
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
31
- var e = new Error(message);
32
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
33
- };
34
-
35
- exports.__awaiter = __awaiter;
@@ -1,31 +0,0 @@
1
- /******************************************************************************
2
- Copyright (c) Microsoft Corporation.
3
-
4
- Permission to use, copy, modify, and/or distribute this software for any
5
- purpose with or without fee is hereby granted.
6
-
7
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
- PERFORMANCE OF THIS SOFTWARE.
14
- ***************************************************************************** */
15
-
16
- function __awaiter(thisArg, _arguments, P, generator) {
17
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
- return new (P || (P = Promise))(function (resolve, reject) {
19
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
- step((generator = generator.apply(thisArg, _arguments || [])).next());
23
- });
24
- }
25
-
26
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
27
- var e = new Error(message);
28
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
29
- };
30
-
31
- export { __awaiter };
@@ -1,243 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var _tslib = require('../_virtual/_tslib.cjs');
6
- var sdk = require('@zerodev/sdk');
7
- var viem = require('viem');
8
- var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
9
- var viemUtils = require('@dynamic-labs/viem-utils');
10
- var utils = require('@dynamic-labs/utils');
11
- var logger = require('./utils/logger.cjs');
12
-
13
- class ZeroDevConnector extends walletConnectorCore.WalletConnectorBase {
14
- get key() {
15
- return 'zerodev';
16
- }
17
- constructor(opts) {
18
- var _a;
19
- super(opts);
20
- this.connectedChain = 'EVM';
21
- this.supportedChains = ['ETH', 'EVM'];
22
- this.isGasSponsorshipDisabled = false;
23
- this.isEmbeddedWallet = true;
24
- this.name = 'ZeroDev';
25
- const zeroDevProjectId = (_a = opts.apiProviders.zerodev) === null || _a === void 0 ? void 0 : _a.clientId;
26
- if (!zeroDevProjectId) {
27
- throw new Error('Missing ZeroDev project ID provided. Add your ZeroDev project id to your project configuration via the Dynamic Labs dashboard.');
28
- }
29
- this.projectId = zeroDevProjectId;
30
- this._walletUiUtils = opts.walletUiUtils;
31
- this.evmNetworks = utils.parseEvmNetworks(opts.evmNetworks);
32
- }
33
- getEOAConnector() {
34
- return this.eoaConnector;
35
- }
36
- getAccountAbstractionProvider() {
37
- return this.zeroDevProvider;
38
- }
39
- setEoaConnector(connector) {
40
- return _tslib.__awaiter(this, void 0, void 0, function* () {
41
- this.zeroDevProviderDeferredPromise = new utils.DeferredPromise();
42
- this.eoaConnector = connector;
43
- const signer = yield this.eoaConnector.getSigner();
44
- if (!signer) {
45
- return;
46
- }
47
- const zeroDevProvider = yield sdk.ECDSAProvider.init({
48
- bundlerProvider: 'STACKUP',
49
- owner: sdk.convertWalletClientToAccountSigner(signer),
50
- projectId: this.projectId,
51
- });
52
- utils.wrapMethodWithCallback(zeroDevProvider, 'sendUserOperation', (original, ...args) => {
53
- this._walletUiUtils.disabledConfirmationOnce();
54
- return original(...args);
55
- });
56
- this.zeroDevProvider = zeroDevProvider;
57
- yield this.checkIsProjectChainEnabled();
58
- this.zeroDevProviderDeferredPromise.resolve();
59
- });
60
- }
61
- checkIsProjectChainEnabled() {
62
- var _a, _b;
63
- return _tslib.__awaiter(this, void 0, void 0, function* () {
64
- const client = yield this.getPublicClient();
65
- const chainName = (_a = client === null || client === void 0 ? void 0 : client.chain) === null || _a === void 0 ? void 0 : _a.name;
66
- const chainId = (_b = client === null || client === void 0 ? void 0 : client.chain) === null || _b === void 0 ? void 0 : _b.id;
67
- const isProjectChainEnabled = this.evmNetworks.some((network) => network.chainId === chainId);
68
- if (!isProjectChainEnabled) {
69
- logger.logger.error(`Please make sure to enable ${chainName} (${chainId}) in the Dynamic dashboard (https://app.dynamic.xyz/dashboard/configurations#evm).`);
70
- }
71
- });
72
- }
73
- getProviderWithSponsorshipValidation() {
74
- return _tslib.__awaiter(this, void 0, void 0, function* () {
75
- if (this.providerWithSponsorship) {
76
- return this.providerWithSponsorship;
77
- }
78
- const { eoaConnector } = this;
79
- if (!eoaConnector)
80
- throw new utils.DynamicError('No EOA connector');
81
- const signer = yield eoaConnector.getSigner();
82
- this.providerWithSponsorship = yield sdk.ECDSAProvider.init({
83
- bundlerProvider: 'STACKUP',
84
- opts: {
85
- paymasterConfig: {
86
- onlySendSponsoredTransaction: true,
87
- policy: 'VERIFYING_PAYMASTER',
88
- },
89
- },
90
- owner: sdk.convertWalletClientToAccountSigner(signer),
91
- projectId: this.projectId,
92
- });
93
- utils.wrapMethodWithCallback(this.providerWithSponsorship, 'sendUserOperation', (original, ...args) => {
94
- this._walletUiUtils.disabledConfirmationOnce();
95
- return original(...args);
96
- });
97
- return this.providerWithSponsorship;
98
- });
99
- }
100
- fetchPublicAddress() {
101
- var _a, _b;
102
- return _tslib.__awaiter(this, void 0, void 0, function* () {
103
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
104
- return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.getAddress();
105
- });
106
- }
107
- getConnectedAccounts() {
108
- var _a;
109
- return _tslib.__awaiter(this, void 0, void 0, function* () {
110
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
111
- return this.zeroDevProvider
112
- ? [yield this.zeroDevProvider.getAddress()]
113
- : [];
114
- });
115
- }
116
- getNetwork() {
117
- var _a, _b;
118
- return _tslib.__awaiter(this, void 0, void 0, function* () {
119
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
120
- return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.rpcClient.chain.id;
121
- });
122
- }
123
- getTransport(provider) {
124
- const transport = viemUtils.confirmationTransport({
125
- onPersonalSign: ({ message }) => _tslib.__awaiter(this, void 0, void 0, function* () {
126
- this._walletUiUtils.disabledConfirmationOnce();
127
- return provider.signMessage(message);
128
- }),
129
- onSendTransaction: ({ transaction }) => _tslib.__awaiter(this, void 0, void 0, function* () {
130
- try {
131
- this._walletUiUtils.disabledConfirmationOnce();
132
- const effectiveProvider = this.isGasSponsorshipDisabled
133
- ? provider
134
- : yield this.getProviderWithSponsorshipValidation();
135
- const response = yield effectiveProvider.sendTransaction(viemUtils.unFormatTransaction(transaction));
136
- return response;
137
- }
138
- catch (err) {
139
- logger.logger.debug(err);
140
- if (utils.TransactionGasCannotBeSponsoredError.isErrorMessage(err)) {
141
- throw new utils.TransactionGasCannotBeSponsoredError();
142
- }
143
- if (utils.InsufficientFundsError.isErrorMessage(err)) {
144
- throw new utils.InsufficientFundsError();
145
- }
146
- throw err;
147
- }
148
- }),
149
- onSignTypedData: ({ message }) => _tslib.__awaiter(this, void 0, void 0, function* () {
150
- this._walletUiUtils.disabledConfirmationOnce();
151
- const signTypedData = JSON.parse(message);
152
- return provider.signTypedData(signTypedData);
153
- }),
154
- provider: provider.rpcClient,
155
- transport: viem.custom(provider),
156
- walletUiUtils: this._walletUiUtils,
157
- });
158
- return transport;
159
- }
160
- getWalletClient() {
161
- const provider = this.zeroDevProvider;
162
- if (!provider)
163
- throw new utils.DynamicError('No provider');
164
- const transport = this.getTransport(provider);
165
- const walletClient = viem.createWalletClient({
166
- transport,
167
- });
168
- return walletClient;
169
- }
170
- getPublicClient() {
171
- return _tslib.__awaiter(this, void 0, void 0, function* () {
172
- const provider = this.zeroDevProvider;
173
- if (!provider)
174
- throw new utils.DynamicError('No provider');
175
- return provider.rpcClient;
176
- });
177
- }
178
- getSigner() {
179
- return _tslib.__awaiter(this, void 0, void 0, function* () {
180
- const provider = this.zeroDevProvider;
181
- if (!provider)
182
- throw new utils.DynamicError('No provider');
183
- const transport = this.getTransport(provider);
184
- const address = yield provider.getAddress();
185
- const walletClient = viem.createWalletClient({
186
- account: address,
187
- transport,
188
- });
189
- return walletClient;
190
- });
191
- }
192
- canSponsorTransactionGas(transaction) {
193
- var _a;
194
- return _tslib.__awaiter(this, void 0, void 0, function* () {
195
- try {
196
- const userOperation = {
197
- data: transaction.data ? transaction.data : '0x',
198
- target: transaction.to,
199
- value: viem.isHex(transaction.value)
200
- ? viem.fromHex(transaction.value, 'bigint')
201
- : transaction.value,
202
- };
203
- const result = yield ((_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.buildUserOperation(userOperation));
204
- if (!result)
205
- return false;
206
- return result.paymasterAndData !== '0x';
207
- }
208
- catch (err) {
209
- logger.logger.debug(err);
210
- return false;
211
- }
212
- });
213
- }
214
- disableGasSponsorshipOnce() {
215
- this.isGasSponsorshipDisabled = true;
216
- }
217
- getBalance() {
218
- var _a;
219
- return _tslib.__awaiter(this, void 0, void 0, function* () {
220
- const rpcClient = yield ((_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.rpcClient);
221
- if (!rpcClient)
222
- throw new utils.DynamicError('No RPC client');
223
- const address = yield this.fetchPublicAddress();
224
- if (!address)
225
- return;
226
- return viem.formatEther(yield rpcClient.getBalance({ address: address }));
227
- });
228
- }
229
- signMessage(messageToSign) {
230
- return _tslib.__awaiter(this, void 0, void 0, function* () {
231
- const client = yield this.getSigner();
232
- const account = yield this.fetchPublicAddress();
233
- if (!account || !client)
234
- return;
235
- return client.signMessage({
236
- account: account,
237
- message: messageToSign,
238
- });
239
- });
240
- }
241
- }
242
-
243
- exports.ZeroDevConnector = ZeroDevConnector;
@@ -1,239 +0,0 @@
1
- import { __awaiter } from '../_virtual/_tslib.js';
2
- import { ECDSAProvider, convertWalletClientToAccountSigner } from '@zerodev/sdk';
3
- import { custom, createWalletClient, isHex, fromHex, formatEther } from 'viem';
4
- import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
5
- import { confirmationTransport, unFormatTransaction } from '@dynamic-labs/viem-utils';
6
- import { parseEvmNetworks, DynamicError, DeferredPromise, wrapMethodWithCallback, TransactionGasCannotBeSponsoredError, InsufficientFundsError } from '@dynamic-labs/utils';
7
- import { logger } from './utils/logger.js';
8
-
9
- class ZeroDevConnector extends WalletConnectorBase {
10
- get key() {
11
- return 'zerodev';
12
- }
13
- constructor(opts) {
14
- var _a;
15
- super(opts);
16
- this.connectedChain = 'EVM';
17
- this.supportedChains = ['ETH', 'EVM'];
18
- this.isGasSponsorshipDisabled = false;
19
- this.isEmbeddedWallet = true;
20
- this.name = 'ZeroDev';
21
- const zeroDevProjectId = (_a = opts.apiProviders.zerodev) === null || _a === void 0 ? void 0 : _a.clientId;
22
- if (!zeroDevProjectId) {
23
- throw new Error('Missing ZeroDev project ID provided. Add your ZeroDev project id to your project configuration via the Dynamic Labs dashboard.');
24
- }
25
- this.projectId = zeroDevProjectId;
26
- this._walletUiUtils = opts.walletUiUtils;
27
- this.evmNetworks = parseEvmNetworks(opts.evmNetworks);
28
- }
29
- getEOAConnector() {
30
- return this.eoaConnector;
31
- }
32
- getAccountAbstractionProvider() {
33
- return this.zeroDevProvider;
34
- }
35
- setEoaConnector(connector) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- this.zeroDevProviderDeferredPromise = new DeferredPromise();
38
- this.eoaConnector = connector;
39
- const signer = yield this.eoaConnector.getSigner();
40
- if (!signer) {
41
- return;
42
- }
43
- const zeroDevProvider = yield ECDSAProvider.init({
44
- bundlerProvider: 'STACKUP',
45
- owner: convertWalletClientToAccountSigner(signer),
46
- projectId: this.projectId,
47
- });
48
- wrapMethodWithCallback(zeroDevProvider, 'sendUserOperation', (original, ...args) => {
49
- this._walletUiUtils.disabledConfirmationOnce();
50
- return original(...args);
51
- });
52
- this.zeroDevProvider = zeroDevProvider;
53
- yield this.checkIsProjectChainEnabled();
54
- this.zeroDevProviderDeferredPromise.resolve();
55
- });
56
- }
57
- checkIsProjectChainEnabled() {
58
- var _a, _b;
59
- return __awaiter(this, void 0, void 0, function* () {
60
- const client = yield this.getPublicClient();
61
- const chainName = (_a = client === null || client === void 0 ? void 0 : client.chain) === null || _a === void 0 ? void 0 : _a.name;
62
- const chainId = (_b = client === null || client === void 0 ? void 0 : client.chain) === null || _b === void 0 ? void 0 : _b.id;
63
- const isProjectChainEnabled = this.evmNetworks.some((network) => network.chainId === chainId);
64
- if (!isProjectChainEnabled) {
65
- logger.error(`Please make sure to enable ${chainName} (${chainId}) in the Dynamic dashboard (https://app.dynamic.xyz/dashboard/configurations#evm).`);
66
- }
67
- });
68
- }
69
- getProviderWithSponsorshipValidation() {
70
- return __awaiter(this, void 0, void 0, function* () {
71
- if (this.providerWithSponsorship) {
72
- return this.providerWithSponsorship;
73
- }
74
- const { eoaConnector } = this;
75
- if (!eoaConnector)
76
- throw new DynamicError('No EOA connector');
77
- const signer = yield eoaConnector.getSigner();
78
- this.providerWithSponsorship = yield ECDSAProvider.init({
79
- bundlerProvider: 'STACKUP',
80
- opts: {
81
- paymasterConfig: {
82
- onlySendSponsoredTransaction: true,
83
- policy: 'VERIFYING_PAYMASTER',
84
- },
85
- },
86
- owner: convertWalletClientToAccountSigner(signer),
87
- projectId: this.projectId,
88
- });
89
- wrapMethodWithCallback(this.providerWithSponsorship, 'sendUserOperation', (original, ...args) => {
90
- this._walletUiUtils.disabledConfirmationOnce();
91
- return original(...args);
92
- });
93
- return this.providerWithSponsorship;
94
- });
95
- }
96
- fetchPublicAddress() {
97
- var _a, _b;
98
- return __awaiter(this, void 0, void 0, function* () {
99
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
100
- return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.getAddress();
101
- });
102
- }
103
- getConnectedAccounts() {
104
- var _a;
105
- return __awaiter(this, void 0, void 0, function* () {
106
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
107
- return this.zeroDevProvider
108
- ? [yield this.zeroDevProvider.getAddress()]
109
- : [];
110
- });
111
- }
112
- getNetwork() {
113
- var _a, _b;
114
- return __awaiter(this, void 0, void 0, function* () {
115
- yield ((_a = this.zeroDevProviderDeferredPromise) === null || _a === void 0 ? void 0 : _a.promise);
116
- return (_b = this.zeroDevProvider) === null || _b === void 0 ? void 0 : _b.rpcClient.chain.id;
117
- });
118
- }
119
- getTransport(provider) {
120
- const transport = confirmationTransport({
121
- onPersonalSign: ({ message }) => __awaiter(this, void 0, void 0, function* () {
122
- this._walletUiUtils.disabledConfirmationOnce();
123
- return provider.signMessage(message);
124
- }),
125
- onSendTransaction: ({ transaction }) => __awaiter(this, void 0, void 0, function* () {
126
- try {
127
- this._walletUiUtils.disabledConfirmationOnce();
128
- const effectiveProvider = this.isGasSponsorshipDisabled
129
- ? provider
130
- : yield this.getProviderWithSponsorshipValidation();
131
- const response = yield effectiveProvider.sendTransaction(unFormatTransaction(transaction));
132
- return response;
133
- }
134
- catch (err) {
135
- logger.debug(err);
136
- if (TransactionGasCannotBeSponsoredError.isErrorMessage(err)) {
137
- throw new TransactionGasCannotBeSponsoredError();
138
- }
139
- if (InsufficientFundsError.isErrorMessage(err)) {
140
- throw new InsufficientFundsError();
141
- }
142
- throw err;
143
- }
144
- }),
145
- onSignTypedData: ({ message }) => __awaiter(this, void 0, void 0, function* () {
146
- this._walletUiUtils.disabledConfirmationOnce();
147
- const signTypedData = JSON.parse(message);
148
- return provider.signTypedData(signTypedData);
149
- }),
150
- provider: provider.rpcClient,
151
- transport: custom(provider),
152
- walletUiUtils: this._walletUiUtils,
153
- });
154
- return transport;
155
- }
156
- getWalletClient() {
157
- const provider = this.zeroDevProvider;
158
- if (!provider)
159
- throw new DynamicError('No provider');
160
- const transport = this.getTransport(provider);
161
- const walletClient = createWalletClient({
162
- transport,
163
- });
164
- return walletClient;
165
- }
166
- getPublicClient() {
167
- return __awaiter(this, void 0, void 0, function* () {
168
- const provider = this.zeroDevProvider;
169
- if (!provider)
170
- throw new DynamicError('No provider');
171
- return provider.rpcClient;
172
- });
173
- }
174
- getSigner() {
175
- return __awaiter(this, void 0, void 0, function* () {
176
- const provider = this.zeroDevProvider;
177
- if (!provider)
178
- throw new DynamicError('No provider');
179
- const transport = this.getTransport(provider);
180
- const address = yield provider.getAddress();
181
- const walletClient = createWalletClient({
182
- account: address,
183
- transport,
184
- });
185
- return walletClient;
186
- });
187
- }
188
- canSponsorTransactionGas(transaction) {
189
- var _a;
190
- return __awaiter(this, void 0, void 0, function* () {
191
- try {
192
- const userOperation = {
193
- data: transaction.data ? transaction.data : '0x',
194
- target: transaction.to,
195
- value: isHex(transaction.value)
196
- ? fromHex(transaction.value, 'bigint')
197
- : transaction.value,
198
- };
199
- const result = yield ((_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.buildUserOperation(userOperation));
200
- if (!result)
201
- return false;
202
- return result.paymasterAndData !== '0x';
203
- }
204
- catch (err) {
205
- logger.debug(err);
206
- return false;
207
- }
208
- });
209
- }
210
- disableGasSponsorshipOnce() {
211
- this.isGasSponsorshipDisabled = true;
212
- }
213
- getBalance() {
214
- var _a;
215
- return __awaiter(this, void 0, void 0, function* () {
216
- const rpcClient = yield ((_a = this.zeroDevProvider) === null || _a === void 0 ? void 0 : _a.rpcClient);
217
- if (!rpcClient)
218
- throw new DynamicError('No RPC client');
219
- const address = yield this.fetchPublicAddress();
220
- if (!address)
221
- return;
222
- return formatEther(yield rpcClient.getBalance({ address: address }));
223
- });
224
- }
225
- signMessage(messageToSign) {
226
- return __awaiter(this, void 0, void 0, function* () {
227
- const client = yield this.getSigner();
228
- const account = yield this.fetchPublicAddress();
229
- if (!account || !client)
230
- return;
231
- return client.signMessage({
232
- account: account,
233
- message: messageToSign,
234
- });
235
- });
236
- }
237
- }
238
-
239
- export { ZeroDevConnector };