@walletmesh/aztec-rpc-wallet 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +201 -0
  3. package/README.md +260 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/aztecRemoteWallet.d.ts +73 -0
  6. package/dist/aztecRemoteWallet.d.ts.map +1 -0
  7. package/dist/aztecRemoteWallet.js +354 -0
  8. package/dist/chainProvider.d.ts +56 -0
  9. package/dist/chainProvider.d.ts.map +1 -0
  10. package/dist/chainProvider.js +98 -0
  11. package/dist/contractArtifactCache.d.ts +50 -0
  12. package/dist/contractArtifactCache.d.ts.map +1 -0
  13. package/dist/contractArtifactCache.js +66 -0
  14. package/dist/errors.d.ts +50 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +62 -0
  17. package/dist/handlers/aztecAccountWallet.d.ts +4 -0
  18. package/dist/handlers/aztecAccountWallet.d.ts.map +1 -0
  19. package/dist/handlers/aztecAccountWallet.js +329 -0
  20. package/dist/handlers/transactions.d.ts +21 -0
  21. package/dist/handlers/transactions.d.ts.map +1 -0
  22. package/dist/handlers/transactions.js +90 -0
  23. package/dist/handlers.d.ts +27 -0
  24. package/dist/handlers.d.ts.map +1 -0
  25. package/dist/handlers.js +55 -0
  26. package/dist/index.d.ts +58 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +33 -0
  29. package/dist/provider.d.ts +105 -0
  30. package/dist/provider.d.ts.map +1 -0
  31. package/dist/provider.js +160 -0
  32. package/dist/serializers/account.d.ts +167 -0
  33. package/dist/serializers/account.d.ts.map +1 -0
  34. package/dist/serializers/account.js +245 -0
  35. package/dist/serializers/contract-utils.d.ts +40 -0
  36. package/dist/serializers/contract-utils.d.ts.map +1 -0
  37. package/dist/serializers/contract-utils.js +102 -0
  38. package/dist/serializers/contract.d.ts +168 -0
  39. package/dist/serializers/contract.d.ts.map +1 -0
  40. package/dist/serializers/contract.js +268 -0
  41. package/dist/serializers/core.d.ts +110 -0
  42. package/dist/serializers/core.d.ts.map +1 -0
  43. package/dist/serializers/core.js +130 -0
  44. package/dist/serializers/index.d.ts +28 -0
  45. package/dist/serializers/index.d.ts.map +1 -0
  46. package/dist/serializers/index.js +159 -0
  47. package/dist/serializers/log.d.ts +113 -0
  48. package/dist/serializers/log.d.ts.map +1 -0
  49. package/dist/serializers/log.js +231 -0
  50. package/dist/serializers/note.d.ts +127 -0
  51. package/dist/serializers/note.d.ts.map +1 -0
  52. package/dist/serializers/note.js +182 -0
  53. package/dist/serializers/transaction-utils.d.ts +107 -0
  54. package/dist/serializers/transaction-utils.d.ts.map +1 -0
  55. package/dist/serializers/transaction-utils.js +130 -0
  56. package/dist/serializers/transaction.d.ts +103 -0
  57. package/dist/serializers/transaction.d.ts.map +1 -0
  58. package/dist/serializers/transaction.js +238 -0
  59. package/dist/serializers/types.d.ts +49 -0
  60. package/dist/serializers/types.d.ts.map +1 -0
  61. package/dist/serializers/types.js +22 -0
  62. package/dist/types.d.ts +391 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +8 -0
  65. package/dist/wallet.d.ts +62 -0
  66. package/dist/wallet.d.ts.map +1 -0
  67. package/dist/wallet.js +77 -0
  68. package/package.json +44 -0
  69. package/src/aztecRemoteWallet.test.ts +542 -0
  70. package/src/aztecRemoteWallet.ts +484 -0
  71. package/src/chainProvider.test.ts +322 -0
  72. package/src/chainProvider.ts +122 -0
  73. package/src/contractArtifactCache.test.ts +126 -0
  74. package/src/contractArtifactCache.ts +75 -0
  75. package/src/errors.ts +71 -0
  76. package/src/handlers/aztecAccountWallet.test.ts +720 -0
  77. package/src/handlers/aztecAccountWallet.ts +593 -0
  78. package/src/handlers/transactions.ts +110 -0
  79. package/src/handlers.test.ts +270 -0
  80. package/src/handlers.ts +70 -0
  81. package/src/index.test.ts +23 -0
  82. package/src/index.ts +64 -0
  83. package/src/provider.test.ts +276 -0
  84. package/src/provider.ts +189 -0
  85. package/src/serializers/account.test.ts +125 -0
  86. package/src/serializers/account.ts +319 -0
  87. package/src/serializers/contract-utils.ts +104 -0
  88. package/src/serializers/contract.test.ts +162 -0
  89. package/src/serializers/contract.ts +350 -0
  90. package/src/serializers/core.test.ts +56 -0
  91. package/src/serializers/core.ts +141 -0
  92. package/src/serializers/index.test.ts +122 -0
  93. package/src/serializers/index.ts +213 -0
  94. package/src/serializers/log.test.ts +119 -0
  95. package/src/serializers/log.ts +283 -0
  96. package/src/serializers/note.test.ts +100 -0
  97. package/src/serializers/note.ts +227 -0
  98. package/src/serializers/transaction-utils.ts +237 -0
  99. package/src/serializers/transaction.test.ts +153 -0
  100. package/src/serializers/transaction.ts +342 -0
  101. package/src/serializers/types.ts +58 -0
  102. package/src/types.ts +295 -0
  103. package/src/wallet.test.ts +275 -0
  104. package/src/wallet.ts +94 -0
  105. package/tsconfig.build.json +6 -0
  106. package/tsconfig.json +11 -0
  107. package/typedoc.json +15 -0
  108. package/vitest.config.ts +10 -0
