@walletmesh/aztec-rpc-wallet 0.3.1 → 0.4.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.
- package/CHANGELOG.md +20 -0
- package/README.md +290 -228
- package/dist/.tsbuildinfo +1 -1
- package/dist/client/aztec-dapp-wallet.d.ts +401 -0
- package/dist/client/aztec-dapp-wallet.d.ts.map +1 -0
- package/dist/client/aztec-dapp-wallet.js +705 -0
- package/dist/client/aztec-router-provider.d.ts +58 -0
- package/dist/client/aztec-router-provider.d.ts.map +1 -0
- package/dist/client/aztec-router-provider.js +62 -0
- package/dist/client/helpers.d.ts +44 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +79 -0
- package/dist/client/register-serializers.d.ts +41 -0
- package/dist/client/register-serializers.d.ts.map +1 -0
- package/dist/client/register-serializers.js +97 -0
- package/dist/contractArtifactCache.d.ts +49 -32
- package/dist/contractArtifactCache.d.ts.map +1 -1
- package/dist/contractArtifactCache.js +47 -34
- package/dist/errors.d.ts +50 -8
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -10
- package/dist/index.d.ts +53 -40
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -17
- package/dist/types.d.ts +345 -270
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -8
- package/dist/wallet/create-node.d.ts +73 -0
- package/dist/wallet/create-node.d.ts.map +1 -0
- package/dist/wallet/create-node.js +99 -0
- package/dist/wallet/handlers/account.d.ts +67 -0
- package/dist/wallet/handlers/account.d.ts.map +1 -0
- package/dist/wallet/handlers/account.js +85 -0
- package/dist/wallet/handlers/contract-interaction.d.ts +77 -0
- package/dist/wallet/handlers/contract-interaction.d.ts.map +1 -0
- package/dist/wallet/handlers/contract-interaction.js +219 -0
- package/dist/wallet/handlers/contract.d.ts +96 -0
- package/dist/wallet/handlers/contract.d.ts.map +1 -0
- package/dist/wallet/handlers/contract.js +146 -0
- package/dist/wallet/handlers/event.d.ts +62 -0
- package/dist/wallet/handlers/event.d.ts.map +1 -0
- package/dist/wallet/handlers/event.js +85 -0
- package/dist/wallet/handlers/index.d.ts +88 -0
- package/dist/wallet/handlers/index.d.ts.map +1 -0
- package/dist/wallet/handlers/index.js +47 -0
- package/dist/wallet/handlers/node.d.ts +117 -0
- package/dist/wallet/handlers/node.d.ts.map +1 -0
- package/dist/wallet/handlers/node.js +196 -0
- package/dist/wallet/handlers/senders.d.ts +70 -0
- package/dist/wallet/handlers/senders.d.ts.map +1 -0
- package/dist/wallet/handlers/senders.js +92 -0
- package/dist/wallet/handlers/transaction.d.ts +123 -0
- package/dist/wallet/handlers/transaction.d.ts.map +1 -0
- package/dist/wallet/handlers/transaction.js +191 -0
- package/dist/wallet/serializers.d.ts +75 -0
- package/dist/wallet/serializers.d.ts.map +1 -0
- package/dist/wallet/serializers.js +501 -0
- package/docs/README.md +290 -229
- package/docs/classes/AztecDappWallet.md +1304 -0
- package/docs/classes/AztecRouterProvider.md +1058 -0
- package/docs/classes/AztecWalletError.md +124 -47
- package/docs/classes/ContractArtifactCache.md +48 -31
- package/docs/functions/connectAztec.md +62 -0
- package/docs/functions/createAztecWallet.md +46 -0
- package/docs/functions/createAztecWalletNode.md +96 -0
- package/docs/functions/registerAztecSerializers.md +61 -0
- package/docs/functions/registerWalletAztecSerializers.md +39 -0
- package/docs/globals.md +16 -14
- package/docs/interfaces/AztecHandlerContext.md +54 -0
- package/docs/interfaces/AztecWalletContext.md +50 -0
- package/docs/interfaces/AztecWalletMethodMap.md +470 -477
- package/docs/type-aliases/AztecChainId.md +16 -3
- package/docs/variables/ALL_AZTEC_METHODS.md +20 -0
- package/docs/variables/AztecWalletErrorMap.md +9 -4
- package/docs/variables/AztecWalletSerializer.md +45 -0
- package/package.json +9 -9
- package/src/client/aztec-dapp-wallet.test.ts +628 -0
- package/src/client/aztec-dapp-wallet.ts +879 -0
- package/src/client/aztec-router-provider.test.ts +235 -0
- package/src/client/aztec-router-provider.ts +64 -0
- package/src/client/helpers.test.ts +187 -0
- package/src/client/helpers.ts +91 -0
- package/src/client/register-serializers.ts +108 -0
- package/src/contractArtifactCache.test.ts +21 -10
- package/src/contractArtifactCache.ts +54 -35
- package/src/errors.ts +58 -10
- package/src/index.test.ts +2 -6
- package/src/index.ts +73 -37
- package/src/types.ts +379 -217
- package/src/wallet/create-node.test.ts +332 -0
- package/src/wallet/create-node.ts +120 -0
- package/src/wallet/handlers/account.test.ts +172 -0
- package/src/wallet/handlers/account.ts +99 -0
- package/src/wallet/handlers/contract-interaction.test.ts +248 -0
- package/src/wallet/handlers/contract-interaction.ts +269 -0
- package/src/wallet/handlers/contract.test.ts +245 -0
- package/src/wallet/handlers/contract.ts +174 -0
- package/src/wallet/handlers/event.test.ts +216 -0
- package/src/wallet/handlers/event.ts +99 -0
- package/src/wallet/handlers/index.ts +84 -0
- package/src/wallet/handlers/node.test.ts +304 -0
- package/src/wallet/handlers/node.ts +230 -0
- package/src/wallet/handlers/senders.test.ts +172 -0
- package/src/wallet/handlers/senders.ts +106 -0
- package/src/wallet/handlers/transaction.test.ts +371 -0
- package/src/wallet/handlers/transaction.ts +239 -0
- package/src/wallet/serializers.test.ts +253 -0
- package/src/wallet/serializers.ts +586 -0
- package/typedoc.json +23 -1
- package/dist/aztecRemoteWallet.d.ts +0 -70
- package/dist/aztecRemoteWallet.d.ts.map +0 -1
- package/dist/aztecRemoteWallet.js +0 -335
- package/dist/chainProvider.d.ts +0 -56
- package/dist/chainProvider.d.ts.map +0 -1
- package/dist/chainProvider.js +0 -98
- package/dist/handlers/aztecAccountWallet.d.ts +0 -4
- package/dist/handlers/aztecAccountWallet.d.ts.map +0 -1
- package/dist/handlers/aztecAccountWallet.js +0 -295
- package/dist/handlers/transactions.d.ts +0 -21
- package/dist/handlers/transactions.d.ts.map +0 -1
- package/dist/handlers/transactions.js +0 -98
- package/dist/handlers.d.ts +0 -27
- package/dist/handlers.d.ts.map +0 -1
- package/dist/handlers.js +0 -55
- package/dist/provider.d.ts +0 -105
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -160
- package/dist/serializers/account.d.ts +0 -164
- package/dist/serializers/account.d.ts.map +0 -1
- package/dist/serializers/account.js +0 -244
- package/dist/serializers/contract.d.ts +0 -62
- package/dist/serializers/contract.d.ts.map +0 -1
- package/dist/serializers/contract.js +0 -130
- package/dist/serializers/index.d.ts +0 -21
- package/dist/serializers/index.d.ts.map +0 -1
- package/dist/serializers/index.js +0 -154
- package/dist/serializers/log.d.ts +0 -66
- package/dist/serializers/log.d.ts.map +0 -1
- package/dist/serializers/log.js +0 -222
- package/dist/serializers/note.d.ts +0 -124
- package/dist/serializers/note.d.ts.map +0 -1
- package/dist/serializers/note.js +0 -208
- package/dist/serializers/transaction.d.ts +0 -99
- package/dist/serializers/transaction.d.ts.map +0 -1
- package/dist/serializers/transaction.js +0 -275
- package/dist/wallet.d.ts +0 -62
- package/dist/wallet.d.ts.map +0 -1
- package/dist/wallet.js +0 -77
- package/docs/classes/AztecChainProvider.md +0 -553
- package/docs/classes/AztecChainWallet.md +0 -409
- package/docs/classes/AztecProvider.md +0 -1112
- package/docs/interfaces/AztecWalletBaseMethodMap.md +0 -135
- package/docs/interfaces/AztecWalletEventMap.md +0 -17
- package/docs/type-aliases/AztecChainWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletContext.md +0 -29
- package/docs/type-aliases/AztecWalletMethodHandler.md +0 -37
- package/docs/type-aliases/AztecWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletRouterClient.md +0 -13
- package/docs/type-aliases/TransactionFunctionCall.md +0 -33
- package/docs/type-aliases/TransactionParams.md +0 -27
- package/src/aztecRemoteWallet.test.ts +0 -505
- package/src/aztecRemoteWallet.ts +0 -467
- package/src/chainProvider.test.ts +0 -401
- package/src/chainProvider.ts +0 -116
- package/src/handlers/aztecAccountWallet.test.ts +0 -650
- package/src/handlers/aztecAccountWallet.ts +0 -531
- package/src/handlers/transactions.ts +0 -124
- package/src/handlers.test.ts +0 -270
- package/src/handlers.ts +0 -70
- package/src/provider.test.ts +0 -277
- package/src/provider.ts +0 -189
- package/src/serializers/account.test.ts +0 -125
- package/src/serializers/account.ts +0 -301
- package/src/serializers/contract.test.ts +0 -24
- package/src/serializers/contract.ts +0 -183
- package/src/serializers/index.test.ts +0 -136
- package/src/serializers/index.ts +0 -191
- package/src/serializers/log.test.ts +0 -286
- package/src/serializers/log.ts +0 -292
- package/src/serializers/note.test.ts +0 -125
- package/src/serializers/note.ts +0 -250
- package/src/serializers/transaction.test.ts +0 -320
- package/src/serializers/transaction.ts +0 -409
- package/src/wallet.test.ts +0 -275
- package/src/wallet.ts +0 -94
@@ -1,183 +0,0 @@
|
|
1
|
-
import type { AztecWalletMethodMap } from '../types.js';
|
2
|
-
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
|
-
import { ContractClassWithIdSchema, ContractInstanceWithAddressSchema } from '@aztec/circuits.js';
|
4
|
-
import { ContractArtifactSchema } from '@aztec/foundation/abi';
|
5
|
-
import { AztecAddress, Fr } from '@aztec/aztec.js';
|
6
|
-
import { jsonStringify, jsonParseWithSchema } from '@aztec/foundation/json-rpc';
|
7
|
-
import type { ZodFor } from '@aztec/foundation/schemas';
|
8
|
-
import type { ContractMetadata, ContractClassMetadata } from '@aztec/circuit-types';
|
9
|
-
import { z } from 'zod';
|
10
|
-
|
11
|
-
// Zod schemas for contract metadata serialization.
|
12
|
-
// These are copied from @aztec/circuit-types because they are not exported.
|
13
|
-
const ContractMetadataSchema = z.object({
|
14
|
-
contractInstance: z.union([ContractInstanceWithAddressSchema, z.undefined()]),
|
15
|
-
isContractInitialized: z.boolean(),
|
16
|
-
isContractPubliclyDeployed: z.boolean(),
|
17
|
-
}) satisfies ZodFor<ContractMetadata>;
|
18
|
-
|
19
|
-
const ContractClassMetadataSchema = z.object({
|
20
|
-
contractClass: z.union([ContractClassWithIdSchema, z.undefined()]),
|
21
|
-
isContractClassPubliclyRegistered: z.boolean(),
|
22
|
-
artifact: z.union([ContractArtifactSchema, z.undefined()]),
|
23
|
-
}) satisfies ZodFor<ContractClassMetadata>;
|
24
|
-
|
25
|
-
/**
|
26
|
-
* Serializer for the aztec_getContractClassMetadata RPC method.
|
27
|
-
* Handles serialization of contract class metadata queries and results between JSON-RPC format and native Aztec types.
|
28
|
-
*/
|
29
|
-
export class AztecGetContractClassMetadataSerializer
|
30
|
-
implements
|
31
|
-
JSONRPCSerializer<
|
32
|
-
AztecWalletMethodMap['aztec_getContractClassMetadata']['params'],
|
33
|
-
AztecWalletMethodMap['aztec_getContractClassMetadata']['result']
|
34
|
-
>
|
35
|
-
{
|
36
|
-
params = {
|
37
|
-
/**
|
38
|
-
* Serializes contract class metadata query parameters for RPC transport.
|
39
|
-
* @param method - The RPC method name
|
40
|
-
* @param value - The parameters containing the class ID and artifact inclusion flag
|
41
|
-
* @returns Serialized query parameters
|
42
|
-
*/
|
43
|
-
serialize: async (
|
44
|
-
method: string,
|
45
|
-
value: AztecWalletMethodMap['aztec_getContractClassMetadata']['params'],
|
46
|
-
): Promise<JSONRPCSerializedData> =>
|
47
|
-
Promise.resolve({
|
48
|
-
method,
|
49
|
-
serialized: JSON.stringify({
|
50
|
-
id: value.id.toString(),
|
51
|
-
includeArtifact: value.includeArtifact,
|
52
|
-
}),
|
53
|
-
}),
|
54
|
-
deserialize: async (
|
55
|
-
_method: string,
|
56
|
-
data: JSONRPCSerializedData,
|
57
|
-
): Promise<AztecWalletMethodMap['aztec_getContractClassMetadata']['params']> => {
|
58
|
-
const { id, includeArtifact } = JSON.parse(data.serialized);
|
59
|
-
return {
|
60
|
-
id: Fr.fromString(id),
|
61
|
-
includeArtifact,
|
62
|
-
};
|
63
|
-
},
|
64
|
-
};
|
65
|
-
result = {
|
66
|
-
/**
|
67
|
-
* Serializes the contract class metadata query result.
|
68
|
-
* @param method - The RPC method name
|
69
|
-
* @param value - The contract class metadata including class definition and registration status
|
70
|
-
* @returns Serialized contract class metadata
|
71
|
-
*/
|
72
|
-
serialize: async (
|
73
|
-
method: string,
|
74
|
-
value: AztecWalletMethodMap['aztec_getContractClassMetadata']['result'],
|
75
|
-
): Promise<JSONRPCSerializedData> => {
|
76
|
-
return {
|
77
|
-
method,
|
78
|
-
serialized: jsonStringify(value),
|
79
|
-
};
|
80
|
-
},
|
81
|
-
deserialize: async (
|
82
|
-
_method: string,
|
83
|
-
data: JSONRPCSerializedData,
|
84
|
-
): Promise<AztecWalletMethodMap['aztec_getContractClassMetadata']['result']> => {
|
85
|
-
return await jsonParseWithSchema(data.serialized, ContractClassMetadataSchema);
|
86
|
-
},
|
87
|
-
};
|
88
|
-
}
|
89
|
-
|
90
|
-
export class AztecGetContractMetadataSerializer
|
91
|
-
implements
|
92
|
-
JSONRPCSerializer<
|
93
|
-
AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
94
|
-
AztecWalletMethodMap['aztec_getContractMetadata']['result']
|
95
|
-
>
|
96
|
-
{
|
97
|
-
params = {
|
98
|
-
serialize: async (
|
99
|
-
method: string,
|
100
|
-
value: AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
101
|
-
): Promise<JSONRPCSerializedData> => {
|
102
|
-
return {
|
103
|
-
method,
|
104
|
-
serialized: jsonStringify(value.address),
|
105
|
-
};
|
106
|
-
},
|
107
|
-
deserialize: async (
|
108
|
-
_method: string,
|
109
|
-
data: JSONRPCSerializedData,
|
110
|
-
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['params']> => {
|
111
|
-
return {
|
112
|
-
address: await jsonParseWithSchema(data.serialized, AztecAddress.schema),
|
113
|
-
};
|
114
|
-
},
|
115
|
-
};
|
116
|
-
|
117
|
-
result = {
|
118
|
-
serialize: async (
|
119
|
-
method: string,
|
120
|
-
contractMetadata: AztecWalletMethodMap['aztec_getContractMetadata']['result'],
|
121
|
-
): Promise<JSONRPCSerializedData> => {
|
122
|
-
return {
|
123
|
-
method,
|
124
|
-
serialized: jsonStringify(contractMetadata),
|
125
|
-
};
|
126
|
-
},
|
127
|
-
deserialize: async (
|
128
|
-
_method: string,
|
129
|
-
data: JSONRPCSerializedData,
|
130
|
-
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['result']> => {
|
131
|
-
return await jsonParseWithSchema(data.serialized, ContractMetadataSchema);
|
132
|
-
},
|
133
|
-
};
|
134
|
-
}
|
135
|
-
|
136
|
-
/**
|
137
|
-
* Serializer for the aztec_registerContract RPC method.
|
138
|
-
* Handles serialization of contract registration requests between JSON-RPC format and native Aztec types.
|
139
|
-
*/
|
140
|
-
export class AztecRegisterContractSerializer
|
141
|
-
implements
|
142
|
-
JSONRPCSerializer<
|
143
|
-
AztecWalletMethodMap['aztec_registerContract']['params'],
|
144
|
-
AztecWalletMethodMap['aztec_registerContract']['result']
|
145
|
-
>
|
146
|
-
{
|
147
|
-
params = {
|
148
|
-
/**
|
149
|
-
* Serializes contract registration parameters for RPC transport.
|
150
|
-
* @param method - The RPC method name
|
151
|
-
* @param value - The parameters containing contract instance and optional artifact
|
152
|
-
* @returns Serialized registration data
|
153
|
-
*/
|
154
|
-
serialize: async (
|
155
|
-
method: string,
|
156
|
-
value: AztecWalletMethodMap['aztec_registerContract']['params'],
|
157
|
-
): Promise<JSONRPCSerializedData> => ({
|
158
|
-
method,
|
159
|
-
serialized: JSON.stringify({
|
160
|
-
instance: jsonStringify(value.instance),
|
161
|
-
artifact: value.artifact ? jsonStringify(value.artifact) : undefined,
|
162
|
-
}),
|
163
|
-
}),
|
164
|
-
deserialize: async (
|
165
|
-
_method: string,
|
166
|
-
data: JSONRPCSerializedData,
|
167
|
-
): Promise<AztecWalletMethodMap['aztec_registerContract']['params']> => {
|
168
|
-
const { instance, artifact } = JSON.parse(data.serialized);
|
169
|
-
return {
|
170
|
-
instance: await jsonParseWithSchema(instance, ContractInstanceWithAddressSchema),
|
171
|
-
artifact: artifact ? await jsonParseWithSchema(artifact, ContractArtifactSchema) : undefined,
|
172
|
-
};
|
173
|
-
},
|
174
|
-
};
|
175
|
-
}
|
176
|
-
|
177
|
-
/**
|
178
|
-
* Pre-instantiated serializer instances for Aztec contract-related RPC methods.
|
179
|
-
* These instances can be used directly by the RPC handler implementation.
|
180
|
-
*/
|
181
|
-
export const aztecRegisterContractSerializer = new AztecRegisterContractSerializer();
|
182
|
-
export const aztecGetContractClassMetadataSerializer = new AztecGetContractClassMetadataSerializer();
|
183
|
-
export const aztecGetContractMetadataSerializer = new AztecGetContractMetadataSerializer();
|
@@ -1,136 +0,0 @@
|
|
1
|
-
import { describe, expect, it, beforeEach } from 'vitest';
|
2
|
-
import { AztecWalletSerializer } from './index.js';
|
3
|
-
import { AztecAddress, Tx } from '@aztec/aztec.js';
|
4
|
-
import type { JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
5
|
-
import type { AztecWalletMethodMap } from '../types.js';
|
6
|
-
|
7
|
-
describe('AztecWalletSerializer', () => {
|
8
|
-
// Test known method (using aztec_setScopes as an example)
|
9
|
-
const knownMethod = 'aztec_setScopes';
|
10
|
-
|
11
|
-
// Test unknown method
|
12
|
-
const unknownMethod = 'unknown_method';
|
13
|
-
|
14
|
-
// Type assertion since we verify result exists in beforeEach
|
15
|
-
const resultSerializer = (AztecWalletSerializer as Required<JSONRPCSerializer<unknown, unknown>>).result;
|
16
|
-
|
17
|
-
describe('params', () => {
|
18
|
-
it('should serialize params for known methods', async () => {
|
19
|
-
const params = { scopes: [await AztecAddress.random()] };
|
20
|
-
const result = await AztecWalletSerializer.params.serialize(knownMethod, params);
|
21
|
-
expect(result).toBeDefined();
|
22
|
-
expect(result.method).toBe(knownMethod);
|
23
|
-
expect(typeof result.serialized).toBe('string');
|
24
|
-
});
|
25
|
-
|
26
|
-
it('should wrap unknown method params in JSONRPCSerializedData format', async () => {
|
27
|
-
const params = { someParam: 'value' };
|
28
|
-
const result = await AztecWalletSerializer.params.serialize(unknownMethod, params);
|
29
|
-
expect(result).toBeDefined();
|
30
|
-
expect(result.method).toBe(unknownMethod);
|
31
|
-
expect(typeof result.serialized).toBe('string');
|
32
|
-
});
|
33
|
-
|
34
|
-
it('should pass through serialized data for unknown methods', async () => {
|
35
|
-
const serializedData = { serialized: 'base64data', method: unknownMethod };
|
36
|
-
const result = await AztecWalletSerializer.params.deserialize(unknownMethod, serializedData);
|
37
|
-
expect(result).toEqual(serializedData);
|
38
|
-
});
|
39
|
-
|
40
|
-
it('should throw error when params serializer fails', async () => {
|
41
|
-
const params = { scopes: undefined }; // Invalid - scopes must be an array
|
42
|
-
await expect(AztecWalletSerializer.params.serialize(knownMethod, params)).rejects.toThrow(
|
43
|
-
/Failed to serialize params/,
|
44
|
-
);
|
45
|
-
});
|
46
|
-
|
47
|
-
it('should throw error when params deserializer fails', async () => {
|
48
|
-
const serializedData = { serialized: 'invalid-data', method: knownMethod };
|
49
|
-
await expect(AztecWalletSerializer.params.deserialize(knownMethod, serializedData)).rejects.toThrow(
|
50
|
-
/Failed to deserialize params/,
|
51
|
-
);
|
52
|
-
});
|
53
|
-
});
|
54
|
-
|
55
|
-
describe('result', () => {
|
56
|
-
beforeEach(() => {
|
57
|
-
// Ensure result serializer exists
|
58
|
-
expect(resultSerializer).toBeDefined();
|
59
|
-
});
|
60
|
-
|
61
|
-
it('should serialize result for known methods', async () => {
|
62
|
-
const value = true;
|
63
|
-
const result = await resultSerializer.serialize(knownMethod, value);
|
64
|
-
expect(result).toBeDefined();
|
65
|
-
expect(result.method).toBe(knownMethod);
|
66
|
-
expect(typeof result.serialized).toBe('string');
|
67
|
-
});
|
68
|
-
|
69
|
-
it('should wrap unknown method result in JSONRPCSerializedData format', async () => {
|
70
|
-
const testResult = { someResult: 'value' };
|
71
|
-
const result = await resultSerializer.serialize(unknownMethod, testResult);
|
72
|
-
expect(result).toBeDefined();
|
73
|
-
expect(result.method).toBe(unknownMethod);
|
74
|
-
expect(typeof result.serialized).toBe('string');
|
75
|
-
});
|
76
|
-
|
77
|
-
it('should pass through serialized data for unknown methods', async () => {
|
78
|
-
const serializedData = { serialized: 'base64data', method: unknownMethod };
|
79
|
-
const result = await resultSerializer.deserialize(unknownMethod, serializedData);
|
80
|
-
expect(result).toEqual(serializedData);
|
81
|
-
});
|
82
|
-
|
83
|
-
it('should throw error when result serializer fails', async () => {
|
84
|
-
interface CircularRef {
|
85
|
-
ref: CircularRef | null;
|
86
|
-
}
|
87
|
-
const circular: CircularRef = { ref: null };
|
88
|
-
circular.ref = circular; // Create circular reference which can't be JSON stringified
|
89
|
-
await expect(resultSerializer.serialize(knownMethod, circular)).rejects.toThrow(
|
90
|
-
/Failed to serialize result/,
|
91
|
-
);
|
92
|
-
});
|
93
|
-
|
94
|
-
it('should throw error when result deserializer fails', async () => {
|
95
|
-
const serializedData = { serialized: 'invalid-data', method: knownMethod };
|
96
|
-
await expect(resultSerializer.deserialize(knownMethod, serializedData)).rejects.toThrow(
|
97
|
-
/Failed to deserialize result/,
|
98
|
-
);
|
99
|
-
});
|
100
|
-
});
|
101
|
-
|
102
|
-
describe('integration', () => {
|
103
|
-
it('should handle contract methods', async () => {
|
104
|
-
const method = 'aztec_getContractMetadata';
|
105
|
-
const params = { address: await AztecAddress.random() };
|
106
|
-
|
107
|
-
const serializedParams = await AztecWalletSerializer.params.serialize(method, params);
|
108
|
-
expect(serializedParams).toBeDefined();
|
109
|
-
expect(serializedParams.method).toBe(method);
|
110
|
-
expect(typeof serializedParams.serialized).toBe('string');
|
111
|
-
|
112
|
-
const deserializedParams = (await AztecWalletSerializer.params.deserialize(
|
113
|
-
method,
|
114
|
-
serializedParams,
|
115
|
-
)) as AztecWalletMethodMap['aztec_getContractMetadata']['params'];
|
116
|
-
expect(deserializedParams.address.toString()).toBe(params.address.toString());
|
117
|
-
});
|
118
|
-
|
119
|
-
it('should handle transaction methods', async () => {
|
120
|
-
const method = 'aztec_sendTx';
|
121
|
-
const tx = await Tx.random();
|
122
|
-
const params = { tx };
|
123
|
-
|
124
|
-
const serializedParams = await AztecWalletSerializer.params.serialize(method, params);
|
125
|
-
expect(serializedParams).toBeDefined();
|
126
|
-
expect(serializedParams.method).toBe(method);
|
127
|
-
expect(typeof serializedParams.serialized).toBe('string');
|
128
|
-
|
129
|
-
const deserializedParams = (await AztecWalletSerializer.params.deserialize(
|
130
|
-
method,
|
131
|
-
serializedParams,
|
132
|
-
)) as AztecWalletMethodMap['aztec_sendTx']['params'];
|
133
|
-
expect(deserializedParams.tx.toBuffer().toString('hex')).toBe(tx.toBuffer().toString('hex'));
|
134
|
-
});
|
135
|
-
});
|
136
|
-
});
|
package/src/serializers/index.ts
DELETED
@@ -1,191 +0,0 @@
|
|
1
|
-
import type { AztecWalletMethodMap } from '../types.js';
|
2
|
-
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
|
-
|
4
|
-
/**
|
5
|
-
* Re-export all serializer types and implementations.
|
6
|
-
* This provides a single entry point for importing any serializer functionality.
|
7
|
-
*/
|
8
|
-
export * from './account.js';
|
9
|
-
export * from './contract.js';
|
10
|
-
export * from './transaction.js';
|
11
|
-
export * from './note.js';
|
12
|
-
export * from './log.js';
|
13
|
-
|
14
|
-
// Import all serializer instances
|
15
|
-
import {
|
16
|
-
aztecSetScopesSerializer,
|
17
|
-
aztecRegisterAccountSerializer,
|
18
|
-
aztecAddAuthWitnessSerializer,
|
19
|
-
aztecGetAuthWitnessSerializer,
|
20
|
-
} from './account.js';
|
21
|
-
import {
|
22
|
-
aztecGetContractMetadataSerializer,
|
23
|
-
aztecGetContractClassMetadataSerializer,
|
24
|
-
aztecRegisterContractSerializer,
|
25
|
-
} from './contract.js';
|
26
|
-
import {
|
27
|
-
aztecCreateTxExecutionRequestSerializer,
|
28
|
-
aztecProveTxSerializer,
|
29
|
-
aztecSendTxSerializer,
|
30
|
-
aztecGetTxReceiptSerializer,
|
31
|
-
aztecGetTxEffectSerializer,
|
32
|
-
aztecSimulateTxSerializer,
|
33
|
-
} from './transaction.js';
|
34
|
-
import { aztecGetNotesSerializer, aztecAddNoteSerializer, aztecAddNullifiedNoteSerializer } from './note.js';
|
35
|
-
import {
|
36
|
-
aztecGetPublicLogsSerializer,
|
37
|
-
aztecGetContractClassLogsSerializer,
|
38
|
-
aztecGetPrivateEventsSerializer,
|
39
|
-
aztecGetPublicEventsSerializer,
|
40
|
-
} from './log.js';
|
41
|
-
|
42
|
-
/**
|
43
|
-
* Type alias for Aztec RPC method names.
|
44
|
-
* Represents all available methods in the Aztec wallet RPC interface.
|
45
|
-
*/
|
46
|
-
type AztecMethodName = keyof AztecWalletMethodMap;
|
47
|
-
|
48
|
-
/**
|
49
|
-
* Registry of all available method serializers.
|
50
|
-
* Maps each RPC method name to its corresponding serializer implementation.
|
51
|
-
* This mapping is used by the main AztecWalletSerializer to route method calls
|
52
|
-
* to the appropriate specialized serializer.
|
53
|
-
*/
|
54
|
-
const methodSerializers: Record<AztecMethodName, JSONRPCSerializer<unknown, unknown>> = {
|
55
|
-
// Account methods
|
56
|
-
aztec_setScopes: aztecSetScopesSerializer,
|
57
|
-
aztec_registerAccount: aztecRegisterAccountSerializer,
|
58
|
-
aztec_addAuthWitness: aztecAddAuthWitnessSerializer,
|
59
|
-
aztec_getAuthWitness: aztecGetAuthWitnessSerializer,
|
60
|
-
|
61
|
-
// Contract methods
|
62
|
-
aztec_getContractMetadata: aztecGetContractMetadataSerializer,
|
63
|
-
aztec_getContractClassMetadata: aztecGetContractClassMetadataSerializer,
|
64
|
-
aztec_registerContract: aztecRegisterContractSerializer,
|
65
|
-
|
66
|
-
// Transaction methods
|
67
|
-
aztec_createTxExecutionRequest: aztecCreateTxExecutionRequestSerializer,
|
68
|
-
aztec_proveTx: aztecProveTxSerializer,
|
69
|
-
aztec_sendTx: aztecSendTxSerializer,
|
70
|
-
aztec_getTxReceipt: aztecGetTxReceiptSerializer,
|
71
|
-
aztec_getTxEffect: aztecGetTxEffectSerializer,
|
72
|
-
aztec_simulateTx: aztecSimulateTxSerializer,
|
73
|
-
|
74
|
-
// Note methods
|
75
|
-
aztec_getNotes: aztecGetNotesSerializer,
|
76
|
-
aztec_addNote: aztecAddNoteSerializer,
|
77
|
-
aztec_addNullifiedNote: aztecAddNullifiedNoteSerializer,
|
78
|
-
|
79
|
-
// Log methods
|
80
|
-
aztec_getPublicLogs: aztecGetPublicLogsSerializer,
|
81
|
-
aztec_getContractClassLogs: aztecGetContractClassLogsSerializer,
|
82
|
-
aztec_getPrivateEvents: aztecGetPrivateEventsSerializer,
|
83
|
-
aztec_getPublicEvents: aztecGetPublicEventsSerializer,
|
84
|
-
};
|
85
|
-
|
86
|
-
/**
|
87
|
-
* Helper function to wrap unknown values in a standard JSON-RPC format.
|
88
|
-
* Used as a fallback when no specific serializer is available for a method.
|
89
|
-
*
|
90
|
-
* @param method - The RPC method name
|
91
|
-
* @param value - The value to wrap
|
92
|
-
* @returns Standardized JSON-RPC data structure
|
93
|
-
*/
|
94
|
-
async function wrapUnknownValue(method: string, value: unknown): Promise<JSONRPCSerializedData> {
|
95
|
-
return Promise.resolve({
|
96
|
-
method,
|
97
|
-
serialized: JSON.stringify(value),
|
98
|
-
});
|
99
|
-
}
|
100
|
-
|
101
|
-
/**
|
102
|
-
* Main serializer for the Aztec wallet RPC interface.
|
103
|
-
* Provides a unified interface for serializing all supported RPC methods.
|
104
|
-
*
|
105
|
-
* This serializer:
|
106
|
-
* 1. Routes each method call to its specialized serializer from methodSerializers
|
107
|
-
* 2. Provides fallback handling for unknown methods
|
108
|
-
* 3. Wraps all serialization operations in proper error handling
|
109
|
-
*/
|
110
|
-
export const AztecWalletSerializer: JSONRPCSerializer<unknown, unknown> = {
|
111
|
-
params: {
|
112
|
-
/**
|
113
|
-
* Serializes RPC method parameters using the appropriate method serializer.
|
114
|
-
* @param method - The RPC method name
|
115
|
-
* @param value - The parameters to serialize
|
116
|
-
* @returns Serialized parameter data
|
117
|
-
* @throws If serialization fails or encounters an error
|
118
|
-
*/
|
119
|
-
serialize: async (method: string, value: unknown): Promise<JSONRPCSerializedData> => {
|
120
|
-
const serializer = methodSerializers[method as AztecMethodName];
|
121
|
-
if (!serializer?.params) {
|
122
|
-
return wrapUnknownValue(method, value);
|
123
|
-
}
|
124
|
-
|
125
|
-
try {
|
126
|
-
return await serializer.params.serialize(method, value);
|
127
|
-
} catch (error) {
|
128
|
-
throw new Error(`Failed to serialize params for method ${method}: ${error}`);
|
129
|
-
}
|
130
|
-
},
|
131
|
-
/**
|
132
|
-
* Deserializes RPC method parameters using the appropriate method serializer.
|
133
|
-
* @param method - The RPC method name
|
134
|
-
* @param data - The serialized parameter data
|
135
|
-
* @returns Deserialized parameters
|
136
|
-
* @throws If deserialization fails or encounters an error
|
137
|
-
*/
|
138
|
-
deserialize: async (method: string, data: JSONRPCSerializedData): Promise<unknown> => {
|
139
|
-
const serializer = methodSerializers[method as AztecMethodName];
|
140
|
-
if (!serializer?.params) {
|
141
|
-
return data;
|
142
|
-
}
|
143
|
-
|
144
|
-
try {
|
145
|
-
return await serializer.params.deserialize(method, data);
|
146
|
-
} catch (error) {
|
147
|
-
throw new Error(`Failed to deserialize params for method ${method}: ${error}`);
|
148
|
-
}
|
149
|
-
},
|
150
|
-
},
|
151
|
-
result: {
|
152
|
-
/**
|
153
|
-
* Serializes RPC method results using the appropriate method serializer.
|
154
|
-
* @param method - The RPC method name
|
155
|
-
* @param value - The result to serialize
|
156
|
-
* @returns Serialized result data
|
157
|
-
* @throws If serialization fails or encounters an error
|
158
|
-
*/
|
159
|
-
serialize: async (method: string, value: unknown): Promise<JSONRPCSerializedData> => {
|
160
|
-
const serializer = methodSerializers[method as AztecMethodName];
|
161
|
-
if (!serializer?.result) {
|
162
|
-
return wrapUnknownValue(method, value);
|
163
|
-
}
|
164
|
-
|
165
|
-
try {
|
166
|
-
return await serializer.result.serialize(method, value);
|
167
|
-
} catch (error) {
|
168
|
-
throw new Error(`Failed to serialize result for method ${method}: ${error}`);
|
169
|
-
}
|
170
|
-
},
|
171
|
-
/**
|
172
|
-
* Deserializes RPC method results using the appropriate method serializer.
|
173
|
-
* @param method - The RPC method name
|
174
|
-
* @param data - The serialized result data
|
175
|
-
* @returns Deserialized result
|
176
|
-
* @throws If deserialization fails or encounters an error
|
177
|
-
*/
|
178
|
-
deserialize: async (method: string, data: JSONRPCSerializedData): Promise<unknown> => {
|
179
|
-
const serializer = methodSerializers[method as AztecMethodName];
|
180
|
-
if (!serializer?.result) {
|
181
|
-
return data;
|
182
|
-
}
|
183
|
-
|
184
|
-
try {
|
185
|
-
return await serializer.result.deserialize(method, data);
|
186
|
-
} catch (error) {
|
187
|
-
throw new Error(`Failed to deserialize result for method ${method}: ${error}`);
|
188
|
-
}
|
189
|
-
},
|
190
|
-
},
|
191
|
-
};
|