@walletmesh/aztec-rpc-wallet 0.1.1 → 0.3.0

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 (87) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +4 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/aztecRemoteWallet.d.ts +4 -8
  5. package/dist/aztecRemoteWallet.d.ts.map +1 -1
  6. package/dist/aztecRemoteWallet.js +5 -30
  7. package/dist/chainProvider.d.ts.map +1 -1
  8. package/dist/chainProvider.js +1 -1
  9. package/dist/contractArtifactCache.d.ts.map +1 -1
  10. package/dist/contractArtifactCache.js +20 -9
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/errors.js +1 -1
  13. package/dist/handlers/aztecAccountWallet.d.ts.map +1 -1
  14. package/dist/handlers/aztecAccountWallet.js +12 -45
  15. package/dist/handlers/transactions.d.ts.map +1 -1
  16. package/dist/handlers/transactions.js +11 -3
  17. package/dist/serializers/account.d.ts +24 -24
  18. package/dist/serializers/account.d.ts.map +1 -1
  19. package/dist/serializers/account.js +51 -51
  20. package/dist/serializers/contract.d.ts +22 -76
  21. package/dist/serializers/contract.d.ts.map +1 -1
  22. package/dist/serializers/contract.js +68 -120
  23. package/dist/serializers/index.d.ts +0 -4
  24. package/dist/serializers/index.d.ts.map +1 -1
  25. package/dist/serializers/index.js +15 -20
  26. package/dist/serializers/log.d.ts +16 -16
  27. package/dist/serializers/log.d.ts.map +1 -1
  28. package/dist/serializers/log.js +66 -64
  29. package/dist/serializers/note.d.ts +18 -18
  30. package/dist/serializers/note.d.ts.map +1 -1
  31. package/dist/serializers/note.js +54 -51
  32. package/dist/serializers/transaction.d.ts +25 -26
  33. package/dist/serializers/transaction.d.ts.map +1 -1
  34. package/dist/serializers/transaction.js +92 -44
  35. package/dist/types.d.ts +8 -31
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/types.js +1 -1
  38. package/docs/README.md +264 -0
  39. package/docs/classes/AztecChainProvider.md +553 -0
  40. package/docs/classes/AztecChainWallet.md +409 -0
  41. package/docs/classes/AztecProvider.md +1112 -0
  42. package/docs/classes/AztecWalletError.md +213 -0
  43. package/docs/classes/ContractArtifactCache.md +81 -0
  44. package/docs/globals.md +34 -0
  45. package/docs/interfaces/AztecWalletBaseMethodMap.md +135 -0
  46. package/docs/interfaces/AztecWalletEventMap.md +17 -0
  47. package/docs/interfaces/AztecWalletMethodMap.md +1012 -0
  48. package/docs/type-aliases/AztecChainId.md +11 -0
  49. package/docs/type-aliases/AztecChainWalletMiddleware.md +13 -0
  50. package/docs/type-aliases/AztecWalletContext.md +29 -0
  51. package/docs/type-aliases/AztecWalletMethodHandler.md +37 -0
  52. package/docs/type-aliases/AztecWalletMiddleware.md +13 -0
  53. package/docs/type-aliases/AztecWalletRouterClient.md +13 -0
  54. package/docs/type-aliases/TransactionFunctionCall.md +33 -0
  55. package/docs/type-aliases/TransactionParams.md +27 -0
  56. package/docs/variables/AztecWalletErrorMap.md +13 -0
  57. package/package.json +11 -11
  58. package/src/aztecRemoteWallet.test.ts +23 -65
  59. package/src/aztecRemoteWallet.ts +8 -36
  60. package/src/chainProvider.test.ts +117 -38
  61. package/src/chainProvider.ts +1 -7
  62. package/src/contractArtifactCache.test.ts +28 -45
  63. package/src/contractArtifactCache.ts +20 -10
  64. package/src/errors.ts +0 -1
  65. package/src/handlers/aztecAccountWallet.test.ts +12 -86
  66. package/src/handlers/aztecAccountWallet.ts +20 -78
  67. package/src/handlers/transactions.ts +16 -2
  68. package/src/provider.test.ts +0 -2
  69. package/src/serializers/account.test.ts +19 -20
  70. package/src/serializers/account.ts +65 -65
  71. package/src/serializers/contract.test.ts +4 -140
  72. package/src/serializers/contract.ts +98 -176
  73. package/src/serializers/index.test.ts +30 -28
  74. package/src/serializers/index.ts +15 -33
  75. package/src/serializers/log.test.ts +42 -48
  76. package/src/serializers/log.ts +85 -83
  77. package/src/serializers/note.test.ts +43 -16
  78. package/src/serializers/note.ts +62 -63
  79. package/src/serializers/transaction.test.ts +48 -41
  80. package/src/serializers/transaction.ts +154 -66
  81. package/src/types.ts +8 -8
  82. package/src/wallet.test.ts +3 -3
  83. package/tsconfig.json +1 -1
  84. package/dist/serializers/transaction-utils.d.ts +0 -51
  85. package/dist/serializers/transaction-utils.d.ts.map +0 -1
  86. package/dist/serializers/transaction-utils.js +0 -94
  87. package/src/serializers/transaction-utils.ts +0 -161
