@walletmesh/aztec-rpc-wallet 0.3.1 → 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.
Files changed (185) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +290 -228
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/client/aztec-dapp-wallet.d.ts +401 -0
  5. package/dist/client/aztec-dapp-wallet.d.ts.map +1 -0
  6. package/dist/client/aztec-dapp-wallet.js +705 -0
  7. package/dist/client/aztec-router-provider.d.ts +58 -0
  8. package/dist/client/aztec-router-provider.d.ts.map +1 -0
  9. package/dist/client/aztec-router-provider.js +62 -0
  10. package/dist/client/helpers.d.ts +44 -0
  11. package/dist/client/helpers.d.ts.map +1 -0
  12. package/dist/client/helpers.js +79 -0
  13. package/dist/client/register-serializers.d.ts +41 -0
  14. package/dist/client/register-serializers.d.ts.map +1 -0
  15. package/dist/client/register-serializers.js +97 -0
  16. package/dist/contractArtifactCache.d.ts +49 -32
  17. package/dist/contractArtifactCache.d.ts.map +1 -1
  18. package/dist/contractArtifactCache.js +47 -34
  19. package/dist/errors.d.ts +50 -8
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +50 -10
  22. package/dist/index.d.ts +53 -40
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +52 -17
  25. package/dist/types.d.ts +345 -270
  26. package/dist/types.d.ts.map +1 -1
  27. package/dist/types.js +10 -8
  28. package/dist/wallet/create-node.d.ts +73 -0
  29. package/dist/wallet/create-node.d.ts.map +1 -0
  30. package/dist/wallet/create-node.js +99 -0
  31. package/dist/wallet/handlers/account.d.ts +67 -0
  32. package/dist/wallet/handlers/account.d.ts.map +1 -0
  33. package/dist/wallet/handlers/account.js +85 -0
  34. package/dist/wallet/handlers/contract-interaction.d.ts +77 -0
  35. package/dist/wallet/handlers/contract-interaction.d.ts.map +1 -0
  36. package/dist/wallet/handlers/contract-interaction.js +219 -0
  37. package/dist/wallet/handlers/contract.d.ts +96 -0
  38. package/dist/wallet/handlers/contract.d.ts.map +1 -0
  39. package/dist/wallet/handlers/contract.js +146 -0
  40. package/dist/wallet/handlers/event.d.ts +62 -0
  41. package/dist/wallet/handlers/event.d.ts.map +1 -0
  42. package/dist/wallet/handlers/event.js +85 -0
  43. package/dist/wallet/handlers/index.d.ts +88 -0
  44. package/dist/wallet/handlers/index.d.ts.map +1 -0
  45. package/dist/wallet/handlers/index.js +47 -0
  46. package/dist/wallet/handlers/node.d.ts +117 -0
  47. package/dist/wallet/handlers/node.d.ts.map +1 -0
  48. package/dist/wallet/handlers/node.js +196 -0
  49. package/dist/wallet/handlers/senders.d.ts +70 -0
  50. package/dist/wallet/handlers/senders.d.ts.map +1 -0
  51. package/dist/wallet/handlers/senders.js +92 -0
  52. package/dist/wallet/handlers/transaction.d.ts +123 -0
  53. package/dist/wallet/handlers/transaction.d.ts.map +1 -0
  54. package/dist/wallet/handlers/transaction.js +191 -0
  55. package/dist/wallet/serializers.d.ts +75 -0
  56. package/dist/wallet/serializers.d.ts.map +1 -0
  57. package/dist/wallet/serializers.js +498 -0
  58. package/docs/README.md +290 -229
  59. package/docs/classes/AztecDappWallet.md +1304 -0
  60. package/docs/classes/AztecRouterProvider.md +1058 -0
  61. package/docs/classes/AztecWalletError.md +124 -47
  62. package/docs/classes/ContractArtifactCache.md +48 -31
  63. package/docs/functions/connectAztec.md +62 -0
  64. package/docs/functions/createAztecWallet.md +46 -0
  65. package/docs/functions/createAztecWalletNode.md +96 -0
  66. package/docs/functions/registerAztecSerializers.md +61 -0
  67. package/docs/functions/registerWalletAztecSerializers.md +39 -0
  68. package/docs/globals.md +16 -14
  69. package/docs/interfaces/AztecHandlerContext.md +54 -0
  70. package/docs/interfaces/AztecWalletContext.md +50 -0
  71. package/docs/interfaces/AztecWalletMethodMap.md +470 -477
  72. package/docs/type-aliases/AztecChainId.md +16 -3
  73. package/docs/variables/ALL_AZTEC_METHODS.md +20 -0
  74. package/docs/variables/AztecWalletErrorMap.md +9 -4
  75. package/docs/variables/AztecWalletSerializer.md +45 -0
  76. package/package.json +11 -9
  77. package/src/client/aztec-dapp-wallet.test.ts +628 -0
  78. package/src/client/aztec-dapp-wallet.ts +879 -0
  79. package/src/client/aztec-router-provider.test.ts +235 -0
  80. package/src/client/aztec-router-provider.ts +64 -0
  81. package/src/client/helpers.test.ts +187 -0
  82. package/src/client/helpers.ts +91 -0
  83. package/src/client/register-serializers.ts +108 -0
  84. package/src/contractArtifactCache.test.ts +21 -10
  85. package/src/contractArtifactCache.ts +54 -35
  86. package/src/errors.ts +58 -10
  87. package/src/index.test.ts +2 -6
  88. package/src/index.ts +73 -37
  89. package/src/types.ts +379 -217
  90. package/src/wallet/create-node.test.ts +332 -0
  91. package/src/wallet/create-node.ts +120 -0
  92. package/src/wallet/handlers/account.test.ts +172 -0
  93. package/src/wallet/handlers/account.ts +99 -0
  94. package/src/wallet/handlers/contract-interaction.test.ts +248 -0
  95. package/src/wallet/handlers/contract-interaction.ts +269 -0
  96. package/src/wallet/handlers/contract.test.ts +245 -0
  97. package/src/wallet/handlers/contract.ts +174 -0
  98. package/src/wallet/handlers/event.test.ts +216 -0
  99. package/src/wallet/handlers/event.ts +99 -0
  100. package/src/wallet/handlers/index.ts +84 -0
  101. package/src/wallet/handlers/node.test.ts +304 -0
  102. package/src/wallet/handlers/node.ts +230 -0
  103. package/src/wallet/handlers/senders.test.ts +172 -0
  104. package/src/wallet/handlers/senders.ts +106 -0
  105. package/src/wallet/handlers/transaction.test.ts +371 -0
  106. package/src/wallet/handlers/transaction.ts +239 -0
  107. package/src/wallet/serializers.test.ts +253 -0
  108. package/src/wallet/serializers.ts +584 -0
  109. package/typedoc.json +23 -1
  110. package/dist/aztecRemoteWallet.d.ts +0 -70
  111. package/dist/aztecRemoteWallet.d.ts.map +0 -1
  112. package/dist/aztecRemoteWallet.js +0 -335
  113. package/dist/chainProvider.d.ts +0 -56
  114. package/dist/chainProvider.d.ts.map +0 -1
  115. package/dist/chainProvider.js +0 -98
  116. package/dist/handlers/aztecAccountWallet.d.ts +0 -4
  117. package/dist/handlers/aztecAccountWallet.d.ts.map +0 -1
  118. package/dist/handlers/aztecAccountWallet.js +0 -295
  119. package/dist/handlers/transactions.d.ts +0 -21
  120. package/dist/handlers/transactions.d.ts.map +0 -1
  121. package/dist/handlers/transactions.js +0 -98
  122. package/dist/handlers.d.ts +0 -27
  123. package/dist/handlers.d.ts.map +0 -1
  124. package/dist/handlers.js +0 -55
  125. package/dist/provider.d.ts +0 -105
  126. package/dist/provider.d.ts.map +0 -1
  127. package/dist/provider.js +0 -160
  128. package/dist/serializers/account.d.ts +0 -164
  129. package/dist/serializers/account.d.ts.map +0 -1
  130. package/dist/serializers/account.js +0 -244
  131. package/dist/serializers/contract.d.ts +0 -62
  132. package/dist/serializers/contract.d.ts.map +0 -1
  133. package/dist/serializers/contract.js +0 -130
  134. package/dist/serializers/index.d.ts +0 -21
  135. package/dist/serializers/index.d.ts.map +0 -1
  136. package/dist/serializers/index.js +0 -154
  137. package/dist/serializers/log.d.ts +0 -66
  138. package/dist/serializers/log.d.ts.map +0 -1
  139. package/dist/serializers/log.js +0 -222
  140. package/dist/serializers/note.d.ts +0 -124
  141. package/dist/serializers/note.d.ts.map +0 -1
  142. package/dist/serializers/note.js +0 -208
  143. package/dist/serializers/transaction.d.ts +0 -99
  144. package/dist/serializers/transaction.d.ts.map +0 -1
  145. package/dist/serializers/transaction.js +0 -275
  146. package/dist/wallet.d.ts +0 -62
  147. package/dist/wallet.d.ts.map +0 -1
  148. package/dist/wallet.js +0 -77
  149. package/docs/classes/AztecChainProvider.md +0 -553
  150. package/docs/classes/AztecChainWallet.md +0 -409
  151. package/docs/classes/AztecProvider.md +0 -1112
  152. package/docs/interfaces/AztecWalletBaseMethodMap.md +0 -135
  153. package/docs/interfaces/AztecWalletEventMap.md +0 -17
  154. package/docs/type-aliases/AztecChainWalletMiddleware.md +0 -13
  155. package/docs/type-aliases/AztecWalletContext.md +0 -29
  156. package/docs/type-aliases/AztecWalletMethodHandler.md +0 -37
  157. package/docs/type-aliases/AztecWalletMiddleware.md +0 -13
  158. package/docs/type-aliases/AztecWalletRouterClient.md +0 -13
  159. package/docs/type-aliases/TransactionFunctionCall.md +0 -33
  160. package/docs/type-aliases/TransactionParams.md +0 -27
  161. package/src/aztecRemoteWallet.test.ts +0 -505
  162. package/src/aztecRemoteWallet.ts +0 -467
  163. package/src/chainProvider.test.ts +0 -401
  164. package/src/chainProvider.ts +0 -116
  165. package/src/handlers/aztecAccountWallet.test.ts +0 -650
  166. package/src/handlers/aztecAccountWallet.ts +0 -531
  167. package/src/handlers/transactions.ts +0 -124
  168. package/src/handlers.test.ts +0 -270
  169. package/src/handlers.ts +0 -70
  170. package/src/provider.test.ts +0 -277
  171. package/src/provider.ts +0 -189
  172. package/src/serializers/account.test.ts +0 -125
  173. package/src/serializers/account.ts +0 -301
  174. package/src/serializers/contract.test.ts +0 -24
  175. package/src/serializers/contract.ts +0 -183
  176. package/src/serializers/index.test.ts +0 -136
  177. package/src/serializers/index.ts +0 -191
  178. package/src/serializers/log.test.ts +0 -286
  179. package/src/serializers/log.ts +0 -292
  180. package/src/serializers/note.test.ts +0 -125
  181. package/src/serializers/note.ts +0 -250
  182. package/src/serializers/transaction.test.ts +0 -320
  183. package/src/serializers/transaction.ts +0 -409
  184. package/src/wallet.test.ts +0 -275
  185. package/src/wallet.ts +0 -94
