@marigoldlabs/web3-tester 0.1.2 → 0.4.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.
Files changed (96) hide show
  1. package/.env.example +26 -17
  2. package/LICENSE +21 -0
  3. package/README.md +480 -48
  4. package/dist/anvil.d.ts +90 -2
  5. package/dist/anvil.d.ts.map +1 -1
  6. package/dist/anvil.js +215 -13
  7. package/dist/anvil.js.map +1 -1
  8. package/dist/benchmark.d.ts +55 -0
  9. package/dist/benchmark.d.ts.map +1 -0
  10. package/dist/benchmark.js +168 -0
  11. package/dist/benchmark.js.map +1 -0
  12. package/dist/contracts/test-erc20.d.ts +227 -0
  13. package/dist/contracts/test-erc20.d.ts.map +1 -0
  14. package/dist/contracts/test-erc20.js +8 -0
  15. package/dist/contracts/test-erc20.js.map +1 -0
  16. package/dist/erc20.d.ts +38 -0
  17. package/dist/erc20.d.ts.map +1 -0
  18. package/dist/erc20.js +229 -0
  19. package/dist/erc20.js.map +1 -0
  20. package/dist/fixtures.d.ts +44 -2
  21. package/dist/fixtures.d.ts.map +1 -1
  22. package/dist/fixtures.js +162 -17
  23. package/dist/fixtures.js.map +1 -1
  24. package/dist/index.d.ts +26 -5
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +11 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/injected-provider.d.ts.map +1 -1
  29. package/dist/injected-provider.js +863 -77
  30. package/dist/injected-provider.js.map +1 -1
  31. package/dist/live-fixtures.d.ts +32 -3
  32. package/dist/live-fixtures.d.ts.map +1 -1
  33. package/dist/live-fixtures.js +64 -27
  34. package/dist/live-fixtures.js.map +1 -1
  35. package/dist/matchers.d.ts +90 -0
  36. package/dist/matchers.d.ts.map +1 -0
  37. package/dist/matchers.js +268 -0
  38. package/dist/matchers.js.map +1 -0
  39. package/dist/metamask-extension.d.ts +34 -0
  40. package/dist/metamask-extension.d.ts.map +1 -0
  41. package/dist/metamask-extension.js +97 -0
  42. package/dist/metamask-extension.js.map +1 -0
  43. package/dist/mock-wallet-controller.d.ts +354 -4
  44. package/dist/mock-wallet-controller.d.ts.map +1 -1
  45. package/dist/mock-wallet-controller.js +1444 -58
  46. package/dist/mock-wallet-controller.js.map +1 -1
  47. package/dist/private-key-rpc-client.d.ts +1744 -2
  48. package/dist/private-key-rpc-client.d.ts.map +1 -1
  49. package/dist/private-key-rpc-client.js +245 -30
  50. package/dist/private-key-rpc-client.js.map +1 -1
  51. package/dist/real-wallet-cache.d.ts +103 -0
  52. package/dist/real-wallet-cache.d.ts.map +1 -0
  53. package/dist/real-wallet-cache.js +331 -0
  54. package/dist/real-wallet-cache.js.map +1 -0
  55. package/dist/real-wallet-extension-fixtures.d.ts +35 -0
  56. package/dist/real-wallet-extension-fixtures.d.ts.map +1 -0
  57. package/dist/real-wallet-extension-fixtures.js +96 -0
  58. package/dist/real-wallet-extension-fixtures.js.map +1 -0
  59. package/dist/real-wallet-extension.d.ts +86 -0
  60. package/dist/real-wallet-extension.d.ts.map +1 -0
  61. package/dist/real-wallet-extension.js +245 -0
  62. package/dist/real-wallet-extension.js.map +1 -0
  63. package/dist/real-wallet-fixtures.d.ts +52 -0
  64. package/dist/real-wallet-fixtures.d.ts.map +1 -0
  65. package/dist/real-wallet-fixtures.js +88 -0
  66. package/dist/real-wallet-fixtures.js.map +1 -0
  67. package/dist/real-wallet.d.ts +119 -19
  68. package/dist/real-wallet.d.ts.map +1 -1
  69. package/dist/real-wallet.js +1656 -144
  70. package/dist/real-wallet.js.map +1 -1
  71. package/dist/safe.d.ts +311 -0
  72. package/dist/safe.d.ts.map +1 -0
  73. package/dist/safe.js +743 -0
  74. package/dist/safe.js.map +1 -0
  75. package/dist/transactions.d.ts +118 -0
  76. package/dist/transactions.d.ts.map +1 -0
  77. package/dist/transactions.js +207 -0
  78. package/dist/transactions.js.map +1 -0
  79. package/dist/types.d.ts +36 -1
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/wallet-personas.d.ts +99 -0
  82. package/dist/wallet-personas.d.ts.map +1 -0
  83. package/dist/wallet-personas.js +666 -0
  84. package/dist/wallet-personas.js.map +1 -0
  85. package/dist/walletconnect.d.ts +373 -0
  86. package/dist/walletconnect.d.ts.map +1 -0
  87. package/dist/walletconnect.js +799 -0
  88. package/dist/walletconnect.js.map +1 -0
  89. package/examples/live-sepolia.spec.ts +20 -1
  90. package/examples/playwright.config.ts +8 -0
  91. package/package.json +90 -8
  92. package/docs/API.md +0 -223
  93. package/docs/ARCHITECTURE.md +0 -81
  94. package/docs/CONSUMING_FROM_FJORD.md +0 -123
  95. package/docs/FJORD_LIVE_QA.md +0 -87
  96. package/docs/RELEASE_CHECKLIST.md +0 -55