@@ -2,14 +2,12 @@ import type { AztecWalletMethodMap } from '../types.js';
2
2
  import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
3
3
  import type { EventMetadataDefinition } from '@aztec/circuit-types';
4
4
  import {
5
- ExtendedPublicLog,
6
- LogFilterSchema,
7
5
  GetPublicLogsResponseSchema,
8
6
  GetContractClassLogsResponseSchema,
9
7
  TxHash,
10
8
  LogId,
11
9
  } from '@aztec/circuit-types';
12
- import { Point, AztecAddress } from '@aztec/aztec.js';
10
+ import { AztecAddress, type LogFilter, Point } from '@aztec/aztec.js';
13
11
  import { EventSelector } from '@aztec/foundation/abi';
14
12
 
15
13
  /**
@@ -24,10 +22,10 @@ export class AztecGetPublicLogsSerializer
24
22
  >
25
23
  {
26
24
  params = {
27
- serialize: (
25
+ serialize: async (
28
26
  method: string,
29
27
  value: AztecWalletMethodMap['aztec_getPublicLogs']['params'],
30
- ): JSONRPCSerializedData => {
28
+ ): Promise<JSONRPCSerializedData> => {
31
29
  const { filter } = value;
32
30
  // Convert all fields that need string conversion
33
31
  const serializedFilter = {
@@ -38,45 +36,50 @@ export class AztecGetPublicLogsSerializer
38
36
  fromBlock: filter.fromBlock,
39
37
  toBlock: filter.toBlock,
40
38
  };
41
- return {
39
+ return Promise.resolve({
42
40
  method,
43
41
  serialized: JSON.stringify({ filter: serializedFilter }),
44
- };
42
+ });
45
43
  },
46
- deserialize: (
47
- method: string,
44
+ deserialize: async (
45
+ _method: string,
48
46
  data: JSONRPCSerializedData,
49
- ): AztecWalletMethodMap['aztec_getPublicLogs']['params'] => {
47
+ ): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['params']> => {
50
48
  const { filter } = JSON.parse(data.serialized);
51
- return {
52
- filter: {
53
- txHash: filter.txHash ? TxHash.fromString(filter.txHash) : undefined,
54
- contractAddress: filter.contractAddress
55
- ? AztecAddress.fromString(filter.contractAddress)
56
- : undefined,
57
- afterLog: filter.afterLog ? LogId.fromString(filter.afterLog) : undefined,
58
- fromBlock: filter.fromBlock,
59
- toBlock: filter.toBlock,
60
- },
61
- };
49
+ const deserializedFilter: Partial<{
50
+ txHash: TxHash;
51
+ contractAddress: AztecAddress;
52
+ afterLog: LogId;
53
+ fromBlock: number;
54
+ toBlock: number;
55
+ }> = {};
56
+
57
+ if (filter.txHash) deserializedFilter.txHash = TxHash.fromString(filter.txHash);
58
+ if (filter.contractAddress)
59
+ deserializedFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
60
+ if (filter.afterLog) deserializedFilter.afterLog = LogId.fromString(filter.afterLog);
61
+ if (filter.fromBlock !== undefined) deserializedFilter.fromBlock = filter.fromBlock;
62
+ if (filter.toBlock !== undefined) deserializedFilter.toBlock = filter.toBlock;
63
+
64
+ return Promise.resolve({ filter: deserializedFilter });
62
65
  },
63
66
  };
64
67
 
65
68
  result = {
66
- serialize: (
69
+ serialize: async (
67
70
  method: string,
68
71
  value: AztecWalletMethodMap['aztec_getPublicLogs']['result'],
69
- ): JSONRPCSerializedData => {
70
- return {
72
+ ): Promise<JSONRPCSerializedData> => {
73
+ return Promise.resolve({
71
74
  method,
72
75
  serialized: JSON.stringify(value),
73
- };
76
+ });
74
77
  },
75
- deserialize: (
76
- method: string,
78
+ deserialize: async (
79
+ _method: string,
77
80
  data: JSONRPCSerializedData,
78
- ): AztecWalletMethodMap['aztec_getPublicLogs']['result'] => {
79
- return GetPublicLogsResponseSchema.parse(JSON.parse(data.serialized));
81
+ ): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['result']> => {
82
+ return Promise.resolve(GetPublicLogsResponseSchema.parse(JSON.parse(data.serialized)));
80
83
  },
81
84
  };
82
85
  }
@@ -93,10 +96,10 @@ export class AztecGetContractClassLogsSerializer
93
96
  >
94
97
  {
95
98
  params = {
96
- serialize: (
99
+ serialize: async (
97
100
  method: string,
98
101
  value: AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
99
- ): JSONRPCSerializedData => {
102
+ ): Promise<JSONRPCSerializedData> => {
100
103
  const { filter } = value;
101
104
  // Convert fields to strings for schema validation
102
105
  const serializedFilter = {
@@ -106,45 +109,44 @@ export class AztecGetContractClassLogsSerializer
106
109
  fromBlock: filter.fromBlock,
107
110
  toBlock: filter.toBlock,
108
111
  };
109
- return {
112
+ return Promise.resolve({
110
113
  method,
111
114
  serialized: JSON.stringify({ filter: serializedFilter }),
112
- };
115
+ });
113
116
  },
114
- deserialize: (
115
- method: string,
117
+ deserialize: async (
118
+ _method: string,
116
119
  data: JSONRPCSerializedData,
117
- ): AztecWalletMethodMap['aztec_getContractClassLogs']['params'] => {
120
+ ): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['params']> => {
118
121
  const { filter } = JSON.parse(data.serialized);
119
- return {
120
- filter: {
121
- txHash: filter.txHash ? TxHash.fromString(filter.txHash) : undefined,
122
- contractAddress: filter.contractAddress
123
- ? AztecAddress.fromString(filter.contractAddress)
124
- : undefined,
125
- afterLog: filter.afterLog ? LogId.fromString(filter.afterLog) : undefined,
126
- fromBlock: filter.fromBlock,
127
- toBlock: filter.toBlock,
128
- },
129
- };
122
+ const deserializedFilter: LogFilter = {};
123
+
124
+ if (filter.txHash) deserializedFilter.txHash = TxHash.fromString(filter.txHash);
125
+ if (filter.contractAddress)
126
+ deserializedFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
127
+ if (filter.afterLog) deserializedFilter.afterLog = LogId.fromString(filter.afterLog);
128
+ if (filter.fromBlock !== undefined) deserializedFilter.fromBlock = filter.fromBlock;
129
+ if (filter.toBlock !== undefined) deserializedFilter.toBlock = filter.toBlock;
130
+
131
+ return Promise.resolve({ filter: deserializedFilter });
130
132
  },
131
133
  };
132
134
 
133
135
  result = {
134
- serialize: (
136
+ serialize: async (
135
137
  method: string,
136
138
  value: AztecWalletMethodMap['aztec_getContractClassLogs']['result'],
137
- ): JSONRPCSerializedData => {
138
- return {
139
+ ): Promise<JSONRPCSerializedData> => {
140
+ return Promise.resolve({
139
141
  method,
140
142
  serialized: JSON.stringify(GetContractClassLogsResponseSchema.parse(value)),
141
- };
143
+ });
142
144
  },
143
- deserialize: (
144
- method: string,
145
+ deserialize: async (
146
+ _method: string,
145
147
  data: JSONRPCSerializedData,
146
- ): AztecWalletMethodMap['aztec_getContractClassLogs']['result'] => {
147
- return GetContractClassLogsResponseSchema.parse(JSON.parse(data.serialized));
148
+ ): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['result']> => {
149
+ return Promise.resolve(GetContractClassLogsResponseSchema.parse(JSON.parse(data.serialized)));
148
150
  },
149
151
  };
150
152
  }
@@ -161,12 +163,12 @@ export class AztecGetPrivateEventsSerializer
161
163
  >
162
164
  {
163
165
  params = {
164
- serialize: (
166
+ serialize: async (
165
167
  method: string,
166
168
  value: AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
167
- ): JSONRPCSerializedData => {
169
+ ): Promise<JSONRPCSerializedData> => {
168
170
  const { event, from, limit, vpks } = value;
169
- return {
171
+ return Promise.resolve({
170
172
  method,
171
173
  serialized: JSON.stringify({
172
174
  event: {
@@ -180,12 +182,12 @@ export class AztecGetPrivateEventsSerializer
180
182
  limit,
181
183
  vpks: vpks?.map((p) => p.toString()),
182
184
  }),
183
- };
185
+ });
184
186
  },
185
- deserialize: (
186
- method: string,
187
+ deserialize: async (
188
+ _method: string,
187
189
  data: JSONRPCSerializedData,
188
- ): AztecWalletMethodMap['aztec_getPrivateEvents']['params'] => {
190
+ ): Promise<AztecWalletMethodMap['aztec_getPrivateEvents']['params']> => {
189
191
  const { event: serializedEvent, from, limit, vpks } = JSON.parse(data.serialized);
190
192
  const event: EventMetadataDefinition = {
191
193
  eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
@@ -194,24 +196,24 @@ export class AztecGetPrivateEventsSerializer
194
196
  },
195
197
  fieldNames: serializedEvent.fieldNames,
196
198
  };
197
- return {
199
+ return Promise.resolve({
198
200
  event,
199
201
  from,
200
202
  limit,
201
203
  vpks: vpks?.map((p: string) => Point.fromString(p)),
202
- };
204
+ });
203
205
  },
204
206
  };
205
207
 
206
208
  result = {
207
- serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
208
- return {
209
+ serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
210
+ return Promise.resolve({
209
211
  method,
210
212
  serialized: JSON.stringify(value),
211
- };
213
+ });
212
214
  },
213
- deserialize: (method: string, data: JSONRPCSerializedData): unknown[] => {
214
- return JSON.parse(data.serialized);
215
+ deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
216
+ return Promise.resolve(JSON.parse(data.serialized));
215
217
  },
216
218
  };
217
219
  }
@@ -228,12 +230,12 @@ export class AztecGetPublicEventsSerializer
228
230
  >
229
231
  {
230
232
  params = {
231
- serialize: (
233
+ serialize: async (
232
234
  method: string,
233
235
  value: AztecWalletMethodMap['aztec_getPublicEvents']['params'],
234
- ): JSONRPCSerializedData => {
236
+ ): Promise<JSONRPCSerializedData> => {
235
237
  const { event, from, limit } = value;
236
- return {
238
+ return Promise.resolve({
237
239
  method,
238
240
  serialized: JSON.stringify({
239
241
  event: {
@@ -246,12 +248,12 @@ export class AztecGetPublicEventsSerializer
246
248
  from,
247
249
  limit,
248
250
  }),
249
- };
251
+ });
250
252
  },
251
- deserialize: (
252
- method: string,
253
+ deserialize: async (
254
+ _method: string,
253
255
  data: JSONRPCSerializedData,
254
- ): AztecWalletMethodMap['aztec_getPublicEvents']['params'] => {
256
+ ): Promise<AztecWalletMethodMap['aztec_getPublicEvents']['params']> => {
255
257
  const { event: serializedEvent, from, limit } = JSON.parse(data.serialized);
256
258
  const event: EventMetadataDefinition = {
257
259
  eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
@@ -260,23 +262,23 @@ export class AztecGetPublicEventsSerializer
260
262
  },
261
263
  fieldNames: serializedEvent.fieldNames,
262
264
  };
263
- return {
265
+ return Promise.resolve({
264
266
  event,
265
267
  from,
266
268
  limit,
267
- };
269
+ });
268
270
  },
269
271
  };
270
272
 
271
273
  result = {
272
- serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
273
- return {
274
+ serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
275
+ return Promise.resolve({
274
276
  method,
275
277
  serialized: JSON.stringify(value),
276
- };
278
+ });
277
279
  },
278
- deserialize: (method: string, data: JSONRPCSerializedData): unknown[] => {
279
- return JSON.parse(data.serialized);
280
+ deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
281
+ return Promise.resolve(JSON.parse(data.serialized));
280
282
  },
281
283
  };
282
284
  }
@@ -18,28 +18,29 @@ describe('Note Serializers', () => {
18
18
  scopes: [await AztecAddress.random()],
19
19
  };
20
20
  const params = { filter };
21
- const serialized = aztecGetNotesSerializer.params.serialize(METHOD, params);
21
+
22
+ const serialized = await aztecGetNotesSerializer.params.serialize(METHOD, params);
22
23
  expect(serialized.method).toBe(METHOD);
23
24
 
24
- const deserialized = aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
25
+ const deserialized = await aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
25
26
  expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
26
27
  expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
27
28
  expect(deserialized.filter.storageSlot?.toString()).toBe(filter.storageSlot?.toString());
28
29
  expect(deserialized.filter.owner?.toString()).toBe(filter.owner?.toString());
29
30
  expect(deserialized.filter.status).toBe(filter.status);
30
31
  expect(deserialized.filter.siloedNullifier?.toString()).toBe(filter.siloedNullifier?.toString());
31
- expect(deserialized.filter.scopes?.map((a) => a.toString())).toEqual(
32
- filter.scopes?.map((a) => a.toString()),
32
+ expect(deserialized.filter.scopes?.map((s) => s.toString())).toEqual(
33
+ filter.scopes?.map((s) => s.toString()),
33
34
  );
34
35
  });
35
36
 
36
37
  it('should serialize and deserialize result', async () => {
37
38
  const result = [await UniqueNote.random(), await UniqueNote.random()];
38
39
 
39
- const serialized = aztecGetNotesSerializer.result.serialize(METHOD, result);
40
+ const serialized = await aztecGetNotesSerializer.result.serialize(METHOD, result);
40
41
  expect(serialized.method).toBe(METHOD);
41
42
 
42
- const deserialized = aztecGetNotesSerializer.result.deserialize(METHOD, serialized);
43
+ const deserialized = await aztecGetNotesSerializer.result.deserialize(METHOD, serialized);
43
44
  expect(deserialized.map((note: UniqueNote) => note.toString())).toEqual(
44
45
  result.map((note: UniqueNote) => note.toString()),
45
46
  );
@@ -53,20 +54,20 @@ describe('Note Serializers', () => {
53
54
  const note = await ExtendedNote.random();
54
55
  const params = { note };
55
56
 
56
- const serialized = aztecAddNoteSerializer.params.serialize(METHOD, params);
57
+ const serialized = await aztecAddNoteSerializer.params.serialize(METHOD, params);
57
58
  expect(serialized.method).toBe(METHOD);
58
59
 
59
- const deserialized = aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
60
+ const deserialized = await aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
60
61
  expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
61
62
  });
62
63
 
63
- it('should serialize and deserialize result', () => {
64
+ it('should serialize and deserialize result', async () => {
64
65
  const result = true;
65
66
 
66
- const serialized = aztecAddNoteSerializer.result.serialize(METHOD, result);
67
+ const serialized = await aztecAddNoteSerializer.result.serialize(METHOD, result);
67
68
  expect(serialized.method).toBe(METHOD);
68
69
 
69
- const deserialized = aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
70
+ const deserialized = await aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
70
71
  expect(deserialized).toBe(result);
71
72
  });
72
73
  });
@@ -78,21 +79,47 @@ describe('Note Serializers', () => {
78
79
  const note = await ExtendedNote.random();
79
80
  const params = { note };
80
81
 
81
- const serialized = aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
82
+ const serialized = await aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
82
83
  expect(serialized.method).toBe(METHOD);
83
84
 
84
- const deserialized = aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
85
+ const deserialized = await aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
85
86
  expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
86
87
  });
87
88
 
88
- it('should serialize and deserialize result', () => {
89
+ it('should serialize and deserialize result', async () => {
89
90
  const result = true;
90
91
 
91
- const serialized = aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
92
+ const serialized = await aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
92
93
  expect(serialized.method).toBe(METHOD);
93
94
 
94
- const deserialized = aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
95
+ const deserialized = await aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
95
96
  expect(deserialized).toBe(result);
96
97
  });
97
98
  });
99
+
100
+ describe('Edge Cases', () => {
101
+ it('should handle invalid JSON in deserialization', async () => {
102
+ const METHOD = 'aztec_getNotes';
103
+ const invalidData = { method: METHOD, serialized: 'invalid json' };
104
+
105
+ await expect(aztecGetNotesSerializer.params.deserialize(METHOD, invalidData)).rejects.toThrow();
106
+ });
107
+
108
+ it('should handle empty filter fields', async () => {
109
+ const METHOD = 'aztec_getNotes';
110
+ const filter: NotesFilter = {};
111
+ const params = { filter };
112
+
113
+ const serialized = await aztecGetNotesSerializer.params.serialize(METHOD, params);
114
+ const deserialized = await aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
115
+
116
+ expect(deserialized.filter.txHash).toBeUndefined();
117
+ expect(deserialized.filter.contractAddress).toBeUndefined();
118
+ expect(deserialized.filter.storageSlot).toBeUndefined();
119
+ expect(deserialized.filter.owner).toBeUndefined();
120
+ expect(deserialized.filter.status).toBeUndefined();
121
+ expect(deserialized.filter.siloedNullifier).toBeUndefined();
122
+ expect(deserialized.filter.scopes).toBeUndefined();
123
+ });
124
+ });
98
125
  });
@@ -1,6 +1,6 @@
1
1
  import type { AztecWalletMethodMap } from '../types.js';
2
2
  import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
3
- import { UniqueNote, TxHash } from '@aztec/circuit-types';
3
+ import { UniqueNote, TxHash, type NotesFilter } from '@aztec/circuit-types';
4
4
  import { ExtendedNote, AztecAddress, Fr } from '@aztec/aztec.js';
5
5
 
6
6
  /**
@@ -21,10 +21,10 @@ export class AztecGetNotesSerializer
21
21
  * @param value - The parameters containing filter criteria for notes
22
22
  * @returns Serialized filter data
23
23
  */
