@dynamic-labs-wallet/node-evm 0.0.0-beta.271.2 → 0.0.0-beta.290.2

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
@@ -53,7 +53,7 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
53
53
  transport: viem.http(rpcUrl)
54
54
  });
55
55
  }
56
- async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError }) {
56
+ async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
57
57
  try {
58
58
  let ceremonyCeremonyCompleteResolver;
59
59
  const ceremonyCompletePromise = new Promise((resolve)=>{
@@ -96,9 +96,11 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
96
96
  await this.storeEncryptedBackupByWalletWithRetry({
97
97
  accountAddress,
98
98
  externalServerKeyShares,
99
- password
99
+ password,
100
+ signedSessionId
100
101
  });
101
102
  return {
103
+ walletId: this.walletMap[accountAddress].walletId,
102
104
  accountAddress,
103
105
  rawPublicKey,
104
106
  publicKeyHex,
@@ -109,15 +111,17 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
109
111
  throw new Error(ERROR_CREATE_WALLET_ACCOUNT);
110
112
  }
111
113
  }
112
- async signMessage({ message, accountAddress, password = undefined }) {
114
+ async signMessage({ message, accountAddress, password = undefined, signedSessionId, externalServerKeyShares }) {
113
115
  await this.verifyPassword({
114
116
  accountAddress,
115
117
  password,
116
- walletOperation: node.WalletOperation.SIGN_MESSAGE
118
+ walletOperation: node.WalletOperation.SIGN_MESSAGE,
119
+ signedSessionId
117
120
  });
118
121
  await this.getWallet({
119
122
  accountAddress,
120
- walletOperation: node.WalletOperation.SIGN_MESSAGE
123
+ walletOperation: node.WalletOperation.SIGN_MESSAGE,
124
+ signedSessionId
121
125
  });
122
126
  try {
123
127
  if (!accountAddress) {
@@ -130,7 +134,9 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
130
134
  message: formattedMessage,
131
135
  accountAddress: accountAddress,
132
136
  chainName: this.chainName,
133
- password
137
+ password,
138
+ signedSessionId,
139
+ externalServerKeyShares
134
140
  });
135
141
  // Serialize the signature
136
142
  const serializedSignature = serializeECDSASignature(signatureEcdsa);
@@ -157,11 +163,12 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
157
163
  throw new Error(ERROR_VERIFY_MESSAGE_SIGNATURE);
158
164
  }
159
165
  }
160
- async signTransaction({ senderAddress, transaction, password = undefined }) {
166
+ async signTransaction({ senderAddress, transaction, password = undefined, signedSessionId, externalServerKeyShares }) {
161
167
  await this.verifyPassword({
162
168
  accountAddress: senderAddress,
163
169
  password,
164
- walletOperation: node.WalletOperation.SIGN_TRANSACTION
170
+ walletOperation: node.WalletOperation.SIGN_TRANSACTION,
171
+ signedSessionId
165
172
  });
166
173
  const serializedTx = viem.serializeTransaction(transaction);
167
174
  const serializedTxBytes = Uint8Array.from(Buffer.from(serializedTx.slice(2), 'hex'));
@@ -173,7 +180,9 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
173
180
  message: serializedTxBytes,
174
181
  accountAddress: senderAddress,
175
182
  chainName: this.chainName,
176
- password
183
+ password,
184
+ signedSessionId,
185
+ externalServerKeyShares
177
186
  });
178
187
  if (!('r' in signatureEcdsa && 's' in signatureEcdsa && 'v' in signatureEcdsa)) {
179
188
  throw new Error('Invalid signature format returned from MPC signing');
@@ -194,16 +203,19 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
194
203
  throw error;
195
204
  }
196
205
  }
197
- async exportPrivateKey({ accountAddress, password = undefined }) {
206
+ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, externalServerKeyShares }) {
198
207
  await this.verifyPassword({
199
208
  accountAddress,
200
209
  password,
201
- walletOperation: node.WalletOperation.EXPORT_PRIVATE_KEY
210
+ walletOperation: node.WalletOperation.EXPORT_PRIVATE_KEY,
211
+ signedSessionId
202
212
  });
203
213
  const { derivedPrivateKey } = await this.exportKey({
204
214
  accountAddress,
205
215
  chainName: this.chainName,
206
- password
216
+ password,
217
+ signedSessionId,
218
+ externalServerKeyShares
207
219
  });
208
220
  return {
209
221
  derivedPrivateKey
@@ -219,7 +231,7 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
219
231
  derivedPrivateKey
220
232
  };
221
233
  }
222
- async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
234
+ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
223
235
  let ceremonyCeremonyCompleteResolver;
224
236
  const ceremonyCompletePromise = new Promise((resolve)=>{
225
237
  ceremonyCeremonyCompleteResolver = resolve;
@@ -254,7 +266,8 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
254
266
  await this.storeEncryptedBackupByWalletWithRetry({
255
267
  accountAddress,
256
268
  externalServerKeyShares,
257
- password
269
+ password,
270
+ signedSessionId
258
271
  });
259
272
  return {
260
273
  accountAddress,
package/index.esm.js CHANGED
@@ -51,7 +51,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
51
51
  transport: http(rpcUrl)
52
52
  });
53
53
  }
54
- async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError }) {
54
+ async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
55
55
  try {
56
56
  let ceremonyCeremonyCompleteResolver;
57
57
  const ceremonyCompletePromise = new Promise((resolve)=>{
@@ -94,9 +94,11 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
94
94
  await this.storeEncryptedBackupByWalletWithRetry({
95
95
  accountAddress,
96
96
  externalServerKeyShares,
97
- password
97
+ password,
98
+ signedSessionId
98
99
  });
99
100
  return {
101
+ walletId: this.walletMap[accountAddress].walletId,
100
102
  accountAddress,
101
103
  rawPublicKey,
102
104
  publicKeyHex,
@@ -107,15 +109,17 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
107
109
  throw new Error(ERROR_CREATE_WALLET_ACCOUNT);
108
110
  }
109
111
  }
110
- async signMessage({ message, accountAddress, password = undefined }) {
112
+ async signMessage({ message, accountAddress, password = undefined, signedSessionId, externalServerKeyShares }) {
111
113
  await this.verifyPassword({
112
114
  accountAddress,
113
115
  password,
114
- walletOperation: WalletOperation.SIGN_MESSAGE
116
+ walletOperation: WalletOperation.SIGN_MESSAGE,
117
+ signedSessionId
115
118
  });
116
119
  await this.getWallet({
117
120
  accountAddress,
118
- walletOperation: WalletOperation.SIGN_MESSAGE
121
+ walletOperation: WalletOperation.SIGN_MESSAGE,
122
+ signedSessionId
119
123
  });
120
124
  try {
121
125
  if (!accountAddress) {
@@ -128,7 +132,9 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
128
132
  message: formattedMessage,
129
133
  accountAddress: accountAddress,
130
134
  chainName: this.chainName,
131
- password
135
+ password,
136
+ signedSessionId,
137
+ externalServerKeyShares
132
138
  });
133
139
  // Serialize the signature
134
140
  const serializedSignature = serializeECDSASignature(signatureEcdsa);
@@ -155,11 +161,12 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
155
161
  throw new Error(ERROR_VERIFY_MESSAGE_SIGNATURE);
156
162
  }
157
163
  }
158
- async signTransaction({ senderAddress, transaction, password = undefined }) {
164
+ async signTransaction({ senderAddress, transaction, password = undefined, signedSessionId, externalServerKeyShares }) {
159
165
  await this.verifyPassword({
160
166
  accountAddress: senderAddress,
161
167
  password,
162
- walletOperation: WalletOperation.SIGN_TRANSACTION
168
+ walletOperation: WalletOperation.SIGN_TRANSACTION,
169
+ signedSessionId
163
170
  });
164
171
  const serializedTx = serializeTransaction(transaction);
165
172
  const serializedTxBytes = Uint8Array.from(Buffer.from(serializedTx.slice(2), 'hex'));
@@ -171,7 +178,9 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
171
178
  message: serializedTxBytes,
172
179
  accountAddress: senderAddress,
173
180
  chainName: this.chainName,
174
- password
181
+ password,
182
+ signedSessionId,
183
+ externalServerKeyShares
175
184
  });
176
185
  if (!('r' in signatureEcdsa && 's' in signatureEcdsa && 'v' in signatureEcdsa)) {
177
186
  throw new Error('Invalid signature format returned from MPC signing');
@@ -192,16 +201,19 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
192
201
  throw error;
193
202
  }
194
203
  }
195
- async exportPrivateKey({ accountAddress, password = undefined }) {
204
+ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, externalServerKeyShares }) {
196
205
  await this.verifyPassword({
197
206
  accountAddress,
198
207
  password,
199
- walletOperation: WalletOperation.EXPORT_PRIVATE_KEY
208
+ walletOperation: WalletOperation.EXPORT_PRIVATE_KEY,
209
+ signedSessionId
200
210
  });
201
211
  const { derivedPrivateKey } = await this.exportKey({
202
212
  accountAddress,
203
213
  chainName: this.chainName,
204
- password
214
+ password,
215
+ signedSessionId,
216
+ externalServerKeyShares
205
217
  });
206
218
  return {
207
219
  derivedPrivateKey
@@ -217,7 +229,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
217
229
  derivedPrivateKey
218
230
  };
219
231
  }
220
- async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
232
+ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
221
233
  let ceremonyCeremonyCompleteResolver;
222
234
  const ceremonyCompletePromise = new Promise((resolve)=>{
223
235
  ceremonyCeremonyCompleteResolver = resolve;
@@ -252,7 +264,8 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
252
264
  await this.storeEncryptedBackupByWalletWithRetry({
253
265
  accountAddress,
254
266
  externalServerKeyShares,
255
- password
267
+ password,
268
+ signedSessionId
256
269
  });
257
270
  return {
258
271
  accountAddress,
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/node-evm",
3
- "version": "0.0.0-beta.271.2",
3
+ "version": "0.0.0-beta.290.2",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "@dynamic-labs-wallet/node": "0.0.0-beta.271.2"
6
+ "@dynamic-labs-wallet/node": "0.0.0-beta.290.2"
7
7
  },
8
8
  "publishConfig": {
9
9
  "access": "public"
@@ -7,34 +7,42 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
7
7
  chain: Chain;
8
8
  rpcUrl?: string;
9
9
  }): PublicClient;
10
- createWalletAccount({ thresholdSignatureScheme, password, onError, }: {
10
+ createWalletAccount({ thresholdSignatureScheme, password, onError, signedSessionId, }: {
11
11
  thresholdSignatureScheme: ThresholdSignatureScheme;
12
12
  password?: string;
13
13
  onError?: (error: Error) => void;
14
+ signedSessionId: string;
14
15
  }): Promise<{
15
16
  accountAddress: string;
16
17
  publicKeyHex: string;
17
18
  rawPublicKey: EcdsaPublicKey | Uint8Array | undefined;
18
19
  externalServerKeyShares: ServerKeyShare[];
20
+ walletId: string;
19
21
  }>;
20
- signMessage({ message, accountAddress, password, }: {
22
+ signMessage({ message, accountAddress, password, signedSessionId, externalServerKeyShares, }: {
21
23
  message: string;
22
24
  accountAddress: string;
23
25
  password?: string;
26
+ signedSessionId: string;
27
+ externalServerKeyShares: ServerKeyShare[];
24
28
  }): Promise<`0x${string}`>;
25
29
  verifyMessageSignature({ accountAddress, message, signature, }: {
26
30
  accountAddress: string;
27
31
  message: SignableMessage;
28
32
  signature: any;
29
33
  }): Promise<boolean>;
30
- signTransaction({ senderAddress, transaction, password, }: {
34
+ signTransaction({ senderAddress, transaction, password, signedSessionId, externalServerKeyShares, }: {
31
35
  senderAddress: string;
32
36
  transaction: TransactionSerializable;
33
37
  password?: string;
38
+ signedSessionId: string;
39
+ externalServerKeyShares: ServerKeyShare[];
34
40
  }): Promise<string>;
35
- exportPrivateKey({ accountAddress, password, }: {
41
+ exportPrivateKey({ accountAddress, password, signedSessionId, externalServerKeyShares, }: {
36
42
  accountAddress: string;
37
43
  password?: string;
44
+ signedSessionId: string;
45
+ externalServerKeyShares: ServerKeyShare[];
38
46
  }): Promise<{
39
47
  derivedPrivateKey: string | undefined;
40
48
  }>;
@@ -44,12 +52,13 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
44
52
  }): Promise<{
45
53
  derivedPrivateKey: string | undefined;
46
54
  }>;
47
- importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError, }: {
55
+ importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError, signedSessionId, }: {
48
56
  privateKey: string;
49
57
  chainName: string;
50
58
  thresholdSignatureScheme: ThresholdSignatureScheme;
51
59
  password?: string;
52
60
  onError?: (error: Error) => void;
61
+ signedSessionId: string;
53
62
  }): Promise<{
54
63
  accountAddress: string;
55
64
  publicKeyHex: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EAGzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,KAAK,EAEV,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,MAAM,CAAC;AAed,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;gBAEf,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,KAAK,GACN,EAAE,wBAAwB;IAS3B,sBAAsB,CAAC,EACrB,KAAK,EACL,MAAM,GACP,EAAE;QACD,KAAK,EAAE,KAAK,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,YAAY;IAOV,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;QACtD,uBAAuB,EAAE,cAAc,EAAE,CAAC;KAC3C,CAAC;IAiEI,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAqCK,sBAAsB,CAAC,EAC3B,cAAc,EACd,OAAO,EACP,SAAS,GACV,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,eAAe,CAAC;QACzB,SAAS,EAAE,GAAG,CAAC;KAChB;IAmBK,eAAe,CAAC,EACpB,aAAa,EACb,WAAW,EACX,QAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,uBAAuB,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDb,gBAAgB,CAAC,EACrB,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;IAeK,uBAAuB,CAAC,EAC5B,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,EAAE,CAAC;QACvD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;;;IASK,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;QACtD,uBAAuB,EAAE,cAAc,EAAE,CAAC;KAC3C,CAAC;IAqDI,aAAa;CAOpB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}