@toruslabs/ethereum-controllers 8.4.2 → 8.4.4

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.
@@ -33,7 +33,3 @@
33
33
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
34
34
 
35
35
  /*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */
36
-
37
- /*! scure-bip32 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */
38
-
39
- /*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */
@@ -147,7 +147,7 @@ class AccountAbstractionController extends baseControllers.BaseController {
147
147
  calls: [{
148
148
  to: txParams.to,
149
149
  // Explicit conversation required to avoid value being passed as hex
150
- value: BigInt(txParams.value),
150
+ value: txParams.value ? BigInt(txParams.value) : undefined,
151
151
  data: txParams.data
152
152
  }],
153
153
  maxFeePerGas: txParams.maxFeePerGas ? BigInt(txParams.maxFeePerGas) : undefined,
@@ -186,6 +186,42 @@ class AccountAbstractionController extends baseControllers.BaseController {
186
186
  });
187
187
  return txReceipt.receipt.transactionHash;
188
188
  }
189
+ async signTransaction(id, tx, address) {
190
+ var _txParams$chainId2;
191
+ if (address.toLowerCase() !== this.smartAccount.address.toLowerCase()) {
192
+ throw new Error("Invalid address");
193
+ }
194
+ const txParams = tx;
195
+ const userOpMeta = {
196
+ transactionParams: txParams,
197
+ chainId: (_txParams$chainId2 = txParams.chainId) !== null && _txParams$chainId2 !== void 0 ? _txParams$chainId2 : this.getProviderConfig().chainId,
198
+ createdAt: new Date(),
199
+ status: baseControllers.TransactionStatus.approved
200
+ };
201
+ this.updateUserOpMeta(id, userOpMeta);
202
+ const request = await this.bundlerClient.prepareUserOperation({
203
+ account: this.smartAccount,
204
+ calls: [{
205
+ to: txParams.to,
206
+ // Explicit conversation required to avoid value being passed as hex
207
+ value: txParams.value ? BigInt(txParams.value) : undefined,
208
+ data: txParams.data
209
+ }],
210
+ maxFeePerGas: txParams.maxFeePerGas ? BigInt(txParams.maxFeePerGas) : undefined,
211
+ maxPriorityFeePerGas: txParams.maxPriorityFeePerGas ? BigInt(txParams.maxPriorityFeePerGas) : undefined,
212
+ callGasLimit: txParams.callGasLimit ? BigInt(txParams.callGasLimit) : undefined,
213
+ preVerificationGas: txParams.preVerificationGas ? BigInt(txParams.preVerificationGas) : undefined,
214
+ verificationGasLimit: txParams.verificationGasLimit ? BigInt(txParams.verificationGasLimit) : undefined,
215
+ paymasterVerificationGasLimit: txParams.paymasterVerificationGasLimit ? BigInt(txParams.paymasterVerificationGasLimit) : undefined,
216
+ paymasterPostOpGasLimit: txParams.paymasterPostOpGasLimit ? BigInt(txParams.paymasterPostOpGasLimit) : undefined
217
+ });
218
+ const signature = await this.smartAccount.signUserOperation(request);
219
+ this.updateUserOpMeta(id, {
220
+ signature,
221
+ status: baseControllers.TransactionStatus.signed
222
+ });
223
+ return signature;
224
+ }
189
225
  async estimateGas(txParams, address) {
190
226
  if (address.toLowerCase() !== this.smartAccount.address.toLowerCase()) throw new Error("Invalid address");
191
227
  const calls = [{
@@ -290,11 +290,45 @@ function createRequestAccountsMiddleware({
290
290
  return undefined;
291
291
  });
292
292
  }
293
+ /**
294
+ * Middleware to handle bundler/paymaster rpc method
295
+ */
296
+ function createAAMiddleware({
297
+ bundlerUrl,
298
+ paymasterUrl
299
+ }) {
300
+ // forward request to bundler/paymaster
301
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
302
+ const middlewares = [];
303
+ const bundlerFetchMiddleware = baseControllers.createFetchMiddleware({
304
+ rpcTarget: bundlerUrl
305
+ });
306
+ // NOTE: bundler/paymaster rpc only accept number as request id, we might need to handle that here if client doesn't handle request id themselves
307
+ middlewares.push((request, response, next, end) => {
308
+ if (!constants.BUNDLER_METHOD_TYPES.includes(request.method)) {
309
+ return next();
310
+ }
311
+ bundlerFetchMiddleware(request, response, next, end);
312
+ });
313
+ if (paymasterUrl) {
314
+ const paymasterFetchMiddleware = baseControllers.createFetchMiddleware({
315
+ rpcTarget: paymasterUrl
316
+ });
317
+ middlewares.push((request, response, next, end) => {
318
+ if (!constants.PAYMASTER_METHOD_TYPES.includes(request.method)) {
319
+ return next();
320
+ }
321
+ paymasterFetchMiddleware(request, response, next, end);
322
+ });
323
+ }
324
+ return auth.mergeMiddleware(middlewares);
325
+ }
293
326
  function createEthereumMiddleware(providerHandlers) {
294
327
  const {
295
328
  requestAccounts,
296
329
  getAccounts,
297
330
  getPrivateKey,
331
+ getPublicKey,
298
332
  processTransaction,
299
333
  processSignTransaction,
300
334
  processEstimateUserOperationGas,
@@ -307,16 +341,17 @@ function createEthereumMiddleware(providerHandlers) {
307
341
  processWalletSwitchChain,
308
342
  processAddEthereumChain,
309
343
  getProviderState,
344
+ aaConfig,
310
345
  version
311
346
  } = providerHandlers;
312
- return auth.mergeMiddleware([auth.createScaffoldMiddleware({
347
+ const middlewares = [auth.createScaffoldMiddleware({
313
348
  version,
314
349
  [baseControllers.PROVIDER_JRPC_METHODS.GET_PROVIDER_STATE]: getProviderState
315
350
  }), createRequestAccountsMiddleware({
316
351
  requestAccounts
317
352
  }), createGetAccountsMiddleware({
318
353
  getAccounts
319
- }), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.ETH_PRIVATE_KEY, getPrivateKey), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.PRIVATE_KEY, getPrivateKey), createProcessTransactionMiddleware({
354
+ }), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.ETH_PRIVATE_KEY, getPrivateKey), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.PRIVATE_KEY, getPrivateKey), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.ETH_PUBLIC_KEY, getPublicKey), baseControllers.createGenericJRPCMiddleware(constants.METHOD_TYPES.PUBLIC_KEY, getPublicKey), createProcessTransactionMiddleware({
320
355
  processTransaction
321
356
  }), createProcessSignTransactionMiddleware({
322
357
  processSignTransaction
@@ -338,9 +373,17 @@ function createEthereumMiddleware(providerHandlers) {
338
373
  processWalletSwitchChain
339
374
  }), createProcessAddEthereumChain({
340
375
  processAddEthereumChain
341
- })]);
376
+ })];
377
+ if (aaConfig) {
378
+ middlewares.push(createAAMiddleware({
379
+ bundlerUrl: aaConfig.bundlerUrl,
380
+ paymasterUrl: aaConfig.paymasterUrl
381
+ }));
382
+ }
383
+ return auth.mergeMiddleware(middlewares);
342
384
  }
