@dynamic-labs-wallet/evm 1.1.34 → 1.1.36

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 CHANGED
@@ -98,6 +98,7 @@ const mapTransactionToEvmTransaction = (transaction)=>{
98
98
  };
99
99
  };
100
100
 
101
+ /** The most fee attempts one sign-and-broadcast request carries. */ const MAX_SIGN_AND_BROADCAST_FEES = 3;
101
102
  class DynamicEvmWalletClient extends browser.DynamicWalletClient {
102
103
  createViemPublicClient({ chain, rpcUrl }) {
103
104
  return viem.createPublicClient({
@@ -296,6 +297,52 @@ class DynamicEvmWalletClient extends browser.DynamicWalletClient {
296
297
  throw error;
297
298
  }
298
299
  }
300
+ /**
301
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
302
+ *
303
+ * @param params.senderAddress - The wallet's address.
304
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
305
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
306
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
307
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
308
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
309
+ * @param params.password - The wallet's backup password, if it has one.
310
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
311
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
312
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
313
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
314
+ * @param params.onError - Called with the failure's message, never the raw error.
315
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
316
+ * @returns The transaction record.
317
+ * @throws Error when `fees` has no entry or more than three.
318
+ */ async signAndBroadcastTransaction({ senderAddress, transaction, fees, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext }) {
319
+ if (fees.length === 0 || fees.length > MAX_SIGN_AND_BROADCAST_FEES) {
320
+ throw new Error(`Sign and broadcast takes 1 to ${MAX_SIGN_AND_BROADCAST_FEES} fees, got ${fees.length}`);
321
+ }
322
+ const transactions = fees.map((fee)=>_extends({}, transaction, fee));
323
+ const messages = transactions.map((attempt)=>this.prepareSignTransaction({
324
+ transaction: attempt
325
+ }));
326
+ const contexts = transactions.map((attempt)=>({
327
+ evmTransaction: mapTransactionToEvmTransaction(attempt)
328
+ }));
329
+ return await this.signAndBroadcast({
330
+ accountAddress: senderAddress,
331
+ chainName: this.chainName,
332
+ contexts,
333
+ messages,
334
+ password,
335
+ signedSessionId,
336
+ mfaToken,
337
+ elevatedAccessToken,
338
+ approvalQuorum,
339
+ requestedCertainty,
340
+ externalReference,
341
+ idempotencyKey,
342
+ onError,
343
+ traceContext
344
+ });
345
+ }
299
346
  async signTypedData({ accountAddress, typedData, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext }) {
300
347
  await this.verifyPassword({
301
348
  accountAddress,
@@ -346,7 +393,7 @@ class DynamicEvmWalletClient extends browser.DynamicWalletClient {
346
393
  publicKeyHex
347
394
  };
348
395
  }
349
- async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, traceContext }) {
396
+ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, proposalId, traceContext }) {
350
397
  await this.verifyPassword({
351
398
  accountAddress,
352
399
  password,
@@ -359,6 +406,8 @@ class DynamicEvmWalletClient extends browser.DynamicWalletClient {
359
406
  signedSessionId,
360
407
  mfaToken,
361
408
  elevatedAccessToken,
409
+ approvalQuorum,
410
+ proposalId,
362
411
  traceContext
363
412
  });
364
413
  return derivedPrivateKey;
package/index.esm.js CHANGED
@@ -96,6 +96,7 @@ const mapTransactionToEvmTransaction = (transaction)=>{
96
96
  };
97
97
  };
98
98
 
99
+ /** The most fee attempts one sign-and-broadcast request carries. */ const MAX_SIGN_AND_BROADCAST_FEES = 3;
99
100
  class DynamicEvmWalletClient extends DynamicWalletClient {
100
101
  createViemPublicClient({ chain, rpcUrl }) {
101
102
  return createPublicClient({
@@ -294,6 +295,52 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
294
295
  throw error;
295
296
  }
296
297
  }
298
+ /**
299
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
300
+ *
301
+ * @param params.senderAddress - The wallet's address.
302
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
303
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
304
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
305
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
306
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
307
+ * @param params.password - The wallet's backup password, if it has one.
308
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
309
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
310
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
311
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
312
+ * @param params.onError - Called with the failure's message, never the raw error.
313
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
314
+ * @returns The transaction record.
315
+ * @throws Error when `fees` has no entry or more than three.
316
+ */ async signAndBroadcastTransaction({ senderAddress, transaction, fees, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext }) {
317
+ if (fees.length === 0 || fees.length > MAX_SIGN_AND_BROADCAST_FEES) {
318
+ throw new Error(`Sign and broadcast takes 1 to ${MAX_SIGN_AND_BROADCAST_FEES} fees, got ${fees.length}`);
319
+ }
320
+ const transactions = fees.map((fee)=>_extends({}, transaction, fee));
321
+ const messages = transactions.map((attempt)=>this.prepareSignTransaction({
322
+ transaction: attempt
323
+ }));
324
+ const contexts = transactions.map((attempt)=>({
325
+ evmTransaction: mapTransactionToEvmTransaction(attempt)
326
+ }));
327
+ return await this.signAndBroadcast({
328
+ accountAddress: senderAddress,
329
+ chainName: this.chainName,
330
+ contexts,
331
+ messages,
332
+ password,
333
+ signedSessionId,
334
+ mfaToken,
335
+ elevatedAccessToken,
336
+ approvalQuorum,
337
+ requestedCertainty,
338
+ externalReference,
339
+ idempotencyKey,
340
+ onError,
341
+ traceContext
342
+ });
343
+ }
297
344
  async signTypedData({ accountAddress, typedData, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext }) {
298
345
  await this.verifyPassword({
299
346
  accountAddress,
@@ -344,7 +391,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
344
391
  publicKeyHex
345
392
  };
346
393
  }
347
- async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, traceContext }) {
394
+ async exportPrivateKey({ accountAddress, password = undefined, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, proposalId, traceContext }) {
348
395
  await this.verifyPassword({
349
396
  accountAddress,
350
397
  password,
@@ -357,6 +404,8 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
357
404
  signedSessionId,
358
405
  mfaToken,
359
406
  elevatedAccessToken,
407
+ approvalQuorum,
408
+ proposalId,
360
409
  traceContext
361
410
  });
362
411
  return derivedPrivateKey;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/evm",
3
- "version": "1.1.34",
3
+ "version": "1.1.36",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@dynamic-labs-wallet/browser": "1.1.34",
8
- "@dynamic-labs-wallet/core": "1.1.34",
7
+ "@dynamic-labs-wallet/browser": "1.1.36",
8
+ "@dynamic-labs-wallet/core": "1.1.36",
9
9
  "@dynamic-labs/sdk-api-core": "0.50.0"
10
10
  },
11
11
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
- import { DynamicWalletClient, type EcdsaKeygenResult, type EcdsaPublicKey, type Ed25519KeygenResult, type ThresholdSignatureScheme, type TraceContext, type RequestWithElevatedAccessToken, type BaseSignParams } from '@dynamic-labs-wallet/browser';
2
- import { type Chain, type PublicClient, type SignableMessage, type TransactionSerializable, type TypedData } from 'viem';
1
+ import { DynamicWalletClient, type EcdsaKeygenResult, type EcdsaPublicKey, type Ed25519KeygenResult, type ThresholdSignatureScheme, type TraceContext, type RequestWithElevatedAccessToken, type BaseSignParams, type SignAndBroadcastResponse, type ExportApprovalQuorumRequest } from '@dynamic-labs-wallet/browser';
2
+ import { type Address, type Chain, type Hex, type PublicClient, type SignableMessage, type TransactionSerializable, type TypedData } from 'viem';
3
3
  export declare class DynamicEvmWalletClient extends DynamicWalletClient {
4
4
  readonly chainName = "EVM";
5
5
  createViemPublicClient({ chain, rpcUrl }: {
@@ -45,6 +45,46 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
45
45
  senderAddress: string;
46
46
  transaction: TransactionSerializable;
47
47
  } & BaseSignParams): Promise<string>;
48
+ /**
49
+ * Signs the transaction at each fee for Dynamic to broadcast: the cheapest is sent first and the next replaces it if it stalls. Each fee is its own signing ceremony.
50
+ *
51
+ * @param params.senderAddress - The wallet's address.
52
+ * @param params.transaction - The transaction without a fee: chain id, recipient, nonce, gas limit, and optionally value and data.
53
+ * @param params.fees - One to three prices for the same transaction, cheapest first, all in one style (`gasPrice`, or `maxFeePerGas` with `maxPriorityFeePerGas`).
54
+ * @param params.requestedCertainty - How sure to be before calling it confirmed: `fast`, `safe` or `final`, or `chain:` plus a chain-specific value. Defaults to `safe`.
55
+ * @param params.externalReference - Your own label, returned on every event. Not unique.
56
+ * @param params.idempotencyKey - Makes a retry safe: the same key replays the stored answer instead of sending twice. A new one is made when omitted.
57
+ * @param params.password - The wallet's backup password, if it has one.
58
+ * @param params.signedSessionId - The signed-in session, used to unlock the wallet's key share.
59
+ * @param params.mfaToken - Proof of the user's multi-factor check, when the wallet needs one.
60
+ * @param params.elevatedAccessToken - Proof of a recent re-login, when the wallet needs one.
61
+ * @param params.approvalQuorum - Approvers' consent for a governed wallet, sent on the retry after `intent_required`.
62
+ * @param params.onError - Called with the failure's message, never the raw error.
63
+ * @param params.traceContext - Ties this call's logs to the server's, across retries. Created when omitted.
64
+ * @returns The transaction record.
65
+ * @throws Error when `fees` has no entry or more than three.
66
+ */
67
+ signAndBroadcastTransaction({ senderAddress, transaction, fees, password, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, requestedCertainty, externalReference, idempotencyKey, onError, traceContext, }: {
68
+ senderAddress: string;
69
+ transaction: {
70
+ chainId: number;
71
+ to: Address;
72
+ nonce: number;
73
+ gas: bigint;
74
+ value?: bigint;
75
+ data?: Hex;
76
+ };
77
+ /** Cheapest first, all in one style. */
78
+ fees: Array<{
79
+ gasPrice: bigint;
80
+ } | {
81
+ maxFeePerGas: bigint;
82
+ maxPriorityFeePerGas: bigint;
83
+ }>;
84
+ requestedCertainty?: string;
85
+ externalReference?: string;
86
+ idempotencyKey?: string;
87
+ } & Pick<BaseSignParams, 'password' | 'signedSessionId' | 'mfaToken' | 'elevatedAccessToken' | 'approvalQuorum' | 'onError' | 'traceContext'>): Promise<SignAndBroadcastResponse>;
48
88
  signTypedData({ accountAddress, typedData, password, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, onError, traceContext, }: {
49
89
  accountAddress: string;
50
90
  typedData: TypedData;
@@ -55,11 +95,15 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
55
95
  accountAddress: `0x${string}`;
56
96
  publicKeyHex: string;
57
97
  };
58
- exportPrivateKey({ accountAddress, password, signedSessionId, mfaToken, elevatedAccessToken, traceContext, }: RequestWithElevatedAccessToken<{
98
+ exportPrivateKey({ accountAddress, password, signedSessionId, mfaToken, elevatedAccessToken, approvalQuorum, proposalId, traceContext, }: RequestWithElevatedAccessToken<{
59
99
  accountAddress: string;
60
100
  password?: string;
61
101
  signedSessionId: string;
62
102
  mfaToken?: string;
103
+ /** The initiator's signed export Intent, from `prepareExportIntent`. */
104
+ approvalQuorum?: ExportApprovalQuorumRequest;
105
+ /** The approved export proposal being redeemed, from the consent error the export call raised. */
106
+ proposalId?: string;
63
107
  traceContext?: TraceContext;
64
108
  }>): Promise<string | undefined>;
65
109
  offlineExportPrivateKey({ keyShares, derivationPath, }: {
@@ -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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"}