@@ -0,0 +1,99 @@
1
+ import type { AztecHandlerContext } from './index.js';
2
+ import type { AztecWalletMethodMap } from '../../types.js';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+
5
+ const logger = createLogger('aztec-rpc-wallet:event');
6
+
7
+ /**
8
+ * Creates handlers for event-related Aztec wallet JSON-RPC methods.
9
+ * These handlers are responsible for querying private (encrypted) and public
10
+ * (unencrypted) events emitted by Aztec contracts.
11
+ *
12
+ * Each handler function receives an {@link AztecHandlerContext} which provides access
13
+ * to the {@link PXE} client, essential for event retrieval.
14
+ *
15
+ * @returns An object where keys are event-related method names
16
+ * (e.g., "aztec_getPrivateEvents", "aztec_getPublicEvents") and values are
17
+ * their corresponding handler functions.
18
+ * @see {@link AztecWalletMethodMap} for method definitions.
19
+ */
20
+ export function createEventHandlers() {
21
+ return {
22
+ /**
23
+ * Handles the "aztec_getPrivateEvents" JSON-RPC method.
24
+ * Retrieves encrypted private events emitted by a specific contract within a given
25
+ * block range, for a specified set of recipients.
26
+ *
27
+ * Private events are decrypted by the {@link PXE} using the viewing keys
28
+ * associated with the recipient addresses.
29
+ *
30
+ * @param ctx - The {@link AztecHandlerContext} containing the `pxe` instance.
31
+ * @param paramsTuple - A tuple containing parameters for querying private events.
32
+ * Defined by {@link AztecWalletMethodMap.aztec_getPrivateEvents.params}.
33
+ * @param paramsTuple.0 - The {@link AztecAddress} of the contract that emitted the events.
34
+ * @param paramsTuple.1 - The {@link EventMetadataDefinition} describing the event structure.
35
+ * @param paramsTuple.2 - The starting block number (inclusive) from which to query.
36
+ * @param paramsTuple.3 - The number of blocks to scan from the `from` block.
37
+ * @param paramsTuple.4 - An array of {@link AztecAddress} recipients whose events are to be fetched and decrypted.
38
+ * @returns A promise that resolves to an array of decoded private event data. The specific type
39
+ * of the event data depends on the `eventMetadata`.
40
+ * Type defined by {@link AztecWalletMethodMap.aztec_getPrivateEvents.result}.
41
+ * @throws {Error} If any required parameters are missing or invalid, though type checking
42
+ * and serializer validation should catch this earlier.
43
+ */
44
+ aztec_getPrivateEvents: async (
45
+ ctx: AztecHandlerContext,
46
+ paramsTuple: AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
47
+ ): Promise<AztecWalletMethodMap['aztec_getPrivateEvents']['result']> => {
48
+ const [contractAddress, eventMetadata, from, numBlocks, recipients] = paramsTuple;
49
+ logger.debug(
50
+ `[HANDLER] aztec_getPrivateEvents: contractAddress = ${contractAddress?.toString()}, from = ${from}, numBlocks = ${numBlocks}`,
51
+ );
52
+ // All parameters are mandatory in the tuple type definition.
53
+ // Add runtime checks if there's any doubt about them being undefined, though TS should catch.
54
+ if (
55
+ !contractAddress ||
56
+ !eventMetadata ||
57
+ from === undefined ||
58
+ numBlocks === undefined ||
59
+ !recipients
60
+ ) {
61
+ throw new Error('Invalid parameters received in tuple for aztec_getPrivateEvents');
62
+ }
63
+ return await ctx.pxe.getPrivateEvents(contractAddress, eventMetadata, from, numBlocks, recipients);
64
+ },
65
+
66
+ /**
67
+ * Handles the "aztec_getPublicEvents" JSON-RPC method.
68
+ * Retrieves unencrypted public events matching a specific {@link EventMetadataDefinition}
69
+ * starting from a given block number, up to a specified limit.
70
+ *
71
+ * Public events are visible to all network participants and are typically used for
72
+ * information that does not require privacy.
73
+ *
74
+ * @param ctx - The {@link AztecHandlerContext} containing the `pxe` instance.
75
+ * @param paramsTuple - A tuple containing parameters for querying public events.
76
+ * Defined by {@link AztecWalletMethodMap.aztec_getPublicEvents.params}.
77
+ * @param paramsTuple.0 - The {@link EventMetadataDefinition} describing the event structure.
78
+ * @param paramsTuple.1 - The starting block number (inclusive) from which to query.
79
+ * @param paramsTuple.2 - The maximum number of events to return.
80
+ * @returns A promise that resolves to an array of decoded public event data. The specific type
81
+ * of the event data depends on the `eventMetadata`.
82
+ * Type defined by {@link AztecWalletMethodMap.aztec_getPublicEvents.result}.
83
+ * @throws {Error} If any required parameters are missing or invalid, though type checking
84
+ * and serializer validation should catch this earlier.
85
+ */
86
+ aztec_getPublicEvents: async (
87
+ ctx: AztecHandlerContext,
88
+ paramsTuple: AztecWalletMethodMap['aztec_getPublicEvents']['params'],
89
+ ): Promise<AztecWalletMethodMap['aztec_getPublicEvents']['result']> => {
90
+ const [eventMetadata, from, limit] = paramsTuple;
91
+ logger.debug(`[HANDLER] aztec_getPublicEvents: from = ${from}, limit = ${limit}`);
92
+ // All parameters are mandatory in the tuple type definition.
93
+ if (!eventMetadata || from === undefined || limit === undefined) {
94
+ throw new Error('Invalid parameters received in tuple for aztec_getPublicEvents');
95
+ }
96
+ return await ctx.pxe.getPublicEvents(eventMetadata, from, limit);
97
+ },
98
+ };
99
+ }
@@ -0,0 +1,84 @@
1
+ import type { AccountWallet, PXE } from '@aztec/aztec.js';
2
+ import type { JSONRPCContext, JSONRPCParams } from '@walletmesh/jsonrpc';
3
+ import type { ContractArtifactCache } from '../../contractArtifactCache.js';
4
+ import type { AztecWalletMethodMap } from '../../types.js';
5
+
6
+ import { createAccountHandlers } from './account.js';
7
+ import { createTransactionHandlers } from './transaction.js';
8
+ import { createContractHandlers } from './contract.js';
9
+ import { createContractInteractionHandlers } from './contract-interaction.js';
10
+ import { createEventHandlers } from './event.js';
11
+ import { createNodeHandlers } from './node.js';
12
+ import { createSenderHandlers } from './senders.js';
13
+
14
+ /**
15
+ * Defines the context object that is passed to all Aztec wallet JSON-RPC method handlers.
16
+ * This context provides handlers with the necessary dependencies to perform their operations.
17
+ * It extends the base {@link JSONRPCContext} with Aztec-specific instances.
18
+ *
19
+ * @property wallet - An instance of {@link AccountWallet} from `aztec.js`,
20
+ * representing the user's account and signing capabilities.
21
+ * @property pxe - An instance of {@link PXE} (Private Execution Environment) client
22
+ * from `aztec.js`, used for interacting with the Aztec network.
23
+ * @property cache - An instance of {@link ContractArtifactCache} used for caching
24
+ * contract artifacts to optimize performance.
25
+ */
26
+ export interface AztecHandlerContext extends JSONRPCContext {
27
+ wallet: AccountWallet;
28
+ pxe: PXE;
29
+ cache: ContractArtifactCache;
30
+ }
31
+
32
+ /**
33
+ * Defines the generic signature for an Aztec wallet JSON-RPC method handler function.
34
+ *
35
+ * @template M - A key from {@link AztecWalletMethodMap}, representing the specific Aztec method being handled.
36
+ * @param context - The {@link AztecHandlerContext} providing access to wallet, PXE, and cache.
37
+ * @param params - The parameters for the RPC method, typed as {@link JSONRPCParams} (typically an array or object).
38
+ * The specific structure of `params` is defined by `AztecWalletMethodMap[M]['params']`.
39
+ * @returns A promise that resolves to the result of the RPC method, typed according to `AztecWalletMethodMap[M]['result']`.
40
+ */
41
+ export type AztecHandler<M extends keyof AztecWalletMethodMap> = (
42
+ context: AztecHandlerContext,
43
+ params: AztecWalletMethodMap[M]['params'], // More specific than JSONRPCParams
44
+ ) => Promise<AztecWalletMethodMap[M]['result']>;
45
+
46
+ /**
47
+ * Creates and aggregates all Aztec JSON-RPC method handlers.
48
+ *
49
+ * This factory function consolidates handlers from various specialized modules
50
+ * (account, transaction, contract, etc.) into a single object. This object
51
+ * maps method names (as defined in {@link AztecWalletMethodMap}) to their
52
+ * respective handler functions.
53
+ *
54
+ * The resulting map of handlers is typically registered with a {@link JSONRPCNode}
55
+ * instance on the wallet-side.
56
+ *
57
+ * @returns An object where keys are Aztec method names (e.g., "aztec_getAddress")
58
+ * and values are the corresponding handler functions. Each handler
59
+ * conforms to the {@link AztecHandler} type.
60
+ *
61
+ * @see {@link createAccountHandlers}
62
+ * @see {@link createTransactionHandlers}
63
+ * @see {@link createContractHandlers}
64
+ * @see {@link createContractInteractionHandlers}
65
+ * @see {@link createSenderHandlers}
66
+ * @see {@link createEventHandlers}
67
+ * @see {@link createNodeHandlers}
68
+ * @see {@link createAztecWalletNode} where these handlers are typically used.
69
+ */
70
+ export function createAztecHandlers() {
71
+ return {
72
+ // Note: The individual createXYZHandlers() functions return objects whose methods
73
+ // might have params typed as general JSONRPCParams or a more specific tuple.
74
+ // The createAztecWalletNode function correctly casts these to the specific
75
+ // handler signatures expected by JSONRPCNode.registerMethod, using AztecWalletMethodMap.
76
+ ...createAccountHandlers(),
77
+ ...createTransactionHandlers(),
78
+ ...createContractHandlers(),
79
+ ...createContractInteractionHandlers(),
80
+ ...createSenderHandlers(),
81
+ ...createEventHandlers(),
82
+ ...createNodeHandlers(),
83
+ };
84
+ }
@@ -0,0 +1,304 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { createNodeHandlers } from './node.js';
3
+ import type { AccountWallet, PXE } from '@aztec/aztec.js';
4
+ import type { NodeInfo } from '@aztec/stdlib/contract';
5
+ import type { GasFees } from '@aztec/stdlib/gas';
6
+ import type { PXEInfo } from '@aztec/stdlib/interfaces/client';
7
+ import type { L2Block } from '@aztec/aztec.js';
8
+ import type { AztecHandlerContext } from './index.js';
9
+ import type { ContractArtifactCache } from '../../contractArtifactCache.js';
10
+ import { Fr } from '@aztec/aztec.js';
11
+
12
+ // Mock dependencies
13
+ const createMockWallet = () =>
14
+ ({
15
+ getChainId: vi.fn(),
16
+ getVersion: vi.fn(),
17
+ getNodeInfo: vi.fn(),
18
+ getCurrentBaseFees: vi.fn(),
19
+ }) as unknown as AccountWallet;
20
+
21
+ const createMockPXE = () =>
22
+ ({
23
+ getPXEInfo: vi.fn(),
24
+ getBlock: vi.fn(),
25
+ getBlockNumber: vi.fn(),
26
+ }) as unknown as PXE;
27
+
28
+ const createMockContext = (wallet: AccountWallet, pxe: PXE): AztecHandlerContext => ({
29
+ wallet,
30
+ pxe,
31
+ cache: {} as ContractArtifactCache,
32
+ });
33
+
34
+ describe('Node Handlers', () => {
35
+ let mockWallet: AccountWallet;
36
+ let mockPXE: PXE;
37
+ let context: AztecHandlerContext;
38
+ let handlers: ReturnType<typeof createNodeHandlers>;
39
+
40
+ beforeEach(() => {
41
+ mockWallet = createMockWallet();
42
+ mockPXE = createMockPXE();
43
+ context = createMockContext(mockWallet, mockPXE);
44
+ handlers = createNodeHandlers();
45
+ });
46
+
47
+ describe('wm_getSupportedMethods', () => {
48
+ it('should return array of supported Aztec methods', async () => {
49
+ const result = await handlers.wm_getSupportedMethods(context, []);
50
+
51
+ expect(Array.isArray(result)).toBe(true);
52
+ expect(result).toContain('aztec_getAddress');
53
+ expect(result).toContain('aztec_getChainId');
54
+ expect(result).toContain('aztec_sendTx');
55
+ expect(result).toContain('wm_getSupportedMethods');
56
+ expect(result.length).toBeGreaterThan(25); // Should have many methods
57
+ });
58
+
59
+ it('should include all essential wallet methods', async () => {
60
+ const result = await handlers.wm_getSupportedMethods(context, []);
61
+
62
+ const essentialMethods = [
63
+ 'aztec_getAddress',
64
+ 'aztec_getCompleteAddress',
65
+ 'aztec_createAuthWit',
66
+ 'aztec_sendTx',
67
+ 'aztec_getTxReceipt',
68
+ 'aztec_getNodeInfo',
69
+ 'aztec_getChainId',
70
+ 'aztec_getVersion',
71
+ ];
72
+
73
+ for (const method of essentialMethods) {
74
+ expect(result).toContain(method);
75
+ }
76
+ });
77
+ });
78
+
79
+ describe('aztec_getChainId', () => {
80
+ it('should call wallet.getChainId and return numeric value', async () => {
81
+ const chainId = new Fr(31337);
82
+ vi.mocked(mockWallet.getChainId).mockReturnValue(chainId);
83
+
84
+ const result = await handlers.aztec_getChainId(context, []);
85
+
86
+ expect(mockWallet.getChainId).toHaveBeenCalledOnce();
87
+ expect(result.toNumber()).toBe(31337);
88
+ expect(result).toBeInstanceOf(Fr);
89
+ });
90
+
91
+ it('should handle large chain IDs', async () => {
92
+ const chainId = new Fr(123456789);
93
+ vi.mocked(mockWallet.getChainId).mockReturnValue(chainId);
94
+
95
+ const result = await handlers.aztec_getChainId(context, []);
96
+
97
+ expect(mockWallet.getChainId).toHaveBeenCalledOnce();
98
+ expect(result.toNumber()).toBe(123456789);
99
+ });
100
+
101
+ it('should propagate errors from wallet.getChainId', async () => {
102
+ const error = new Error('Failed to get chain ID');
103
+ vi.mocked(mockWallet.getChainId).mockImplementation(() => {
104
+ throw error;
105
+ });
106
+
107
+ await expect(handlers.aztec_getChainId(context, [])).rejects.toThrow('Failed to get chain ID');
108
+ });
109
+ });
110
+
111
+ describe('aztec_getVersion', () => {
112
+ it('should call wallet.getVersion and return numeric value', async () => {
113
+ const version = new Fr(1);
114
+ vi.mocked(mockWallet.getVersion).mockReturnValue(version);
115
+
116
+ const result = await handlers.aztec_getVersion(context, []);
117
+
118
+ expect(mockWallet.getVersion).toHaveBeenCalledOnce();
119
+ expect(result.toNumber()).toBe(1);
120
+ expect(result).toBeInstanceOf(Fr);
121
+ });
122
+
123
+ it('should handle different version numbers', async () => {
124
+ const version = new Fr(42);
125
+ vi.mocked(mockWallet.getVersion).mockReturnValue(version);
126
+
127
+ const result = await handlers.aztec_getVersion(context, []);
128
+
129
+ expect(mockWallet.getVersion).toHaveBeenCalledOnce();
130
+ expect(result.toNumber()).toBe(42);
131
+ });
132
+
133
+ it('should propagate errors from wallet.getVersion', async () => {
134
+ const error = new Error('Failed to get version');
135
+ vi.mocked(mockWallet.getVersion).mockImplementation(() => {
136
+ throw error;
137
+ });
138
+
139
+ await expect(handlers.aztec_getVersion(context, [])).rejects.toThrow('Failed to get version');
140
+ });
141
+ });
142
+
143
+ describe('aztec_getNodeInfo', () => {
144
+ it('should call wallet.getNodeInfo and return node information', async () => {
145
+ const nodeInfo = {
146
+ nodeVersion: '0.1.0',
147
+ l1ChainId: 1,
148
+ protocolVersion: 1,
149
+ l1ContractAddresses: {
150
+ availabilityOracleAddress: '0x123' as unknown,
151
+ rollupAddress: '0x456' as unknown,
152
+ registryAddress: '0x789' as unknown,
153
+ inboxAddress: '0xabc' as unknown,
154
+ outboxAddress: '0xdef' as unknown,
155
+ gasTokenAddress: '0x111' as unknown,
156
+ gasPortalAddress: '0x222' as unknown,
157
+ },
158
+ } as unknown as NodeInfo;
159
+
160
+ vi.mocked(mockWallet.getNodeInfo).mockResolvedValue(nodeInfo);
161
+
162
+ const result = await handlers.aztec_getNodeInfo(context, []);
163
+
164
+ expect(mockWallet.getNodeInfo).toHaveBeenCalledOnce();
165
+ expect(result).toBe(nodeInfo);
166
+ expect(result.nodeVersion).toBe('0.1.0');
167
+ expect(result.l1ChainId).toBe(1);
168
+ });
169
+
170
+ it('should propagate errors from wallet.getNodeInfo', async () => {
171
+ const error = new Error('Failed to get node info');
172
+ vi.mocked(mockWallet.getNodeInfo).mockRejectedValue(error);
173
+
174
+ await expect(handlers.aztec_getNodeInfo(context, [])).rejects.toThrow('Failed to get node info');
175
+ expect(mockWallet.getNodeInfo).toHaveBeenCalledOnce();
176
+ });
177
+ });
178
+
179
+ describe('aztec_getCurrentBaseFees', () => {
180
+ it('should call wallet.getCurrentBaseFees and return fee information', async () => {
181
+ const gasFees = {
182
+ feePerDaGas: 100n,
183
+ feePerL2Gas: 200n,
184
+ } as unknown as GasFees;
185
+
186
+ vi.mocked(mockWallet.getCurrentBaseFees).mockResolvedValue(gasFees);
187
+
188
+ const result = await handlers.aztec_getCurrentBaseFees(context, []);
189
+
190
+ expect(mockWallet.getCurrentBaseFees).toHaveBeenCalledOnce();
191
+ expect(result).toBe(gasFees);
192
+ });
193
+
194
+ it('should propagate errors from wallet.getCurrentBaseFees', async () => {
195
+ const error = new Error('Failed to get base fees');
196
+ vi.mocked(mockWallet.getCurrentBaseFees).mockRejectedValue(error);
197
+
198
+ await expect(handlers.aztec_getCurrentBaseFees(context, [])).rejects.toThrow('Failed to get base fees');
199
+ expect(mockWallet.getCurrentBaseFees).toHaveBeenCalledOnce();
200
+ });
201
+ });
202
+
203
+ describe('aztec_getPXEInfo', () => {
204
+ it('should call pxe.getPXEInfo and return PXE information', async () => {
205
+ const pxeInfo = {
206
+ pxeVersion: '0.1.0',
207
+ protocolVersion: 1,
208
+ l1ContractAddresses: {
209
+ availabilityOracleAddress: '0x123' as unknown,
210
+ rollupAddress: '0x456' as unknown,
211
+ registryAddress: '0x789' as unknown,
212
+ inboxAddress: '0xabc' as unknown,
213
+ outboxAddress: '0xdef' as unknown,
214
+ gasTokenAddress: '0x111' as unknown,
215
+ gasPortalAddress: '0x222' as unknown,
216
+ },
217
+ } as unknown as PXEInfo;
218
+
219
+ vi.mocked(mockPXE.getPXEInfo).mockResolvedValue(pxeInfo);
220
+
221
+ const result = await handlers.aztec_getPXEInfo(context, []);
222
+
223
+ expect(mockPXE.getPXEInfo).toHaveBeenCalledOnce();
224
+ expect(result).toBe(pxeInfo);
225
+ expect(result.pxeVersion).toBe('0.1.0');
226
+ });
227
+
228
+ it('should propagate errors from pxe.getPXEInfo', async () => {
229
+ const error = new Error('Failed to get PXE info');
230
+ vi.mocked(mockPXE.getPXEInfo).mockRejectedValue(error);
231
+
232
+ await expect(handlers.aztec_getPXEInfo(context, [])).rejects.toThrow('Failed to get PXE info');
233
+ expect(mockPXE.getPXEInfo).toHaveBeenCalledOnce();
234
+ });
235
+ });
236
+
237
+ describe('aztec_getBlock', () => {
238
+ it('should call pxe.getBlock with block number and return block', async () => {
239
+ const blockNumber = 42;
240
+ const block = {
241
+ number: blockNumber,
242
+ hash: '0xabcdef1234567890',
243
+ timestamp: Date.now(),
244
+ l1BlockNumber: 100,
245
+ } as unknown as L2Block;
246
+
247
+ vi.mocked(mockPXE.getBlock).mockResolvedValue(block);
248
+
249
+ const result = await handlers.aztec_getBlock(context, [blockNumber]);
250
+
251
+ expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
252
+ expect(result).toBe(block);
253
+ expect(result.number).toBe(blockNumber);
254
+ });
255
+
256
+ it('should throw error when block is not found', async () => {
257
+ const blockNumber = 999999;
258
+ vi.mocked(mockPXE.getBlock).mockResolvedValue(undefined);
259
+
260
+ await expect(handlers.aztec_getBlock(context, [blockNumber])).rejects.toThrow('Block not found');
261
+ expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
262
+ });
263
+
264
+ it('should propagate errors from pxe.getBlock', async () => {
265
+ const blockNumber = 42;
266
+ const error = new Error('Failed to get block');
267
+ vi.mocked(mockPXE.getBlock).mockRejectedValue(error);
268
+
269
+ await expect(handlers.aztec_getBlock(context, [blockNumber])).rejects.toThrow('Failed to get block');
270
+ expect(mockPXE.getBlock).toHaveBeenCalledWith(blockNumber);
271
+ });
272
+ });
273
+
274
+ describe('aztec_getBlockNumber', () => {
275
+ it('should call pxe.getBlockNumber and return current block number', async () => {
276
+ const blockNumber = 12345;
277
+ vi.mocked(mockPXE.getBlockNumber).mockResolvedValue(blockNumber);
278
+
279
+ const result = await handlers.aztec_getBlockNumber(context, []);
280
+
281
+ expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
282
+ expect(result).toBe(blockNumber);
283
+ expect(typeof result).toBe('number');
284
+ });
285
+
286
+ it('should handle block number of 0', async () => {
287
+ const blockNumber = 0;
288
+ vi.mocked(mockPXE.getBlockNumber).mockResolvedValue(blockNumber);
289
+
290
+ const result = await handlers.aztec_getBlockNumber(context, []);
291
+
292
+ expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
293
+ expect(result).toBe(0);
294
+ });
295
+
296
+ it('should propagate errors from pxe.getBlockNumber', async () => {
297
+ const error = new Error('Failed to get block number');
298
+ vi.mocked(mockPXE.getBlockNumber).mockRejectedValue(error);
299
+
300
+ await expect(handlers.aztec_getBlockNumber(context, [])).rejects.toThrow('Failed to get block number');
301
+ expect(mockPXE.getBlockNumber).toHaveBeenCalledOnce();
302
+ });
303
+ });
304
+ });