@marigoldlabs/web3-tester 0.1.2 → 0.4.1
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/.env.example +26 -17
- package/LICENSE +21 -0
- package/README.md +167 -41
- package/dist/anvil.d.ts +90 -2
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +215 -13
- package/dist/anvil.js.map +1 -1
- package/dist/contracts/test-erc20.d.ts +227 -0
- package/dist/contracts/test-erc20.d.ts.map +1 -0
- package/dist/contracts/test-erc20.js +8 -0
- package/dist/contracts/test-erc20.js.map +1 -0
- package/dist/erc20.d.ts +38 -0
- package/dist/erc20.d.ts.map +1 -0
- package/dist/erc20.js +229 -0
- package/dist/erc20.js.map +1 -0
- package/dist/fixtures.d.ts +44 -2
- package/dist/fixtures.d.ts.map +1 -1
- package/dist/fixtures.js +162 -17
- package/dist/fixtures.js.map +1 -1
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/injected-provider.d.ts.map +1 -1
- package/dist/injected-provider.js +142 -79
- package/dist/injected-provider.js.map +1 -1
- package/dist/live-fixtures.d.ts +32 -3
- package/dist/live-fixtures.d.ts.map +1 -1
- package/dist/live-fixtures.js +64 -27
- package/dist/live-fixtures.js.map +1 -1
- package/dist/matchers.d.ts +90 -0
- package/dist/matchers.d.ts.map +1 -0
- package/dist/matchers.js +268 -0
- package/dist/matchers.js.map +1 -0
- package/dist/metamask-extension.d.ts +34 -0
- package/dist/metamask-extension.d.ts.map +1 -0
- package/dist/metamask-extension.js +97 -0
- package/dist/metamask-extension.js.map +1 -0
- package/dist/mock-wallet-controller.d.ts +205 -3
- package/dist/mock-wallet-controller.d.ts.map +1 -1
- package/dist/mock-wallet-controller.js +843 -46
- package/dist/mock-wallet-controller.js.map +1 -1
- package/dist/private-key-rpc-client.d.ts +1730 -0
- package/dist/private-key-rpc-client.d.ts.map +1 -1
- package/dist/private-key-rpc-client.js +105 -12
- package/dist/private-key-rpc-client.js.map +1 -1
- package/dist/real-wallet-cache.d.ts +65 -0
- package/dist/real-wallet-cache.d.ts.map +1 -0
- package/dist/real-wallet-cache.js +245 -0
- package/dist/real-wallet-cache.js.map +1 -0
- package/dist/real-wallet-fixtures.d.ts +52 -0
- package/dist/real-wallet-fixtures.d.ts.map +1 -0
- package/dist/real-wallet-fixtures.js +73 -0
- package/dist/real-wallet-fixtures.js.map +1 -0
- package/dist/real-wallet.d.ts +123 -14
- package/dist/real-wallet.d.ts.map +1 -1
- package/dist/real-wallet.js +1336 -57
- package/dist/real-wallet.js.map +1 -1
- package/dist/transactions.d.ts +118 -0
- package/dist/transactions.d.ts.map +1 -0
- package/dist/transactions.js +207 -0
- package/dist/transactions.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/walletconnect.d.ts +206 -0
- package/dist/walletconnect.d.ts.map +1 -0
- package/dist/walletconnect.js +359 -0
- package/dist/walletconnect.js.map +1 -0
- package/examples/live-sepolia.spec.ts +20 -1
- package/package.json +62 -6
- package/docs/API.md +0 -223
- package/docs/ARCHITECTURE.md +0 -81
- package/docs/CONSUMING_FROM_FJORD.md +0 -123
- package/docs/FJORD_LIVE_QA.md +0 -87
- package/docs/RELEASE_CHECKLIST.md +0 -55
|
@@ -1,17 +1,112 @@
|
|
|
1
1
|
import type { Page } from '@playwright/test';
|
|
2
2
|
import { type Address, type Hex } from 'viem';
|
|
3
|
-
import type { RpcClient, WalletProviderInfo } from './types.js';
|
|
3
|
+
import type { JsonRpcRequest, RpcClient, WalletProviderInfo } from './types.js';
|
|
4
4
|
export type RejectionRule = {
|
|
5
5
|
methods?: readonly string[];
|
|
6
6
|
message?: string;
|
|
7
7
|
};
|
|
8
|
+
export type HeldRequest = {
|
|
9
|
+
method: string;
|
|
10
|
+
params: readonly unknown[];
|
|
11
|
+
approve: () => void;
|
|
12
|
+
reject: (message?: string) => void;
|
|
13
|
+
};
|
|
14
|
+
export type SentTransactionRecord = {
|
|
15
|
+
hash: Hex;
|
|
16
|
+
/** The wallet's active chain when the transaction was sent. */
|
|
17
|
+
chainId: Hex;
|
|
18
|
+
from?: Address;
|
|
19
|
+
to?: Hex;
|
|
20
|
+
data?: Hex;
|
|
21
|
+
value?: string;
|
|
22
|
+
};
|
|
23
|
+
/** A chain backend: any RpcClient, or an http(s) RPC URL string. */
|
|
24
|
+
export type ChainBackend = RpcClient | string;
|
|
25
|
+
export type AtomicCapabilityStatus = 'supported' | 'ready' | 'unsupported';
|
|
26
|
+
export type Eip5792Options = {
|
|
27
|
+
/** Master switch. false = legacy wallet: all four methods throw 4200. Default: true. */
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
/** Atomic capability advertised for backed chains. Default: 'supported'. */
|
|
30
|
+
atomic?: AtomicCapabilityStatus;
|
|
31
|
+
/** Extra/override capability objects merged per chain ('0x0' = cross-chain per spec). */
|
|
32
|
+
capabilities?: Record<Hex, Record<string, unknown>>;
|
|
33
|
+
/** Batches with more calls throw 5740. Default: 100. */
|
|
34
|
+
maxCallsPerBatch?: number;
|
|
35
|
+
};
|
|
36
|
+
export type CallsBatchRecord = {
|
|
37
|
+
id: Hex;
|
|
38
|
+
chainId: Hex;
|
|
39
|
+
from: Address;
|
|
40
|
+
version: '2.0.0';
|
|
41
|
+
/** Execution mode actually used (the spec requires it to reflect reality). */
|
|
42
|
+
atomic: boolean;
|
|
43
|
+
/** What the dapp requested. */
|
|
44
|
+
atomicRequired: boolean;
|
|
45
|
+
capabilities?: Record<string, unknown>;
|
|
46
|
+
calls: readonly {
|
|
47
|
+
to?: Hex;
|
|
48
|
+
data?: Hex;
|
|
49
|
+
value?: Hex;
|
|
50
|
+
}[];
|
|
51
|
+
/** Submitted hashes in call order (rolled-back hashes included). */
|
|
52
|
+
txHashes: readonly Hex[];
|
|
53
|
+
/**
|
|
54
|
+
* 'atomic-rollback': something landed and everything was reverted (500).
|
|
55
|
+
* 'nothing-landed': no call made it onchain (400). Otherwise the status is
|
|
56
|
+
* computed from receipts.
|
|
57
|
+
*/
|
|
58
|
+
failure?: 'atomic-rollback' | 'nothing-landed';
|
|
59
|
+
};
|
|
60
|
+
export type HttpRpcClientOptions = {
|
|
61
|
+
/** Request timeout in ms. Defaults to viem's transport default (10s). */
|
|
62
|
+
timeout?: number;
|
|
63
|
+
/** Retry count. Defaults to 0 so dead endpoints fail deterministically. */
|
|
64
|
+
retryCount?: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Adapter: EIP-1193 RpcClient over a plain JSON-RPC URL (viem http
|
|
68
|
+
* transport). URL-backed chains serve reads, eth_sendRawTransaction, and
|
|
69
|
+
* dapp-side flows; node-side signing (personal_sign, eth_sendTransaction)
|
|
70
|
+
* needs a node that signs — back those chains with Anvil or a
|
|
71
|
+
* PrivateKeyRpcClient instead.
|
|
72
|
+
*/
|
|
73
|
+
export declare function httpRpcClient(url: string, options?: HttpRpcClientOptions): RpcClient;
|
|
8
74
|
export type MockWalletControllerOptions = {
|
|
9
75
|
accounts: readonly Address[];
|
|
10
76
|
chainId: number | Hex;
|
|
77
|
+
/**
|
|
78
|
+
* Additional chains the wallet can switch to, keyed by chain id (number or
|
|
79
|
+
* 0x-hex). The constructor's rpcClient remains the backend for `chainId`;
|
|
80
|
+
* listing `chainId` here too is a construction error. Forwarded calls
|
|
81
|
+
* route to the active chain's backend; a known-but-unbacked chain throws
|
|
82
|
+
* 4901 (EIP-1193 "Chain Disconnected").
|
|
83
|
+
*/
|
|
84
|
+
chains?: Readonly<Record<number | Hex, ChainBackend>>;
|
|
85
|
+
/**
|
|
86
|
+
* Honor dapp-supplied rpcUrls[0] in wallet_addEthereumChain: the URL is
|
|
87
|
+
* probed (its eth_chainId must match, per EIP-3085) and registered as the
|
|
88
|
+
* chain's backend. Default false: the chain id is registered (so the
|
|
89
|
+
* 4902 -> add -> switch flow completes) but forwarded calls on it throw
|
|
90
|
+
* 4901 until a backend is registered via `chains` or addChain(). Never
|
|
91
|
+
* enable this for wallets fronting a real key.
|
|
92
|
+
*/
|
|
93
|
+
trustDappRpcUrls?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* EIP-5792 support (wallet_getCapabilities/sendCalls/getCallsStatus/
|
|
96
|
+
* showCallsStatus). Enabled by default, like 2026 MetaMask; pass false for
|
|
97
|
+
* a legacy wallet that answers 4200.
|
|
98
|
+
*/
|
|
99
|
+
eip5792?: boolean | Eip5792Options;
|
|
11
100
|
providerInfo?: Partial<WalletProviderInfo>;
|
|
12
101
|
additionalProviders?: readonly Partial<WalletProviderInfo>[];
|
|
13
102
|
autoApprove?: boolean;
|
|
14
103
|
connected?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* When set, only frames whose origin matches an entry (URL or origin
|
|
106
|
+
* string) can reach the wallet; everything else gets a 4100 error. Leave
|
|
107
|
+
* unset to serve every frame, like a real extension.
|
|
108
|
+
*/
|
|
109
|
+
allowedOrigins?: readonly string[];
|
|
15
110
|
};
|
|
16
111
|
export declare class MockWalletController {
|
|
17
112
|
private readonly page;
|
|
@@ -21,21 +116,128 @@ export declare class MockWalletController {
|
|
|
21
116
|
private connected;
|
|
22
117
|
private approveRequests;
|
|
23
118
|
private rejectionQueue;
|
|
119
|
+
private holdQueue;
|
|
120
|
+
private approvalQueue;
|
|
121
|
+
private readonly knownChainIds;
|
|
122
|
+
private readonly chainBackends;
|
|
123
|
+
private readonly trustDappRpcUrls;
|
|
124
|
+
private readonly allowedOrigins?;
|
|
125
|
+
private readonly providerEventListeners;
|
|
126
|
+
private sendQueue;
|
|
127
|
+
private nodeAccountsCache?;
|
|
128
|
+
private readonly eip5792;
|
|
129
|
+
private atomicStatus;
|
|
130
|
+
private upgradeRejectionArmed;
|
|
131
|
+
private readonly callBatches;
|
|
132
|
+
/** Every accepted wallet_sendCalls batch, for test assertions. */
|
|
133
|
+
readonly sentCallBatches: CallsBatchRecord[];
|
|
134
|
+
/** Ids the page passed to wallet_showCallsStatus (a headless no-op). */
|
|
135
|
+
readonly shownCallsStatusIds: Hex[];
|
|
136
|
+
readonly sentTransactions: Hex[];
|
|
137
|
+
readonly sentTransactionRequests: SentTransactionRecord[];
|
|
24
138
|
constructor(page: Page, rpcClient: RpcClient, options: MockWalletControllerOptions);
|
|
25
139
|
readonly providerInfo: WalletProviderInfo;
|
|
26
140
|
readonly providerInfos: readonly WalletProviderInfo[];
|
|
27
141
|
get primaryAccount(): Address;
|
|
142
|
+
/** Current account list; index 0 is the selected account. */
|
|
143
|
+
get currentAccounts(): readonly Address[];
|
|
28
144
|
get currentChainId(): Hex;
|
|
145
|
+
/** Chain ids that currently have an RPC backend, canonical hex. */
|
|
146
|
+
get backedChainIds(): readonly Hex[];
|
|
147
|
+
/**
|
|
148
|
+
* Test-side chain registration (Synpress addNetwork analogue): registers
|
|
149
|
+
* the backend and marks the chain known — no approval gate, no probe, and
|
|
150
|
+
* re-registration overwrites (tests may rewire).
|
|
151
|
+
*/
|
|
152
|
+
addChain(chainId: number | Hex, backend: ChainBackend): void;
|
|
153
|
+
/**
|
|
154
|
+
* Dispatch a request arriving from a non-injected transport (e.g. a
|
|
155
|
+
* WalletConnect session). Approval gating applies exactly as for injected
|
|
156
|
+
* requests. When allowedOrigins is configured, `context.origin` is
|
|
157
|
+
* enforced; an absent origin counts as "null" and is refused.
|
|
158
|
+
* `bypassOriginCheck` is the deliberate opt-out for transports that cannot
|
|
159
|
+
* attest origins — approval gating still applies.
|
|
160
|
+
*/
|
|
161
|
+
handleExternalRequest(request: JsonRpcRequest, context?: {
|
|
162
|
+
origin?: string;
|
|
163
|
+
bypassOriginCheck?: boolean;
|
|
164
|
+
}): Promise<unknown>;
|
|
165
|
+
/**
|
|
166
|
+
* Observe provider events (chainChanged, accountsChanged, connect,
|
|
167
|
+
* disconnect) node-side — the hook non-injected transports use to push
|
|
168
|
+
* session events. Dispatch is fire-and-forget; listener errors are
|
|
169
|
+
* swallowed. Returns an unsubscribe function.
|
|
170
|
+
*/
|
|
171
|
+
onProviderEvent(listener: (event: string, payload: unknown) => void): () => void;
|
|
29
172
|
injectMockProvider(): Promise<void>;
|
|
30
173
|
autoApprove(enabled?: boolean): void;
|
|
174
|
+
/**
|
|
175
|
+
* One-shot: the next atomicRequired wallet_sendCalls while the atomic
|
|
176
|
+
* capability is 'ready' throws 5750 (user rejected the EOA upgrade)
|
|
177
|
+
* instead of upgrading to 'supported'.
|
|
178
|
+
*/
|
|
179
|
+
simulateAtomicUpgradeRejection(): void;
|
|
180
|
+
/**
|
|
181
|
+
* Arms approval for the next matching request while autoApprove is off —
|
|
182
|
+
* the explicit per-call grant for real-key (live) wallets. Queued
|
|
183
|
+
* rejections and holds still take precedence.
|
|
184
|
+
*
|
|
185
|
+
* A grant without `match` approves whatever matching request arrives first
|
|
186
|
+
* and never expires, so any page script (including a third-party include on
|
|
187
|
+
* an allowed origin) can race the dapp for it. Pass `match` to bind the
|
|
188
|
+
* grant to the expected payload, or use holdNextRequest() to inspect the
|
|
189
|
+
* request before deciding.
|
|
190
|
+
*/
|
|
191
|
+
approveNext(methods?: string | readonly string[], match?: (method: string, params: readonly unknown[]) => boolean): void;
|
|
31
192
|
simulateRejection(methods?: string | readonly string[], message?: string): Promise<void>;
|
|
32
|
-
|
|
193
|
+
/**
|
|
194
|
+
* Intercepts the next matching request and keeps it pending until the test
|
|
195
|
+
* approves or rejects it — for asserting "confirm in your wallet" UI states.
|
|
196
|
+
* Resolves once the page actually issues the request.
|
|
197
|
+
*/
|
|
198
|
+
holdNextRequest(methods?: string | readonly string[]): Promise<HeldRequest>;
|
|
199
|
+
/**
|
|
200
|
+
* Resolves with the hash of the next transaction the page submits after
|
|
201
|
+
* this call. Invoke before triggering the dapp action, then await it.
|
|
202
|
+
*/
|
|
203
|
+
waitForNextTransaction(options?: {
|
|
204
|
+
timeoutMs?: number;
|
|
205
|
+
}): Promise<Hex>;
|
|
206
|
+
/**
|
|
207
|
+
* Replaces the account set (and reconnects a disconnected wallet — unlike
|
|
208
|
+
* switchAccount, which only reorders). Accounts are validated against the
|
|
209
|
+
* backing node's eth_accounts; pass { allowUnknownAccounts: true } only
|
|
210
|
+
* for custom RpcClients whose account list the probe cannot see.
|
|
211
|
+
*/
|
|
212
|
+
setAccounts(accounts: readonly Address[], options?: {
|
|
213
|
+
allowUnknownAccounts?: boolean;
|
|
214
|
+
}): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* Re-selects one of the wallet's existing accounts: moves it to index 0
|
|
217
|
+
* (MetaMask orders eth_accounts most-recently-selected first) and emits
|
|
218
|
+
* accountsChanged with the reordered array. No event when it is already
|
|
219
|
+
* selected, and — unlike setAccounts — no reconnect while disconnected:
|
|
220
|
+
* the reorder stays internal until the wallet reconnects.
|
|
221
|
+
*/
|
|
222
|
+
switchAccount(address: Address): Promise<void>;
|
|
33
223
|
disconnect(): Promise<void>;
|
|
34
224
|
reconnect(): Promise<void>;
|
|
35
225
|
switchNetwork(chainId: number | Hex): Promise<void>;
|
|
36
226
|
private emit;
|
|
37
|
-
private
|
|
227
|
+
private clientForChain;
|
|
228
|
+
private get activeRpcClient();
|
|
229
|
+
private enqueueSend;
|
|
230
|
+
private assertEip5792Enabled;
|
|
231
|
+
private batchForId;
|
|
232
|
+
private handleSendCalls;
|
|
233
|
+
private executeBatch;
|
|
234
|
+
private buildCallsStatus;
|
|
235
|
+
private consumeRule;
|
|
236
|
+
private fetchNodeAccounts;
|
|
237
|
+
private assertAccountsKnownToNode;
|
|
238
|
+
private assertOriginAllowed;
|
|
38
239
|
private assertUserApproved;
|
|
240
|
+
private permissionResponse;
|
|
39
241
|
private handleRpcRequest;
|
|
40
242
|
}
|
|
41
243
|
//# sourceMappingURL=mock-wallet-controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-wallet-controller.d.ts","sourceRoot":"","sources":["../src/mock-wallet-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mock-wallet-controller.d.ts","sourceRoot":"","sources":["../src/mock-wallet-controller.ts"],"names":[],"mappings":"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"}
|