@dynamic-labs-sdk/zerodev 0.1.0-alpha.17 → 0.1.0-alpha.18

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 (35) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/index.cjs.js +390 -18
  3. package/index.esm.js +392 -22
  4. package/package.json +5 -5
  5. package/src/addZerodevExtension/addZerodevExtension.d.ts.map +1 -1
  6. package/src/constants.d.ts +5 -0
  7. package/src/constants.d.ts.map +1 -1
  8. package/src/createKernelClientForWalletAccount/createKernelClientForWalletAccount.d.ts +27 -0
  9. package/src/createKernelClientForWalletAccount/createKernelClientForWalletAccount.d.ts.map +1 -0
  10. package/src/createKernelClientForWalletAccount/index.d.ts +2 -0
  11. package/src/createKernelClientForWalletAccount/index.d.ts.map +1 -0
  12. package/src/exports/index.d.ts +3 -0
  13. package/src/exports/index.d.ts.map +1 -1
  14. package/src/isGasSponsorshipError/index.d.ts +2 -0
  15. package/src/isGasSponsorshipError/index.d.ts.map +1 -0
  16. package/src/isGasSponsorshipError/isGasSponsorshipError.d.ts +2 -0
  17. package/src/isGasSponsorshipError/isGasSponsorshipError.d.ts.map +1 -0
  18. package/src/isZerodevWalletAccount/index.d.ts +2 -0
  19. package/src/isZerodevWalletAccount/index.d.ts.map +1 -0
  20. package/src/isZerodevWalletAccount/isZerodevWalletAccount.d.ts +9 -0
  21. package/src/isZerodevWalletAccount/isZerodevWalletAccount.d.ts.map +1 -0
  22. package/src/utils/createKernelAccount/createKernelAccount.d.ts +1 -1
  23. package/src/utils/createKernelAccount/createKernelAccount.d.ts.map +1 -1
  24. package/src/utils/createZerodevWalletProvider/createZerodevWalletProvider.d.ts +4 -0
  25. package/src/utils/createZerodevWalletProvider/createZerodevWalletProvider.d.ts.map +1 -0
  26. package/src/utils/createZerodevWalletProvider/index.d.ts +2 -0
  27. package/src/utils/createZerodevWalletProvider/index.d.ts.map +1 -0
  28. package/src/utils/getAllUserZerodevAddresses/getAllUserZerodevAddresses.d.ts +3 -0
  29. package/src/utils/getAllUserZerodevAddresses/getAllUserZerodevAddresses.d.ts.map +1 -0
  30. package/src/utils/getAllUserZerodevAddresses/index.d.ts +2 -0
  31. package/src/utils/getAllUserZerodevAddresses/index.d.ts.map +1 -0
  32. package/src/utils/signMessage/index.d.ts +2 -0
  33. package/src/utils/signMessage/index.d.ts.map +1 -0
  34. package/src/utils/signMessage/signMessage.d.ts +11 -0
  35. package/src/utils/signMessage/signMessage.d.ts.map +1 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.1.0-alpha.18 (2025-10-08)