@@ -1 +1 @@
1
- {"version":3,"file":"private-key-rpc-client.d.ts","sourceRoot":"","sources":["../src/private-key-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EAET,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA0BF,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAM;IACtC,QAAQ,CAAC,uBAAuB,EAAE,KAAK,CAAC;QACtC,IAAI,EAAE,GAAG,CAAC;QACV,EAAE,CAAC,EAAE,GAAG,CAAC;QACT,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAM;IAER,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,OAAO,EAAE,0BAA0B;IAgBzC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;CA8EzD"}
1
+ {"version":3,"file":"private-key-rpc-client.d.ts","sourceRoot":"","sources":["../src/private-key-rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EAET,MAAM,MAAM,CAAC;AAId,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AA4BF,KAAK,oBAAoB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AA4JrF,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAM;IACtC,QAAQ,CAAC,uBAAuB,EAAE,KAAK,CAAC;QACtC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC;QACV,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,IAAI,CAAC,EAAE,oBAAoB,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAM;IAER,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,0BAA0B;IAuBzC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA4GxD,kFAAkF;IAClF,IAAI,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qrBAeG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA8DugO,CAAC;uCAA6lC,CAAC;;;;;;;;;;;;;;;;;6eAAumoB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA3E3t4B;IAED,wEAAwE;IAClE,iBAAiB,CAAC,OAAO,EAAE;QAC/B,eAAe,EAAE,GAAG,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;YAaa,qBAAqB;IAgBnC,OAAO,CAAC,wBAAwB;CAqCjC"}
@@ -1,24 +1,159 @@
1
- import { createPublicClient, createWalletClient, hexToString, http, isAddress, } from 'viem';
1
+ import { createPublicClient, createWalletClient, http, isAddress, } from 'viem';
2
2
  import { privateKeyToAccount } from 'viem/accounts';
3
3
  import { sepolia } from 'viem/chains';
4
+ import { providerError } from './errors.js';
5
+ // Anvil/Hardhat chains are safe targets but viem does not mark them
6
+ // `testnet: true`, so they need their own allowlist entry.
7
+ const LOCAL_DEV_CHAIN_IDS = new Set([1337, 31337]);
8
+ const isTestChain = (chain) => chain.testnet === true || LOCAL_DEV_CHAIN_IDS.has(chain.id);
4
9
  const normalizePrivateKey = (privateKey) => {
5
10
  const trimmed = privateKey.trim();
6
11
  return trimmed.startsWith('0x') ? trimmed : `0x${trimmed}`;
7
12
  };
8
13
  const asHex = (value) => typeof value === 'string' && value.startsWith('0x') ? value : undefined;
14
+ // Hex payloads must be signed as raw bytes: decoding to UTF-8 first corrupts
15
+ // binary messages (TextDecoder substitutes U+FFFD instead of throwing), and for
16
+ // valid UTF-8 text the EIP-191 digest over the raw bytes is identical anyway.
9
17
  const normalizeMessage = (message) => {
10
18
  const hex = asHex(message);
11
- if (!hex) {
12
- return String(message ?? '');
19
+ return hex ? { raw: hex } : String(message ?? '');
20
+ };
21
+ const parseParams = (request) => Array.isArray(request.params) ? [...request.params] : [];
22
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ const parseAddressField = (value, field) => {
24
+ if (value === undefined)
25
+ return undefined;
26
+ if (typeof value === 'string' && isAddress(value))
27
+ return value;
28
+ throw new Error(`${field} must be a valid address.`);
29
+ };
30
+ const parseNullableAddressField = (value, field) => {
31
+ if (value === null)
32
+ return null;
33
+ return parseAddressField(value, field);
34
+ };
35
+ const parseHexField = (value, field) => {
36
+ if (value === undefined)
37
+ return undefined;
38
+ if (typeof value === 'string' && value.startsWith('0x'))
39
+ return value;
40
+ throw new Error(`${field} must be a 0x-prefixed hex string.`);
41
+ };
42
+ const parseHexArrayField = (value, field) => {
43
+ if (value === undefined)
44
+ return undefined;
45
+ if (!Array.isArray(value))
46
+ throw new Error(`${field} must be an array.`);
47
+ return value.map((entry, index) => {
48
+ if (typeof entry === 'string' && entry.startsWith('0x'))
49
+ return entry;
50
+ throw new Error(`${field}[${index}] must be a 0x-prefixed hex string.`);
51
+ });
52
+ };
53
+ const parseQuantity = (value, field) => {
54
+ if (value === undefined)
55
+ return undefined;
56
+ if (typeof value === 'bigint')
57
+ return value;
58
+ if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0)
59
+ return BigInt(value);
60
+ if (typeof value === 'string') {
61
+ try {
62
+ return BigInt(value);
63
+ }
64
+ catch {
65
+ // Fall through to the shared error below.
66
+ }
67
+ }
68
+ throw new Error(`${field} must be a non-negative integer, bigint, decimal string, or 0x-hex quantity.`);
69
+ };
70
+ const parseIndex = (value, field) => {
71
+ const quantity = parseQuantity(value, field);
72
+ if (quantity === undefined)
73
+ return undefined;
74
+ const parsed = Number(quantity);
75
+ if (!Number.isSafeInteger(parsed))
76
+ throw new Error(`${field} is too large to fit in a JavaScript number.`);
77
+ return parsed;
78
+ };
79
+ const parseChainId = (value) => parseIndex(value, 'chainId');
80
+ const transactionTypeAliases = {
81
+ '0x0': 'legacy',
82
+ '0x1': 'eip2930',
83
+ '0x2': 'eip1559',
84
+ '0x3': 'eip4844',
85
+ '0x4': 'eip7702',
86
+ legacy: 'legacy',
87
+ eip2930: 'eip2930',
88
+ eip1559: 'eip1559',
89
+ eip4844: 'eip4844',
90
+ eip7702: 'eip7702',
91
+ };
92
+ const parseTransactionType = (value) => {
93
+ if (value === undefined)
94
+ return undefined;
95
+ if (typeof value !== 'string')
96
+ throw new Error('type must be a transaction type string.');
97
+ const normalized = value.toLowerCase();
98
+ const type = transactionTypeAliases[normalized];
99
+ if (!type) {
100
+ throw new Error(`Unsupported transaction type "${value}". Expected legacy/eip2930/eip1559/eip4844/eip7702 or 0x0-0x4.`);
13
101
  }
14
- try {
15
- return hexToString(hex);
102
+ return type;
103
+ };
104
+ const parseAccessList = (value) => {
105
+ if (value === undefined)
106
+ return undefined;
107
+ if (!Array.isArray(value))
108
+ throw new Error('accessList must be an array.');
109
+ return value.map((entry, index) => {
110
+ if (!isRecord(entry))
111
+ throw new Error(`accessList[${index}] must be an object.`);
112
+ const address = parseAddressField(entry.address, `accessList[${index}].address`);
113
+ if (!address)
114
+ throw new Error(`accessList[${index}].address is required.`);
115
+ const storageKeys = parseHexArrayField(entry.storageKeys, `accessList[${index}].storageKeys`);
116
+ return {
117
+ address,
118
+ storageKeys: storageKeys ?? [],
119
+ };
120
+ });
121
+ };
122
+ // Dapp-supplied authorization entries are RPC-shaped (hex chainId/nonce/
123
+ // yParity) while viem's sendTransaction expects numbers — a silent
124
+ // passthrough would RLP-encode garbage, so malformed entries fail loudly.
125
+ const parseAuthorizationList = (value) => {
126
+ if (value === undefined) {
127
+ return undefined;
16
128
  }
17
- catch {
18
- return { raw: hex };
129
+ if (!Array.isArray(value)) {
130
+ throw new Error('authorizationList must be an array.');
19
131
  }
132
+ return value.map((entry, index) => {
133
+ const item = (entry ?? {});
134
+ const address = (item.address ?? item.contractAddress);
135
+ if (typeof address !== 'string' || !address.startsWith('0x')) {
136
+ throw new Error(`authorizationList[${index}] needs an address.`);
137
+ }
138
+ const toNumber = (raw, name) => {
139
+ if (typeof raw === 'number') {
140
+ return raw;
141
+ }
142
+ if (typeof raw === 'string' && raw.startsWith('0x')) {
143
+ return Number(BigInt(raw));
144
+ }
145
+ throw new Error(`authorizationList[${index}].${name} must be a number or 0x-hex string.`);
146
+ };
147
+ return {
148
+ address: address,
149
+ chainId: toNumber(item.chainId, 'chainId'),
150
+ nonce: toNumber(item.nonce, 'nonce'),
151
+ r: item.r,
152
+ s: item.s,
153
+ yParity: toNumber(item.yParity ?? 0, 'yParity'),
154
+ };
155
+ });
20
156
  };
21
- const parseParams = (request) => Array.isArray(request.params) ? [...request.params] : [];
22
157
  export class PrivateKeyRpcClient {
23
158
  account;
24
159
  chain;
@@ -26,8 +161,14 @@ export class PrivateKeyRpcClient {
26
161
  sentTransactionRequests = [];
27
162
  publicClient;
28
163
  walletClient;
164
+ rpcChainVerified = false;
29
165
  constructor(options) {
30
166
  this.chain = options.chain ?? sepolia;
167
+ if (!options.allowMainnet && !isTestChain(this.chain)) {
168
+ throw new Error(`PrivateKeyRpcClient refuses chain "${this.chain.name}" (id ${this.chain.id}) because it is not marked as a testnet. ` +
169
+ 'This client signs and broadcasts without confirmation prompts. Pass allowMainnet: true to target a production chain, ' +
170
+ 'or use a chain definition with testnet: true.');
171
+ }
31
172
  this.account = privateKeyToAccount(normalizePrivateKey(options.privateKey));
32
173
  const transport = http(options.rpcUrl);
33
174
  this.publicClient = createPublicClient({
@@ -43,11 +184,20 @@ export class PrivateKeyRpcClient {
43
184
  async request(request) {
44
185
  const params = parseParams(request);
45
186
  switch (request.method) {
187
+ // Answered locally: the client holds exactly one key, and remote RPC
188
+ // nodes answer [] (a needless network roundtrip that would also blind
189
+ // MockWalletController's account validation in live mode).
190
+ case 'eth_accounts':
191
+ return [this.account.address];
46
192
  case 'personal_sign': {
193
+ // Standard order is [message, address]; some legacy callers send
194
+ // [address, message]. When both params are addresses the request is
195
+ // ambiguous, so prefer the standard order and treat the first as the
196
+ // message.
47
197
  const [first, second] = params;
48
- const message = typeof first === 'string' && isAddress(first) && second !== undefined
49
- ? second
50
- : first;
198
+ const firstIsAddress = typeof first === 'string' && isAddress(first);
199
+ const secondIsAddress = typeof second === 'string' && isAddress(second);
200
+ const message = firstIsAddress && !secondIsAddress && second !== undefined ? second : first;
51
201
  return this.walletClient.signMessage({
52
202
  account: this.account,
53
203
  message: normalizeMessage(message),
@@ -60,6 +210,9 @@ export class PrivateKeyRpcClient {
60
210
  message: normalizeMessage(message),
61
211
  });
62
212
  }
213
+ // v3 payloads (no arrays or recursive structs) hash identically under
214
+ // v4 rules, so both versions share the same signing path.
215
+ case 'eth_signTypedData_v3':
63
216
  case 'eth_signTypedData_v4': {
64
217
  const [, typedData] = params;
65
218
  const parsed = typeof typedData === 'string'
@@ -73,34 +226,40 @@ export class PrivateKeyRpcClient {
73
226
  types: parsed.types,
74
227
  });
75
228
  }
229
+ case 'eth_signTypedData':
230
+ throw new Error('eth_signTypedData (legacy v1) is not supported by PrivateKeyRpcClient. Use eth_signTypedData_v4.');
231
+ // Also a broadcast — it must not slip past the chain check through the
232
+ // default passthrough.
233
+ case 'eth_sendRawTransaction': {
234
+ await this.assertRpcChainMatches();
235
+ const hash = (await this.publicClient.request(request));
236
+ this.sentTransactions.push(hash);
237
+ this.sentTransactionRequests.push({ hash });
238
+ return hash;
239
+ }
76
240
  case 'eth_sendTransaction': {
77
241
  const [transaction] = params;
78
242
  if (!transaction) {
79
243
  throw new Error('eth_sendTransaction requires a transaction object.');
80
244
  }
81
- const request = {
82
- account: this.account,
83
- chain: this.chain,
84
- to: transaction.to,
85
- data: transaction.data,
86
- value: transaction.value ? BigInt(transaction.value) : undefined,
87
- gas: transaction.gas ? BigInt(transaction.gas) : undefined,
88
- gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,
89
- nonce: transaction.nonce ? Number(BigInt(transaction.nonce)) : undefined,
90
- maxFeePerGas: transaction.maxFeePerGas
91
- ? BigInt(transaction.maxFeePerGas)
92
- : undefined,
93
- maxPriorityFeePerGas: transaction.maxPriorityFeePerGas
94
- ? BigInt(transaction.maxPriorityFeePerGas)
95
- : undefined,
96
- };
245
+ await this.assertRpcChainMatches();
246
+ const request = this.toSendTransactionRequest(transaction);
97
247
  const hash = await this.walletClient.sendTransaction(request);
98
248
  this.sentTransactions.push(hash);
99
249
  this.sentTransactionRequests.push({
250
+ accessList: request.accessList,
251
+ from: this.account.address,
252
+ gas: request.gas?.toString(),
253
+ gasPrice: request.gasPrice?.toString(),
100
254
  hash,
101
- to: transaction.to,
102
- data: transaction.data,
103
- value: transaction.value ? String(transaction.value) : undefined,
255
+ maxFeePerBlobGas: request.maxFeePerBlobGas?.toString(),
256
+ maxFeePerGas: request.maxFeePerGas?.toString(),
257
+ maxPriorityFeePerGas: request.maxPriorityFeePerGas?.toString(),
258
+ nonce: request.nonce,
259
+ to: request.to,
260
+ data: request.data,
261
+ type: request.type,
262
+ value: request.value?.toString(),
104
263
  });
105
264
  return hash;
106
265
  }
@@ -108,5 +267,61 @@ export class PrivateKeyRpcClient {
108
267
  return this.publicClient.request(request);
109
268
  }
110
269
  }
270
+ /** Read-only viem public client backing this wallet (matchers, receipt waits). */
271
+ get client() {
272
+ return this.publicClient;
273
+ }
274
+ /** Signs an EIP-7702 authorization with this client's local account. */
275
+ async signAuthorization(options) {
276
+ return this.walletClient.signAuthorization({
277
+ account: this.account,
278
+ contractAddress: options.contractAddress,
279
+ chainId: options.chainId,
280
+ nonce: options.nonce,
281
+ executor: options.executor,
282
+ });
283
+ }
284
+ // A mismatched rpcUrl/chain pair must fail loudly before anything is
285
+ // broadcast; success is cached, failures retry so a transient RPC error
286
+ // does not poison the client.
287
+ async assertRpcChainMatches() {
288
+ if (this.rpcChainVerified) {
289
+ return;
290
+ }
291
+ const reportedChainId = await this.publicClient.getChainId();
292
+ if (reportedChainId !== this.chain.id) {
293
+ throw new Error(`The RPC endpoint reports chain id ${reportedChainId} but this client is configured for "${this.chain.name}" (id ${this.chain.id}). ` +
294
+ 'Refusing to broadcast. Check the rpcUrl and chain options.');
295
+ }
296
+ this.rpcChainVerified = true;
297
+ }
298
+ toSendTransactionRequest(transaction) {
299
+ const from = parseAddressField(transaction.from, 'from');
300
+ if (from && from.toLowerCase() !== this.account.address.toLowerCase()) {
301
+ throw providerError(4100, `eth_sendTransaction requested from ${from}, but this PrivateKeyRpcClient only controls ${this.account.address}.`);
302
+ }
303
+ const chainId = parseChainId(transaction.chainId);
304
+ if (chainId !== undefined && chainId !== this.chain.id) {
305
+ throw new Error(`eth_sendTransaction chainId ${chainId} does not match configured chain "${this.chain.name}" (id ${this.chain.id}).`);
306
+ }
307
+ return {
308
+ account: this.account,
309
+ accessList: parseAccessList(transaction.accessList),
310
+ authorizationList: parseAuthorizationList(transaction.authorizationList),
311
+ blobVersionedHashes: parseHexArrayField(transaction.blobVersionedHashes, 'blobVersionedHashes'),
312
+ blobs: parseHexArrayField(transaction.blobs, 'blobs'),
313
+ chain: this.chain,
314
+ data: parseHexField(transaction.data ?? transaction.input, 'data'),
315
+ gas: parseQuantity(transaction.gas, 'gas'),
316
+ gasPrice: parseQuantity(transaction.gasPrice, 'gasPrice'),
317
+ maxFeePerBlobGas: parseQuantity(transaction.maxFeePerBlobGas, 'maxFeePerBlobGas'),
318
+ maxFeePerGas: parseQuantity(transaction.maxFeePerGas, 'maxFeePerGas'),
319
+ maxPriorityFeePerGas: parseQuantity(transaction.maxPriorityFeePerGas, 'maxPriorityFeePerGas'),
320
+ nonce: parseIndex(transaction.nonce, 'nonce'),
321
+ to: parseNullableAddressField(transaction.to, 'to'),
322
+ type: parseTransactionType(transaction.type),
323
+ value: parseQuantity(transaction.value, 'value'),
324
+ };
325
+ }
111
326
  }
112
327
  //# sourceMappingURL=private-key-rpc-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"private-key-rpc-client.js","sourceRoot":"","sources":["../src/private-key-rpc-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"private-key-rpc-client.js","sourceRoot":"","sources":["../src/private-key-rpc-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { type RealWalletExtensionLaunchOptions, type RealWalletExtensionSession } from './real-wallet-extension.js';
2
+ import { type RealWalletSession, type RealWalletSetup, type WalletGeneration } from './real-wallet.js';
3
+ export type BuildWalletProfileOptions = {
4
+ /** Unpacked MetaMask extension directory (see prepareMetaMaskExtension). */
5
+ extensionPath: string;
6
+ /** Wallet setup; seedPhrase is required to build a profile. */
7
+ setup: RealWalletSetup;
8
+ /** Directory cached profiles live in. Defaults to ~/.cache/web3-tester/profiles. */
9
+ cacheDir?: string;
10
+ /**
11
+ * Run the one-time onboarding headless. No default — set it here or via
12
+ * WEB3_TESTER_REAL_WALLET_HEADLESS=true|false (see RealWalletLaunchOptions).
13
+ */
14
+ headless?: boolean;
15
+ /**
16
+ * UI generation to drive during onboarding/customization. Defaults to the
17
+ * extension manifest's major version; set it (matching the per-test launch)
18
+ * for custom builds whose manifest version does not reflect their UI.
19
+ */
20
+ generation?: WalletGeneration;
21
+ /** Rebuild even if a cached profile exists. */
22
+ force?: boolean;
23
+ /**
24
+ * One-time profile customization (import keys, add accounts/networks/
25
+ * tokens) baked into the cached profile — `key` joins the cache key, so
26
+ * bump it whenever `run` changes. The builder waits for extension state to
27
+ * flush to disk (13.x persists to IndexedDB with a debounce) before
28
+ * closing, so mutations survive profile close. Note: whatever account/
29
+ * network `run` leaves selected is what every cloned per-test profile
30
+ * boots with — switch back to the primary account before returning if
31
+ * tests expect the defaults.
32
+ */
33
+ customize?: {
34
+ key: string;
35
+ run(session: RealWalletSession): Promise<void>;
36
+ };
37
+ };
38
+ export type BuildWalletExtensionProfileOptions = Omit<RealWalletExtensionLaunchOptions, 'profileDir'> & {
39
+ /**
40
+ * User-controlled cache identity for the setup callback and any external
41
+ * wallet state it depends on (seed phrase, imported key, test account,
42
+ * network config, etc.). Bump this whenever setup changes.
43
+ */
44
+ cacheKey: string;
45
+ /** Directory cached profiles live in. Defaults to ~/.cache/web3-tester/profiles. */
46
+ cacheDir?: string;
47
+ /** Rebuild even if a cached profile exists. */
48
+ force?: boolean;
49
+ /**
50
+ * One-time extension setup baked into the cached profile. Use this to
51
+ * unlock/import/onboard Rabby, Coinbase Wallet, Phantom, or other
52
+ * non-MetaMask Chromium wallets with wallet-specific Playwright locators.
53
+ */
54
+ setup?: {
55
+ run(session: RealWalletExtensionSession): Promise<void>;
56
+ };
57
+ /**
58
+ * Wait for extension storage writes before closing. Defaults to true when
59
+ * setup is provided, false otherwise. Pass false for setup callbacks that do
60
+ * not mutate persisted extension state.
61
+ */
62
+ waitForState?: boolean | {
63
+ quietMs?: number;
64
+ timeoutMs?: number;
65
+ };
66
+ };
67
+ /**
68
+ * Polls the profile's extension storage (IndexedDB leveldb + blob and Local
69
+ * Extension Settings) from Node until a write newer than `since` lands and
70
+ * the directories stay quiet for `quietMs` (default 1500ms — 500ms of margin
71
+ * above MetaMask 13.x's verified 1000ms OperationSafener debounce). Times
72
+ * out silently; the customize-persistence smoke test is the regression trap
73
+ * for a missed flush.
74
+ */
75
+ export declare function waitForExtensionStatePersisted(profileDir: string, extensionId: string, options?: {
76
+ since?: number;
77
+ quietMs?: number;
78
+ timeoutMs?: number;
79
+ }): Promise<void>;
80
+ export declare const defaultProfileCacheDir: () => string;
81
+ /**
82
+ * Builds (once) and returns a cached, fully onboarded MetaMask profile
83
+ * directory keyed by (seed phrase, password, extension version). The first
84
+ * call walks MetaMask onboarding in a real browser; subsequent calls return
85
+ * instantly. Use cloneWalletProfile to obtain a disposable per-test copy —
86
+ * never launch the cached directory directly.
87
+ */
88
+ export declare function buildWalletProfile(options: BuildWalletProfileOptions): Promise<string>;
89
+ /**
90
+ * Builds (once) and returns a cached profile for any unpacked Chromium wallet
91
+ * extension. The caller owns wallet-specific onboarding/unlock selectors in
92
+ * `setup.run`; this helper only supplies the persistent profile, extension
93
+ * launch, cache locking, ready marker, and optional extension-state flush.
94
+ * Use cloneWalletProfile to obtain disposable per-test copies.
95
+ */
96
+ export declare function buildWalletExtensionProfile(options: BuildWalletExtensionProfileOptions): Promise<string>;
97
+ /**
98
+ * Copies a cached profile into a disposable directory (per test or per
99
+ * worker) so parallel runs never collide on Chromium's profile singleton
100
+ * lock and tests cannot dirty the cache.
101
+ */
102
+ export declare function cloneWalletProfile(cachedProfileDir: string, targetDir: string): Promise<string>;
103
+ //# sourceMappingURL=real-wallet-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-wallet-cache.d.ts","sourceRoot":"","sources":["../src/real-wallet-cache.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AA0B1B,MAAM,MAAM,yBAAyB,GAAG;IACtC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,KAAK,EAAE,eAAe,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,IAAI,CAAC,gCAAgC,EAAE,YAAY,CAAC,GAAG;IACtG;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACpE;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,OAAO,CAAC,IAAI,CAAC,CAsDf;AAED,eAAO,MAAM,sBAAsB,QAAO,MACoB,CAAC;AA+H/D;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD5F;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,MAAM,CAAC,CAyCjB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}