24
- serialize: (
24
+ serialize: async (
25
25
  method: string,
26
26
  value: AztecWalletMethodMap['aztec_getNotes']['params'],
27
- ): JSONRPCSerializedData => {
27
+ ): Promise<JSONRPCSerializedData> => {
28
28
  const { filter } = value;
29
29
  // Convert instances to their string representations for transport
30
30
  const serializedFilter = {
@@ -37,39 +37,38 @@ export class AztecGetNotesSerializer
37
37
  scopes: filter.scopes?.map((scope) => scope.toString()),
38
38
  };
39
39
 
40
- return {
40
+ return Promise.resolve({
41
41
  method,
42
42
  serialized: JSON.stringify({ filter: serializedFilter }),
43
- };
43
+ });
44
44
  },
45
45
  /**
46
46
  * Deserializes notes filter parameters from RPC transport.
47
- * @param method - The RPC method name
47
+ * @param _method - The RPC method name
48
48
  * @param data - The serialized filter data
49
49
  * @returns Deserialized filter parameters
50
50
  */
51
- deserialize: (
52
- method: string,
51
+ deserialize: async (
52
+ _method: string,
53
53
  data: JSONRPCSerializedData,
54
- ): AztecWalletMethodMap['aztec_getNotes']['params'] => {
54
+ ): Promise<AztecWalletMethodMap['aztec_getNotes']['params']> => {
55
55
  const { filter } = JSON.parse(data.serialized);
56
56
 
57
57
  // Convert string representations back to instances
58
- return {
59
- filter: {
60
- txHash: filter.txHash ? TxHash.fromString(filter.txHash) : undefined,
61
- contractAddress: filter.contractAddress
62
- ? AztecAddress.fromString(filter.contractAddress)
63
- : undefined,
64
- storageSlot: filter.storageSlot ? Fr.fromString(filter.storageSlot) : undefined,
65
- owner: filter.owner ? AztecAddress.fromString(filter.owner) : undefined,
66
- status: filter.status,
67
- siloedNullifier: filter.siloedNullifier ? Fr.fromString(filter.siloedNullifier) : undefined,
68
- scopes: filter.scopes
69
- ? filter.scopes.map((scope: string) => AztecAddress.fromString(scope))
70
- : undefined,
71
- },
72
- };
58
+ const notesFilter: NotesFilter = {};
59
+ if (filter.txHash) notesFilter.txHash = TxHash.fromString(filter.txHash);
60
+ if (filter.contractAddress)
61
+ notesFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
62
+ if (filter.storageSlot) notesFilter.storageSlot = Fr.fromString(filter.storageSlot);
63
+ if (filter.owner) notesFilter.owner = AztecAddress.fromString(filter.owner);
64
+ if (filter.status) notesFilter.status = filter.status;
65
+ if (filter.siloedNullifier) notesFilter.siloedNullifier = Fr.fromString(filter.siloedNullifier);
66
+ if (filter.scopes)
67
+ notesFilter.scopes = filter.scopes.map((scope: string) => AztecAddress.fromString(scope));
68
+
69
+ return Promise.resolve({
70
+ filter: notesFilter,
71
+ });
73
72
  },
74
73
  };
75
74
 
@@ -80,26 +79,26 @@ export class AztecGetNotesSerializer
80
79
  * @param value - Array of unique notes matching the filter criteria
81
80
  * @returns Serialized note array
82
81
  */
83
- serialize: (
82
+ serialize: async (
84
83
  method: string,
85
84
  value: AztecWalletMethodMap['aztec_getNotes']['result'],
86
- ): JSONRPCSerializedData => {
87
- return {
85
+ ): Promise<JSONRPCSerializedData> => {
86
+ return Promise.resolve({
88
87
  method,
89
88
  serialized: JSON.stringify(value.map((n) => n.toString())),
90
- };
89
+ });
91
90
  },
92
91
  /**
93
92
  * Deserializes the notes query result.
94
- * @param method - The RPC method name
93
+ * @param _method - The RPC method name
95
94
  * @param data - The serialized note array data
96
95
  * @returns Array of deserialized unique notes
97
96
  */
98
- deserialize: (
99
- method: string,
97
+ deserialize: async (
98
+ _method: string,
100
99
  data: JSONRPCSerializedData,
101
- ): AztecWalletMethodMap['aztec_getNotes']['result'] => {
102
- return JSON.parse(data.serialized).map((n: string) => UniqueNote.fromString(n));
100
+ ): Promise<AztecWalletMethodMap['aztec_getNotes']['result']> => {
101
+ return Promise.resolve(JSON.parse(data.serialized).map((n: string) => UniqueNote.fromString(n)));
103
102
  },
104
103
  };
105
104
  }
@@ -122,29 +121,29 @@ export class AztecAddNoteSerializer
122
121
  * @param value - The parameters containing the note to add
123
122
  * @returns Serialized note data
124
123
  */
125
- serialize: (
124
+ serialize: async (
126
125
  method: string,
127
126
  value: AztecWalletMethodMap['aztec_addNote']['params'],
128
- ): JSONRPCSerializedData => {
127
+ ): Promise<JSONRPCSerializedData> => {
129
128
  const { note } = value;
130
- return {
129
+ return Promise.resolve({
131
130
  method,
132
131
  serialized: JSON.stringify({ note: note.toBuffer().toString('base64') }),
133
- };
132
+ });
134
133
  },
135
134
  /**
136
135
  * Deserializes note addition parameters from RPC transport.
137
- * @param method - The RPC method name
136
+ * @param _method - The RPC method name
138
137
  * @param data - The serialized note data
139
138
  * @returns Deserialized note parameters
140
139
  */
141
- deserialize: (
142
- method: string,
140
+ deserialize: async (
141
+ _method: string,
143
142
  data: JSONRPCSerializedData,
144
- ): AztecWalletMethodMap['aztec_addNote']['params'] => {
143
+ ): Promise<AztecWalletMethodMap['aztec_addNote']['params']> => {
145
144
  const { note: noteBase64 } = JSON.parse(data.serialized);
146
145
  const note = ExtendedNote.fromBuffer(Buffer.from(noteBase64, 'base64'));
147
- return { note };
146
+ return Promise.resolve({ note });
148
147
  },
149
148
  };
150
149
 
@@ -155,20 +154,20 @@ export class AztecAddNoteSerializer
155
154
  * @param value - Boolean indicating success of the note addition
156
155
  * @returns Serialized result
157
156
  */
158
- serialize: (method: string, value: boolean): JSONRPCSerializedData => {
159
- return {
157
+ serialize: async (method: string, value: boolean): Promise<JSONRPCSerializedData> => {
158
+ return Promise.resolve({
160
159
  method,
161
160
  serialized: JSON.stringify(value),
162
- };
161
+ });
163
162
  },
164
163
  /**
165
164
  * Deserializes the note addition result.
166
- * @param method - The RPC method name
165
+ * @param _method - The RPC method name
167
166
  * @param data - The serialized result data
168
167
  * @returns Boolean indicating success
169
168
  */
170
- deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
171
- return JSON.parse(data.serialized);
169
+ deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<boolean> => {
170
+ return Promise.resolve(JSON.parse(data.serialized));
172
171
  },
173
172
  };
174
173
  }
@@ -191,29 +190,29 @@ export class AztecAddNullifiedNoteSerializer
191
190
  * @param value - The parameters containing the nullified note to add
192
191
  * @returns Serialized note data
193
192
  */
194
- serialize: (
193
+ serialize: async (
195
194
  method: string,
196
195
  value: AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
197
- ): JSONRPCSerializedData => {
196
+ ): Promise<JSONRPCSerializedData> => {
198
197
  const { note } = value;
199
- return {
198
+ return Promise.resolve({
200
199
  method,
201
200
  serialized: JSON.stringify({ note: note.toBuffer().toString('base64') }),
202
- };
201
+ });
203
202
  },
204
203
  /**
205
204
  * Deserializes nullified note addition parameters from RPC transport.
206
- * @param method - The RPC method name
205
+ * @param _method - The RPC method name
207
206
  * @param data - The serialized note data
208
207
  * @returns Deserialized note parameters
209
208
  */
210
- deserialize: (
211
- method: string,
209
+ deserialize: async (
210
+ _method: string,
212
211
  data: JSONRPCSerializedData,
213
- ): AztecWalletMethodMap['aztec_addNullifiedNote']['params'] => {
212
+ ): Promise<AztecWalletMethodMap['aztec_addNullifiedNote']['params']> => {
214
213
  const { note: noteBase64 } = JSON.parse(data.serialized);
215
214
  const note = ExtendedNote.fromBuffer(Buffer.from(noteBase64, 'base64'));
216
- return { note };
215
+ return Promise.resolve({ note });
217
216
  },
218
217
  };
219
218
 
@@ -224,20 +223,20 @@ export class AztecAddNullifiedNoteSerializer
224
223
  * @param value - Boolean indicating success of the nullified note addition
225
224
  * @returns Serialized result
226
225
  */
227
- serialize: (method: string, value: boolean): JSONRPCSerializedData => {
228
- return {
226
+ serialize: async (method: string, value: boolean): Promise<JSONRPCSerializedData> => {
227
+ return Promise.resolve({
229
228
  method,
230
229
  serialized: JSON.stringify(value),
231
- };
230
+ });
232
231
  },
233
232
  /**
234
233
  * Deserializes the nullified note addition result.
235
- * @param method - The RPC method name
234
+ * @param _method - The RPC method name
236
235
  * @param data - The serialized result data
237
236
  * @returns Boolean indicating success
238
237
  */
239
- deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
240
- return JSON.parse(data.serialized);
238
+ deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<boolean> => {
239
+ return Promise.resolve(JSON.parse(data.serialized));
241
240
  },
242
241
  };
243
242
  }