@walletmesh/aztec-rpc-wallet 0.1.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }