@aztec/foundation 0.61.0 → 0.63.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/dest/abi/abi.d.ts +708 -228
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +92 -8
- package/dest/abi/decoder.d.ts.map +1 -1
- package/dest/abi/decoder.js +8 -6
- package/dest/abi/encoder.d.ts.map +1 -1
- package/dest/abi/encoder.js +4 -1
- package/dest/abi/event_selector.d.ts +4 -0
- package/dest/abi/event_selector.d.ts.map +1 -1
- package/dest/abi/event_selector.js +7 -1
- package/dest/abi/utils.d.ts +8 -0
- package/dest/abi/utils.d.ts.map +1 -1
- package/dest/abi/utils.js +23 -1
- package/dest/aztec-address/index.d.ts +19 -3
- package/dest/aztec-address/index.d.ts.map +1 -1
- package/dest/aztec-address/index.js +43 -14
- package/dest/buffer/buffer32.d.ts +1 -0
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +4 -1
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/crypto/index.d.ts +1 -0
- package/dest/crypto/index.d.ts.map +1 -1
- package/dest/crypto/index.js +2 -1
- package/dest/crypto/keys/index.d.ts +5 -0
- package/dest/crypto/keys/index.d.ts.map +1 -0
- package/dest/crypto/keys/index.js +8 -0
- package/dest/eth-address/index.d.ts +2 -6
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-address/index.js +3 -7
- package/dest/eth-signature/eth_signature.d.ts +2 -0
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/eth-signature/eth_signature.js +7 -1
- package/dest/fields/fields.d.ts +1 -3
- package/dest/fields/fields.d.ts.map +1 -1
- package/dest/fields/fields.js +2 -1
- package/dest/json-rpc/client/fetch.d.ts +21 -0
- package/dest/json-rpc/client/fetch.d.ts.map +1 -0
- package/dest/json-rpc/client/fetch.js +66 -0
- package/dest/json-rpc/client/index.d.ts +2 -1
- package/dest/json-rpc/client/index.d.ts.map +1 -1
- package/dest/json-rpc/client/index.js +3 -2
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +13 -0
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
- package/dest/json-rpc/client/safe_json_rpc_client.js +45 -0
- package/dest/json-rpc/convert.d.ts +11 -19
- package/dest/json-rpc/convert.d.ts.map +1 -1
- package/dest/json-rpc/convert.js +30 -123
- package/dest/json-rpc/fixtures/test_state.d.ts +45 -3
- package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/test_state.js +58 -2
- package/dest/json-rpc/index.d.ts +1 -2
- package/dest/json-rpc/index.d.ts.map +1 -1
- package/dest/json-rpc/index.js +2 -3
- package/dest/json-rpc/js_utils.d.ts.map +1 -1
- package/dest/json-rpc/js_utils.js +2 -1
- package/dest/json-rpc/server/index.d.ts +1 -2
- package/dest/json-rpc/server/index.d.ts.map +1 -1
- package/dest/json-rpc/server/index.js +2 -3
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +112 -0
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
- package/dest/json-rpc/server/safe_json_rpc_server.js +275 -0
- package/dest/json-rpc/test/index.d.ts +2 -0
- package/dest/json-rpc/test/index.d.ts.map +1 -0
- package/dest/json-rpc/test/index.js +2 -0
- package/dest/json-rpc/test/integration.d.ts +13 -0
- package/dest/json-rpc/test/integration.d.ts.map +1 -0
- package/dest/json-rpc/test/integration.js +12 -0
- package/dest/log/logger.d.ts +10 -2
- package/dest/log/logger.d.ts.map +1 -1
- package/dest/log/logger.js +55 -12
- package/dest/schemas/api.d.ts +21 -0
- package/dest/schemas/api.d.ts.map +1 -0
- package/dest/schemas/api.js +8 -0
- package/dest/schemas/index.d.ts +6 -0
- package/dest/schemas/index.d.ts.map +1 -0
- package/dest/schemas/index.js +6 -0
- package/dest/schemas/parse.d.ts +9 -0
- package/dest/schemas/parse.d.ts.map +1 -0
- package/dest/schemas/parse.js +26 -0
- package/dest/schemas/schemas.d.ts +79 -0
- package/dest/schemas/schemas.d.ts.map +1 -0
- package/dest/schemas/schemas.js +87 -0
- package/dest/schemas/types.d.ts +3 -0
- package/dest/schemas/types.d.ts.map +1 -0
- package/dest/schemas/types.js +2 -0
- package/dest/schemas/utils.d.ts +40 -0
- package/dest/schemas/utils.d.ts.map +1 -0
- package/dest/schemas/utils.js +56 -0
- package/dest/string/index.d.ts +7 -0
- package/dest/string/index.d.ts.map +1 -0
- package/dest/string/index.js +13 -0
- package/dest/types/index.d.ts +2 -0
- package/dest/types/index.d.ts.map +1 -1
- package/dest/validation/index.d.ts +6 -0
- package/dest/validation/index.d.ts.map +1 -1
- package/dest/validation/index.js +11 -1
- package/dest/wasm/wasm_module.js +1 -1
- package/package.json +7 -4
- package/src/abi/abi.ts +203 -233
- package/src/abi/decoder.ts +9 -5
- package/src/abi/encoder.ts +2 -0
- package/src/abi/event_selector.ts +7 -0
- package/src/abi/utils.ts +28 -0
- package/src/aztec-address/index.ts +64 -18
- package/src/buffer/buffer32.ts +5 -0
- package/src/config/env_var.ts +22 -8
- package/src/crypto/index.ts +1 -0
- package/src/crypto/keys/index.ts +9 -0
- package/src/eth-address/index.ts +2 -6
- package/src/eth-signature/eth_signature.ts +8 -0
- package/src/fields/fields.ts +2 -3
- package/src/json-rpc/client/fetch.ts +81 -0
- package/src/json-rpc/client/index.ts +2 -1
- package/src/json-rpc/client/safe_json_rpc_client.ts +61 -0
- package/src/json-rpc/convert.ts +29 -142
- package/src/json-rpc/fixtures/test_state.ts +87 -3
- package/src/json-rpc/index.ts +1 -8
- package/src/json-rpc/js_utils.ts +1 -0
- package/src/json-rpc/server/index.ts +1 -2
- package/src/json-rpc/server/safe_json_rpc_server.ts +336 -0
- package/src/json-rpc/test/index.ts +1 -0
- package/src/json-rpc/test/integration.ts +24 -0
- package/src/log/logger.ts +59 -15
- package/src/schemas/api.ts +47 -0
- package/src/schemas/index.ts +5 -0
- package/src/schemas/parse.ts +29 -0
- package/src/schemas/schemas.ts +111 -0
- package/src/schemas/types.ts +3 -0
- package/src/schemas/utils.ts +85 -0
- package/src/string/index.ts +15 -0
- package/src/types/index.ts +3 -0
- package/src/validation/index.ts +11 -0
- package/src/wasm/wasm_module.ts +1 -1
- package/dest/json-rpc/class_converter.d.ts +0 -144
- package/dest/json-rpc/class_converter.d.ts.map +0 -1
- package/dest/json-rpc/class_converter.js +0 -102
- package/dest/json-rpc/client/json_rpc_client.d.ts +0 -35
- package/dest/json-rpc/client/json_rpc_client.d.ts.map +0 -1
- package/dest/json-rpc/client/json_rpc_client.js +0 -117
- package/dest/json-rpc/server/json_proxy.d.ts +0 -30
- package/dest/json-rpc/server/json_proxy.d.ts.map +0 -1
- package/dest/json-rpc/server/json_proxy.js +0 -46
- package/dest/json-rpc/server/json_rpc_server.d.ts +0 -98
- package/dest/json-rpc/server/json_rpc_server.d.ts.map +0 -1
- package/dest/json-rpc/server/json_rpc_server.js +0 -248
- package/src/json-rpc/class_converter.ts +0 -213
- package/src/json-rpc/client/json_rpc_client.ts +0 -148
- package/src/json-rpc/server/json_proxy.ts +0 -60
- package/src/json-rpc/server/json_rpc_server.ts +0 -300
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import cors from '@koa/cors';
|
|
2
|
-
import http from 'http';
|
|
3
|
-
import Koa from 'koa';
|
|
4
|
-
import bodyParser from 'koa-bodyparser';
|
|
5
|
-
import compress from 'koa-compress';
|
|
6
|
-
import Router from 'koa-router';
|
|
7
|
-
|
|
8
|
-
import { createDebugLogger } from '../../log/index.js';
|
|
9
|
-
import { promiseWithResolvers } from '../../promise/utils.js';
|
|
10
|
-
import { type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js';
|
|
11
|
-
import { convertBigintsInObj } from '../convert.js';
|
|
12
|
-
import { type ClassMaps, JsonProxy } from './json_proxy.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* JsonRpcServer.
|
|
16
|
-
* Minimal, dev-friendly mechanism to create a server from an object.
|
|
17
|
-
*/
|
|
18
|
-
export class JsonRpcServer {
|
|
19
|
-
/**
|
|
20
|
-
* The proxy object.
|
|
21
|
-
*/
|
|
22
|
-
public proxy: JsonProxy;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* The HTTP server accepting remote requests.
|
|
26
|
-
* This member field is initialized when the server is started.
|
|
27
|
-
*/
|
|
28
|
-
private httpServer?: http.Server;
|
|
29
|
-
|
|
30
|
-
constructor(
|
|
31
|
-
private handler: object,
|
|
32
|
-
private stringClassMap: StringClassConverterInput,
|
|
33
|
-
private objectClassMap: JsonClassConverterInput,
|
|
34
|
-
/** List of methods to disallow from calling remotely */
|
|
35
|
-
public readonly disallowedMethods: string[] = [],
|
|
36
|
-
private log = createDebugLogger('json-rpc:server'),
|
|
37
|
-
) {
|
|
38
|
-
this.proxy = new JsonProxy(handler, stringClassMap, objectClassMap);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Get an express app object.
|
|
43
|
-
* @param prefix - Our server prefix.
|
|
44
|
-
* @returns The app object.
|
|
45
|
-
*/
|
|
46
|
-
public getApp(prefix = '') {
|
|
47
|
-
const router = this.getRouter(prefix);
|
|
48
|
-
const exceptionHandler = async (ctx: Koa.Context, next: () => Promise<void>) => {
|
|
49
|
-
try {
|
|
50
|
-
await next();
|
|
51
|
-
} catch (err: any) {
|
|
52
|
-
this.log.error(err);
|
|
53
|
-
if (err instanceof SyntaxError) {
|
|
54
|
-
ctx.status = 400;
|
|
55
|
-
ctx.body = {
|
|
56
|
-
jsonrpc: '2.0',
|
|
57
|
-
id: null,
|
|
58
|
-
error: {
|
|
59
|
-
code: -32700,
|
|
60
|
-
message: 'Parse error',
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
} else {
|
|
64
|
-
ctx.status = 500;
|
|
65
|
-
ctx.body = {
|
|
66
|
-
jsonrpc: '2.0',
|
|
67
|
-
id: null,
|
|
68
|
-
error: {
|
|
69
|
-
code: -32603,
|
|
70
|
-
message: 'Internal error',
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const app = new Koa();
|
|
77
|
-
app.on('error', error => {
|
|
78
|
-
this.log.error(`Error on API handler: ${error}`);
|
|
79
|
-
});
|
|
80
|
-
app.use(exceptionHandler);
|
|
81
|
-
app.use(compress({ br: false } as any));
|
|
82
|
-
app.use(
|
|
83
|
-
bodyParser({
|
|
84
|
-
jsonLimit: '50mb',
|
|
85
|
-
enableTypes: ['json'],
|
|
86
|
-
detectJSON: () => true,
|
|
87
|
-
}),
|
|
88
|
-
);
|
|
89
|
-
app.use(cors());
|
|
90
|
-
app.use(router.routes());
|
|
91
|
-
app.use(router.allowedMethods());
|
|
92
|
-
|
|
93
|
-
return app;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Get a router object wrapping our RPC class.
|
|
98
|
-
* @param prefix - The server prefix.
|
|
99
|
-
* @returns The router object.
|
|
100
|
-
*/
|
|
101
|
-
private getRouter(prefix: string) {
|
|
102
|
-
const router = new Router({ prefix });
|
|
103
|
-
const proto = Object.getPrototypeOf(this.handler);
|
|
104
|
-
// "JSON RPC mode" where a single endpoint is used and the method is given in the request body
|
|
105
|
-
router.post('/', async (ctx: Koa.Context) => {
|
|
106
|
-
const { params = [], jsonrpc, id, method } = ctx.request.body as any;
|
|
107
|
-
// Ignore if not a function
|
|
108
|
-
if (method === 'constructor' || typeof proto[method] !== 'function' || this.disallowedMethods.includes(method)) {
|
|
109
|
-
ctx.status = 400;
|
|
110
|
-
ctx.body = {
|
|
111
|
-
jsonrpc,
|
|
112
|
-
id,
|
|
113
|
-
error: {
|
|
114
|
-
code: -32601,
|
|
115
|
-
message: `Method not found: ${method}`,
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
} else {
|
|
119
|
-
try {
|
|
120
|
-
const result = await this.proxy.call(method, params);
|
|
121
|
-
ctx.body = {
|
|
122
|
-
jsonrpc,
|
|
123
|
-
id,
|
|
124
|
-
result: convertBigintsInObj(result),
|
|
125
|
-
};
|
|
126
|
-
ctx.status = 200;
|
|
127
|
-
} catch (err: any) {
|
|
128
|
-
// Propagate the error message to the client. Plenty of the errors are expected to occur (e.g. adding
|
|
129
|
-
// a duplicate recipient) so this is necessary.
|
|
130
|
-
ctx.status = 400;
|
|
131
|
-
ctx.body = {
|
|
132
|
-
jsonrpc,
|
|
133
|
-
id,
|
|
134
|
-
error: {
|
|
135
|
-
// TODO assign error codes - https://github.com/AztecProtocol/aztec-packages/issues/2633
|
|
136
|
-
code: -32000,
|
|
137
|
-
message: err.message,
|
|
138
|
-
},
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
return router;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Start this server with koa.
|
|
149
|
-
* @param port - Port number.
|
|
150
|
-
* @param prefix - Prefix string.
|
|
151
|
-
*/
|
|
152
|
-
public start(port: number, prefix = ''): void {
|
|
153
|
-
if (this.httpServer) {
|
|
154
|
-
throw new Error('Server is already listening');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
this.httpServer = http.createServer(this.getApp(prefix).callback());
|
|
158
|
-
this.httpServer.listen(port);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Stops the HTTP server
|
|
163
|
-
*/
|
|
164
|
-
public stop(): Promise<void> {
|
|
165
|
-
if (!this.httpServer) {
|
|
166
|
-
return Promise.resolve();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const { promise, resolve, reject } = promiseWithResolvers<void>();
|
|
170
|
-
this.httpServer.close(err => {
|
|
171
|
-
if (err) {
|
|
172
|
-
reject(err);
|
|
173
|
-
} else {
|
|
174
|
-
resolve();
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
return promise;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Get a list of methods.
|
|
182
|
-
* @returns A list of methods.
|
|
183
|
-
*/
|
|
184
|
-
public getMethods(): string[] {
|
|
185
|
-
return Object.getOwnPropertyNames(Object.getPrototypeOf(this.handler));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Gets the class maps that were used to create the proxy.
|
|
190
|
-
* @returns The string & object class maps.
|
|
191
|
-
*/
|
|
192
|
-
public getClassMaps(): ClassMaps {
|
|
193
|
-
return { stringClassMap: this.stringClassMap, objectClassMap: this.objectClassMap };
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Call an RPC method.
|
|
198
|
-
* @param methodName - The RPC method.
|
|
199
|
-
* @param jsonParams - The RPG parameters.
|
|
200
|
-
* @param skipConversion - Whether to skip conversion of the parameters.
|
|
201
|
-
* @returns The remote result.
|
|
202
|
-
*/
|
|
203
|
-
public async call(methodName: string, jsonParams: any[] = [], skipConversion: boolean) {
|
|
204
|
-
return await this.proxy.call(methodName, jsonParams, skipConversion);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Creates a router for handling a plain status request that will return 200 status when running.
|
|
210
|
-
* @param apiPrefix - The prefix to use for all api requests
|
|
211
|
-
* @returns - The router for handling status requests.
|
|
212
|
-
*/
|
|
213
|
-
export function createStatusRouter(apiPrefix = '') {
|
|
214
|
-
const router = new Router({ prefix: `${apiPrefix}` });
|
|
215
|
-
router.get('/status', (ctx: Koa.Context) => {
|
|
216
|
-
ctx.status = 200;
|
|
217
|
-
});
|
|
218
|
-
return router;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Creates an http server that forwards calls to the underlying instance and starts it on the given port.
|
|
223
|
-
* @param instance - Instance to wrap in a JSON-RPC server.
|
|
224
|
-
* @param jsonRpcFactoryFunc - Function that wraps the instance in a JSON-RPC server.
|
|
225
|
-
* @param port - Port to listen in.
|
|
226
|
-
* @returns A running http server.
|
|
227
|
-
*/
|
|
228
|
-
export function startHttpRpcServer<T>(
|
|
229
|
-
name: string,
|
|
230
|
-
instance: T,
|
|
231
|
-
jsonRpcFactoryFunc: (instance: T) => JsonRpcServer,
|
|
232
|
-
port: string | number,
|
|
233
|
-
): http.Server {
|
|
234
|
-
const rpcServer = jsonRpcFactoryFunc(instance);
|
|
235
|
-
|
|
236
|
-
const namespacedServer = createNamespacedJsonRpcServer([{ [name]: rpcServer }]);
|
|
237
|
-
|
|
238
|
-
const app = namespacedServer.getApp();
|
|
239
|
-
|
|
240
|
-
const httpServer = http.createServer(app.callback());
|
|
241
|
-
httpServer.listen(port);
|
|
242
|
-
|
|
243
|
-
return httpServer;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* List of namespace to server instance.
|
|
247
|
-
*/
|
|
248
|
-
export type ServerList = {
|
|
249
|
-
/** name of the service to be used for namespacing */
|
|
250
|
-
[name: string]: JsonRpcServer;
|
|
251
|
-
}[];
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Creates a single JsonRpcServer from multiple servers.
|
|
255
|
-
* @param servers - List of servers to be combined into a single server, passed as ServerList.
|
|
256
|
-
* @returns A single JsonRpcServer with namespaced methods.
|
|
257
|
-
*/
|
|
258
|
-
export function createNamespacedJsonRpcServer(
|
|
259
|
-
servers: ServerList,
|
|
260
|
-
log = createDebugLogger('json-rpc:multi-server'),
|
|
261
|
-
): JsonRpcServer {
|
|
262
|
-
const handler = {} as any;
|
|
263
|
-
const disallowedMethods: string[] = [];
|
|
264
|
-
const classMapsArr: ClassMaps[] = [];
|
|
265
|
-
|
|
266
|
-
for (const serverEntry of servers) {
|
|
267
|
-
const [namespace, server] = Object.entries(serverEntry)[0];
|
|
268
|
-
const serverMethods = server.getMethods();
|
|
269
|
-
|
|
270
|
-
for (const method of serverMethods) {
|
|
271
|
-
const namespacedMethod = `${namespace}_${method}`;
|
|
272
|
-
|
|
273
|
-
handler[namespacedMethod] = (...args: any[]) => {
|
|
274
|
-
return server.call(method, args, true);
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// get the combined disallowed methods from all servers.
|
|
279
|
-
disallowedMethods.push(...server.disallowedMethods.map(method => `${namespace}_${method}`));
|
|
280
|
-
// get the combined classmaps from all servers.
|
|
281
|
-
const classMap = server.getClassMaps();
|
|
282
|
-
classMapsArr.push({
|
|
283
|
-
stringClassMap: classMap.stringClassMap,
|
|
284
|
-
objectClassMap: classMap.objectClassMap,
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// Get the combined stringClassMap & objectClassMap from all servers
|
|
289
|
-
const classMaps = classMapsArr.reduce(
|
|
290
|
-
(acc, curr) => {
|
|
291
|
-
return {
|
|
292
|
-
stringClassMap: { ...acc.stringClassMap, ...curr.stringClassMap },
|
|
293
|
-
objectClassMap: { ...acc.objectClassMap, ...curr.objectClassMap },
|
|
294
|
-
};
|
|
295
|
-
},
|
|
296
|
-
{ stringClassMap: {}, objectClassMap: {} } as ClassMaps,
|
|
297
|
-
);
|
|
298
|
-
|
|
299
|
-
return new JsonRpcServer(Object.create(handler), classMaps.stringClassMap, classMaps.objectClassMap, [], log);
|
|
300
|
-
}
|