2
+
3
+ ### 🚀 Features
4
+
5
+ - Add TypeDoc for JavaScript SDK API Reference Documentation ([#512](https://github.com/dynamic-labs/dynamic-sdk/pull/512))
6
+
1
7
  ## 0.1.0-alpha.17 (2025-10-02)
2
8
 
3
9
  ### 🩹 Fixes
package/index.cjs.js CHANGED
@@ -4,30 +4,73 @@ var assertPackageVersion = require('@dynamic-labs-sdk/assert-package-version');
4
4
  var core = require('@dynamic-labs-sdk/client/core');
5
5
  var client = require('@dynamic-labs-sdk/client');
6
6
  var evm = require('@dynamic-labs-sdk/evm');
7
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
8
+ var sdk = require('@zerodev/sdk');
7
9
  var viem = require('@dynamic-labs-sdk/evm/viem');
10
+ var viem$1 = require('viem');
11
+ var ecdsaValidator = require('@zerodev/ecdsa-validator');
12
+ var multiChainEcdsaValidator = require('@zerodev/multi-chain-ecdsa-validator');
8
13
 
9
14
  var name = "@dynamic-labs-sdk/zerodev";
10
- var version = "0.1.0-alpha.17";
15
+ var version = "0.1.0-alpha.18";
11
16
 
12
- const ZERODEV_EXTENSION_KEY = 'zerodev';
13
- /**
14
- * Adds the ZeroDev extension to the Dynamic client.
15
- *
16
- * This extension enables Account Abstraction integration with ZeroDev
17
- *
18
- * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
19
- */ const addZerodevExtension = (client = core.getDefaultClient())=>{
20
- if (core.hasExtension({
21
- extensionKey: ZERODEV_EXTENSION_KEY
22
- }, client)) {
23
- return;
24
- }
25
- core.registerExtension({
26
- extensionKey: ZERODEV_EXTENSION_KEY
27
- }, client);
28
- // TODO: implement
17
+ const ZERODEV_METADATA = {
18
+ displayName: 'ZeroDev',
19
+ icon: 'https://iconic.dynamic-static-assets.com/icons/sprite.svg#smartwallet',
20
+ normalizedWalletName: 'zerodev'
21
+ };
22
+ const ZERODEV_RPC_BASE_URL = 'https://rpc.zerodev.app/api/v2';
23
+ const KERNEL_VERSION_MAP = {
24
+ [sdkApiCore.ProviderKernelVersionEnum.V33]: sdk.constants.KERNEL_V3_3,
25
+ [sdkApiCore.ProviderKernelVersionEnum.V32]: sdk.constants.KERNEL_V3_2,
26
+ [sdkApiCore.ProviderKernelVersionEnum.V31]: sdk.constants.KERNEL_V3_1,
27
+ [sdkApiCore.ProviderKernelVersionEnum.V30]: sdk.constants.KERNEL_V3_0,
28
+ [sdkApiCore.ProviderKernelVersionEnum.V24]: sdk.constants.KERNEL_V2_4
29
+ };
30
+ const ENTRY_POINT_VERSION_MAP = {
31
+ 0.6: sdk.constants.KERNEL_V2_4,
32
+ 0.7: sdk.constants.KERNEL_V3_1,
33
+ 0.8: sdk.constants.KERNEL_V3_3
34
+ };
35
+
36
+ const getAllUserZerodevAddresses = (client)=>{
37
+ var _client_user;
38
+ var _client_user_verifiedCredentials_filter;
39
+ const zerodevWalletCredentials = (_client_user_verifiedCredentials_filter = (_client_user = client.user) == null ? void 0 : _client_user.verifiedCredentials.filter((credential)=>{
40
+ var _credential_walletName;
41
+ return credential.walletProvider === sdkApiCore.WalletProviderEnum.SmartContractWallet && ((_credential_walletName = credential.walletName) == null ? void 0 : _credential_walletName.toLowerCase().startsWith(ZERODEV_METADATA.normalizedWalletName)) && credential.address && credential.chain && core.getChainFromVerifiedCredentialChain(credential.chain) === 'EVM';
42
+ })) != null ? _client_user_verifiedCredentials_filter : [];
43
+ const zerodevAddresses = zerodevWalletCredentials.map(// casting because we're already filtering out credentials without an address
44
+ (credential)=>credential.address);
45
+ return zerodevAddresses;
46
+ };
47
+
48
+ const getZerodevProviderFromSettings = (client)=>{
49
+ var _projectSettings_providers;
50
+ const projectSettings = client.projectSettings;
51
+ core.assertDefined(projectSettings, 'Project settings are not available');
52
+ const zerodevProvider = (_projectSettings_providers = projectSettings.providers) == null ? void 0 : _projectSettings_providers.find((provider)=>provider.provider === sdkApiCore.ProviderEnum.Zerodev);
53
+ core.assertDefined(zerodevProvider, 'Zerodev is not configured in project settings');
54
+ return zerodevProvider;
55
+ };
56
+
57
+ const getZerodevChainProviderForNetworkId = ({ networkId }, client)=>{
58
+ var _zerodevProvider_multichainAccountAbstractionProviders;
59
+ const zerodevProvider = getZerodevProviderFromSettings(client);
60
+ return (_zerodevProvider_multichainAccountAbstractionProviders = zerodevProvider.multichainAccountAbstractionProviders) == null ? void 0 : _zerodevProvider_multichainAccountAbstractionProviders.find((provider)=>provider.chain === networkId);
29
61
  };
30
62
 
63
+ function _extends() {
64
+ _extends = Object.assign || function assign(target) {
65
+ for(var i = 1; i < arguments.length; i++){
66
+ var source = arguments[i];
67
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
68
+ }
69
+ return target;
70
+ };
71
+ return _extends.apply(this, arguments);
72
+ }
73
+
31
74
  /**
32
75
  * Gets a WalletClient instance for the EOA of the smart wallet account.
33
76
  * You can use this signer to sign EVM transactions.
@@ -48,7 +91,336 @@ const ZERODEV_EXTENSION_KEY = 'zerodev';
48
91
  }, client$1);
49
92
  };
50
93
 
94
+ const getEcdsaValidator = ({ ecdsaProviderType, publicClient, signer, entryPoint, kernelVersion })=>{
95
+ const params = {
96
+ entryPoint,
97
+ kernelVersion,
98
+ signer
99
+ };
100
+ if (ecdsaProviderType === 'zerodev_multi_chain') {
101
+ return multiChainEcdsaValidator.toMultiChainECDSAValidator(publicClient, params);
102
+ }
103
+ return ecdsaValidator.signerToEcdsaValidator(publicClient, params);
104
+ };
105
+
106
+ const getEntryPoint = (entryPoint)=>{
107
+ if (entryPoint === sdkApiCore.ProviderEntryPointVersionEnum.V6) {
108
+ return sdk.constants.getEntryPoint('0.6');
109
+ }
110
+ // default to v7
111
+ return sdk.constants.getEntryPoint('0.7');
112
+ };
113
+
114
+ const getKernelVersion = ({ kernelVersion, entryPoint })=>{
115
+ // If kernel version is explicitly provided, use it
116
+ if (kernelVersion && kernelVersion in KERNEL_VERSION_MAP) {
117
+ return KERNEL_VERSION_MAP[kernelVersion];
118
+ }
119
+ // If no kernel version provided, determine based on entry point version
120
+ const entryPointVersion = entryPoint.version;
121
+ if (entryPointVersion in ENTRY_POINT_VERSION_MAP) {
122
+ return ENTRY_POINT_VERSION_MAP[entryPointVersion];
123
+ }
124
+ // Fallback to latest version
125
+ return sdk.constants.KERNEL_V3_3;
126
+ };
127
+
128
+ const shouldUseEIP7702 = ({ smartWalletAccount }, client$1)=>{
129
+ const zerodevProvider = getZerodevProviderFromSettings(client$1);
130
+ core.assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
131
+ const eoaWalletAccount = client.getOwnerWalletAccountForSmartWalletAccount({
132
+ smartWalletAccount
133
+ }, client$1);
134
+ core.assertDefined(eoaWalletAccount, 'EOA wallet account is not found');
135
+ return zerodevProvider.enableEIP7702 && // with EIP7702, the EOA wallet account address is the same as the smart wallet account address
136
+ smartWalletAccount.address === eoaWalletAccount.address;
137
+ };
138
+
139
+ const createKernelAccount = async ({ publicClient, smartWalletAccount }, client)=>{
140
+ var _getVerifiedCredentialForWalletAccount;
141
+ const zerodevProvider = getZerodevProviderFromSettings(client);
142
+ core.assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
143
+ const signer = await getSignerForSmartWalletAccount({
144
+ smartWalletAccount
145
+ }, client);
146
+ const walletProperties = (_getVerifiedCredentialForWalletAccount = core.getVerifiedCredentialForWalletAccount({
147
+ walletAccount: smartWalletAccount
148
+ }, client)) == null ? void 0 : _getVerifiedCredentialForWalletAccount.walletProperties;
149
+ var _walletProperties_entryPointVersion;
150
+ const entryPointVersion = (_walletProperties_entryPointVersion = walletProperties == null ? void 0 : walletProperties.entryPointVersion) != null ? _walletProperties_entryPointVersion : zerodevProvider.entryPointVersion;
151
+ const entryPoint = getEntryPoint(entryPointVersion);
152
+ const useEIP7702 = shouldUseEIP7702({
153
+ smartWalletAccount
154
+ }, client);
155
+ if (useEIP7702) {
156
+ return sdk.createKernelAccount(publicClient, {
157
+ eip7702Account: signer,
158
+ entryPoint,
159
+ kernelVersion: sdk.constants.KERNEL_V3_3
160
+ });
161
+ }
162
+ var _walletProperties_kernelVersion;
163
+ const kernelVersionValue = (_walletProperties_kernelVersion = walletProperties == null ? void 0 : walletProperties.kernelVersion) != null ? _walletProperties_kernelVersion : zerodevProvider.kernelVersion;
164
+ const kernelVersion = getKernelVersion({
165
+ entryPoint,
166
+ kernelVersion: kernelVersionValue
167
+ });
168
+ var _zerodevProvider_enableKernelV3Migration;
169
+ const kernelV3MigrationEnabled = (_zerodevProvider_enableKernelV3Migration = zerodevProvider.enableKernelV3Migration) != null ? _zerodevProvider_enableKernelV3Migration : false;
170
+ if (kernelV3MigrationEnabled) {
171
+ const apiKernelVersion = getKernelVersion({
172
+ entryPoint,
173
+ kernelVersion: zerodevProvider.kernelVersion
174
+ });
175
+ return ecdsaValidator.createEcdsaKernelMigrationAccount(publicClient, {
176
+ entryPoint,
177
+ migrationVersion: {
178
+ from: kernelVersion,
179
+ to: apiKernelVersion
180
+ },
181
+ signer
182
+ });
183
+ }
184
+ var _walletProperties_ecdsaProviderType;
185
+ const validator = await getEcdsaValidator({
186
+ ecdsaProviderType: (_walletProperties_ecdsaProviderType = walletProperties == null ? void 0 : walletProperties.ecdsaProviderType) != null ? _walletProperties_ecdsaProviderType : zerodevProvider.ecdsaProviderType,
187
+ entryPoint,
188
+ kernelVersion,
189
+ publicClient,
190
+ signer
191
+ });
192
+ return sdk.createKernelAccount(publicClient, {
193
+ entryPoint,
194
+ kernelVersion,
195
+ plugins: {
196
+ sudo: validator
197
+ }
198
+ });
199
+ };
200
+
201
+ const getPaymasterConfig = ({ chain, gasTokenAddress, paymasterRpc })=>{
202
+ const getPaymasterData = (params)=>{
203
+ const zerodevPaymaster = sdk.createZeroDevPaymasterClient({
204
+ chain,
205
+ transport: viem$1.http(paymasterRpc)
206
+ });
207
+ return zerodevPaymaster.sponsorUserOperation({
208
+ gasToken: gasTokenAddress,
209
+ userOperation: params
210
+ });
211
+ };
212
+ return {
213
+ paymaster: {
214
+ getPaymasterData
215
+ }
216
+ };
217
+ };
218
+
219
+ const getZerodevRpc = ({ networkId, bundlerProvider, rpcType }, client)=>{
220
+ const zerodevProvider = getZerodevProviderFromSettings(client);
221
+ if (zerodevProvider == null ? void 0 : zerodevProvider.zerodevPaymasterRpcUrl) {
222
+ return zerodevProvider.zerodevPaymasterRpcUrl;
223
+ }
224
+ const zerodevChainProvider = getZerodevChainProviderForNetworkId({
225
+ networkId
226
+ }, client);
227
+ core.assertDefined(zerodevChainProvider, `No zerodev provider found for network id ${networkId}`);
228
+ var _ref;
229
+ const paymasterProvider = (_ref = bundlerProvider != null ? bundlerProvider : zerodevProvider.zerodevBundlerProvider) != null ? _ref : sdkApiCore.ZerodevBundlerProvider.Pimlico;
230
+ const paramName = rpcType === 'bundler' ? 'bundlerProvider' : 'paymasterProvider';
231
+ return `${ZERODEV_RPC_BASE_URL}/${rpcType}/${zerodevChainProvider.clientId}?${paramName}=${paymasterProvider}`;
232
+ };
233
+
234
+ /**
235
+ * Creates a KernelClient instance for a given smart wallet account.
236
+ *
237
+ * @param params.smartWalletAccount - The smart wallet account to create the KernelClient for.
238
+ * @param [params.bundlerProvider] - A custom bundler provider to use
239
+ * @param [params.bundlerRpc] - A custom bundler RPC to use
240
+ * @param [params.paymasterRpc] - A custom paymaster RPC to use
241
+ * @param [params.gasTokenAddress] - The address of a custom ERC20 token to use as a gas token
242
+ * @param [params.withSponsorship] - Whether to use sponsorship for the KernelClient or not (default is true).
243
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
244
+ * @returns A promise that resolves to a KernelClient instance.
245
+ */ const createKernelClientForWalletAccount = async ({ smartWalletAccount, withSponsorship = true, bundlerProvider, bundlerRpc: bundlerRpcOverride, paymasterRpc: paymasterRpcOverride, gasTokenAddress }, client$1 = core.getDefaultClient())=>{
246
+ const { networkData: activeNetworkData } = await client.getActiveNetworkData({
247
+ walletAccount: smartWalletAccount
248
+ }, client$1);
249
+ core.assertDefined(activeNetworkData, 'No active network data found');
250
+ const viemChain = viem.mapNetworkDataToViemChain(activeNetworkData);
251
+ const bundlerRpc = bundlerRpcOverride != null ? bundlerRpcOverride : getZerodevRpc({
252
+ bundlerProvider,
253
+ networkId: activeNetworkData.networkId,
254
+ rpcType: 'bundler'
255
+ }, client$1);
256
+ const bundlerTransport = viem$1.http(bundlerRpc);
257
+ const publicClient = viem$1.createPublicClient({
258
+ chain: viemChain,
259
+ transport: bundlerTransport
260
+ });
261
+ const account = await createKernelAccount({
262
+ publicClient,
263
+ smartWalletAccount
264
+ }, client$1);
265
+ const paymasterRpc = paymasterRpcOverride != null ? paymasterRpcOverride : getZerodevRpc({
266
+ bundlerProvider,
267
+ networkId: activeNetworkData.networkId,
268
+ rpcType: 'paymaster'
269
+ }, client$1);
270
+ const paymasterConfig = withSponsorship ? getPaymasterConfig({
271
+ chain: viemChain,
272
+ gasTokenAddress,
273
+ paymasterRpc
274
+ }) : {};
275
+ return sdk.createKernelAccountClient(_extends({
276
+ account,
277
+ bundlerTransport,
278
+ chain: viemChain,
279
+ client: publicClient,
280
+ userOperation: {
281
+ estimateFeesPerGas: async ({ bundlerClient })=>sdk.getUserOperationGasPrice(bundlerClient)
282
+ }
283
+ }, paymasterConfig));
284
+ };
285
+
286
+ const shouldSignWithEoa = async ({ kernelClient, smartWalletAccount }, client)=>{
287
+ const useEIP7702 = shouldUseEIP7702({
288
+ smartWalletAccount
289
+ }, client);
290
+ if (!useEIP7702) {
291
+ return false;
292
+ }
293
+ const isDeployed = await kernelClient.account.isDeployed();
294
+ return !isDeployed;
295
+ };
296
+
297
+ const signMessage = async ({ walletAccount, message }, client$1)=>{
298
+ const kernelClient = await createKernelClientForWalletAccount({
299
+ smartWalletAccount: walletAccount
300
+ }, client$1);
301
+ const shouldUseEoa = await shouldSignWithEoa({
302
+ kernelClient,
303
+ smartWalletAccount: walletAccount
304
+ }, client$1);
305
+ if (shouldUseEoa) {
306
+ const eoaWalletAccount = client.getOwnerWalletAccountForSmartWalletAccount({
307
+ smartWalletAccount: walletAccount
308
+ }, client$1);
309
+ core.assertDefined(eoaWalletAccount, 'Eoa wallet account not found');
310
+ const { signature } = await client.signMessage({
311
+ message,
312
+ walletAccount: eoaWalletAccount
313
+ });
314
+ return {
315
+ signature
316
+ };
317
+ }
318
+ const signature = await kernelClient.signMessage({
319
+ message
320
+ });
321
+ return {
322
+ signature
323
+ };
324
+ };
325
+
326
+ const createZerodevWalletProvider = (client$1)=>{
327
+ const chain = 'EVM';
328
+ const walletProviderType = sdkApiCore.WalletProviderEnum.SmartContractWallet;
329
+ const key = core.formatWalletProviderKey({
330
+ chain,
331
+ displayName: ZERODEV_METADATA.displayName,
332
+ walletProviderType
333
+ });
334
+ const getActiveNetworkId = async ()=>core.getActiveNetworkIdFromLastKnownRegistry({
335
+ client: client$1,
336
+ walletProviderKey: key
337
+ });
338
+ const getConnectedAddresses = async ()=>{
339
+ const zerodevAddresses = getAllUserZerodevAddresses(client$1);
340
+ return {
341
+ addresses: zerodevAddresses
342
+ };
343
+ };
344
+ const request = async ()=>{
345
+ throw new core.MethodNotImplementedError('request');
346
+ };
347
+ const signMessage$1 = async ({ walletAccount, message })=>{
348
+ core.assertDefined(walletAccount, 'Wallet account is required');
349
+ if (!evm.isEvmWalletAccount(walletAccount)) {
350
+ throw new client.InvalidParamError(`walletAccount is not an EVM wallet account`);
351
+ }
352
+ return signMessage({
353
+ message,
354
+ walletAccount
355
+ }, client$1);
356
+ };
357
+ const switchActiveNetwork = async ({ networkId })=>{
358
+ const isNetworkEnabled = getZerodevChainProviderForNetworkId({
359
+ networkId
360
+ }, client$1);
361
+ if (!isNetworkEnabled) {
362
+ throw new client.UnrecognizedNetworkError({
363
+ networkId,
364
+ originalError: null,
365
+ walletProviderKey: key
366
+ });
367
+ }
368
+ return core.switchActiveNetworkInLastKnownRegistry({
369
+ client: client$1,
370
+ networkId,
371
+ walletProviderKey: key
372
+ });
373
+ };
374
+ return {
375
+ chain,
376
+ getActiveNetworkId,
377
+ getConnectedAddresses,
378
+ groupKey: core.formatWalletProviderGroupKey(ZERODEV_METADATA.displayName),
379
+ key,
380
+ metadata: {
381
+ displayName: ZERODEV_METADATA.displayName,
382
+ icon: ZERODEV_METADATA.icon
383
+ },
384
+ request,
385
+ signMessage: signMessage$1,
386
+ switchActiveNetwork,
387
+ walletProviderType
388
+ };
389
+ };
390
+
391
+ const ZERODEV_EXTENSION_KEY = 'zerodev';
392
+ /**
393
+ * Adds the ZeroDev extension to the Dynamic client.
394
+ *
395
+ * This extension enables Account Abstraction integration with ZeroDev
396
+ *
397
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
398
+ */ const addZerodevExtension = (client = core.getDefaultClient())=>{
399
+ if (core.hasExtension({
400
+ extensionKey: ZERODEV_EXTENSION_KEY
401
+ }, client)) {
402
+ return;
403
+ }
404
+ core.registerExtension({
405
+ extensionKey: ZERODEV_EXTENSION_KEY
406
+ }, client);
407
+ const walletProviderRegistry = core.getWalletProviderRegistry(client);
408
+ const walletProvider = createZerodevWalletProvider(client);
409
+ walletProviderRegistry.register({
410
+ priority: core.WalletProviderPriority.WALLET_SDK,
411
+ walletProvider
412
+ });
413
+ };
414
+
415
+ const isGasSponsorshipError = (err)=>{
416
+ var _errorWithMessage_message;
417
+ const errorWithMessage = err;
418
+ return (errorWithMessage == null ? void 0 : (_errorWithMessage_message = errorWithMessage.message) == null ? void 0 : _errorWithMessage_message.includes('userOp did not match any gas sponsoring policies')) || false;
419
+ };
420
+
51
421
  assertPackageVersion.assertPackageVersion(name, version);
52
422
 
53
423
  exports.addZerodevExtension = addZerodevExtension;
424
+ exports.createKernelClientForWalletAccount = createKernelClientForWalletAccount;
54
425
  exports.getSignerForSmartWalletAccount = getSignerForSmartWalletAccount;
426
+ exports.isGasSponsorshipError = isGasSponsorshipError;
package/index.esm.js CHANGED
@@ -1,31 +1,74 @@
1
1
  import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';
2
- import { getDefaultClient, hasExtension, registerExtension } from '@dynamic-labs-sdk/client/core';
3
- import { getOwnerWalletAccountForSmartWalletAccount, NoSmartWalletAccountSignerFoundError } from '@dynamic-labs-sdk/client';
2
+ import { getChainFromVerifiedCredentialChain, assertDefined, getDefaultClient, getVerifiedCredentialForWalletAccount, formatWalletProviderKey, formatWalletProviderGroupKey, getActiveNetworkIdFromLastKnownRegistry, switchActiveNetworkInLastKnownRegistry, MethodNotImplementedError, hasExtension, registerExtension, getWalletProviderRegistry, WalletProviderPriority } from '@dynamic-labs-sdk/client/core';
3
+ import { getOwnerWalletAccountForSmartWalletAccount, NoSmartWalletAccountSignerFoundError, getActiveNetworkData, signMessage as signMessage$1, UnrecognizedNetworkError, InvalidParamError } from '@dynamic-labs-sdk/client';
4
4
  import { isEvmWalletAccount } from '@dynamic-labs-sdk/evm';
5
- import { createWalletClientForWalletAccount } from '@dynamic-labs-sdk/evm/viem';
5
+ import { ProviderKernelVersionEnum, WalletProviderEnum, ProviderEnum, ProviderEntryPointVersionEnum, ZerodevBundlerProvider } from '@dynamic-labs/sdk-api-core';
6
+ import { constants, createKernelAccount as createKernelAccount$1, createZeroDevPaymasterClient, createKernelAccountClient, getUserOperationGasPrice } from '@zerodev/sdk';
7
+ import { createWalletClientForWalletAccount, mapNetworkDataToViemChain } from '@dynamic-labs-sdk/evm/viem';
8
+ import { http, createPublicClient } from 'viem';
9
+ import { signerToEcdsaValidator, createEcdsaKernelMigrationAccount } from '@zerodev/ecdsa-validator';
10
+ import { toMultiChainECDSAValidator } from '@zerodev/multi-chain-ecdsa-validator';
6
11
 
7
12
  var name = "@dynamic-labs-sdk/zerodev";
8
- var version = "0.1.0-alpha.17";
13
+ var version = "0.1.0-alpha.18";
9
14
 
10
- const ZERODEV_EXTENSION_KEY = 'zerodev';
11
- /**
12
- * Adds the ZeroDev extension to the Dynamic client.
13
- *
14
- * This extension enables Account Abstraction integration with ZeroDev
15
- *
16
- * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
17
- */ const addZerodevExtension = (client = getDefaultClient())=>{
18
- if (hasExtension({
19
- extensionKey: ZERODEV_EXTENSION_KEY
20
- }, client)) {
21
- return;
22
- }
23
- registerExtension({
24
- extensionKey: ZERODEV_EXTENSION_KEY
25
- }, client);
26
- // TODO: implement
15
+ const ZERODEV_METADATA = {
16
+ displayName: 'ZeroDev',
17
+ icon: 'https://iconic.dynamic-static-assets.com/icons/sprite.svg#smartwallet',
18
+ normalizedWalletName: 'zerodev'
19
+ };
20
+ const ZERODEV_RPC_BASE_URL = 'https://rpc.zerodev.app/api/v2';
21
+ const KERNEL_VERSION_MAP = {
22
+ [ProviderKernelVersionEnum.V33]: constants.KERNEL_V3_3,
23
+ [ProviderKernelVersionEnum.V32]: constants.KERNEL_V3_2,
24
+ [ProviderKernelVersionEnum.V31]: constants.KERNEL_V3_1,
25
+ [ProviderKernelVersionEnum.V30]: constants.KERNEL_V3_0,
26
+ [ProviderKernelVersionEnum.V24]: constants.KERNEL_V2_4
27
+ };
28
+ const ENTRY_POINT_VERSION_MAP = {
29
+ 0.6: constants.KERNEL_V2_4,
30
+ 0.7: constants.KERNEL_V3_1,
31
+ 0.8: constants.KERNEL_V3_3
32
+ };
33
+
34
+ const getAllUserZerodevAddresses = (client)=>{
35
+ var _client_user;
36
+ var _client_user_verifiedCredentials_filter;
37
+ const zerodevWalletCredentials = (_client_user_verifiedCredentials_filter = (_client_user = client.user) == null ? void 0 : _client_user.verifiedCredentials.filter((credential)=>{
38
+ var _credential_walletName;
39
+ return credential.walletProvider === WalletProviderEnum.SmartContractWallet && ((_credential_walletName = credential.walletName) == null ? void 0 : _credential_walletName.toLowerCase().startsWith(ZERODEV_METADATA.normalizedWalletName)) && credential.address && credential.chain && getChainFromVerifiedCredentialChain(credential.chain) === 'EVM';
40
+ })) != null ? _client_user_verifiedCredentials_filter : [];
41
+ const zerodevAddresses = zerodevWalletCredentials.map(// casting because we're already filtering out credentials without an address
42
+ (credential)=>credential.address);
43
+ return zerodevAddresses;
44
+ };
45
+
46
+ const getZerodevProviderFromSettings = (client)=>{
47
+ var _projectSettings_providers;
48
+ const projectSettings = client.projectSettings;
49
+ assertDefined(projectSettings, 'Project settings are not available');
50
+ const zerodevProvider = (_projectSettings_providers = projectSettings.providers) == null ? void 0 : _projectSettings_providers.find((provider)=>provider.provider === ProviderEnum.Zerodev);
51
+ assertDefined(zerodevProvider, 'Zerodev is not configured in project settings');
52
+ return zerodevProvider;
53
+ };
54
+
55
+ const getZerodevChainProviderForNetworkId = ({ networkId }, client)=>{
56
+ var _zerodevProvider_multichainAccountAbstractionProviders;
57
+ const zerodevProvider = getZerodevProviderFromSettings(client);
58
+ return (_zerodevProvider_multichainAccountAbstractionProviders = zerodevProvider.multichainAccountAbstractionProviders) == null ? void 0 : _zerodevProvider_multichainAccountAbstractionProviders.find((provider)=>provider.chain === networkId);
27
59
  };
28
60
 
61
+ function _extends() {
62
+ _extends = Object.assign || function assign(target) {
63
+ for(var i = 1; i < arguments.length; i++){
64
+ var source = arguments[i];
65
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
66
+ }
67
+ return target;
68
+ };
69
+ return _extends.apply(this, arguments);
70
+ }
71
+
29
72
  /**
30
73
  * Gets a WalletClient instance for the EOA of the smart wallet account.
31
74
  * You can use this signer to sign EVM transactions.
@@ -46,6 +89,333 @@ const ZERODEV_EXTENSION_KEY = 'zerodev';
46
89
  }, client);
47
90
  };
48
91
 
92
+ const getEcdsaValidator = ({ ecdsaProviderType, publicClient, signer, entryPoint, kernelVersion })=>{
93
+ const params = {
94
+ entryPoint,
95
+ kernelVersion,
96
+ signer
97
+ };
98
+ if (ecdsaProviderType === 'zerodev_multi_chain') {
99
+ return toMultiChainECDSAValidator(publicClient, params);
100
+ }
101
+ return signerToEcdsaValidator(publicClient, params);
102
+ };
103
+
104
+ const getEntryPoint = (entryPoint)=>{
105
+ if (entryPoint === ProviderEntryPointVersionEnum.V6) {
106
+ return constants.getEntryPoint('0.6');
107
+ }
108
+ // default to v7
109
+ return constants.getEntryPoint('0.7');
110
+ };
111
+
112
+ const getKernelVersion = ({ kernelVersion, entryPoint })=>{
113
+ // If kernel version is explicitly provided, use it
114
+ if (kernelVersion && kernelVersion in KERNEL_VERSION_MAP) {
115
+ return KERNEL_VERSION_MAP[kernelVersion];
116
+ }
117
+ // If no kernel version provided, determine based on entry point version
118
+ const entryPointVersion = entryPoint.version;
119
+ if (entryPointVersion in ENTRY_POINT_VERSION_MAP) {
120
+ return ENTRY_POINT_VERSION_MAP[entryPointVersion];
121
+ }
122
+ // Fallback to latest version
123
+ return constants.KERNEL_V3_3;
124
+ };
125
+
126
+ const shouldUseEIP7702 = ({ smartWalletAccount }, client)=>{
127
+ const zerodevProvider = getZerodevProviderFromSettings(client);
128
+ assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
129
+ const eoaWalletAccount = getOwnerWalletAccountForSmartWalletAccount({
130
+ smartWalletAccount
131
+ }, client);
132
+ assertDefined(eoaWalletAccount, 'EOA wallet account is not found');
133
+ return zerodevProvider.enableEIP7702 && // with EIP7702, the EOA wallet account address is the same as the smart wallet account address
134
+ smartWalletAccount.address === eoaWalletAccount.address;
135
+ };
136
+
137
+ const createKernelAccount = async ({ publicClient, smartWalletAccount }, client)=>{
138
+ var _getVerifiedCredentialForWalletAccount;
139
+ const zerodevProvider = getZerodevProviderFromSettings(client);
140
+ assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
141
+ const signer = await getSignerForSmartWalletAccount({
142
+ smartWalletAccount
143
+ }, client);
144
+ const walletProperties = (_getVerifiedCredentialForWalletAccount = getVerifiedCredentialForWalletAccount({
145
+ walletAccount: smartWalletAccount
146
+ }, client)) == null ? void 0 : _getVerifiedCredentialForWalletAccount.walletProperties;
147
+ var _walletProperties_entryPointVersion;
148
+ const entryPointVersion = (_walletProperties_entryPointVersion = walletProperties == null ? void 0 : walletProperties.entryPointVersion) != null ? _walletProperties_entryPointVersion : zerodevProvider.entryPointVersion;
149
+ const entryPoint = getEntryPoint(entryPointVersion);
150
+ const useEIP7702 = shouldUseEIP7702({
151
+ smartWalletAccount
152
+ }, client);
153
+ if (useEIP7702) {
154
+ return createKernelAccount$1(publicClient, {
155
+ eip7702Account: signer,
156
+ entryPoint,
157
+ kernelVersion: constants.KERNEL_V3_3
158
+ });
159
+ }
160
+ var _walletProperties_kernelVersion;
161
+ const kernelVersionValue = (_walletProperties_kernelVersion = walletProperties == null ? void 0 : walletProperties.kernelVersion) != null ? _walletProperties_kernelVersion : zerodevProvider.kernelVersion;
162
+ const kernelVersion = getKernelVersion({
163
+ entryPoint,
164
+ kernelVersion: kernelVersionValue
165
+ });
166
+ var _zerodevProvider_enableKernelV3Migration;
167
+ const kernelV3MigrationEnabled = (_zerodevProvider_enableKernelV3Migration = zerodevProvider.enableKernelV3Migration) != null ? _zerodevProvider_enableKernelV3Migration : false;
168
+ if (kernelV3MigrationEnabled) {
169
+ const apiKernelVersion = getKernelVersion({
170
+ entryPoint,
171
+ kernelVersion: zerodevProvider.kernelVersion
172
+ });
173
+ return createEcdsaKernelMigrationAccount(publicClient, {
174
+ entryPoint,
175
+ migrationVersion: {
176
+ from: kernelVersion,
177
+ to: apiKernelVersion
178
+ },
179
+ signer
180
+ });
181
+ }
182
+ var _walletProperties_ecdsaProviderType;
183
+ const validator = await getEcdsaValidator({
184
+ ecdsaProviderType: (_walletProperties_ecdsaProviderType = walletProperties == null ? void 0 : walletProperties.ecdsaProviderType) != null ? _walletProperties_ecdsaProviderType : zerodevProvider.ecdsaProviderType,
185
+ entryPoint,
186
+ kernelVersion,
187
+ publicClient,
188
+ signer
189
+ });
190
+ return createKernelAccount$1(publicClient, {
191
+ entryPoint,
192
+ kernelVersion,
193
+ plugins: {
194
+ sudo: validator
195
+ }
196
+ });
197
+ };
198
+
199
+ const getPaymasterConfig = ({ chain, gasTokenAddress, paymasterRpc })=>{
200
+ const getPaymasterData = (params)=>{
201
+ const zerodevPaymaster = createZeroDevPaymasterClient({
202
+ chain,
203
+ transport: http(paymasterRpc)
204
+ });
205
+ return zerodevPaymaster.sponsorUserOperation({
206
+ gasToken: gasTokenAddress,
207
+ userOperation: params
208
+ });
209
+ };
210
+ return {
211
+ paymaster: {
212
+ getPaymasterData
213
+ }
214
+ };
215
+ };
216
+
217
+ const getZerodevRpc = ({ networkId, bundlerProvider, rpcType }, client)=>{
218
+ const zerodevProvider = getZerodevProviderFromSettings(client);
219
+ if (zerodevProvider == null ? void 0 : zerodevProvider.zerodevPaymasterRpcUrl) {
220
+ return zerodevProvider.zerodevPaymasterRpcUrl;
221
+ }
222
+ const zerodevChainProvider = getZerodevChainProviderForNetworkId({
223
+ networkId
224
+ }, client);
225
+ assertDefined(zerodevChainProvider, `No zerodev provider found for network id ${networkId}`);
226
+ var _ref;
227
+ const paymasterProvider = (_ref = bundlerProvider != null ? bundlerProvider : zerodevProvider.zerodevBundlerProvider) != null ? _ref : ZerodevBundlerProvider.Pimlico;
228
+ const paramName = rpcType === 'bundler' ? 'bundlerProvider' : 'paymasterProvider';
229
+ return `${ZERODEV_RPC_BASE_URL}/${rpcType}/${zerodevChainProvider.clientId}?${paramName}=${paymasterProvider}`;
230
+ };
231
+
232
+ /**
233
+ * Creates a KernelClient instance for a given smart wallet account.
234
+ *
235
+ * @param params.smartWalletAccount - The smart wallet account to create the KernelClient for.
236
+ * @param [params.bundlerProvider] - A custom bundler provider to use
237
+ * @param [params.bundlerRpc] - A custom bundler RPC to use
238
+ * @param [params.paymasterRpc] - A custom paymaster RPC to use
239
+ * @param [params.gasTokenAddress] - The address of a custom ERC20 token to use as a gas token
240
+ * @param [params.withSponsorship] - Whether to use sponsorship for the KernelClient or not (default is true).
241
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
242
+ * @returns A promise that resolves to a KernelClient instance.
243
+ */ const createKernelClientForWalletAccount = async ({ smartWalletAccount, withSponsorship = true, bundlerProvider, bundlerRpc: bundlerRpcOverride, paymasterRpc: paymasterRpcOverride, gasTokenAddress }, client = getDefaultClient())=>{
244
+ const { networkData: activeNetworkData } = await getActiveNetworkData({
245
+ walletAccount: smartWalletAccount
246
+ }, client);
247
+ assertDefined(activeNetworkData, 'No active network data found');
248
+ const viemChain = mapNetworkDataToViemChain(activeNetworkData);
249
+ const bundlerRpc = bundlerRpcOverride != null ? bundlerRpcOverride : getZerodevRpc({
250
+ bundlerProvider,
251
+ networkId: activeNetworkData.networkId,
252
+ rpcType: 'bundler'
253
+ }, client);
254
+ const bundlerTransport = http(bundlerRpc);
255
+ const publicClient = createPublicClient({
256
+ chain: viemChain,
257
+ transport: bundlerTransport
258
+ });
259
+ const account = await createKernelAccount({
260
+ publicClient,
261
+ smartWalletAccount
262
+ }, client);
263
+ const paymasterRpc = paymasterRpcOverride != null ? paymasterRpcOverride : getZerodevRpc({
264
+ bundlerProvider,
265
+ networkId: activeNetworkData.networkId,
266
+ rpcType: 'paymaster'
267
+ }, client);
268
+ const paymasterConfig = withSponsorship ? getPaymasterConfig({
269
+ chain: viemChain,
270
+ gasTokenAddress,
271
+ paymasterRpc
272
+ }) : {};
273
+ return createKernelAccountClient(_extends({
274
+ account,
275
+ bundlerTransport,
276
+ chain: viemChain,
277
+ client: publicClient,
278
+ userOperation: {
279
+ estimateFeesPerGas: async ({ bundlerClient })=>getUserOperationGasPrice(bundlerClient)
280
+ }
281
+ }, paymasterConfig));
282
+ };
283
+
284
+ const shouldSignWithEoa = async ({ kernelClient, smartWalletAccount }, client)=>{
285
+ const useEIP7702 = shouldUseEIP7702({
286
+ smartWalletAccount
287
+ }, client);
288
+ if (!useEIP7702) {
289
+ return false;
290
+ }
291
+ const isDeployed = await kernelClient.account.isDeployed();
292
+ return !isDeployed;
293
+ };
294
+
295
+ const signMessage = async ({ walletAccount, message }, client)=>{
296
+ const kernelClient = await createKernelClientForWalletAccount({
297
+ smartWalletAccount: walletAccount
298
+ }, client);
299
+ const shouldUseEoa = await shouldSignWithEoa({
300
+ kernelClient,
301
+ smartWalletAccount: walletAccount
302
+ }, client);
303
+ if (shouldUseEoa) {
304
+ const eoaWalletAccount = getOwnerWalletAccountForSmartWalletAccount({
305
+ smartWalletAccount: walletAccount
306
+ }, client);
307
+ assertDefined(eoaWalletAccount, 'Eoa wallet account not found');
308
+ const { signature } = await signMessage$1({
309
+ message,
310
+ walletAccount: eoaWalletAccount
311
+ });
312
+ return {
313
+ signature
314
+ };
315
+ }
316
+ const signature = await kernelClient.signMessage({
317
+ message
318
+ });
319
+ return {
320
+ signature
321
+ };
322
+ };
323
+
324
+ const createZerodevWalletProvider = (client)=>{
325
+ const chain = 'EVM';
326
+ const walletProviderType = WalletProviderEnum.SmartContractWallet;
327
+ const key = formatWalletProviderKey({
328
+ chain,
329
+ displayName: ZERODEV_METADATA.displayName,
330
+ walletProviderType
331
+ });
332
+ const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
333
+ client,
334
+ walletProviderKey: key
335
+ });
336
+ const getConnectedAddresses = async ()=>{
337
+ const zerodevAddresses = getAllUserZerodevAddresses(client);
338
+ return {
339
+ addresses: zerodevAddresses
340
+ };
341
+ };
342
+ const request = async ()=>{
343
+ throw new MethodNotImplementedError('request');
344
+ };
345
+ const signMessage$1 = async ({ walletAccount, message })=>{
346
+ assertDefined(walletAccount, 'Wallet account is required');
347
+ if (!isEvmWalletAccount(walletAccount)) {
348
+ throw new InvalidParamError(`walletAccount is not an EVM wallet account`);
349
+ }
350
+ return signMessage({
351
+ message,
352
+ walletAccount
353
+ }, client);
354
+ };
355
+ const switchActiveNetwork = async ({ networkId })=>{
356
+ const isNetworkEnabled = getZerodevChainProviderForNetworkId({
357
+ networkId
358
+ }, client);
359
+ if (!isNetworkEnabled) {
360
+ throw new UnrecognizedNetworkError({
361
+ networkId,
362
+ originalError: null,
363
+ walletProviderKey: key
364
+ });
365
+ }
366
+ return switchActiveNetworkInLastKnownRegistry({
367
+ client,
368
+ networkId,
369
+ walletProviderKey: key
370
+ });
371
+ };
372
+ return {
373
+ chain,
374
+ getActiveNetworkId,
375
+ getConnectedAddresses,
376
+ groupKey: formatWalletProviderGroupKey(ZERODEV_METADATA.displayName),
377
+ key,
378
+ metadata: {
379
+ displayName: ZERODEV_METADATA.displayName,
380
+ icon: ZERODEV_METADATA.icon
381
+ },
382
+ request,
383
+ signMessage: signMessage$1,
384
+ switchActiveNetwork,
385
+ walletProviderType
386
+ };
387
+ };
388
+
389
+ const ZERODEV_EXTENSION_KEY = 'zerodev';
390
+ /**
391
+ * Adds the ZeroDev extension to the Dynamic client.
392
+ *
393
+ * This extension enables Account Abstraction integration with ZeroDev
394
+ *
395
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
396
+ */ const addZerodevExtension = (client = getDefaultClient())=>{
397
+ if (hasExtension({
398
+ extensionKey: ZERODEV_EXTENSION_KEY
399
+ }, client)) {
400
+ return;
401
+ }
402
+ registerExtension({
403
+ extensionKey: ZERODEV_EXTENSION_KEY
404
+ }, client);
405
+ const walletProviderRegistry = getWalletProviderRegistry(client);
406
+ const walletProvider = createZerodevWalletProvider(client);
407
+ walletProviderRegistry.register({
408
+ priority: WalletProviderPriority.WALLET_SDK,
409
+ walletProvider
410
+ });
411
+ };
412
+
413
+ const isGasSponsorshipError = (err)=>{
414
+ var _errorWithMessage_message;
415
+ const errorWithMessage = err;
416
+ return (errorWithMessage == null ? void 0 : (_errorWithMessage_message = errorWithMessage.message) == null ? void 0 : _errorWithMessage_message.includes('userOp did not match any gas sponsoring policies')) || false;
417
+ };
418
+
49
419
  assertPackageVersion(name, version);
50
420
 
51
- export { addZerodevExtension, getSignerForSmartWalletAccount };
421
+ export { addZerodevExtension, createKernelClientForWalletAccount, getSignerForSmartWalletAccount, isGasSponsorshipError };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-sdk/zerodev",
3
- "version": "0.1.0-alpha.17",
3
+ "version": "0.1.0-alpha.18",
4
4
  "type": "module",
5
5
  "main": "./index.cjs.js",
6
6
  "module": "./index.esm.js",
@@ -14,10 +14,10 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@dynamic-labs-sdk/assert-package-version": "0.1.0-alpha.17",
18
- "@dynamic-labs-sdk/client": "0.1.0-alpha.17",
19
- "@dynamic-labs-sdk/evm": "0.1.0-alpha.17",
20
- "@dynamic-labs/sdk-api-core": "0.0.791",
17
+ "@dynamic-labs-sdk/assert-package-version": "0.1.0-alpha.18",
18
+ "@dynamic-labs-sdk/client": "0.1.0-alpha.18",
19
+ "@dynamic-labs-sdk/evm": "0.1.0-alpha.18",
20
+ "@dynamic-labs/sdk-api-core": "0.0.801",
21
21
  "@zerodev/ecdsa-validator": "5.4.9",
22
22
  "@zerodev/multi-chain-ecdsa-validator": "5.4.5",
23
23
  "@zerodev/sdk": "5.4.36"
@@ -1 +1 @@
1
- {"version":3,"file":"addZerodevExtension.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/addZerodevExtension/addZerodevExtension.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,wBAQ/B,CAAC"}
1
+ {"version":3,"file":"addZerodevExtension.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/addZerodevExtension/addZerodevExtension.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,wBAe/B,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import type { KERNEL_VERSION_TYPE } from '@zerodev/sdk/types';
2
2
  import type { EntryPointVersion } from 'viem/account-abstraction';
3
+ export declare const ZERODEV_METADATA: {
4
+ displayName: string;
5
+ icon: string;
6
+ normalizedWalletName: string;
7
+ };
3
8
  export declare const ZERODEV_RPC_BASE_URL = "https://rpc.zerodev.app/api/v2";
4
9
  export declare const KERNEL_VERSION_MAP: {
5
10
  readonly v3_3: import("@zerodev/sdk/types").KERNEL_V3_VERSION_TYPE;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../packages/zerodev/src/constants.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AAErE,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,iBAAiB,EACjB,mBAAmB,CAKX,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../packages/zerodev/src/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AAErE,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAEX,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,iBAAiB,EACjB,mBAAmB,CAKX,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { EvmWalletAccount } from '@dynamic-labs-sdk/evm';
2
+ import type { ZerodevBundlerProvider } from '@dynamic-labs/sdk-api-core';
3
+ import type { Hex } from 'viem';
4
+ import type { KernelClient } from '../KernelClient.types';
5
+ type CreateKernelClientForWalletAccountParams = {
6
+ bundlerProvider?: ZerodevBundlerProvider;
7
+ bundlerRpc?: string;
8
+ gasTokenAddress?: Hex;
9
+ paymasterRpc?: string;
10
+ smartWalletAccount: EvmWalletAccount;
11
+ withSponsorship?: boolean;
12
+ };
13
+ /**
14
+ * Creates a KernelClient instance for a given smart wallet account.
15
+ *
16
+ * @param params.smartWalletAccount - The smart wallet account to create the KernelClient for.
17
+ * @param [params.bundlerProvider] - A custom bundler provider to use
18
+ * @param [params.bundlerRpc] - A custom bundler RPC to use
19
+ * @param [params.paymasterRpc] - A custom paymaster RPC to use
20
+ * @param [params.gasTokenAddress] - The address of a custom ERC20 token to use as a gas token
21
+ * @param [params.withSponsorship] - Whether to use sponsorship for the KernelClient or not (default is true).
22
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
23
+ * @returns A promise that resolves to a KernelClient instance.
24
+ */
25
+ export declare const createKernelClientForWalletAccount: ({ smartWalletAccount, withSponsorship, bundlerProvider, bundlerRpc: bundlerRpcOverride, paymasterRpc: paymasterRpcOverride, gasTokenAddress, }: CreateKernelClientForWalletAccountParams, client?: any) => Promise<KernelClient>;
26
+ export {};
27
+ //# sourceMappingURL=createKernelClientForWalletAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createKernelClientForWalletAccount.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/createKernelClientForWalletAccount/createKernelClientForWalletAccount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAKzE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,KAAK,wCAAwC,GAAG;IAC9C,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kCAAkC,mJAQ1C,wCAAwC,mBAE1C,OAAO,CAAC,YAAY,CAkEtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createKernelClientForWalletAccount } from './createKernelClientForWalletAccount';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/createKernelClientForWalletAccount/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC"}
@@ -1,3 +1,6 @@
1
1
  export { addZerodevExtension } from '../addZerodevExtension';
2
+ export { createKernelClientForWalletAccount } from '../createKernelClientForWalletAccount';
2
3
  export { getSignerForSmartWalletAccount } from '../getSignerForSmartWalletAccount';
4
+ export { isGasSponsorshipError } from '../isGasSponsorshipError';
5
+ export type { KernelClient } from '../KernelClient.types';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/exports/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/exports/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isGasSponsorshipError } from './isGasSponsorshipError';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/isGasSponsorshipError/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isGasSponsorshipError: (err: unknown) => boolean;
2
+ //# sourceMappingURL=isGasSponsorshipError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isGasSponsorshipError.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/isGasSponsorshipError/isGasSponsorshipError.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,QAAS,OAAO,KAAG,OAQpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isZerodevWalletAccount } from './isZerodevWalletAccount';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/isZerodevWalletAccount/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { WalletAccount } from '@dynamic-labs-sdk/client';
2
+ /**
3
+ * Type guard function to check if a wallet account is a Zerodev wallet account.
4
+ *
5
+ * @param walletAccount - The wallet account to check.
6
+ * @returns True if the wallet account is a Zerodev wallet account, false otherwise.
7
+ */
8
+ export declare const isZerodevWalletAccount: (walletAccount: WalletAccount) => boolean;
9
+ //# sourceMappingURL=isZerodevWalletAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isZerodevWalletAccount.d.ts","sourceRoot":"","sources":["../../../../../packages/zerodev/src/isZerodevWalletAccount/isZerodevWalletAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,kBAClB,aAAa,KAC3B,OAIF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
2
  import type { EvmWalletAccount } from '@dynamic-labs-sdk/evm';
3
- import type { CreateKernelAccountReturnType } from '@zerodev/sdk';
3
+ import { type CreateKernelAccountReturnType } from '@zerodev/sdk';
4
4
  import type { PublicClient } from 'viem';
5
5
  import type { EntryPointVersion } from 'viem/account-abstraction';
6
6
  type CreateKernelAccountParams = {
@@ -1 +1 @@
1
- {"version":3,"file":"createKernelAccount.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/createKernelAccount/createKernelAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AASlE,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,gBAAgB,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,yCACQ,yBAAyB,UACvD,aAAa,KACpB,OAAO,CAAC,6BAA6B,CAAC,iBAAiB,CAAC,CA6E1D,CAAC"}
1
+ {"version":3,"file":"createKernelAccount.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/createKernelAccount/createKernelAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,KAAK,6BAA6B,EAGnC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AASlE,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,gBAAgB,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,yCACQ,yBAAyB,UACvD,aAAa,KACpB,OAAO,CAAC,6BAA6B,CAAC,iBAAiB,CAAC,CA6E1D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import { type EvmWalletProvider } from '@dynamic-labs-sdk/evm';
3
+ export declare const createZerodevWalletProvider: (client: DynamicClient) => EvmWalletProvider;
4
+ //# sourceMappingURL=createZerodevWalletProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createZerodevWalletProvider.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/createZerodevWalletProvider/createZerodevWalletProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAC;AAQ/B,eAAO,MAAM,2BAA2B,WAC9B,aAAa,KACpB,iBA+EF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createZerodevWalletProvider } from './createZerodevWalletProvider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/createZerodevWalletProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ export declare const getAllUserZerodevAddresses: (client: DynamicClient) => string[];
3
+ //# sourceMappingURL=getAllUserZerodevAddresses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAllUserZerodevAddresses.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/getAllUserZerodevAddresses/getAllUserZerodevAddresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,eAAO,MAAM,0BAA0B,WAAY,aAAa,KAAG,MAAM,EAmBxE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getAllUserZerodevAddresses } from './getAllUserZerodevAddresses';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/getAllUserZerodevAddresses/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { signMessage } from './signMessage';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/signMessage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { EvmWalletAccount } from '@dynamic-labs-sdk/evm';
3
+ type SignMessageParams = {
4
+ message: string;
5
+ walletAccount: EvmWalletAccount;
6
+ };
7
+ export declare const signMessage: ({ walletAccount, message }: SignMessageParams, client: DynamicClient) => Promise<{
8
+ signature: string;
9
+ }>;
10
+ export {};
11
+ //# sourceMappingURL=signMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signMessage.d.ts","sourceRoot":"","sources":["../../../../../../packages/zerodev/src/utils/signMessage/signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,WAAW,+BACM,iBAAiB,UACrC,aAAa,KACpB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAgC/B,CAAC"}