343
385
 
386
+ exports.createAAMiddleware = createAAMiddleware;
344
387
  exports.createEthereumMiddleware = createEthereumMiddleware;
345
388
  exports.createGetAccountsMiddleware = createGetAccountsMiddleware;
346
389
  exports.createPendingNonceMiddleware = createPendingNonceMiddleware;
@@ -66,6 +66,7 @@ exports.validateAddress = utils.validateAddress;
66
66
  exports.validateSignMessageData = utils.validateSignMessageData;
67
67
  exports.validateSwitchChainData = utils.validateSwitchChainData;
68
68
  exports.validateTypedSignMessageDataV4 = utils.validateTypedSignMessageDataV4;
69
+ exports.createAAMiddleware = createEthereumMiddleware.createAAMiddleware;
69
70
  exports.createEthereumMiddleware = createEthereumMiddleware.createEthereumMiddleware;
70
71
  exports.createGetAccountsMiddleware = createEthereumMiddleware.createGetAccountsMiddleware;
71
72
  exports.createPendingNonceMiddleware = createEthereumMiddleware.createPendingNonceMiddleware;
@@ -126,6 +127,7 @@ exports.BASE_CHAIN_ID = constants.BASE_CHAIN_ID;
126
127
  exports.BASE_TESTNET_CHAIN_ID = constants.BASE_TESTNET_CHAIN_ID;
127
128
  exports.BSC_MAINNET_CHAIN_ID = constants.BSC_MAINNET_CHAIN_ID;
128
129
  exports.BSC_TESTNET_CHAIN_ID = constants.BSC_TESTNET_CHAIN_ID;
130
+ exports.BUNDLER_METHOD_TYPES = constants.BUNDLER_METHOD_TYPES;
129
131
  exports.CELO_MAINNET_CHAIN_ID = constants.CELO_MAINNET_CHAIN_ID;
130
132
  exports.CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP = constants.CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP;
131
133
  exports.COINGECKO_PLATFORMS_CHAIN_CODE_MAP = constants.COINGECKO_PLATFORMS_CHAIN_CODE_MAP;
@@ -149,6 +151,7 @@ exports.MM_TOKEN_API_SUPPORTED_CHAINS = constants.MM_TOKEN_API_SUPPORTED_CHAINS;
149
151
  exports.OLD_ERC721_LIST = constants.OLD_ERC721_LIST;
150
152
  exports.OPTIMISM_MAINNET_CHAIN_ID = constants.OPTIMISM_MAINNET_CHAIN_ID;
151
153
  exports.OPTIMISM_TESTNET_CHAIN_ID = constants.OPTIMISM_TESTNET_CHAIN_ID;
154
+ exports.PAYMASTER_METHOD_TYPES = constants.PAYMASTER_METHOD_TYPES;
152
155
  exports.POLYGON_AMOY_CHAIN_ID = constants.POLYGON_AMOY_CHAIN_ID;
153
156
  exports.POLYGON_CHAIN_ID = constants.POLYGON_CHAIN_ID;
154
157
  exports.SEPOLIA_CHAIN_ID = constants.SEPOLIA_CHAIN_ID;
