@dynamic-labs-wallet/node-evm 0.0.0-beta.324 → 0.0.0-beta.326

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/index.cjs.js CHANGED
@@ -4,6 +4,15 @@ var node = require('@dynamic-labs-wallet/node');
4
4
  var viem = require('viem');
5
5
  var chains = require('viem/chains');
6
6
  var utils = require('viem/utils');
7
+ var client = require('@dynamic-labs-sdk/client');
8
+ var core = require('@dynamic-labs-sdk/client/core');
9
+ var viem$1 = require('@dynamic-labs-sdk/evm/viem');
10
+ var waas = require('@dynamic-labs-sdk/evm/waas');
11
+ var zerodev = require('@dynamic-labs-sdk/zerodev');
12
+ var core$1 = require('@dynamic-labs-sdk/zerodev/core');
13
+ var ecdsaValidator = require('@zerodev/ecdsa-validator');
14
+ var sdk = require('@zerodev/sdk');
15
+ var accounts = require('viem/accounts');
7
16
 
8
17
  function _extends() {
9
18
  _extends = Object.assign || function assign(target) {
@@ -61,6 +70,12 @@ const deriveAccountAddress = ({ rawPublicKey })=>{
61
70
  };
62
71
 
63
72
  class DynamicEvmWalletClient extends node.DynamicWalletClient {
73
+ get jwtAuthToken() {
74
+ return this.baseJWTAuthToken;
75
+ }
76
+ get apiUrl() {
77
+ return this.baseApiUrl;
78
+ }
64
79
  createViemPublicClient({ chain, rpcUrl }) {
65
80
  return viem.createPublicClient({
66
81
  chain,
@@ -455,12 +470,343 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
455
470
  throw error;
456
471
  }
457
472
  };
473
+ /**
474
+ * Signs typed data using delegated signing for EVM
475
+ */ const delegatedSignTypedData = async (client, { walletId, walletApiKey, keyShare, typedData })=>{
476
+ try {
477
+ if (!keyShare || !walletId || !walletApiKey) {
478
+ throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign typed data');
479
+ }
480
+ const formattedTypedData = formatTypedData(typedData);
481
+ const signatureEcdsa = await node.delegatedSignMessage(client, {
482
+ walletId,
483
+ walletApiKey,
484
+ keyShare,
485
+ message: formattedTypedData,
486
+ chainName: client.chainName,
487
+ isFormatted: true,
488
+ context: {
489
+ evmTypedData: typedData
490
+ }
491
+ });
492
+ const serializedSignature = serializeECDSASignature(signatureEcdsa);
493
+ return serializedSignature;
494
+ } catch (error) {
495
+ client.logger.error('Error in delegatedSignTypedData', error);
496
+ throw error;
497
+ }
498
+ };
499
+ /**
500
+ * Signs EIP-7702 authorization using delegated signing for EVM
501
+ */ const delegatedSignAuthorization = async (client, { walletId, walletApiKey, keyShare, authorization })=>{
502
+ try {
503
+ if (!keyShare || !walletId || !walletApiKey) {
504
+ throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign authorization');
505
+ }
506
+ const digest = utils.hashAuthorization(authorization);
507
+ const prehashed = digest.startsWith('0x') ? digest.slice(2) : digest;
508
+ const signatureEcdsa = await node.delegatedSignMessage(client, {
509
+ walletId,
510
+ walletApiKey,
511
+ keyShare,
512
+ message: prehashed,
513
+ chainName: client.chainName,
514
+ isFormatted: true,
515
+ context: {
516
+ eip7702Auth: authorization
517
+ }
518
+ });
519
+ const serializedSignature = serializeECDSASignature(signatureEcdsa);
520
+ const signature = viem.parseSignature(serializedSignature);
521
+ return signature;
522
+ } catch (error) {
523
+ client.logger.error('Error in delegatedSignAuthorization', error);
524
+ throw error;
525
+ }
526
+ };
458
527
  /**
459
528
  * Revoke delegation - delegates to the node package
460
529
  */ const revokeDelegation = async (client, params)=>{
461
530
  return node.revokeDelegation(client, params);
462
531
  };
463
532
 
533
+ const getJwtExpiration = (jwt)=>{
534
+ if (!jwt) {
535
+ return 0;
536
+ }
537
+ return JSON.parse(Buffer.from(jwt.split('.')[1], 'base64').toString()).exp * 1000;
538
+ };
539
+ class MemoryStorageAdapter {
540
+ async getItem(key) {
541
+ if (key.includes('session')) {
542
+ // This is a workaround so we can pass the JWT that the authenticate the node SDK to
543
+ // the vanilla client, once set we can refresh the user and populate the user data, wallets and etc.
544
+ return JSON.stringify({
545
+ value: {
546
+ token: this.jwt,
547
+ sessionExpiration: getJwtExpiration(this.jwt),
548
+ legacyToken: null,
549
+ mfaToken: null,
550
+ captchaToken: null,
551
+ sessionKeys: null
552
+ }
553
+ });
554
+ }
555
+ var _this_store_get;
556
+ return (_this_store_get = this.store.get(key)) != null ? _this_store_get : null;
557
+ }
558
+ async setItem(key, value) {
559
+ this.store.set(key, value);
560
+ }
561
+ async removeItem(key) {
562
+ this.store.delete(key);
563
+ }
564
+ clear() {
565
+ this.store.clear();
566
+ }
567
+ get size() {
568
+ return this.store.size;
569
+ }
570
+ constructor(jwt){
571
+ this.store = new Map();
572
+ this.jwt = jwt;
573
+ }
574
+ }
575
+ const createMemoryStorageAdapter = (jwt)=>{
576
+ return new MemoryStorageAdapter(jwt);
577
+ };
578
+
579
+ const createViemSignerAdapter = ({ evmClient, accountAddress, password, externalServerKeyShares, delegated })=>{
580
+ return accounts.toAccount({
581
+ address: accountAddress,
582
+ signMessage: async ({ message })=>{
583
+ if (delegated) {
584
+ return delegatedSignMessage(delegated.delegatedClient, {
585
+ walletId: delegated.walletId,
586
+ walletApiKey: delegated.walletApiKey,
587
+ keyShare: delegated.keyShare,
588
+ message: message
589
+ });
590
+ }
591
+ const signature = await evmClient.signMessage({
592
+ message: message,
593
+ accountAddress,
594
+ password,
595
+ externalServerKeyShares
596
+ });
597
+ return signature;
598
+ },
599
+ signTypedData: async (typedData)=>{
600
+ if (delegated) {
601
+ return delegatedSignTypedData(delegated.delegatedClient, {
602
+ walletId: delegated.walletId,
603
+ walletApiKey: delegated.walletApiKey,
604
+ keyShare: delegated.keyShare,
605
+ typedData: typedData
606
+ });
607
+ }
608
+ return evmClient.signTypedData({
609
+ accountAddress,
610
+ typedData: typedData,
611
+ password: password,
612
+ externalServerKeyShares
613
+ });
614
+ },
615
+ signTransaction: async (transaction)=>{
616
+ if (delegated) {
617
+ return delegatedSignTransaction(delegated.delegatedClient, {
618
+ walletId: delegated.walletId,
619
+ walletApiKey: delegated.walletApiKey,
620
+ keyShare: delegated.keyShare,
621
+ transaction
622
+ });
623
+ }
624
+ const signedTx = await evmClient.signTransaction({
625
+ senderAddress: accountAddress,
626
+ transaction,
627
+ password,
628
+ externalServerKeyShares
629
+ });
630
+ return signedTx;
631
+ },
632
+ signAuthorization: async (authorization)=>{
633
+ if (delegated) {
634
+ const signature = await delegatedSignAuthorization(delegated.delegatedClient, {
635
+ walletId: delegated.walletId,
636
+ walletApiKey: delegated.walletApiKey,
637
+ keyShare: delegated.keyShare,
638
+ authorization
639
+ });
640
+ var _authorization_address;
641
+ const signedAuthorization = {
642
+ address: (_authorization_address = authorization.address) != null ? _authorization_address : authorization.contractAddress,
643
+ chainId: authorization.chainId,
644
+ nonce: authorization.nonce,
645
+ r: signature.r,
646
+ s: signature.s,
647
+ v: signature.v,
648
+ yParity: signature.yParity
649
+ };
650
+ return signedAuthorization;
651
+ }
652
+ const signature = await evmClient.signAuthorization({
653
+ authorization,
654
+ accountAddress,
655
+ password,
656
+ externalServerKeyShares
657
+ });
658
+ var _authorization_address1;
659
+ const signedAuthorization = {
660
+ address: (_authorization_address1 = authorization.address) != null ? _authorization_address1 : authorization.contractAddress,
661
+ chainId: authorization.chainId,
662
+ nonce: authorization.nonce,
663
+ r: signature.r,
664
+ s: signature.s,
665
+ v: signature.v,
666
+ yParity: signature.yParity
667
+ };
668
+ return signedAuthorization;
669
+ }
670
+ });
671
+ };
672
+
673
+ class DynamicEvmZeroDevClient {
674
+ async initialize() {
675
+ await client.initializeClient(this.dynamicClient);
676
+ if ('jwtAuthToken' in this.evmClient) {
677
+ // Fetch user data to populate wallet accounts
678
+ await client.refreshUser(this.dynamicClient);
679
+ }
680
+ }
681
+ /**
682
+ * Get network data by networkId from project configuration
683
+ */ getNetworkData(networkId) {
684
+ const networksData = client.getNetworksData(this.dynamicClient);
685
+ const networkData = networksData.find((n)=>n.networkId === networkId);
686
+ core.assertDefined(networkData, `No network found with networkId: ${networkId}. Available networks: ${networksData.map((n)=>n.networkId).join(', ')}`);
687
+ return networkData;
688
+ }
689
+ async createKernelClientForAddress(options) {
690
+ const viemSigner = createViemSignerAdapter({
691
+ evmClient: this.evmClient,
692
+ accountAddress: options.address,
693
+ password: options.password,
694
+ externalServerKeyShares: options.externalServerKeyShares,
695
+ delegated: options.delegated
696
+ });
697
+ const activeNetworkData = this.getNetworkData(options.networkId);
698
+ const viemChain = viem$1.mapNetworkDataToViemChain(activeNetworkData);
699
+ var _options_bundlerRpc;
700
+ const bundlerRpc = (_options_bundlerRpc = options.bundlerRpc) != null ? _options_bundlerRpc : core$1.getZerodevRpc({
701
+ bundlerProvider: options.bundlerProvider,
702
+ networkId: activeNetworkData.networkId,
703
+ rpcType: 'bundler'
704
+ }, this.dynamicClient);
705
+ const bundlerTransport = viem.http(bundlerRpc);
706
+ const publicClient = viem.createPublicClient({
707
+ chain: viemChain,
708
+ transport: bundlerTransport
709
+ });
710
+ const account = await this.createKernelAccountWithCustomSigner({
711
+ publicClient,
712
+ signer: viemSigner
713
+ });
714
+ var _options_paymasterRpc;
715
+ const paymasterRpc = (_options_paymasterRpc = options.paymasterRpc) != null ? _options_paymasterRpc : core$1.getZerodevRpc({
716
+ bundlerProvider: options.bundlerProvider,
717
+ networkId: activeNetworkData.networkId,
718
+ rpcType: 'paymaster'
719
+ }, this.dynamicClient);
720
+ var _options_withSponsorship;
721
+ const paymasterConfig = ((_options_withSponsorship = options.withSponsorship) != null ? _options_withSponsorship : true) ? core$1.getPaymasterConfig({
722
+ chain: viemChain,
723
+ gasTokenAddress: options.gasTokenAddress,
724
+ paymasterRpc
725
+ }) : {};
726
+ const kernelClient = sdk.createKernelAccountClient(_extends({
727
+ account,
728
+ bundlerTransport,
729
+ chain: viemChain,
730
+ client: publicClient,
731
+ userOperation: {
732
+ estimateFeesPerGas: async ({ bundlerClient })=>sdk.getUserOperationGasPrice(bundlerClient)
733
+ }
734
+ }, paymasterConfig));
735
+ return kernelClient;
736
+ }
737
+ async createKernelAccountWithCustomSigner({ publicClient, signer }) {
738
+ const zerodevProvider = core$1.getZerodevProviderFromSettings(this.dynamicClient);
739
+ core.assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
740
+ const useEIP7702 = zerodevProvider.enableEIP7702;
741
+ const entryPointVersion = zerodevProvider.entryPointVersion;
742
+ const entryPoint = core$1.getEntryPoint(entryPointVersion);
743
+ if (useEIP7702) {
744
+ return sdk.createKernelAccount(publicClient, {
745
+ eip7702Account: signer,
746
+ entryPoint,
747
+ kernelVersion: sdk.constants.KERNEL_V3_3
748
+ });
749
+ }
750
+ const kernelVersionValue = zerodevProvider.kernelVersion;
751
+ const kernelVersion = core$1.getKernelVersion({
752
+ entryPoint,
753
+ kernelVersion: kernelVersionValue
754
+ });
755
+ var _zerodevProvider_enableKernelV3Migration;
756
+ const kernelV3MigrationEnabled = (_zerodevProvider_enableKernelV3Migration = zerodevProvider.enableKernelV3Migration) != null ? _zerodevProvider_enableKernelV3Migration : false;
757
+ if (kernelV3MigrationEnabled) {
758
+ const apiKernelVersion = core$1.getKernelVersion({
759
+ entryPoint,
760
+ kernelVersion: zerodevProvider.kernelVersion
761
+ });
762
+ return ecdsaValidator.createEcdsaKernelMigrationAccount(publicClient, {
763
+ entryPoint,
764
+ migrationVersion: {
765
+ from: kernelVersion,
766
+ to: apiKernelVersion
767
+ },
768
+ signer
769
+ });
770
+ }
771
+ const validator = await core$1.getEcdsaValidator({
772
+ ecdsaProviderType: zerodevProvider.ecdsaProviderType,
773
+ entryPoint,
774
+ kernelVersion,
775
+ publicClient,
776
+ signer
777
+ });
778
+ return sdk.createKernelAccount(publicClient, {
779
+ entryPoint,
780
+ kernelVersion,
781
+ plugins: {
782
+ sudo: validator
783
+ }
784
+ });
785
+ }
786
+ constructor(evmClient){
787
+ this.evmClient = evmClient;
788
+ var _evmClient_jwtAuthToken;
789
+ const authToken = 'jwtAuthToken' in evmClient ? (_evmClient_jwtAuthToken = evmClient.jwtAuthToken) != null ? _evmClient_jwtAuthToken : null : null;
790
+ const storageAdapter = createMemoryStorageAdapter(authToken);
791
+ this.dynamicClient = client.createDynamicClient({
792
+ environmentId: evmClient.environmentId,
793
+ autoInitialize: false,
794
+ coreConfig: {
795
+ storageAdapter,
796
+ fetch: fetch,
797
+ apiBaseUrl: `${evmClient.apiUrl}/api/v0`
798
+ }
799
+ });
800
+ zerodev.addZerodevExtension(this.dynamicClient);
801
+ waas.addWaasEvmExtension(this.dynamicClient);
802
+ }
803
+ }
804
+ const createZerodevClient = async (evmClient)=>{
805
+ const client = new DynamicEvmZeroDevClient(evmClient);
806
+ await client.initialize();
807
+ return client;
808
+ };
809
+
464
810
  exports.DynamicEvmWalletClient = DynamicEvmWalletClient;
465
811
  exports.ERROR_ACCOUNT_ADDRESS_REQUIRED = ERROR_ACCOUNT_ADDRESS_REQUIRED;
466
812
  exports.ERROR_CREATE_WALLET_ACCOUNT = ERROR_CREATE_WALLET_ACCOUNT;
@@ -470,8 +816,11 @@ exports.ERROR_SIGN_TYPED_DATA = ERROR_SIGN_TYPED_DATA;
470
816
  exports.ERROR_VERIFY_MESSAGE_SIGNATURE = ERROR_VERIFY_MESSAGE_SIGNATURE;
471
817
  exports.EVM_SIGN_MESSAGE_PREFIX = EVM_SIGN_MESSAGE_PREFIX;
472
818
  exports.createDelegatedEvmWalletClient = createDelegatedEvmWalletClient;
819
+ exports.createZerodevClient = createZerodevClient;
820
+ exports.delegatedSignAuthorization = delegatedSignAuthorization;
473
821
  exports.delegatedSignMessage = delegatedSignMessage;
474
822
  exports.delegatedSignTransaction = delegatedSignTransaction;
823
+ exports.delegatedSignTypedData = delegatedSignTypedData;
475
824
  exports.deriveAccountAddress = deriveAccountAddress;
476
825
  exports.formatEVMMessage = formatEVMMessage;
477
826
  exports.formatTypedData = formatTypedData;
package/index.esm.js CHANGED
@@ -2,6 +2,15 @@ import { MessageHash, DynamicWalletClient, getMPCChainConfig, getExternalServerK
2
2
  import { stringToHex, bytesToHex, size, concat, hashTypedData, serializeSignature, getAddress, createPublicClient, http, parseSignature, serializeTransaction } from 'viem';
3
3
  import { mainnet } from 'viem/chains';
4
4
  import { hashAuthorization } from 'viem/utils';
5
+ import { initializeClient, refreshUser, getNetworksData, createDynamicClient } from '@dynamic-labs-sdk/client';
6
+ import { assertDefined } from '@dynamic-labs-sdk/client/core';
7
+ import { mapNetworkDataToViemChain } from '@dynamic-labs-sdk/evm/viem';
8
+ import { addWaasEvmExtension } from '@dynamic-labs-sdk/evm/waas';
9
+ import { addZerodevExtension } from '@dynamic-labs-sdk/zerodev';
10
+ import { getZerodevRpc, getPaymasterConfig, getZerodevProviderFromSettings, getEntryPoint, getKernelVersion, getEcdsaValidator } from '@dynamic-labs-sdk/zerodev/core';
11
+ import { createEcdsaKernelMigrationAccount } from '@zerodev/ecdsa-validator';
12
+ import { createKernelAccountClient, getUserOperationGasPrice, createKernelAccount, constants } from '@zerodev/sdk';
13
+ import { toAccount } from 'viem/accounts';
5
14
 
6
15
  function _extends() {
7
16
  _extends = Object.assign || function assign(target) {
@@ -59,6 +68,12 @@ const deriveAccountAddress = ({ rawPublicKey })=>{
59
68
  };
60
69
 
61
70
  class DynamicEvmWalletClient extends DynamicWalletClient {
71
+ get jwtAuthToken() {
72
+ return this.baseJWTAuthToken;
73
+ }
74
+ get apiUrl() {
75
+ return this.baseApiUrl;
76
+ }
62
77
  createViemPublicClient({ chain, rpcUrl }) {
63
78
  return createPublicClient({
64
79
  chain,
@@ -453,10 +468,341 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
453
468
  throw error;
454
469
  }
455
470
  };
471
+ /**
472
+ * Signs typed data using delegated signing for EVM
473
+ */ const delegatedSignTypedData = async (client, { walletId, walletApiKey, keyShare, typedData })=>{
474
+ try {
475
+ if (!keyShare || !walletId || !walletApiKey) {
476
+ throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign typed data');
477
+ }
478
+ const formattedTypedData = formatTypedData(typedData);
479
+ const signatureEcdsa = await delegatedSignMessage$1(client, {
480
+ walletId,
481
+ walletApiKey,
482
+ keyShare,
483
+ message: formattedTypedData,
484
+ chainName: client.chainName,
485
+ isFormatted: true,
486
+ context: {
487
+ evmTypedData: typedData
488
+ }
489
+ });
490
+ const serializedSignature = serializeECDSASignature(signatureEcdsa);
491
+ return serializedSignature;
492
+ } catch (error) {
493
+ client.logger.error('Error in delegatedSignTypedData', error);
494
+ throw error;
495
+ }
496
+ };
497
+ /**
498
+ * Signs EIP-7702 authorization using delegated signing for EVM
499
+ */ const delegatedSignAuthorization = async (client, { walletId, walletApiKey, keyShare, authorization })=>{
500
+ try {
501
+ if (!keyShare || !walletId || !walletApiKey) {
502
+ throw new Error('Delegated key share, wallet ID, and wallet API key are required to sign authorization');
503
+ }
504
+ const digest = hashAuthorization(authorization);
505
+ const prehashed = digest.startsWith('0x') ? digest.slice(2) : digest;
506
+ const signatureEcdsa = await delegatedSignMessage$1(client, {
507
+ walletId,
508
+ walletApiKey,
509
+ keyShare,
510
+ message: prehashed,
511
+ chainName: client.chainName,
512
+ isFormatted: true,
513
+ context: {
514
+ eip7702Auth: authorization
515
+ }
516
+ });
517
+ const serializedSignature = serializeECDSASignature(signatureEcdsa);
518
+ const signature = parseSignature(serializedSignature);
519
+ return signature;
520
+ } catch (error) {
521
+ client.logger.error('Error in delegatedSignAuthorization', error);
522
+ throw error;
523
+ }
524
+ };
456
525
  /**
457
526
  * Revoke delegation - delegates to the node package
458
527
  */ const revokeDelegation = async (client, params)=>{
459
528
  return revokeDelegation$1(client, params);
460
529
  };
461
530
 
462
- export { DynamicEvmWalletClient, ERROR_ACCOUNT_ADDRESS_REQUIRED, ERROR_CREATE_WALLET_ACCOUNT, ERROR_KEYGEN_FAILED, ERROR_SIGN_MESSAGE, ERROR_SIGN_TYPED_DATA, ERROR_VERIFY_MESSAGE_SIGNATURE, EVM_SIGN_MESSAGE_PREFIX, createDelegatedEvmWalletClient, delegatedSignMessage, delegatedSignTransaction, deriveAccountAddress, formatEVMMessage, formatTypedData, revokeDelegation, serializeECDSASignature };
531
+ const getJwtExpiration = (jwt)=>{
532
+ if (!jwt) {
533
+ return 0;
534
+ }
535
+ return JSON.parse(Buffer.from(jwt.split('.')[1], 'base64').toString()).exp * 1000;
536
+ };
537
+ class MemoryStorageAdapter {
538
+ async getItem(key) {
539
+ if (key.includes('session')) {
540
+ // This is a workaround so we can pass the JWT that the authenticate the node SDK to
541
+ // the vanilla client, once set we can refresh the user and populate the user data, wallets and etc.
542
+ return JSON.stringify({
543
+ value: {
544
+ token: this.jwt,
545
+ sessionExpiration: getJwtExpiration(this.jwt),
546
+ legacyToken: null,
547
+ mfaToken: null,
548
+ captchaToken: null,
549
+ sessionKeys: null
550
+ }
551
+ });
552
+ }
553
+ var _this_store_get;
554
+ return (_this_store_get = this.store.get(key)) != null ? _this_store_get : null;
555
+ }
556
+ async setItem(key, value) {
557
+ this.store.set(key, value);
558
+ }
559
+ async removeItem(key) {
560
+ this.store.delete(key);
561
+ }
562
+ clear() {
563
+ this.store.clear();
564
+ }
565
+ get size() {
566
+ return this.store.size;
567
+ }
568
+ constructor(jwt){
569
+ this.store = new Map();
570
+ this.jwt = jwt;
571
+ }
572
+ }
573
+ const createMemoryStorageAdapter = (jwt)=>{
574
+ return new MemoryStorageAdapter(jwt);
575
+ };
576
+
577
+ const createViemSignerAdapter = ({ evmClient, accountAddress, password, externalServerKeyShares, delegated })=>{
578
+ return toAccount({
579
+ address: accountAddress,
580
+ signMessage: async ({ message })=>{
581
+ if (delegated) {
582
+ return delegatedSignMessage(delegated.delegatedClient, {
583
+ walletId: delegated.walletId,
584
+ walletApiKey: delegated.walletApiKey,
585
+ keyShare: delegated.keyShare,
586
+ message: message
587
+ });
588
+ }
589
+ const signature = await evmClient.signMessage({
590
+ message: message,
591
+ accountAddress,
592
+ password,
593
+ externalServerKeyShares
594
+ });
595
+ return signature;
596
+ },
597
+ signTypedData: async (typedData)=>{
598
+ if (delegated) {
599
+ return delegatedSignTypedData(delegated.delegatedClient, {
600
+ walletId: delegated.walletId,
601
+ walletApiKey: delegated.walletApiKey,
602
+ keyShare: delegated.keyShare,
603
+ typedData: typedData
604
+ });
605
+ }
606
+ return evmClient.signTypedData({
607
+ accountAddress,
608
+ typedData: typedData,
609
+ password: password,
610
+ externalServerKeyShares
611
+ });
612
+ },
613
+ signTransaction: async (transaction)=>{
614
+ if (delegated) {
615
+ return delegatedSignTransaction(delegated.delegatedClient, {
616
+ walletId: delegated.walletId,
617
+ walletApiKey: delegated.walletApiKey,
618
+ keyShare: delegated.keyShare,
619
+ transaction
620
+ });
621
+ }
622
+ const signedTx = await evmClient.signTransaction({
623
+ senderAddress: accountAddress,
624
+ transaction,
625
+ password,
626
+ externalServerKeyShares
627
+ });
628
+ return signedTx;
629
+ },
630
+ signAuthorization: async (authorization)=>{
631
+ if (delegated) {
632
+ const signature = await delegatedSignAuthorization(delegated.delegatedClient, {
633
+ walletId: delegated.walletId,
634
+ walletApiKey: delegated.walletApiKey,
635
+ keyShare: delegated.keyShare,
636
+ authorization
637
+ });
638
+ var _authorization_address;
639
+ const signedAuthorization = {
640
+ address: (_authorization_address = authorization.address) != null ? _authorization_address : authorization.contractAddress,
641
+ chainId: authorization.chainId,
642
+ nonce: authorization.nonce,
643
+ r: signature.r,
644
+ s: signature.s,
645
+ v: signature.v,
646
+ yParity: signature.yParity
647
+ };
648
+ return signedAuthorization;
649
+ }
650
+ const signature = await evmClient.signAuthorization({
651
+ authorization,
652
+ accountAddress,
653
+ password,
654
+ externalServerKeyShares
655
+ });
656
+ var _authorization_address1;
657
+ const signedAuthorization = {
658
+ address: (_authorization_address1 = authorization.address) != null ? _authorization_address1 : authorization.contractAddress,
659
+ chainId: authorization.chainId,
660
+ nonce: authorization.nonce,
661
+ r: signature.r,
662
+ s: signature.s,
663
+ v: signature.v,
664
+ yParity: signature.yParity
665
+ };
666
+ return signedAuthorization;
667
+ }
668
+ });
669
+ };
670
+
671
+ class DynamicEvmZeroDevClient {
672
+ async initialize() {
673
+ await initializeClient(this.dynamicClient);
674
+ if ('jwtAuthToken' in this.evmClient) {
675
+ // Fetch user data to populate wallet accounts
676
+ await refreshUser(this.dynamicClient);
677
+ }
678
+ }
679
+ /**
680
+ * Get network data by networkId from project configuration
681
+ */ getNetworkData(networkId) {
682
+ const networksData = getNetworksData(this.dynamicClient);
683
+ const networkData = networksData.find((n)=>n.networkId === networkId);
684
+ assertDefined(networkData, `No network found with networkId: ${networkId}. Available networks: ${networksData.map((n)=>n.networkId).join(', ')}`);
685
+ return networkData;
686
+ }
687
+ async createKernelClientForAddress(options) {
688
+ const viemSigner = createViemSignerAdapter({
689
+ evmClient: this.evmClient,
690
+ accountAddress: options.address,
691
+ password: options.password,
692
+ externalServerKeyShares: options.externalServerKeyShares,
693
+ delegated: options.delegated
694
+ });
695
+ const activeNetworkData = this.getNetworkData(options.networkId);
696
+ const viemChain = mapNetworkDataToViemChain(activeNetworkData);
697
+ var _options_bundlerRpc;
698
+ const bundlerRpc = (_options_bundlerRpc = options.bundlerRpc) != null ? _options_bundlerRpc : getZerodevRpc({
699
+ bundlerProvider: options.bundlerProvider,
700
+ networkId: activeNetworkData.networkId,
701
+ rpcType: 'bundler'
702
+ }, this.dynamicClient);
703
+ const bundlerTransport = http(bundlerRpc);
704
+ const publicClient = createPublicClient({
705
+ chain: viemChain,
706
+ transport: bundlerTransport
707
+ });
708
+ const account = await this.createKernelAccountWithCustomSigner({
709
+ publicClient,
710
+ signer: viemSigner
711
+ });
712
+ var _options_paymasterRpc;
713
+ const paymasterRpc = (_options_paymasterRpc = options.paymasterRpc) != null ? _options_paymasterRpc : getZerodevRpc({
714
+ bundlerProvider: options.bundlerProvider,
715
+ networkId: activeNetworkData.networkId,
716
+ rpcType: 'paymaster'
717
+ }, this.dynamicClient);
718
+ var _options_withSponsorship;
719
+ const paymasterConfig = ((_options_withSponsorship = options.withSponsorship) != null ? _options_withSponsorship : true) ? getPaymasterConfig({
720
+ chain: viemChain,
721
+ gasTokenAddress: options.gasTokenAddress,
722
+ paymasterRpc
723
+ }) : {};
724
+ const kernelClient = createKernelAccountClient(_extends({
725
+ account,
726
+ bundlerTransport,
727
+ chain: viemChain,
728
+ client: publicClient,
729
+ userOperation: {
730
+ estimateFeesPerGas: async ({ bundlerClient })=>getUserOperationGasPrice(bundlerClient)
731
+ }
732
+ }, paymasterConfig));
733
+ return kernelClient;
734
+ }
735
+ async createKernelAccountWithCustomSigner({ publicClient, signer }) {
736
+ const zerodevProvider = getZerodevProviderFromSettings(this.dynamicClient);
737
+ assertDefined(zerodevProvider, 'Zerodev provider is not enabled in project settings');
738
+ const useEIP7702 = zerodevProvider.enableEIP7702;
739
+ const entryPointVersion = zerodevProvider.entryPointVersion;
740
+ const entryPoint = getEntryPoint(entryPointVersion);
741
+ if (useEIP7702) {
742
+ return createKernelAccount(publicClient, {
743
+ eip7702Account: signer,
744
+ entryPoint,
745
+ kernelVersion: constants.KERNEL_V3_3
746
+ });
747
+ }
748
+ const kernelVersionValue = zerodevProvider.kernelVersion;
749
+ const kernelVersion = getKernelVersion({
750
+ entryPoint,
751
+ kernelVersion: kernelVersionValue
752
+ });
753
+ var _zerodevProvider_enableKernelV3Migration;
754
+ const kernelV3MigrationEnabled = (_zerodevProvider_enableKernelV3Migration = zerodevProvider.enableKernelV3Migration) != null ? _zerodevProvider_enableKernelV3Migration : false;
755
+ if (kernelV3MigrationEnabled) {
756
+ const apiKernelVersion = getKernelVersion({
757
+ entryPoint,
758
+ kernelVersion: zerodevProvider.kernelVersion
759
+ });
760
+ return createEcdsaKernelMigrationAccount(publicClient, {
761
+ entryPoint,
762
+ migrationVersion: {
763
+ from: kernelVersion,
764
+ to: apiKernelVersion
765
+ },
766
+ signer
767
+ });
768
+ }
769
+ const validator = await getEcdsaValidator({
770
+ ecdsaProviderType: zerodevProvider.ecdsaProviderType,
771
+ entryPoint,
772
+ kernelVersion,
773
+ publicClient,
774
+ signer
775
+ });
776
+ return createKernelAccount(publicClient, {
777
+ entryPoint,
778
+ kernelVersion,
779
+ plugins: {
780
+ sudo: validator
781
+ }
782
+ });
783
+ }
784
+ constructor(evmClient){
785
+ this.evmClient = evmClient;
786
+ var _evmClient_jwtAuthToken;
787
+ const authToken = 'jwtAuthToken' in evmClient ? (_evmClient_jwtAuthToken = evmClient.jwtAuthToken) != null ? _evmClient_jwtAuthToken : null : null;
788
+ const storageAdapter = createMemoryStorageAdapter(authToken);
789
+ this.dynamicClient = createDynamicClient({
790
+ environmentId: evmClient.environmentId,
791
+ autoInitialize: false,
792
+ coreConfig: {
793
+ storageAdapter,
794
+ fetch: fetch,
795
+ apiBaseUrl: `${evmClient.apiUrl}/api/v0`
796
+ }
797
+ });
798
+ addZerodevExtension(this.dynamicClient);
799
+ addWaasEvmExtension(this.dynamicClient);
800
+ }
801
+ }
802
+ const createZerodevClient = async (evmClient)=>{
803
+ const client = new DynamicEvmZeroDevClient(evmClient);
804
+ await client.initialize();
805
+ return client;
806
+ };
807
+
808
+ export { DynamicEvmWalletClient, ERROR_ACCOUNT_ADDRESS_REQUIRED, ERROR_CREATE_WALLET_ACCOUNT, ERROR_KEYGEN_FAILED, ERROR_SIGN_MESSAGE, ERROR_SIGN_TYPED_DATA, ERROR_VERIFY_MESSAGE_SIGNATURE, EVM_SIGN_MESSAGE_PREFIX, createDelegatedEvmWalletClient, createZerodevClient, delegatedSignAuthorization, delegatedSignMessage, delegatedSignTransaction, delegatedSignTypedData, deriveAccountAddress, formatEVMMessage, formatTypedData, revokeDelegation, serializeECDSASignature };
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/node-evm",
3
- "version": "0.0.0-beta.324",
3
+ "version": "0.0.0-beta.326",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@dynamic-labs-wallet/node": "0.0.0-beta.324",
8
- "@dynamic-labs/sdk-api-core": "^0.0.801"
7
+ "@dynamic-labs-wallet/node": "0.0.0-beta.326",
8
+ "@dynamic-labs/sdk-api-core": "^0.0.801",
9
+ "@dynamic-labs-sdk/client": "^0.1.0-alpha.22",
10
+ "@dynamic-labs-sdk/zerodev": "^0.1.0-alpha.22",
11
+ "@dynamic-labs-sdk/evm": "^0.1.0-alpha.22",
12
+ "@zerodev/ecdsa-validator": "5.4.9",
13
+ "@zerodev/sdk": "5.4.36"
9
14
  },
10
15
  "publishConfig": {
11
16
  "access": "public"
12
17
  },
13
18
  "peerDependencies": {
14
- "viem": "^2.22.1"
19
+ "viem": "2.38.2"
15
20
  },
16
21
  "devDependencies": {
17
22
  "typescript": "^5.0.0",
@@ -4,6 +4,8 @@ import { type Chain, type PublicClient, type SignableMessage, type TransactionSe
4
4
  export declare class DynamicEvmWalletClient extends DynamicWalletClient {
5
5
  readonly chainName = "EVM";
6
6
  constructor({ environmentId, baseApiUrl, baseMPCRelayApiUrl, debug, }: DynamicWalletClientProps);
7
+ get jwtAuthToken(): string | undefined;
8
+ get apiUrl(): string | undefined;
7
9
  createViemPublicClient({ chain, rpcUrl, }: {
8
10
  chain: Chain;
9
11
  rpcUrl?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { DelegatedWalletClient, ServerKeyShare } from '@dynamic-labs-wallet/node';
2
2
  import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
3
- import { type TransactionSerializable } from 'viem';
3
+ import { type TransactionSerializable, type TypedData } from 'viem';
4
4
  export type DelegatedEvmClientConfig = {
5
5
  environmentId: string;
6
6
  baseApiUrl?: string;
@@ -35,6 +35,24 @@ export declare const delegatedSignTransaction: (client: DelegatedEvmWalletClient
35
35
  keyShare: ServerKeyShare;
36
36
  transaction: TransactionSerializable;
37
37
  }) => Promise<string>;
38
+ /**
39
+ * Signs typed data using delegated signing for EVM
40
+ */
41
+ export declare const delegatedSignTypedData: (client: DelegatedEvmWalletClient, { walletId, walletApiKey, keyShare, typedData, }: {
42
+ walletId: string;
43
+ walletApiKey: string;
44
+ keyShare: ServerKeyShare;
45
+ typedData: TypedData;
46
+ }) => Promise<string>;
47
+ /**
48
+ * Signs EIP-7702 authorization using delegated signing for EVM
49
+ */
50
+ export declare const delegatedSignAuthorization: (client: DelegatedEvmWalletClient, { walletId, walletApiKey, keyShare, authorization, }: {
51
+ walletId: string;
52
+ walletApiKey: string;
53
+ keyShare: ServerKeyShare;
54
+ authorization: any;
55
+ }) => Promise<any>;
38
56
  /**
39
57
  * Revoke delegation - delegates to the node package
40
58
  */
@@ -1 +1 @@
1
- {"version":3,"file":"delegatedClient.d.ts","sourceRoot":"","sources":["../../packages/src/delegatedClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,MAAM,CAAC;AAG1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC7D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,sEAMxC,wBAAwB,KAAG,wBAe7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,wBAAwB,oEAQ7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,KACA,OAAO,CAAC,MAAM,CA0BhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,WAC3B,wBAAwB,sDAM7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,uBAAuB,CAAC;CACtC,KACA,OAAO,CAAC,MAAM,CA8ChB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,WACnB,wBAAwB,UACxB,GAAG,kBAGZ,CAAC"}
1
+ {"version":3,"file":"delegatedClient.d.ts","sourceRoot":"","sources":["../../packages/src/delegatedClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACf,MAAM,MAAM,CAAC;AAQd,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,qBAAqB,GAAG;IAC7D,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,sEAMxC,wBAAwB,KAAG,wBAe7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,WACvB,wBAAwB,oEAQ7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,KACA,OAAO,CAAC,MAAM,CA0BhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,WAC3B,wBAAwB,sDAM7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,uBAAuB,CAAC;CACtC,KACA,OAAO,CAAC,MAAM,CA8ChB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,WACzB,wBAAwB,oDAM7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;CACtB,KACA,OAAO,CAAC,MAAM,CA6BhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,WAC7B,wBAAwB,wDAM7B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,GAAG,CAAC;CACpB,KACA,OAAO,CAAC,GAAG,CA+Bb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,WACnB,wBAAwB,UACxB,GAAG,kBAGZ,CAAC"}
package/src/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './client/index.js';
2
2
  export * from './delegatedClient.js';
3
+ export * from './zerodev/index.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { EvmClientBase, KernelClient, ZeroDevKernelOptions } from './types.js';
2
+ export declare class DynamicEvmZeroDevClient {
3
+ private readonly dynamicClient;
4
+ private readonly evmClient;
5
+ constructor(evmClient: EvmClientBase);
6
+ initialize(): Promise<void>;
7
+ /**
8
+ * Get network data by networkId from project configuration
9
+ */
10
+ private getNetworkData;
11
+ createKernelClientForAddress(options: ZeroDevKernelOptions): Promise<KernelClient>;
12
+ private createKernelAccountWithCustomSigner;
13
+ }
14
+ export declare const createZerodevClient: (evmClient: EvmClientBase) => Promise<DynamicEvmZeroDevClient>;
15
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/zerodev/client.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAGpB,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,SAAS,EAAE,aAAa;IAsB9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAehB,4BAA4B,CAChC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC;YAuEV,mCAAmC;CAoElD;AAED,eAAO,MAAM,mBAAmB,cACnB,aAAa,KACvB,OAAO,CAAC,uBAAuB,CAMjC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createZerodevClient } from './client.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/zerodev/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface StorageAdapter {
2
+ getItem: (key: string) => Promise<string | null>;
3
+ setItem: (key: string, value: string) => Promise<void>;
4
+ removeItem: (key: string) => Promise<void>;
5
+ }
6
+ export declare class MemoryStorageAdapter implements StorageAdapter {
7
+ private readonly store;
8
+ private readonly jwt;
9
+ constructor(jwt: string | null);
10
+ getItem(key: string): Promise<string | null>;
11
+ setItem(key: string, value: string): Promise<void>;
12
+ removeItem(key: string): Promise<void>;
13
+ clear(): void;
14
+ get size(): number;
15
+ }
16
+ export declare const createMemoryStorageAdapter: (jwt: string | null) => StorageAdapter;
17
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/zerodev/storage.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;gBAExB,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkB5C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAO,MAAM,0BAA0B,QAChC,MAAM,GAAG,IAAI,KACjB,cAEF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ServerKeyShare } from '@dynamic-labs-wallet/node';
2
+ import type { ZerodevBundlerProvider } from '@dynamic-labs/sdk-api-core';
3
+ import type { KernelAccountClient } from '@zerodev/sdk';
4
+ import type { Chain, Client, Hex, RpcSchema, Transport } from 'viem';
5
+ import type { SmartAccount } from 'viem/account-abstraction';
6
+ import type { DynamicEvmWalletClient } from '../client/client.js';
7
+ import type { createDelegatedEvmWalletClient, DelegatedEvmWalletClient } from '../delegatedClient.js';
8
+ export type ZeroDevKernelOptions = {
9
+ address: `0x${string}`;
10
+ networkId: string;
11
+ password?: string;
12
+ externalServerKeyShares?: ServerKeyShare[];
13
+ delegated?: {
14
+ delegatedClient: ReturnType<typeof createDelegatedEvmWalletClient>;
15
+ walletId: string;
16
+ walletApiKey: string;
17
+ keyShare: ServerKeyShare;
18
+ };
19
+ withSponsorship?: boolean;
20
+ bundlerProvider?: ZerodevBundlerProvider;
21
+ bundlerRpc?: string;
22
+ paymasterRpc?: string;
23
+ gasTokenAddress?: Hex;
24
+ };
25
+ export type KernelClient = KernelAccountClient<Transport, Chain, SmartAccount, Client, RpcSchema>;
26
+ export type EvmClientBase = DynamicEvmWalletClient | DelegatedEvmWalletClient;
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/zerodev/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3C,SAAS,CAAC,EAAE;QACV,eAAe,EAAE,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC;QACnE,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,GAAG,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,mBAAmB,CAC5C,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,EACN,SAAS,CACV,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,wBAAwB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ServerKeyShare } from '@dynamic-labs-wallet/node';
2
+ import type { Account } from 'viem';
3
+ import { type createDelegatedEvmWalletClient } from '../delegatedClient.js';
4
+ import type { EvmClientBase } from './types.js';
5
+ export declare const createViemSignerAdapter: ({ evmClient, accountAddress, password, externalServerKeyShares, delegated, }: {
6
+ evmClient: EvmClientBase;
7
+ accountAddress: `0x${string}`;
8
+ password?: string;
9
+ externalServerKeyShares?: ServerKeyShare[];
10
+ delegated?: {
11
+ delegatedClient: ReturnType<typeof createDelegatedEvmWalletClient>;
12
+ walletId: string;
13
+ walletApiKey: string;
14
+ keyShare: ServerKeyShare;
15
+ };
16
+ }) => Account;
17
+ //# sourceMappingURL=viemSignerAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viemSignerAdapter.d.ts","sourceRoot":"","sources":["../../src/zerodev/viemSignerAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,MAAM,CAAC;AAGpD,OAAO,EACL,KAAK,8BAA8B,EAKpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,uBAAuB,iFAMjC;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uBAAuB,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3C,SAAS,CAAC,EAAE;QACV,eAAe,EAAE,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC;QACnE,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,cAAc,CAAC;KAC1B,CAAC;CACH,KAAG,OAsGH,CAAC"}