@@ -0,0 +1,189 @@
1
+ import type { JSONRPCTransport } from '@walletmesh/jsonrpc';
2
+ import type { RouterEventMap } from '@walletmesh/router';
3
+ import { WalletRouterProvider } from '@walletmesh/router';
4
+ import { AztecWalletError, AztecWalletErrorType } from './errors.js';
5
+ import type { AztecChainId, AztecWalletMethodMap, TransactionParams } from './types.js';
6
+
7
+ /**
8
+ * Provider for interacting with multiple Aztec chains through WalletMesh router.
9
+ *
10
+ * This class implements the client-side interface for dApps to communicate with Aztec wallets.
11
+ * It handles:
12
+ * - Connection management for multiple chains
13
+ * - Session tracking
14
+ * - Method calls with proper context
15
+ * - Event handling for wallet state changes
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Create provider with transport
20
+ * const provider = new AztecProvider(transport);
21
+ *
22
+ * // Connect to chains
23
+ * await provider.connect(['aztec:testnet', 'aztec:devnet']);
24
+ *
25
+ * // Single operation using convenience method
26
+ * const address = await provider.getAccount('aztec:testnet');
27
+ *
28
+ * // Single operation using chain builder
29
+ * const txHash = await provider.chain('aztec:testnet')
30
+ * .call('aztec_sendTransaction', {
31
+ * functionCalls: [{
32
+ * contractAddress: "0x...",
33
+ * functionName: "transfer",
34
+ * args: [recipient, amount]
35
+ * }]
36
+ * })
37
+ * .execute();
38
+ *
39
+ * // Multiple operations in one call
40
+ * const [account, contracts, blockNumber] = await provider
41
+ * .chain('aztec:testnet')
42
+ * .call('aztec_getAccount')
43
+ * .call('aztec_getContracts')
44
+ * .call('aztec_getBlockNumber')
45
+ * .execute();
46
+ * ```
47
+ */
48
+ export class AztecProvider extends WalletRouterProvider {
49
+ private connectedChains: Set<AztecChainId>;
50
+ private requestedChains: Set<AztecChainId>;
51
+
52
+ constructor(transport: JSONRPCTransport) {
53
+ super(transport);
54
+ this.connectedChains = new Set();
55
+ this.requestedChains = new Set();
56
+
57
+ // Bind event handlers
58
+ this.handleWalletStateChanged = this.handleWalletStateChanged.bind(this);
59
+ this.handleSessionTerminated = this.handleSessionTerminated.bind(this);
60
+
61
+ // Register event handlers
62
+ this.on('wm_walletStateChanged', this.handleWalletStateChanged);
63
+ this.on('wm_sessionTerminated', this.handleSessionTerminated);
64
+ }
65
+
66
+ /**
67
+ * Handles wallet state change events from the router.
68
+ * Updates the set of connected chains based on account availability.
69
+ * @param params - Event parameters containing chain ID and changes
70
+ */
71
+ private handleWalletStateChanged(params: RouterEventMap['wm_walletStateChanged']): void {
72
+ const { chainId, changes } = params;
73
+ const aztecChainId = chainId as AztecChainId;
74
+
75
+ // Only handle events for requested chains
76
+ if (this.requestedChains.has(aztecChainId)) {
77
+ if (changes.accounts && changes.accounts.length > 0) {
78
+ this.connectedChains.add(aztecChainId);
79
+ console.log('Chain connected:', aztecChainId);
80
+ } else {
81
+ this.connectedChains.delete(aztecChainId);
82
+ console.log('Chain disconnected:', aztecChainId);
83
+ }
84
+ console.log('Connected chains:', Array.from(this.connectedChains));
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Handles session termination events from the router.
90
+ * Cleans up session state and connected chains.
91
+ * @param params - Event parameters containing session ID
92
+ */
93
+ private handleSessionTerminated(params: RouterEventMap['wm_sessionTerminated']): void {
94
+ const { sessionId } = params;
95
+ if (sessionId === this.sessionId) {
96
+ this.connectedChains.clear();
97
+ this.requestedChains.clear();
98
+ console.log('Session terminated, all chains cleared');
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Gets the list of currently connected chain IDs.
104
+ * @returns Array of connected chain IDs
105
+ */
106
+ public getSupportedChains(): AztecChainId[] {
107
+ return Array.from(this.connectedChains);
108
+ }
109
+
110
+ public async getAccount(chainId: AztecChainId): Promise<string> {
111
+ const result = await this.chain(chainId).call('aztec_getAccount').execute();
112
+ if (typeof result !== 'string' || !result) {
113
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid account address returned');
114
+ }
115
+ return result;
116
+ }
117
+
118
+ /**
119
+ * Sends a transaction to the specified chain.
120
+ * @param chainId - ID of the chain to send transaction to
121
+ * @param params - Transaction parameters including function calls and optional auth witnesses
122
+ * @returns Transaction hash
123
+ * @throws {AztecWalletError} If transaction fails or response invalid
124
+ */
125
+ public async sendTransaction(chainId: AztecChainId, params: TransactionParams): Promise<string> {
126
+ const result = await this.chain(chainId).call('aztec_sendTransaction', params).execute();
127
+ if (typeof result !== 'string' || !result) {
128
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid transaction hash returned');
129
+ }
130
+ return result;
131
+ }
132
+
133
+ /**
134
+ * Simulates a transaction without submitting it.
135
+ * @param chainId - ID of the chain to simulate on
136
+ * @param params - Transaction parameters to simulate
137
+ * @returns Simulation result
138
+ * @throws {AztecWalletError} If simulation fails
139
+ */
140
+ public async simulateTransaction(
141
+ chainId: AztecChainId,
142
+ params: TransactionParams['functionCalls'][0],
143
+ ): Promise<unknown> {
144
+ const result = await this.chain(chainId).call('aztec_simulateTransaction', params).execute();
145
+ if (result === undefined || result === null) {
146
+ throw new AztecWalletError(AztecWalletErrorType.invalidResponse, 'Invalid simulation result returned');
147
+ }
148
+ return result;
149
+ }
150
+
151
+ /**
152
+ * Registers a contract instance with the wallet.
153
+ * @param chainId - ID of the chain where contract is deployed
154
+ * @param params - Contract registration parameters
155
+ * @throws {AztecWalletError} If registration fails
156
+ */
157
+ public async registerContract(
158
+ chainId: AztecChainId,
159
+ params: AztecWalletMethodMap['aztec_registerContract']['params'],
160
+ ): Promise<void> {
161
+ await this.chain(chainId).call('aztec_registerContract', params).execute();
162
+ }
163
+
164
+ /**
165
+ * Registers a contract class with the wallet.
166
+ * @param chainId - ID of the chain to register on
167
+ * @param params - Contract class registration parameters
168
+ * @throws {AztecWalletError} If registration fails
169
+ */
170
+ public async registerContractClass(
171
+ chainId: AztecChainId,
172
+ params: AztecWalletMethodMap['aztec_registerContractClass']['params'],
173
+ ): Promise<void> {
174
+ await this.chain(chainId).call('aztec_registerContractClass', params).execute();
175
+ }
176
+
177
+ /**
178
+ * Registers a transaction sender with the wallet.
179
+ * @param chainId - ID of the chain to register on
180
+ * @param params - Sender registration parameters
181
+ * @throws {AztecWalletError} If registration fails
182
+ */
183
+ public async registerSender(
184
+ chainId: AztecChainId,
185
+ params: AztecWalletMethodMap['aztec_registerSender']['params'],
186
+ ): Promise<void> {
187
+ await this.chain(chainId).call('aztec_registerSender', params).execute();
188
+ }
189
+ }
@@ -0,0 +1,125 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { Fr, AztecAddress, CompleteAddress, AuthWitness } from '@aztec/aztec.js';
3
+ import {
4
+ aztecSetScopesSerializer,
5
+ aztecRegisterAccountSerializer,
6
+ aztecAddAuthWitnessSerializer,
7
+ aztecGetAuthWitnessSerializer,
8
+ } from './account.js';
9
+ import { decodeBase64 } from './types.js';
10
+ import { frSerializer } from './core.js';
11
+
12
+ describe('Account Serializers', () => {
13
+ describe('aztec_setScopes', () => {
14
+ const METHOD = 'aztec_setScopes';
15
+
16
+ it('should serialize and deserialize params', () => {
17
+ const scopes = [AztecAddress.random(), AztecAddress.random()];
18
+ const params = { scopes };
19
+
20
+ const serialized = aztecSetScopesSerializer.params.serialize(METHOD, params);
21
+ expect(serialized.method).toBe(METHOD);
22
+
23
+ const deserialized = aztecSetScopesSerializer.params.deserialize(METHOD, serialized);
24
+ expect(deserialized.scopes.map((s) => s.toString())).toEqual(scopes.map((s) => s.toString()));
25
+ });
26
+
27
+ it('should serialize and deserialize result', () => {
28
+ const result = true;
29
+
30
+ const serialized = aztecSetScopesSerializer.result.serialize(METHOD, result);
31
+ expect(serialized.method).toBe(METHOD);
32
+
33
+ const deserialized = aztecSetScopesSerializer.result.deserialize(METHOD, serialized);
34
+ expect(deserialized).toBe(result);
35
+ });
36
+ });
37
+
38
+ describe('aztec_registerAccount', () => {
39
+ const METHOD = 'aztec_registerAccount';
40
+
41
+ it('should serialize and deserialize params', () => {
42
+ const secretKey = Fr.random();
43
+ const partialAddress = Fr.random();
44
+ const params = { secretKey, partialAddress };
45
+
46
+ const serialized = aztecRegisterAccountSerializer.params.serialize(METHOD, params);
47
+ expect(serialized.method).toBe(METHOD);
48
+
49
+ const deserialized = aztecRegisterAccountSerializer.params.deserialize(METHOD, serialized);
50
+ expect(deserialized.secretKey.toString()).toBe(secretKey.toString());
51
+ expect(deserialized.partialAddress.toString()).toBe(partialAddress.toString());
52
+ });
53
+
54
+ it('should serialize and deserialize result', () => {
55
+ const result = CompleteAddress.random();
56
+
57
+ const serialized = aztecRegisterAccountSerializer.result.serialize(METHOD, result);
58
+ expect(serialized.method).toBe(METHOD);
59
+
60
+ const deserialized = aztecRegisterAccountSerializer.result.deserialize(METHOD, serialized);
61
+ expect(deserialized.toString()).toBe(result.toString());
62
+ });
63
+ });
64
+
65
+ describe('aztec_addAuthWitness', () => {
66
+ const METHOD = 'aztec_addAuthWitness';
67
+
68
+ it('should serialize and deserialize params', () => {
69
+ const authWitness = AuthWitness.random();
70
+ const params = { authWitness };
71
+
72
+ const serialized = aztecAddAuthWitnessSerializer.params.serialize(METHOD, params);
73
+ expect(serialized.method).toBe(METHOD);
74
+
75
+ const deserialized = aztecAddAuthWitnessSerializer.params.deserialize(METHOD, serialized);
76
+ expect(deserialized.authWitness.toString()).toBe(authWitness.toString());
77
+ });
78
+
79
+ it('should serialize and deserialize result', () => {
80
+ const result = true;
81
+
82
+ const serialized = aztecAddAuthWitnessSerializer.result.serialize(METHOD, result);
83
+ expect(serialized.method).toBe(METHOD);
84
+
85
+ const deserialized = aztecAddAuthWitnessSerializer.result.deserialize(METHOD, serialized);
86
+ expect(deserialized).toBe(result);
87
+ });
88
+ });
89
+
90
+ describe('aztec_getAuthWitness', () => {
91
+ const METHOD = 'aztec_getAuthWitness';
92
+
93
+ it('should serialize and deserialize params', () => {
94
+ const messageHash = Fr.random();
95
+ const params = { messageHash };
96
+
97
+ const serialized = aztecGetAuthWitnessSerializer.params.serialize(METHOD, params);
98
+ expect(serialized.method).toBe(METHOD);
99
+
100
+ const deserialized = aztecGetAuthWitnessSerializer.params.deserialize(METHOD, serialized);
101
+ expect(deserialized.messageHash.toString()).toBe(messageHash.toString());
102
+ });
103
+
104
+ it('should serialize and deserialize result', () => {
105
+ const result = [Fr.random(), Fr.random()];
106
+
107
+ const serialized = aztecGetAuthWitnessSerializer.result.serialize(METHOD, result);
108
+ expect(serialized.method).toBe(METHOD);
109
+
110
+ const deserialized = aztecGetAuthWitnessSerializer.result.deserialize(METHOD, serialized);
111
+ expect(deserialized.map((w) => w.toString())).toEqual(result.map((w) => w.toString()));
112
+ });
113
+ });
114
+
115
+ describe('Base64 encoding/decoding', () => {
116
+ it('should properly encode and decode data', () => {
117
+ const messageHash = Fr.random();
118
+ const serialized = aztecGetAuthWitnessSerializer.params.serialize('aztec_getAuthWitness', {
119
+ messageHash,
120
+ });
121
+ const decoded = frSerializer.deserialize(decodeBase64(serialized.serialized));
122
+ expect(decoded.toString()).toBe(messageHash.toString());
123
+ });
124
+ });
125
+ });
@@ -0,0 +1,319 @@
1
+ import type { AztecWalletMethodMap } from '../types.js';
2
+ import type { JSONRPCSerializedData, JSONRPCSerializer } from './types.js';
3
+ import { encodeBase64, decodeBase64 } from './types.js';
4
+ import {
5
+ aztecAddressSerializer,
6
+ completeAddressSerializer,
7
+ frSerializer,
8
+ authWitnessSerializer,
9
+ } from './core.js';
10
+ import type { PartialAddress, AztecAddress } from '@aztec/aztec.js';
11
+
12
+ /**
13
+ * Serializer for the aztec_setScopes RPC method.
14
+ * Handles serialization of account scope settings between JSON-RPC format and native Aztec types.
15
+ * Scopes define which contracts can interact with an account.
16
+ */
17
+ export class AztecSetScopesSerializer
18
+ implements
19
+ JSONRPCSerializer<
20
+ AztecWalletMethodMap['aztec_setScopes']['params'],
21
+ AztecWalletMethodMap['aztec_setScopes']['result']
22
+ >
23
+ {
24
+ params = {
25
+ /**
26
+ * Serializes scope setting parameters for RPC transport.
27
+ * @param method - The RPC method name
28
+ * @param value - The parameters containing an array of Aztec addresses representing scopes
29
+ * @returns Serialized scope data
30
+ */
31
+ serialize: (
32
+ method: string,
33
+ value: AztecWalletMethodMap['aztec_setScopes']['params'],
34
+ ): JSONRPCSerializedData => {
35
+ const { scopes } = value;
36
+ return {
37
+ method,
38
+ serialized: encodeBase64(
39
+ JSON.stringify(scopes.map((s: AztecAddress) => aztecAddressSerializer.serialize(s))),
40
+ ),
41
+ };
42
+ },
43
+ /**
44
+ * Deserializes scope setting parameters from RPC transport.
45
+ * @param method - The RPC method name
46
+ * @param data - The serialized scope data
47
+ * @returns Deserialized scope parameters
48
+ */
49
+ deserialize: (
50
+ method: string,
51
+ data: JSONRPCSerializedData,
52
+ ): AztecWalletMethodMap['aztec_setScopes']['params'] => {
53
+ const scopes = JSON.parse(decodeBase64(data.serialized)).map((s: string) =>
54
+ aztecAddressSerializer.deserialize(s),
55
+ );
56
+ return { scopes };
57
+ },
58
+ };
59
+
60
+ result = {
61
+ /**
62
+ * Serializes the scope setting result.
63
+ * @param method - The RPC method name
64
+ * @param value - Boolean indicating success of the scope setting operation
65
+ * @returns Serialized result
66
+ */
67
+ serialize: (method: string, value: boolean): JSONRPCSerializedData => {
68
+ return {
69
+ method,
70
+ serialized: encodeBase64(JSON.stringify(value)),
71
+ };
72
+ },
73
+ /**
74
+ * Deserializes the scope setting result.
75
+ * @param method - The RPC method name
76
+ * @param data - The serialized result data
77
+ * @returns Boolean indicating success
78
+ */
79
+ deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
80
+ return JSON.parse(decodeBase64(data.serialized));
81
+ },
82
+ };
83
+ }
84
+
85
+ /**
86
+ * Serializer for the aztec_registerAccount RPC method.
87
+ * Handles serialization of account registration data between JSON-RPC format and native Aztec types.
88
+ * Account registration involves creating a new account with a secret key and partial address.
89
+ */
90
+ export class AztecRegisterAccountSerializer
91
+ implements
92
+ JSONRPCSerializer<
93
+ AztecWalletMethodMap['aztec_registerAccount']['params'],
94
+ AztecWalletMethodMap['aztec_registerAccount']['result']
95
+ >
96
+ {
97
+ params = {
98
+ /**
99
+ * Serializes account registration parameters for RPC transport.
100
+ * @param method - The RPC method name
101
+ * @param value - The parameters containing secret key and partial address
102
+ * @returns Serialized registration data
103
+ */
104
+ serialize: (
105
+ method: string,
106
+ value: AztecWalletMethodMap['aztec_registerAccount']['params'],
107
+ ): JSONRPCSerializedData => {
108
+ const { secretKey, partialAddress } = value;
109
+ return {
110
+ method,
111
+ serialized: encodeBase64(
112
+ JSON.stringify([
113
+ frSerializer.serialize(secretKey),
114
+ frSerializer.serialize(partialAddress as unknown as PartialAddress),
115
+ ]),
116
+ ),
117
+ };
118
+ },
119
+ /**
120
+ * Deserializes account registration parameters from RPC transport.
121
+ * @param method - The RPC method name
122
+ * @param data - The serialized registration data
123
+ * @returns Deserialized registration parameters
124
+ */
125
+ deserialize: (
126
+ method: string,
127
+ data: JSONRPCSerializedData,
128
+ ): AztecWalletMethodMap['aztec_registerAccount']['params'] => {
129
+ const [secretKey, partialAddress] = JSON.parse(decodeBase64(data.serialized));
130
+ return {
131
+ secretKey: frSerializer.deserialize(secretKey),
132
+ partialAddress: frSerializer.deserialize(partialAddress) as PartialAddress,
133
+ };
134
+ },
135
+ };
136
+
137
+ result = {
138
+ /**
139
+ * Serializes the account registration result.
140
+ * @param method - The RPC method name
141
+ * @param value - The complete address of the registered account
142
+ * @returns Serialized complete address
143
+ */
144
+ serialize: (
145
+ method: string,
146
+ value: AztecWalletMethodMap['aztec_registerAccount']['result'],
147
+ ): JSONRPCSerializedData => {
148
+ return {
149
+ method,
150
+ serialized: encodeBase64(completeAddressSerializer.serialize(value)),
151
+ };
152
+ },
153
+ /**
154
+ * Deserializes the account registration result.
155
+ * @param method - The RPC method name
156
+ * @param data - The serialized complete address
157
+ * @returns Deserialized complete address
158
+ */
159
+ deserialize: (
160
+ method: string,
161
+ data: JSONRPCSerializedData,
162
+ ): AztecWalletMethodMap['aztec_registerAccount']['result'] => {
163
+ return completeAddressSerializer.deserialize(decodeBase64(data.serialized));
164
+ },
165
+ };
166
+ }
167
+
168
+ /**
169
+ * Serializer for the aztec_addAuthWitness RPC method.
170
+ * Handles serialization of authentication witness data between JSON-RPC format and native Aztec types.
171
+ * Auth witnesses are used to prove transaction authorization.
172
+ */
173
+ export class AztecAddAuthWitnessSerializer
174
+ implements
175
+ JSONRPCSerializer<
176
+ AztecWalletMethodMap['aztec_addAuthWitness']['params'],
177
+ AztecWalletMethodMap['aztec_addAuthWitness']['result']
178
+ >
179
+ {
180
+ params = {
181
+ /**
182
+ * Serializes auth witness addition parameters for RPC transport.
183
+ * @param method - The RPC method name
184
+ * @param value - The parameters containing the auth witness to add
185
+ * @returns Serialized auth witness data
186
+ */
187
+ serialize: (
188
+ method: string,
189
+ value: AztecWalletMethodMap['aztec_addAuthWitness']['params'],
190
+ ): JSONRPCSerializedData => {
191
+ const { authWitness } = value;
192
+ return {
193
+ method,
194
+ serialized: encodeBase64(authWitnessSerializer.serialize(authWitness)),
195
+ };
196
+ },
197
+ /**
198
+ * Deserializes auth witness addition parameters from RPC transport.
199
+ * @param method - The RPC method name
200
+ * @param data - The serialized auth witness data
201
+ * @returns Deserialized auth witness parameters
202
+ */
203
+ deserialize: (
204
+ method: string,
205
+ data: JSONRPCSerializedData,
206
+ ): AztecWalletMethodMap['aztec_addAuthWitness']['params'] => {
207
+ const authWitness = authWitnessSerializer.deserialize(decodeBase64(data.serialized));
208
+ return { authWitness };
209
+ },
210
+ };
211
+
212
+ result = {
213
+ /**
214
+ * Serializes the auth witness addition result.
215
+ * @param method - The RPC method name
216
+ * @param value - Boolean indicating success of the witness addition
217
+ * @returns Serialized result
218
+ */
219
+ serialize: (method: string, value: boolean): JSONRPCSerializedData => {
220
+ return {
221
+ method,
222
+ serialized: encodeBase64(JSON.stringify(value)),
223
+ };
224
+ },
225
+ /**
226
+ * Deserializes the auth witness addition result.
227
+ * @param method - The RPC method name
228
+ * @param data - The serialized result data
229
+ * @returns Boolean indicating success
230
+ */
231
+ deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
232
+ return JSON.parse(decodeBase64(data.serialized));
233
+ },
234
+ };
235
+ }
236
+
237
+ /**
238
+ * Serializer for the aztec_getAuthWitness RPC method.
239
+ * Handles serialization of authentication witness retrieval between JSON-RPC format and native Aztec types.
240
+ * Retrieves auth witnesses associated with a specific message hash.
241
+ */
242
+ export class AztecGetAuthWitnessSerializer
243
+ implements
244
+ JSONRPCSerializer<
245
+ AztecWalletMethodMap['aztec_getAuthWitness']['params'],
246
+ AztecWalletMethodMap['aztec_getAuthWitness']['result']
247
+ >
248
+ {
249
+ params = {
250
+ /**
251
+ * Serializes auth witness retrieval parameters for RPC transport.
252
+ * @param method - The RPC method name
253
+ * @param value - The parameters containing the message hash to look up
254
+ * @returns Serialized message hash data
255
+ */
256
+ serialize: (
257
+ method: string,
258
+ value: AztecWalletMethodMap['aztec_getAuthWitness']['params'],
259
+ ): JSONRPCSerializedData => {
260
+ const { messageHash } = value;
261
+ return {
262
+ method,
263
+ serialized: encodeBase64(frSerializer.serialize(messageHash)),
264
+ };
265
+ },
266
+ /**
267
+ * Deserializes auth witness retrieval parameters from RPC transport.
268
+ * @param method - The RPC method name
269
+ * @param data - The serialized message hash data
270
+ * @returns Deserialized message hash parameters
271
+ */
272
+ deserialize: (
273
+ method: string,
274
+ data: JSONRPCSerializedData,
275
+ ): AztecWalletMethodMap['aztec_getAuthWitness']['params'] => {
276
+ const messageHash = frSerializer.deserialize(decodeBase64(data.serialized));
277
+ return { messageHash };
278
+ },
279
+ };
280
+
281
+ result = {
282
+ /**
283
+ * Serializes the auth witness retrieval result.
284
+ * @param method - The RPC method name
285
+ * @param value - Array of field elements representing auth witnesses
286
+ * @returns Serialized witness array
287
+ */
288
+ serialize: (
289
+ method: string,
290
+ value: AztecWalletMethodMap['aztec_getAuthWitness']['result'],
291
+ ): JSONRPCSerializedData => {
292
+ return {
293
+ method,
294
+ serialized: encodeBase64(JSON.stringify(value.map((w) => frSerializer.serialize(w)))),
295
+ };
296
+ },
297
+ /**
298
+ * Deserializes the auth witness retrieval result.
299
+ * @param method - The RPC method name
300
+ * @param data - The serialized witness array data
301
+ * @returns Array of deserialized field elements
302
+ */
303
+ deserialize: (
304
+ method: string,
305
+ data: JSONRPCSerializedData,
306
+ ): AztecWalletMethodMap['aztec_getAuthWitness']['result'] => {
307
+ return JSON.parse(decodeBase64(data.serialized)).map((w: string) => frSerializer.deserialize(w));
308
+ },
309
+ };
310
+ }
311
+
312
+ /**
313
+ * Pre-instantiated serializer instances for Aztec account-related RPC methods.
314
+ * These instances can be used directly by the RPC handler implementation.
315
+ */
316
+ export const aztecSetScopesSerializer = new AztecSetScopesSerializer();
317
+ export const aztecRegisterAccountSerializer = new AztecRegisterAccountSerializer();
318
+ export const aztecAddAuthWitnessSerializer = new AztecAddAuthWitnessSerializer();
319
+ export const aztecGetAuthWitnessSerializer = new AztecGetAuthWitnessSerializer();