@@ -1,14 +1,15 @@
1
- import { BaseConfig, BaseController, BaseState, TransactionStatus } from "@toruslabs/base-controllers";
2
- import { JRPCMiddleware, JRPCRequest, JRPCResponse, SafeEventEmitterProvider } from "@web3auth/auth";
3
- import { WalletClient } from "viem";
4
- import { BundlerClient, SmartAccount } from "viem/account-abstraction";
5
- import { NetworkController } from "../Network/NetworkController";
6
- import { BundlerConfig, EthereumNetworkState, ISmartAccount, PaymasterConfig, SignTypedDataMessageV4, SmartAccountType, TransactionParams, UserOperationGas } from "../utils/interfaces";
1
+ import { type BaseConfig, BaseController, type BaseState, TransactionStatus } from "@toruslabs/base-controllers";
2
+ import { JRPCMiddleware, type JRPCRequest, type JRPCResponse, type SafeEventEmitterProvider } from "@web3auth/auth";
3
+ import { type WalletClient } from "viem";
4
+ import { type BundlerClient, type SmartAccount } from "viem/account-abstraction";
5
+ import { type NetworkController } from "../Network/NetworkController";
6
+ import type { BundlerConfig, EthereumNetworkState, ISmartAccount, PaymasterConfig, SignTypedDataMessageV4, SmartAccountType, TransactionParams, UserOperationGas } from "../utils/interfaces";
7
7
  export interface UserOperationMeta {
8
8
  transactionParams: TransactionParams;
9
9
  userOpHash?: string;
10
10
  status: TransactionStatus;
11
11
  chainId: string;
12
+ signature?: string;
12
13
  createdAt: Date;
13
14
  receipt?: {
14
15
  transactionHash: string;
@@ -50,6 +51,7 @@ export declare class AccountAbstractionController extends BaseController<Account
50
51
  get walletClient(): WalletClient | null;
51
52
  setupProvider(eoaProvider: SafeEventEmitterProvider, eoaAddress: string): Promise<void>;
52
53
  sendTransaction(id: string, tx: TransactionParams, address: string): Promise<string>;
54
+ signTransaction(id: string, tx: TransactionParams, address: string): Promise<string>;
53
55
  estimateGas(txParams: TransactionParams, address: string): Promise<UserOperationGas>;
54
56
  signMessage(message: string, address: string): Promise<string>;
55
57
  signPersonalMessage(message: string, address: string): Promise<string>;
@@ -3,9 +3,14 @@ import { JRPCEngineEndCallback, JRPCEngineNextCallback, JRPCMiddleware, JRPCRequ
3
3
  import { AddChainMessageParams, BlockParams, EthereumTransactionMeta, TransactionParams, TransactionRPCMeta, TypedMessageParams, UserOperationGas } from "../utils/interfaces";
4
4
  export interface IProviderHandlers {
5
5
  version: string;
6
+ aaConfig?: {
7
+ bundlerUrl: string;
8
+ paymasterUrl?: string;
9
+ };
6
10
  requestAccounts?: (req: JRPCRequest<string[]>) => Promise<string[]>;
7
11
  getAccounts: (req: JRPCRequest<string[]>) => Promise<string[]>;
8
12
  getPrivateKey?: (req: JRPCRequest<unknown>) => Promise<string>;
13
+ getPublicKey?: (req: JRPCRequest<unknown>) => Promise<string>;
9
14
  processTransaction?: (txParams: TransactionParams, req: JRPCRequest<TransactionParams> & UserRequestApprovalParams) => Promise<string>;
10
15
  processSignTransaction?: (txParams: TransactionParams, req: JRPCRequest<TransactionParams> & UserRequestApprovalParams) => Promise<string>;
11
16
  processEthSignMessage?: (msgParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
@@ -68,4 +73,11 @@ export declare function createProcessAddEthereumChain({ processAddEthereumChain,
68
73
  export declare function createRequestAccountsMiddleware({ requestAccounts, }: {
69
74
  requestAccounts: IProviderHandlers["requestAccounts"];
70
75
  }): JRPCMiddleware<string[], unknown>;
76
+ /**
77
+ * Middleware to handle bundler/paymaster rpc method
78
+ */
79
+ export declare function createAAMiddleware({ bundlerUrl, paymasterUrl }: {
80
+ bundlerUrl: string;
81
+ paymasterUrl?: string;
82
+ }): JRPCMiddleware<unknown, unknown>;
71
83
  export declare function createEthereumMiddleware(providerHandlers: IProviderHandlers): JRPCMiddleware<unknown, unknown>;
@@ -32,6 +32,20 @@ export declare const METHOD_TYPES: {
32
32
  readonly ETH_TRANSACTION: "eth_sendTransaction";
33
33
  readonly ETH_SIGN_TRANSACTION: "eth_signTransaction";
34
34
  readonly ETH_ESTIMATE_USER_OPERATION_GAS: "eth_estimateUserOperationGas";
35
+ readonly ETH_GET_SUPPORTED_ENTRY_POINTS: "eth_supportedEntryPoints";
36
+ readonly ETH_GET_USER_OPERATION: "eth_getUserOperationByHash";
37
+ readonly ETH_GET_USER_OPERATION_RECEIPT: "eth_getUserOperationReceipt";
38
+ readonly ETH_SEND_USER_OPERATION: "eth_sendUserOperation";
39
+ readonly PIMLICO_GET_USER_OPERATION_GAS_PRICE: "pimlico_getUserOperationGasPrice";
40
+ readonly PIMLICO_GET_USER_OPERATION_STATUS: "pimlico_getUserOperationStatus";
41
+ readonly PIMLICO_SIMULATE_ASSET_CHANGES: "pimlico_simulateAssetChanges";
42
+ readonly BICONOMY_GET_GAS_FEE_VALUES: "biconomy_getGasFeeValues";
43
+ readonly BICONOMY_GET_USER_OPERATION_STATUS: "biconomy_getUserOperationStatus";
44
+ readonly ETH_GET_PAYMASTER_DATA: "pm_getPaymasterData";
45
+ readonly ETH_GET_PAYMASTER_STUB_DATA: "pm_getPaymasterStubData";
46
+ readonly ETH_SPONSOR_USER_OPERATION: "pm_sponsorUserOperation";
47
+ readonly ETH_GET_FEE_QUOTE_OR_DATA: "pm_getFeeQuoteOrData";
48
+ readonly PIMLICO_GET_TOKEN_QUOTES: "pimlico_getTokenQuotes";
35
49
  readonly ETH_REQUEST_ACCOUNTS: "eth_requestAccounts";
36
50
  readonly ETH_SEND_RAW_TRANSACTION: "eth_sendRawTransaction";
37
51
  readonly ETH_SIGN: "eth_sign";
@@ -46,9 +60,13 @@ export declare const METHOD_TYPES: {
46
60
  readonly ETH_GET_GAS_PRICE: "eth_gasPrice";
47
61
  readonly ETH_PRIVATE_KEY: "eth_privateKey";
48
62
  readonly PRIVATE_KEY: "private_key";
63
+ readonly ETH_PUBLIC_KEY: "eth_publicKey";
64
+ readonly PUBLIC_KEY: "public_key";
49
65
  readonly SWITCH_CHAIN: "wallet_switchEthereumChain";
50
66
  readonly ADD_CHAIN: "wallet_addEthereumChain";
51
67
  };
68
+ export declare const BUNDLER_METHOD_TYPES: readonly ["eth_estimateUserOperationGas", "eth_supportedEntryPoints", "eth_getUserOperationByHash", "eth_getUserOperationReceipt", "eth_sendUserOperation", "pimlico_getUserOperationGasPrice", "pimlico_getUserOperationStatus", "pimlico_simulateAssetChanges", "biconomy_getGasFeeValues", "biconomy_getUserOperationStatus"];
69
+ export declare const PAYMASTER_METHOD_TYPES: readonly ["pm_getPaymasterData", "pm_getPaymasterStubData", "pm_sponsorUserOperation", "pimlico_getTokenQuotes", "pm_getFeeQuoteOrData"];
52
70
  export declare const TRANSACTION_ENVELOPE_TYPES: {
53
71
  readonly LEGACY: "0x0";
54
72
  readonly ACCESS_LIST: "0x1";
@@ -231,7 +231,25 @@ const METHOD_TYPES = {
231
231
  GET_ACCOUNTS: "eth_accounts",
232
232
  ETH_TRANSACTION: "eth_sendTransaction",
233
233
  ETH_SIGN_TRANSACTION: "eth_signTransaction",
234
+ // start bundler methods
234
235
  ETH_ESTIMATE_USER_OPERATION_GAS: "eth_estimateUserOperationGas",
236
+ ETH_GET_SUPPORTED_ENTRY_POINTS: "eth_supportedEntryPoints",
237
+ ETH_GET_USER_OPERATION: "eth_getUserOperationByHash",
238
+ ETH_GET_USER_OPERATION_RECEIPT: "eth_getUserOperationReceipt",
239
+ ETH_SEND_USER_OPERATION: "eth_sendUserOperation",
240
+ PIMLICO_GET_USER_OPERATION_GAS_PRICE: "pimlico_getUserOperationGasPrice",
241
+ PIMLICO_GET_USER_OPERATION_STATUS: "pimlico_getUserOperationStatus",
242
+ PIMLICO_SIMULATE_ASSET_CHANGES: "pimlico_simulateAssetChanges",
243
+ BICONOMY_GET_GAS_FEE_VALUES: "biconomy_getGasFeeValues",
244
+ BICONOMY_GET_USER_OPERATION_STATUS: "biconomy_getUserOperationStatus",
245
+ // end bundler methods
246
+ // start paymaster methods
247
+ ETH_GET_PAYMASTER_DATA: "pm_getPaymasterData",
248
+ ETH_GET_PAYMASTER_STUB_DATA: "pm_getPaymasterStubData",
249
+ ETH_SPONSOR_USER_OPERATION: "pm_sponsorUserOperation",
250
+ ETH_GET_FEE_QUOTE_OR_DATA: "pm_getFeeQuoteOrData",
251
+ PIMLICO_GET_TOKEN_QUOTES: "pimlico_getTokenQuotes",
252
+ // end paymaster methods
235
253
  ETH_REQUEST_ACCOUNTS: "eth_requestAccounts",
236
254
  ETH_SEND_RAW_TRANSACTION: "eth_sendRawTransaction",
237
255
  ETH_SIGN: "eth_sign",
@@ -246,9 +264,13 @@ const METHOD_TYPES = {
246
264
  ETH_GET_GAS_PRICE: "eth_gasPrice",
247
265
  ETH_PRIVATE_KEY: "eth_privateKey",
248
266
  PRIVATE_KEY: "private_key",
267
+ ETH_PUBLIC_KEY: "eth_publicKey",
268
+ PUBLIC_KEY: "public_key",
249
269
  SWITCH_CHAIN: "wallet_switchEthereumChain",
250
270
  ADD_CHAIN: "wallet_addEthereumChain"
251
271
  };
272
+ const BUNDLER_METHOD_TYPES = [METHOD_TYPES.ETH_ESTIMATE_USER_OPERATION_GAS, METHOD_TYPES.ETH_GET_SUPPORTED_ENTRY_POINTS, METHOD_TYPES.ETH_GET_USER_OPERATION, METHOD_TYPES.ETH_GET_USER_OPERATION_RECEIPT, METHOD_TYPES.ETH_SEND_USER_OPERATION, METHOD_TYPES.PIMLICO_GET_USER_OPERATION_GAS_PRICE, METHOD_TYPES.PIMLICO_GET_USER_OPERATION_STATUS, METHOD_TYPES.PIMLICO_SIMULATE_ASSET_CHANGES, METHOD_TYPES.BICONOMY_GET_GAS_FEE_VALUES, METHOD_TYPES.BICONOMY_GET_USER_OPERATION_STATUS];
273
+ const PAYMASTER_METHOD_TYPES = [METHOD_TYPES.ETH_GET_PAYMASTER_DATA, METHOD_TYPES.ETH_GET_PAYMASTER_STUB_DATA, METHOD_TYPES.ETH_SPONSOR_USER_OPERATION, METHOD_TYPES.PIMLICO_GET_TOKEN_QUOTES, METHOD_TYPES.ETH_GET_FEE_QUOTE_OR_DATA];
252
274
  const TRANSACTION_ENVELOPE_TYPES = {
253
275
  LEGACY: "0x0",
254
276
  ACCESS_LIST: "0x1",
@@ -347,6 +369,7 @@ exports.BASE_CHAIN_ID = BASE_CHAIN_ID;
347
369
  exports.BASE_TESTNET_CHAIN_ID = BASE_TESTNET_CHAIN_ID;
348
370
  exports.BSC_MAINNET_CHAIN_ID = BSC_MAINNET_CHAIN_ID;
349
371
  exports.BSC_TESTNET_CHAIN_ID = BSC_TESTNET_CHAIN_ID;
372
+ exports.BUNDLER_METHOD_TYPES = BUNDLER_METHOD_TYPES;
350
373
  exports.CELO_MAINNET_CHAIN_ID = CELO_MAINNET_CHAIN_ID;
351
374
  exports.CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP = CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP;
352
375
  exports.COINGECKO_PLATFORMS_CHAIN_CODE_MAP = COINGECKO_PLATFORMS_CHAIN_CODE_MAP;
@@ -370,6 +393,7 @@ exports.MM_TOKEN_API_SUPPORTED_CHAINS = MM_TOKEN_API_SUPPORTED_CHAINS;
370
393
  exports.OLD_ERC721_LIST = OLD_ERC721_LIST;
371
394
  exports.OPTIMISM_MAINNET_CHAIN_ID = OPTIMISM_MAINNET_CHAIN_ID;
372
395
  exports.OPTIMISM_TESTNET_CHAIN_ID = OPTIMISM_TESTNET_CHAIN_ID;
396
+ exports.PAYMASTER_METHOD_TYPES = PAYMASTER_METHOD_TYPES;
373
397
  exports.POLYGON_AMOY_CHAIN_ID = POLYGON_AMOY_CHAIN_ID;
374
398
  exports.POLYGON_CHAIN_ID = POLYGON_CHAIN_ID;
375
399
  exports.SEPOLIA_CHAIN_ID = SEPOLIA_CHAIN_ID;
@@ -146,7 +146,7 @@ class AccountAbstractionController extends BaseController {
146
146
  calls: [{
147
147
  to: txParams.to,
148
148
  // Explicit conversation required to avoid value being passed as hex
149
- value: BigInt(txParams.value),
149
+ value: txParams.value ? BigInt(txParams.value) : undefined,
150
150
  data: txParams.data
151
151
  }],
152
152
  maxFeePerGas: txParams.maxFeePerGas ? BigInt(txParams.maxFeePerGas) : undefined,
@@ -185,6 +185,42 @@ class AccountAbstractionController extends BaseController {
185
185
  });
186
186
  return txReceipt.receipt.transactionHash;
187
187
  }
188
+ async signTransaction(id, tx, address) {
189
+ var _txParams$chainId2;
190
+ if (address.toLowerCase() !== this.smartAccount.address.toLowerCase()) {
191
+ throw new Error("Invalid address");
192
+ }
193
+ const txParams = tx;
194
+ const userOpMeta = {
195
+ transactionParams: txParams,
196
+ chainId: (_txParams$chainId2 = txParams.chainId) !== null && _txParams$chainId2 !== void 0 ? _txParams$chainId2 : this.getProviderConfig().chainId,
197
+ createdAt: new Date(),
198
+ status: TransactionStatus.approved
199
+ };
200
+ this.updateUserOpMeta(id, userOpMeta);
201
+ const request = await this.bundlerClient.prepareUserOperation({
202
+ account: this.smartAccount,
203
+ calls: [{
204
+ to: txParams.to,
205
+ // Explicit conversation required to avoid value being passed as hex
206
+ value: txParams.value ? BigInt(txParams.value) : undefined,
207
+ data: txParams.data
208
+ }],
209
+ maxFeePerGas: txParams.maxFeePerGas ? BigInt(txParams.maxFeePerGas) : undefined,
210
+ maxPriorityFeePerGas: txParams.maxPriorityFeePerGas ? BigInt(txParams.maxPriorityFeePerGas) : undefined,
211
+ callGasLimit: txParams.callGasLimit ? BigInt(txParams.callGasLimit) : undefined,
212
+ preVerificationGas: txParams.preVerificationGas ? BigInt(txParams.preVerificationGas) : undefined,
213
+ verificationGasLimit: txParams.verificationGasLimit ? BigInt(txParams.verificationGasLimit) : undefined,
214
+ paymasterVerificationGasLimit: txParams.paymasterVerificationGasLimit ? BigInt(txParams.paymasterVerificationGasLimit) : undefined,
215
+ paymasterPostOpGasLimit: txParams.paymasterPostOpGasLimit ? BigInt(txParams.paymasterPostOpGasLimit) : undefined
216
+ });
217
+ const signature = await this.smartAccount.signUserOperation(request);
218
+ this.updateUserOpMeta(id, {
219
+ signature,
220
+ status: TransactionStatus.signed
221
+ });
222
+ return signature;
223
+ }
188
224
  async estimateGas(txParams, address) {
189
225
  if (address.toLowerCase() !== this.smartAccount.address.toLowerCase()) throw new Error("Invalid address");
190
226
  const calls = [{
@@ -1,6 +1,6 @@
1
- import { PROVIDER_JRPC_METHODS, createGenericJRPCMiddleware } from '@toruslabs/base-controllers';
1
+ import { PROVIDER_JRPC_METHODS, createFetchMiddleware, createGenericJRPCMiddleware } from '@toruslabs/base-controllers';
2
2
  import { createAsyncMiddleware, mergeMiddleware, createScaffoldMiddleware } from '@web3auth/auth';
3
- import { METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES } from '../utils/constants.js';
3
+ import { METHOD_TYPES, TRANSACTION_ENVELOPE_TYPES, BUNDLER_METHOD_TYPES, PAYMASTER_METHOD_TYPES } from '../utils/constants.js';
4
4
 
5
5
  function createGetAccountsMiddleware({
6
6
  getAccounts
@@ -288,11 +288,46 @@ function createRequestAccountsMiddleware({
288
288
  return undefined;
289
289
  });
290
290
  }
291
+
292
+ /**
293
+ * Middleware to handle bundler/paymaster rpc method
294
+ */
295
+ function createAAMiddleware({
296
+ bundlerUrl,
297
+ paymasterUrl
298
+ }) {
299
+ // forward request to bundler/paymaster
300
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
301
+ const middlewares = [];
302
+ const bundlerFetchMiddleware = createFetchMiddleware({
303
+ rpcTarget: bundlerUrl
304
+ });
305
+ // NOTE: bundler/paymaster rpc only accept number as request id, we might need to handle that here if client doesn't handle request id themselves
306
+ middlewares.push((request, response, next, end) => {
307
+ if (!BUNDLER_METHOD_TYPES.includes(request.method)) {
308
+ return next();
309
+ }
310
+ bundlerFetchMiddleware(request, response, next, end);
311
+ });
312
+ if (paymasterUrl) {
313
+ const paymasterFetchMiddleware = createFetchMiddleware({
314
+ rpcTarget: paymasterUrl
315
+ });
316
+ middlewares.push((request, response, next, end) => {
317
+ if (!PAYMASTER_METHOD_TYPES.includes(request.method)) {
318
+ return next();
319
+ }
320
+ paymasterFetchMiddleware(request, response, next, end);
321
+ });
322
+ }
323
+ return mergeMiddleware(middlewares);
324
+ }
291
325
  function createEthereumMiddleware(providerHandlers) {
292
326
  const {
293
327
  requestAccounts,
294
328
  getAccounts,
295
329
  getPrivateKey,
330
+ getPublicKey,
296
331
  processTransaction,
297
332
  processSignTransaction,
298
333
  processEstimateUserOperationGas,
@@ -305,16 +340,17 @@ function createEthereumMiddleware(providerHandlers) {
305
340
  processWalletSwitchChain,
306
341
  processAddEthereumChain,
307
342
  getProviderState,
343
+ aaConfig,
308
344
  version
309
345
  } = providerHandlers;
310
- return mergeMiddleware([createScaffoldMiddleware({
346
+ const middlewares = [createScaffoldMiddleware({
311
347
  version,
312
348
  [PROVIDER_JRPC_METHODS.GET_PROVIDER_STATE]: getProviderState
313
349
  }), createRequestAccountsMiddleware({
314
350
  requestAccounts
315
351
  }), createGetAccountsMiddleware({
316
352
  getAccounts
317
- }), createGenericJRPCMiddleware(METHOD_TYPES.ETH_PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware(METHOD_TYPES.PRIVATE_KEY, getPrivateKey), createProcessTransactionMiddleware({
353
+ }), createGenericJRPCMiddleware(METHOD_TYPES.ETH_PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware(METHOD_TYPES.PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware(METHOD_TYPES.ETH_PUBLIC_KEY, getPublicKey), createGenericJRPCMiddleware(METHOD_TYPES.PUBLIC_KEY, getPublicKey), createProcessTransactionMiddleware({
318
354
  processTransaction
319
355
  }), createProcessSignTransactionMiddleware({
320
356
  processSignTransaction
@@ -336,7 +372,14 @@ function createEthereumMiddleware(providerHandlers) {
336
372
  processWalletSwitchChain
337
373
  }), createProcessAddEthereumChain({
338
374
  processAddEthereumChain
339
- })]);
375
+ })];
376
+ if (aaConfig) {
377
+ middlewares.push(createAAMiddleware({
378
+ bundlerUrl: aaConfig.bundlerUrl,
379
+ paymasterUrl: aaConfig.paymasterUrl
380
+ }));
381
+ }
382
+ return mergeMiddleware(middlewares);
340
383
  }
341
384
 
342
- export { createEthereumMiddleware, createGetAccountsMiddleware, createPendingNonceMiddleware, createPendingTxMiddleware, createProcessAddEthereumChain, createProcessEstimateUserOperationGasMiddleware, createProcessEthSignMessage, createProcessPersonalMessage, createProcessSignTransactionMiddleware, createProcessSwitchEthereumChain, createProcessTransactionMiddleware, createProcessTypedMessageV4, createProcessWalletSwitchChain, createRequestAccountsMiddleware, formatTxMetaForRpcResult };
385
+ export { createAAMiddleware, createEthereumMiddleware, createGetAccountsMiddleware, createPendingNonceMiddleware, createPendingTxMiddleware, createProcessAddEthereumChain, createProcessEstimateUserOperationGasMiddleware, createProcessEthSignMessage, createProcessPersonalMessage, createProcessSignTransactionMiddleware, createProcessSwitchEthereumChain, createProcessTransactionMiddleware, createProcessTypedMessageV4, createProcessWalletSwitchChain, createRequestAccountsMiddleware, formatTxMetaForRpcResult };
@@ -10,7 +10,7 @@ export { PersonalMessageController } from './Message/PersonalMessageController.j
10
10
  export { SwitchChainController } from './Message/SwitchChainController.js';
11
11
  export { TypedMessageController } from './Message/TypedMessageController.js';
12
12
  export { normalizeMessageData, validateAddChainData, validateAddress, validateSignMessageData, validateSwitchChainData, validateTypedSignMessageDataV4 } from './Message/utils.js';
13
- export { createEthereumMiddleware, createGetAccountsMiddleware, createPendingNonceMiddleware, createPendingTxMiddleware, createProcessAddEthereumChain, createProcessEstimateUserOperationGasMiddleware, createProcessEthSignMessage, createProcessPersonalMessage, createProcessSignTransactionMiddleware, createProcessSwitchEthereumChain, createProcessTransactionMiddleware, createProcessTypedMessageV4, createProcessWalletSwitchChain, createRequestAccountsMiddleware, formatTxMetaForRpcResult } from './Network/createEthereumMiddleware.js';
13
+ export { createAAMiddleware, createEthereumMiddleware, createGetAccountsMiddleware, createPendingNonceMiddleware, createPendingTxMiddleware, createProcessAddEthereumChain, createProcessEstimateUserOperationGasMiddleware, createProcessEthSignMessage, createProcessPersonalMessage, createProcessSignTransactionMiddleware, createProcessSwitchEthereumChain, createProcessTransactionMiddleware, createProcessTypedMessageV4, createProcessWalletSwitchChain, createRequestAccountsMiddleware, formatTxMetaForRpcResult } from './Network/createEthereumMiddleware.js';
14
14
  export { createChainIdMiddleware, createJsonRpcClient, createProviderConfigMiddleware } from './Network/createJsonRpcClient.js';
15
15
  export { NetworkController } from './Network/NetworkController.js';
16
16
  export { NftHandler } from './Nfts/NftHandler.js';
@@ -27,7 +27,7 @@ export { generateHistoryEntry, replayHistory, snapshotFromTxMeta } from './Trans
27
27
  export { TransactionStateManager } from './Transaction/TransactionStateManager.js';
28
28
  export { determineTransactionType, ensureFieldIsString, ensureMutuallyExclusiveFieldsNotProvided, getFinalStates, isEIP1559Transaction, isLegacyTransaction, normalizeAndValidateTxParams, normalizeTxParameters, parseStandardTokenTransactionData, readAddressAsContract, transactionMatchesNetwork, validateFrom, validateRecipient, validateTxParameters } from './Transaction/TransactionUtils.js';
29
29
  export { erc1155Abi, erc20Abi, erc721Abi, singleBalanceCheckerAbi } from './utils/abis.js';
30
- export { ARBITRUM_MAINNET_CHAIN_ID, ARBITRUM_TESTNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, AVALANCHE_TESTNET_CHAIN_ID, BASE_CHAIN_ID, BASE_TESTNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, BSC_TESTNET_CHAIN_ID, CELO_MAINNET_CHAIN_ID, CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES, CONTRACT_TYPE_ERC1155, CONTRACT_TYPE_ERC20, CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ETH, ERC1155_INTERFACE_ID, ERC721_ENUMERABLE_INTERFACE_ID, ERC721_INTERFACE_ID, ERC721_METADATA_INTERFACE_ID, GAS_ESTIMATE_TYPES, LINEA_CHAIN_ID, LINEA_SEPOLIA_CHAIN_ID, LOCALHOST, MAINNET_CHAIN_ID, METHOD_TYPES, MM_NFT_API_SUPPORTED_CHAINS, MM_TOKEN_API_SUPPORTED_CHAINS, OLD_ERC721_LIST, OPTIMISM_MAINNET_CHAIN_ID, OPTIMISM_TESTNET_CHAIN_ID, POLYGON_AMOY_CHAIN_ID, POLYGON_CHAIN_ID, SEPOLIA_CHAIN_ID, SMART_ACCOUNT, SUPPORTED_NETWORKS, TEST_CHAINS, TRANSACTION_ENVELOPE_TYPES, XDAI_CHAIN_ID } from './utils/constants.js';
30
+ export { ARBITRUM_MAINNET_CHAIN_ID, ARBITRUM_TESTNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, AVALANCHE_TESTNET_CHAIN_ID, BASE_CHAIN_ID, BASE_TESTNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, BSC_TESTNET_CHAIN_ID, BUNDLER_METHOD_TYPES, CELO_MAINNET_CHAIN_ID, CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES, CONTRACT_TYPE_ERC1155, CONTRACT_TYPE_ERC20, CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ETH, ERC1155_INTERFACE_ID, ERC721_ENUMERABLE_INTERFACE_ID, ERC721_INTERFACE_ID, ERC721_METADATA_INTERFACE_ID, GAS_ESTIMATE_TYPES, LINEA_CHAIN_ID, LINEA_SEPOLIA_CHAIN_ID, LOCALHOST, MAINNET_CHAIN_ID, METHOD_TYPES, MM_NFT_API_SUPPORTED_CHAINS, MM_TOKEN_API_SUPPORTED_CHAINS, OLD_ERC721_LIST, OPTIMISM_MAINNET_CHAIN_ID, OPTIMISM_TESTNET_CHAIN_ID, PAYMASTER_METHOD_TYPES, POLYGON_AMOY_CHAIN_ID, POLYGON_CHAIN_ID, SEPOLIA_CHAIN_ID, SMART_ACCOUNT, SUPPORTED_NETWORKS, TEST_CHAINS, TRANSACTION_ENVELOPE_TYPES, XDAI_CHAIN_ID } from './utils/constants.js';
31
31
  export { addCurrencies, conversionGTE, conversionGreaterThan, conversionLTE, conversionLessThan, conversionMax, conversionUtil, decGWEIToHexWEI, getBigNumber, hexWEIToDecGWEI, multiplyCurrencies, subtractCurrencies, toNegative } from './utils/conversionUtils.js';
32
32
  export { BNToHex, GAS_LIMITS, addEtherscanTransactions, bnLessThan, formatDate, formatPastTx, formatTime, getChainType, getEthTxStatus, getEtherScanHashLink, getIpfsEndpoint, hexToBn, isAddressByChainId, sanitizeNftMetdataUrl, toChecksumAddressByChainId } from './utils/helpers.js';
33
33
  export { BiconomySmartAccount } from './AccountAbstraction/smartAccounts/BiconomySmartAccount.js';
@@ -229,7 +229,25 @@ const METHOD_TYPES = {
229
229
  GET_ACCOUNTS: "eth_accounts",
230
230
  ETH_TRANSACTION: "eth_sendTransaction",
231
231
  ETH_SIGN_TRANSACTION: "eth_signTransaction",
232
+ // start bundler methods
232
233
  ETH_ESTIMATE_USER_OPERATION_GAS: "eth_estimateUserOperationGas",
234
+ ETH_GET_SUPPORTED_ENTRY_POINTS: "eth_supportedEntryPoints",
235
+ ETH_GET_USER_OPERATION: "eth_getUserOperationByHash",
236
+ ETH_GET_USER_OPERATION_RECEIPT: "eth_getUserOperationReceipt",
237
+ ETH_SEND_USER_OPERATION: "eth_sendUserOperation",
238
+ PIMLICO_GET_USER_OPERATION_GAS_PRICE: "pimlico_getUserOperationGasPrice",
239
+ PIMLICO_GET_USER_OPERATION_STATUS: "pimlico_getUserOperationStatus",
240
+ PIMLICO_SIMULATE_ASSET_CHANGES: "pimlico_simulateAssetChanges",
241
+ BICONOMY_GET_GAS_FEE_VALUES: "biconomy_getGasFeeValues",
242
+ BICONOMY_GET_USER_OPERATION_STATUS: "biconomy_getUserOperationStatus",
243
+ // end bundler methods
244
+ // start paymaster methods
245
+ ETH_GET_PAYMASTER_DATA: "pm_getPaymasterData",
246
+ ETH_GET_PAYMASTER_STUB_DATA: "pm_getPaymasterStubData",
247
+ ETH_SPONSOR_USER_OPERATION: "pm_sponsorUserOperation",
248
+ ETH_GET_FEE_QUOTE_OR_DATA: "pm_getFeeQuoteOrData",
249
+ PIMLICO_GET_TOKEN_QUOTES: "pimlico_getTokenQuotes",
250
+ // end paymaster methods
233
251
  ETH_REQUEST_ACCOUNTS: "eth_requestAccounts",
234
252
  ETH_SEND_RAW_TRANSACTION: "eth_sendRawTransaction",
235
253
  ETH_SIGN: "eth_sign",
@@ -244,9 +262,13 @@ const METHOD_TYPES = {
244
262
  ETH_GET_GAS_PRICE: "eth_gasPrice",
245
263
  ETH_PRIVATE_KEY: "eth_privateKey",
246
264
  PRIVATE_KEY: "private_key",
265
+ ETH_PUBLIC_KEY: "eth_publicKey",
266
+ PUBLIC_KEY: "public_key",
247
267
  SWITCH_CHAIN: "wallet_switchEthereumChain",
248
268
  ADD_CHAIN: "wallet_addEthereumChain"
249
269
  };
270
+ const BUNDLER_METHOD_TYPES = [METHOD_TYPES.ETH_ESTIMATE_USER_OPERATION_GAS, METHOD_TYPES.ETH_GET_SUPPORTED_ENTRY_POINTS, METHOD_TYPES.ETH_GET_USER_OPERATION, METHOD_TYPES.ETH_GET_USER_OPERATION_RECEIPT, METHOD_TYPES.ETH_SEND_USER_OPERATION, METHOD_TYPES.PIMLICO_GET_USER_OPERATION_GAS_PRICE, METHOD_TYPES.PIMLICO_GET_USER_OPERATION_STATUS, METHOD_TYPES.PIMLICO_SIMULATE_ASSET_CHANGES, METHOD_TYPES.BICONOMY_GET_GAS_FEE_VALUES, METHOD_TYPES.BICONOMY_GET_USER_OPERATION_STATUS];
271
+ const PAYMASTER_METHOD_TYPES = [METHOD_TYPES.ETH_GET_PAYMASTER_DATA, METHOD_TYPES.ETH_GET_PAYMASTER_STUB_DATA, METHOD_TYPES.ETH_SPONSOR_USER_OPERATION, METHOD_TYPES.PIMLICO_GET_TOKEN_QUOTES, METHOD_TYPES.ETH_GET_FEE_QUOTE_OR_DATA];
250
272
  const TRANSACTION_ENVELOPE_TYPES = {
251
273
  LEGACY: "0x0",
252
274
  ACCESS_LIST: "0x1",
@@ -338,4 +360,4 @@ const SMART_ACCOUNT = {
338
360
  METAMASK: "metamask"
339
361
  };
340
362
 
341
- export { ARBITRUM_MAINNET_CHAIN_ID, ARBITRUM_TESTNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, AVALANCHE_TESTNET_CHAIN_ID, BASE_CHAIN_ID, BASE_TESTNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, BSC_TESTNET_CHAIN_ID, CELO_MAINNET_CHAIN_ID, CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES, CONTRACT_TYPE_ERC1155, CONTRACT_TYPE_ERC20, CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ETH, ERC1155_INTERFACE_ID, ERC721_ENUMERABLE_INTERFACE_ID, ERC721_INTERFACE_ID, ERC721_METADATA_INTERFACE_ID, GAS_ESTIMATE_TYPES, LINEA_CHAIN_ID, LINEA_SEPOLIA_CHAIN_ID, LOCALHOST, MAINNET_CHAIN_ID, METHOD_TYPES, MM_NFT_API_SUPPORTED_CHAINS, MM_TOKEN_API_SUPPORTED_CHAINS, OLD_ERC721_LIST, OPTIMISM_MAINNET_CHAIN_ID, OPTIMISM_TESTNET_CHAIN_ID, POLYGON_AMOY_CHAIN_ID, POLYGON_CHAIN_ID, SEPOLIA_CHAIN_ID, SMART_ACCOUNT, SUPPORTED_NETWORKS, TEST_CHAINS, TRANSACTION_ENVELOPE_TYPES, XDAI_CHAIN_ID };
363
+ export { ARBITRUM_MAINNET_CHAIN_ID, ARBITRUM_TESTNET_CHAIN_ID, AVALANCHE_MAINNET_CHAIN_ID, AVALANCHE_TESTNET_CHAIN_ID, BASE_CHAIN_ID, BASE_TESTNET_CHAIN_ID, BSC_MAINNET_CHAIN_ID, BSC_TESTNET_CHAIN_ID, BUNDLER_METHOD_TYPES, CELO_MAINNET_CHAIN_ID, CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, COINGECKO_PLATFORMS_CHAIN_CODE_MAP, COINGECKO_SUPPORTED_CURRENCIES, CONTRACT_TYPE_ERC1155, CONTRACT_TYPE_ERC20, CONTRACT_TYPE_ERC721, CONTRACT_TYPE_ETH, ERC1155_INTERFACE_ID, ERC721_ENUMERABLE_INTERFACE_ID, ERC721_INTERFACE_ID, ERC721_METADATA_INTERFACE_ID, GAS_ESTIMATE_TYPES, LINEA_CHAIN_ID, LINEA_SEPOLIA_CHAIN_ID, LOCALHOST, MAINNET_CHAIN_ID, METHOD_TYPES, MM_NFT_API_SUPPORTED_CHAINS, MM_TOKEN_API_SUPPORTED_CHAINS, OLD_ERC721_LIST, OPTIMISM_MAINNET_CHAIN_ID, OPTIMISM_TESTNET_CHAIN_ID, PAYMASTER_METHOD_TYPES, POLYGON_AMOY_CHAIN_ID, POLYGON_CHAIN_ID, SEPOLIA_CHAIN_ID, SMART_ACCOUNT, SUPPORTED_NETWORKS, TEST_CHAINS, TRANSACTION_ENVELOPE_TYPES, XDAI_CHAIN_ID };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toruslabs/ethereum-controllers",
3
- "version": "8.4.2",
3
+ "version": "8.4.4",
4
4
  "homepage": "https://github.com/torusresearch/controllers#readme",
5
5
  "license": "ISC",
6
6
  "sideEffects": false,
@@ -20,21 +20,21 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@ethereumjs/util": "^9.1.0",
23
- "@metamask/delegation-toolkit": "^0.10.2",
24
- "@toruslabs/base-controllers": "^8.4.2",
23
+ "@metamask/delegation-toolkit": "^0.11.0",
24
+ "@toruslabs/base-controllers": "^8.4.4",
25
25
  "@toruslabs/http-helpers": "^8.1.1",
26
- "@web3auth/auth": "^10.4.0",
26
+ "@web3auth/auth": "^10.4.1",
27
27
  "async-mutex": "^0.5.0",
28
28
  "bignumber.js": "^9.2.1",
29
- "bn.js": "^5.2.1",
29
+ "bn.js": "^5.2.2",
30
30
  "deepmerge": "^4.3.1",
31
- "ethers": "^6.13.5",
31
+ "ethers": "^6.14.0",
32
32
  "fast-json-patch": "^3.1.1",
33
33
  "fast-safe-stringify": "^2.1.1",
34
34
  "jsonschema": "^1.5.0",
35
35
  "loglevel": "^1.9.2",
36
- "permissionless": "^0.2.42",
37
- "viem": "^2.27.2"
36
+ "permissionless": "^0.2.46",
37
+ "viem": "^2.23.2"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@babel/runtime": "7.x"
@@ -63,7 +63,7 @@
63
63
  "publishConfig": {
64
64
  "access": "public"
65
65
  },
66
- "gitHead": "3b10ca0321c6cee1a575e2e63d9f21643d42d373",
66
+ "gitHead": "7040c38814fe30e35f1dcd9713de118ded2e3d4a",
67
67
  "devDependencies": {
68
68
  "@typechain/ethers-v6": "^0.5.1",
69
69
  "typechain": "^8.3.2"