@aztec/foundation 0.62.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.
Files changed (140) hide show
  1. package/dest/abi/abi.d.ts +708 -228
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +92 -8
  4. package/dest/abi/encoder.d.ts.map +1 -1
  5. package/dest/abi/encoder.js +4 -1
  6. package/dest/abi/event_selector.d.ts +4 -0
  7. package/dest/abi/event_selector.d.ts.map +1 -1
  8. package/dest/abi/event_selector.js +7 -1
  9. package/dest/aztec-address/index.d.ts +19 -3
  10. package/dest/aztec-address/index.d.ts.map +1 -1
  11. package/dest/aztec-address/index.js +43 -14
  12. package/dest/buffer/buffer32.d.ts +1 -0
  13. package/dest/buffer/buffer32.d.ts.map +1 -1
  14. package/dest/buffer/buffer32.js +4 -1
  15. package/dest/config/env_var.d.ts +1 -1
  16. package/dest/config/env_var.d.ts.map +1 -1
  17. package/dest/crypto/index.d.ts +1 -0
  18. package/dest/crypto/index.d.ts.map +1 -1
  19. package/dest/crypto/index.js +2 -1
  20. package/dest/crypto/keys/index.d.ts +5 -0
  21. package/dest/crypto/keys/index.d.ts.map +1 -0
  22. package/dest/crypto/keys/index.js +8 -0
  23. package/dest/eth-address/index.d.ts +2 -6
  24. package/dest/eth-address/index.d.ts.map +1 -1
  25. package/dest/eth-address/index.js +3 -7
  26. package/dest/eth-signature/eth_signature.d.ts +2 -0
  27. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  28. package/dest/eth-signature/eth_signature.js +7 -1
  29. package/dest/fields/fields.d.ts +1 -3
  30. package/dest/fields/fields.d.ts.map +1 -1
  31. package/dest/fields/fields.js +2 -1
  32. package/dest/json-rpc/client/fetch.d.ts +21 -0
  33. package/dest/json-rpc/client/fetch.d.ts.map +1 -0
  34. package/dest/json-rpc/client/fetch.js +66 -0
  35. package/dest/json-rpc/client/index.d.ts +2 -1
  36. package/dest/json-rpc/client/index.d.ts.map +1 -1
  37. package/dest/json-rpc/client/index.js +3 -2
  38. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +13 -0
  39. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
  40. package/dest/json-rpc/client/safe_json_rpc_client.js +45 -0
  41. package/dest/json-rpc/convert.d.ts +11 -19
  42. package/dest/json-rpc/convert.d.ts.map +1 -1
  43. package/dest/json-rpc/convert.js +30 -123
  44. package/dest/json-rpc/fixtures/test_state.d.ts +45 -3
  45. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  46. package/dest/json-rpc/fixtures/test_state.js +58 -2
  47. package/dest/json-rpc/index.d.ts +1 -2
  48. package/dest/json-rpc/index.d.ts.map +1 -1
  49. package/dest/json-rpc/index.js +2 -3
  50. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  51. package/dest/json-rpc/js_utils.js +2 -1
  52. package/dest/json-rpc/server/index.d.ts +1 -2
  53. package/dest/json-rpc/server/index.d.ts.map +1 -1
  54. package/dest/json-rpc/server/index.js +2 -3
  55. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +112 -0
  56. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
  57. package/dest/json-rpc/server/safe_json_rpc_server.js +275 -0
  58. package/dest/json-rpc/test/index.d.ts +2 -0
  59. package/dest/json-rpc/test/index.d.ts.map +1 -0
  60. package/dest/json-rpc/test/index.js +2 -0
  61. package/dest/json-rpc/test/integration.d.ts +13 -0
  62. package/dest/json-rpc/test/integration.d.ts.map +1 -0
  63. package/dest/json-rpc/test/integration.js +12 -0
  64. package/dest/log/logger.d.ts.map +1 -1
  65. package/dest/log/logger.js +2 -2
  66. package/dest/schemas/api.d.ts +21 -0
  67. package/dest/schemas/api.d.ts.map +1 -0
  68. package/dest/schemas/api.js +8 -0
  69. package/dest/schemas/index.d.ts +6 -0
  70. package/dest/schemas/index.d.ts.map +1 -0
  71. package/dest/schemas/index.js +6 -0
  72. package/dest/schemas/parse.d.ts +9 -0
  73. package/dest/schemas/parse.d.ts.map +1 -0
  74. package/dest/schemas/parse.js +26 -0
  75. package/dest/schemas/schemas.d.ts +79 -0
  76. package/dest/schemas/schemas.d.ts.map +1 -0
  77. package/dest/schemas/schemas.js +87 -0
  78. package/dest/schemas/types.d.ts +3 -0
  79. package/dest/schemas/types.d.ts.map +1 -0
  80. package/dest/schemas/types.js +2 -0
  81. package/dest/schemas/utils.d.ts +40 -0
  82. package/dest/schemas/utils.d.ts.map +1 -0
  83. package/dest/schemas/utils.js +56 -0
  84. package/dest/string/index.d.ts +7 -0
  85. package/dest/string/index.d.ts.map +1 -0
  86. package/dest/string/index.js +13 -0
  87. package/dest/types/index.d.ts +2 -0
  88. package/dest/types/index.d.ts.map +1 -1
  89. package/dest/validation/index.d.ts +6 -0
  90. package/dest/validation/index.d.ts.map +1 -1
  91. package/dest/validation/index.js +11 -1
  92. package/package.json +7 -4
  93. package/src/abi/abi.ts +203 -233
  94. package/src/abi/encoder.ts +2 -0
  95. package/src/abi/event_selector.ts +7 -0
  96. package/src/aztec-address/index.ts +64 -18
  97. package/src/buffer/buffer32.ts +5 -0
  98. package/src/config/env_var.ts +18 -8
  99. package/src/crypto/index.ts +1 -0
  100. package/src/crypto/keys/index.ts +9 -0
  101. package/src/eth-address/index.ts +2 -6
  102. package/src/eth-signature/eth_signature.ts +8 -0
  103. package/src/fields/fields.ts +2 -3
  104. package/src/json-rpc/client/fetch.ts +81 -0
  105. package/src/json-rpc/client/index.ts +2 -1
  106. package/src/json-rpc/client/safe_json_rpc_client.ts +61 -0
  107. package/src/json-rpc/convert.ts +29 -142
  108. package/src/json-rpc/fixtures/test_state.ts +87 -3
  109. package/src/json-rpc/index.ts +1 -8
  110. package/src/json-rpc/js_utils.ts +1 -0
  111. package/src/json-rpc/server/index.ts +1 -2
  112. package/src/json-rpc/server/safe_json_rpc_server.ts +336 -0
  113. package/src/json-rpc/test/index.ts +1 -0
  114. package/src/json-rpc/test/integration.ts +24 -0
  115. package/src/log/logger.ts +2 -1
  116. package/src/schemas/api.ts +47 -0
  117. package/src/schemas/index.ts +5 -0
  118. package/src/schemas/parse.ts +29 -0
  119. package/src/schemas/schemas.ts +111 -0
  120. package/src/schemas/types.ts +3 -0
  121. package/src/schemas/utils.ts +85 -0
  122. package/src/string/index.ts +15 -0
  123. package/src/types/index.ts +3 -0
  124. package/src/validation/index.ts +11 -0
  125. package/dest/json-rpc/class_converter.d.ts +0 -144
  126. package/dest/json-rpc/class_converter.d.ts.map +0 -1
  127. package/dest/json-rpc/class_converter.js +0 -102
  128. package/dest/json-rpc/client/json_rpc_client.d.ts +0 -35
  129. package/dest/json-rpc/client/json_rpc_client.d.ts.map +0 -1
  130. package/dest/json-rpc/client/json_rpc_client.js +0 -117
  131. package/dest/json-rpc/server/json_proxy.d.ts +0 -30
  132. package/dest/json-rpc/server/json_proxy.d.ts.map +0 -1
  133. package/dest/json-rpc/server/json_proxy.js +0 -46
  134. package/dest/json-rpc/server/json_rpc_server.d.ts +0 -102
  135. package/dest/json-rpc/server/json_rpc_server.d.ts.map +0 -1
  136. package/dest/json-rpc/server/json_rpc_server.js +0 -265
  137. package/src/json-rpc/class_converter.ts +0 -213
  138. package/src/json-rpc/client/json_rpc_client.ts +0 -148
  139. package/src/json-rpc/server/json_proxy.ts +0 -60
  140. package/src/json-rpc/server/json_rpc_server.ts +0 -332
@@ -0,0 +1,275 @@
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
+ import { format, inspect } from 'util';
8
+ import { ZodError } from 'zod';
9
+ import { createDebugLogger } from '../../log/index.js';
10
+ import { promiseWithResolvers } from '../../promise/utils.js';
11
+ import { parseWithOptionals, schemaHasMethod } from '../../schemas/index.js';
12
+ import { jsonStringify } from '../convert.js';
13
+ import { assert } from '../js_utils.js';
14
+ export class SafeJsonRpcServer {
15
+ constructor(
16
+ /** The proxy object to delegate requests to. */
17
+ proxy,
18
+ /** Health check function */
19
+ healthCheck = () => true,
20
+ /** Logger */
21
+ log = createDebugLogger('json-rpc:server')) {
22
+ this.proxy = proxy;
23
+ this.healthCheck = healthCheck;
24
+ this.log = log;
25
+ }
26
+ isHealthy() {
27
+ return this.healthCheck();
28
+ }
29
+ /**
30
+ * Get an express app object.
31
+ * @param prefix - Our server prefix.
32
+ * @returns The app object.
33
+ */
34
+ getApp(prefix = '') {
35
+ const router = this.getRouter(prefix);
36
+ const exceptionHandler = async (ctx, next) => {
37
+ try {
38
+ await next();
39
+ }
40
+ catch (err) {
41
+ const method = ctx.request.body?.method ?? 'unknown';
42
+ this.log.warn(`Error in JSON RPC server call ${method}: ${inspect(err)}`);
43
+ if (err instanceof SyntaxError) {
44
+ ctx.status = 400;
45
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32700, message: `Parse error: ${err.message}` } };
46
+ }
47
+ else if (err instanceof ZodError) {
48
+ const message = err.issues.map(e => `${e.message} (${e.path.join('.')})`).join('. ') || 'Validation error';
49
+ ctx.status = 400;
50
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32701, message } };
51
+ }
52
+ else {
53
+ ctx.status = 500;
54
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32600, message: err.message ?? 'Internal error' } };
55
+ }
56
+ }
57
+ };
58
+ const jsonResponse = async (ctx, next) => {
59
+ try {
60
+ await next();
61
+ if (ctx.body && typeof ctx.body === 'object') {
62
+ ctx.body = jsonStringify(ctx.body);
63
+ }
64
+ }
65
+ catch (err) {
66
+ ctx.status = 500;
67
+ ctx.body = { jsonrpc: '2.0', error: { code: -32700, message: `Unable to serialize response: ${err.message}` } };
68
+ }
69
+ };
70
+ const app = new Koa();
71
+ app.on('error', error => {
72
+ this.log.error(`Error on API handler: ${error}`);
73
+ });
74
+ app.use(compress({ br: false }));
75
+ app.use(jsonResponse);
76
+ app.use(exceptionHandler);
77
+ app.use(bodyParser({ jsonLimit: '50mb', enableTypes: ['json'], detectJSON: () => true }));
78
+ app.use(cors());
79
+ app.use(router.routes());
80
+ app.use(router.allowedMethods());
81
+ return app;
82
+ }
83
+ /**
84
+ * Get a router object wrapping our RPC class.
85
+ * @param prefix - The server prefix.
86
+ * @returns The router object.
87
+ */
88
+ getRouter(prefix) {
89
+ const router = new Router({ prefix });
90
+ // "JSON RPC mode" where a single endpoint is used and the method is given in the request body
91
+ router.post('/', async (ctx) => {
92
+ const { params = [], jsonrpc, id, method } = ctx.request.body;
93
+ // Fail if not a registered function in the proxy
94
+ if (typeof method !== 'string' || method === 'constructor' || !this.proxy.hasMethod(method)) {
95
+ ctx.status = 400;
96
+ ctx.body = { jsonrpc, id, error: { code: -32601, message: `Method not found: ${method}` } };
97
+ }
98
+ else {
99
+ const result = await this.proxy.call(method, params);
100
+ ctx.body = { jsonrpc, id, result };
101
+ ctx.status = 200;
102
+ }
103
+ });
104
+ return router;
105
+ }
106
+ /**
107
+ * Start this server with koa.
108
+ * @param port - Port number.
109
+ * @param prefix - Prefix string.
110
+ */
111
+ start(port, prefix = '') {
112
+ if (this.httpServer) {
113
+ throw new Error('Server is already listening');
114
+ }
115
+ this.httpServer = http.createServer(this.getApp(prefix).callback());
116
+ this.httpServer.listen(port);
117
+ }
118
+ /**
119
+ * Stops the HTTP server
120
+ */
121
+ stop() {
122
+ if (!this.httpServer) {
123
+ return Promise.resolve();
124
+ }
125
+ const { promise, resolve, reject } = promiseWithResolvers();
126
+ this.httpServer.close(err => {
127
+ if (err) {
128
+ reject(err);
129
+ }
130
+ else {
131
+ resolve();
132
+ }
133
+ });
134
+ return promise;
135
+ }
136
+ /**
137
+ * Explicitly calls an RPC method.
138
+ * @param methodName - The RPC method.
139
+ * @param jsonParams - The RPC parameters.
140
+ * @returns The remote result.
141
+ */
142
+ async call(methodName, jsonParams = []) {
143
+ return await this.proxy.call(methodName, jsonParams);
144
+ }
145
+ }
146
+ /**
147
+ * Forwards calls to a handler. Relies on a schema definition to validate and convert inputs
148
+ * before forwarding calls, and then converts outputs into JSON using default conversions.
149
+ */
150
+ export class SafeJsonProxy {
151
+ constructor(handler, schema) {
152
+ this.handler = handler;
153
+ this.log = createDebugLogger('json-rpc:proxy');
154
+ this.schema = schema;
155
+ }
156
+ /**
157
+ * Call an RPC method.
158
+ * @param methodName - The RPC method.
159
+ * @param jsonParams - The RPC parameters.
160
+ * @returns The remote result.
161
+ */
162
+ async call(methodName, jsonParams = []) {
163
+ this.log.debug(format(`request`, methodName, jsonParams));
164
+ assert(Array.isArray(jsonParams), `Params to ${methodName} is not an array: ${jsonParams}`);
165
+ assert(schemaHasMethod(this.schema, methodName), `Method ${methodName} not found in schema`);
166
+ const method = this.handler[methodName];
167
+ assert(typeof method === 'function', `Method ${methodName} is not a function`);
168
+ const args = parseWithOptionals(jsonParams, this.schema[methodName].parameters());
169
+ const ret = await method.apply(this.handler, args);
170
+ this.log.debug(format('response', methodName, ret));
171
+ return ret;
172
+ }
173
+ hasMethod(methodName) {
174
+ return schemaHasMethod(this.schema, methodName) && typeof this.handler[methodName] === 'function';
175
+ }
176
+ }
177
+ class NamespacedSafeJsonProxy {
178
+ constructor(handlers) {
179
+ this.proxies = {};
180
+ for (const [namespace, [handler, schema]] of Object.entries(handlers)) {
181
+ this.proxies[namespace] = new SafeJsonProxy(handler, schema);
182
+ }
183
+ }
184
+ call(namespacedMethodName, jsonParams = []) {
185
+ const [namespace, methodName] = namespacedMethodName.split('_', 2);
186
+ assert(namespace && methodName, `Invalid namespaced method name: ${namespacedMethodName}`);
187
+ const handler = this.proxies[namespace];
188
+ assert(handler, `Namespace not found: ${namespace}`);
189
+ return handler.call(methodName, jsonParams);
190
+ }
191
+ hasMethod(namespacedMethodName) {
192
+ const [namespace, methodName] = namespacedMethodName.split('_', 2);
193
+ const handler = this.proxies[namespace];
194
+ return handler?.hasMethod(methodName);
195
+ }
196
+ }
197
+ export function makeHandler(handler, schema) {
198
+ return [handler, schema];
199
+ }
200
+ function makeAggregateHealthcheck(namedHandlers, log) {
201
+ return async () => {
202
+ try {
203
+ const results = await Promise.all(Object.entries(namedHandlers).map(([name, [, , healthCheck]]) => [name, healthCheck ? healthCheck() : true]));
204
+ const failed = results.filter(([_, result]) => !result);
205
+ if (failed.length > 0) {
206
+ log?.warn(`Health check failed for ${failed.map(([name]) => name).join(', ')}`);
207
+ return false;
208
+ }
209
+ return true;
210
+ }
211
+ catch (err) {
212
+ log?.error(`Error during health check`, err);
213
+ return false;
214
+ }
215
+ };
216
+ }
217
+ /**
218
+ * Creates a single SafeJsonRpcServer from multiple handlers.
219
+ * @param servers - List of handlers to be combined.
220
+ * @returns A single JsonRpcServer with namespaced methods.
221
+ */
222
+ export function createNamespacedSafeJsonRpcServer(handlers, log = createDebugLogger('json-rpc:server')) {
223
+ const proxy = new NamespacedSafeJsonProxy(handlers);
224
+ const healthCheck = makeAggregateHealthcheck(handlers, log);
225
+ return new SafeJsonRpcServer(proxy, healthCheck, log);
226
+ }
227
+ export function createSafeJsonRpcServer(handler, schema, healthCheck) {
228
+ const proxy = new SafeJsonProxy(handler, schema);
229
+ return new SafeJsonRpcServer(proxy, healthCheck);
230
+ }
231
+ /**
232
+ * Creates a router for handling a plain status request that will return 200 status when running.
233
+ * @param getCurrentStatus - List of health check functions to run.
234
+ * @param apiPrefix - The prefix to use for all api requests
235
+ * @returns - The router for handling status requests.
236
+ */
237
+ export function createStatusRouter(getCurrentStatus, apiPrefix = '') {
238
+ const router = new Router({ prefix: `${apiPrefix}` });
239
+ router.get('/status', async (ctx) => {
240
+ let ok;
241
+ try {
242
+ ok = (await getCurrentStatus()) === true;
243
+ }
244
+ catch (err) {
245
+ ok = false;
246
+ }
247
+ ctx.status = ok ? 200 : 500;
248
+ });
249
+ return router;
250
+ }
251
+ /**
252
+ * Wraps a JsonRpcServer in a nodejs http server and starts it.
253
+ * Installs a status router that calls to the isHealthy method to the server.
254
+ * Returns once starts listening unless noWait is set.
255
+ * @returns A running http server.
256
+ */
257
+ export async function startHttpRpcServer(rpcServer, options = {}) {
258
+ const app = rpcServer.getApp(options.apiPrefix);
259
+ const statusRouter = createStatusRouter(rpcServer.isHealthy.bind(rpcServer), options.apiPrefix);
260
+ app.use(statusRouter.routes()).use(statusRouter.allowedMethods());
261
+ const httpServer = http.createServer(app.callback());
262
+ if (options.timeoutMs) {
263
+ httpServer.timeout = options.timeoutMs;
264
+ }
265
+ const { promise, resolve } = promiseWithResolvers();
266
+ const listenPort = options.port ? (typeof options.port === 'string' ? parseInt(options.port) : options.port) : 0;
267
+ httpServer.listen(listenPort, options.host, () => resolve());
268
+ // Wait until listen callback is called
269
+ if (!options.noWait) {
270
+ await promise;
271
+ }
272
+ const port = httpServer.address().port;
273
+ return Object.assign(httpServer, { port });
274
+ }
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9qc29uX3JwY19zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvc2VydmVyL3NhZmVfanNvbl9ycGNfc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sUUFBUSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUUvQixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFxQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsZ0RBQWdEO0lBQy9CLEtBQVk7SUFDN0IsNEJBQTRCO0lBQ1gsY0FBNkIsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUN4RCxhQUFhO0lBQ0wsTUFBTSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUpqQyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBRVosZ0JBQVcsR0FBWCxXQUFXLENBQTRCO1FBRWhELFFBQUcsR0FBSCxHQUFHLENBQXVDO0lBQ2pELENBQUM7SUFFRyxT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
@@ -0,0 +1,2 @@
1
+ export { createJsonRpcTestSetup, type JsonRpcTestContext } from './integration.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createJsonRpcTestSetup } from './integration.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTJCLE1BQU0sa0JBQWtCLENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import type http from 'http';
3
+ import { type ApiSchemaFor } from '../../schemas/api.js';
4
+ import { type SafeJsonRpcServer } from '../server/safe_json_rpc_server.js';
5
+ export type JsonRpcTestContext<T extends object> = {
6
+ server: SafeJsonRpcServer;
7
+ client: T;
8
+ httpServer: http.Server & {
9
+ port: number;
10
+ };
11
+ };
12
+ export declare function createJsonRpcTestSetup<T extends object>(handler: T, schema: ApiSchemaFor<T>): Promise<JsonRpcTestContext<T>>;
13
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/test/integration.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,KAAK,iBAAiB,EAA2B,MAAM,mCAAmC,CAAC;AAEpG,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAAI;IACjD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC;IACV,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAC3D,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAMhC"}
@@ -0,0 +1,12 @@
1
+ import { makeFetch } from '../client/fetch.js';
2
+ import { createSafeJsonRpcClient } from '../client/safe_json_rpc_client.js';
3
+ import { startHttpRpcServer } from '../server/safe_json_rpc_server.js';
4
+ import { createSafeJsonRpcServer } from '../server/safe_json_rpc_server.js';
5
+ export async function createJsonRpcTestSetup(handler, schema) {
6
+ const server = createSafeJsonRpcServer(handler, schema);
7
+ const httpServer = await startHttpRpcServer(server, { host: '127.0.0.1' });
8
+ const noRetryFetch = makeFetch([], true);
9
+ const client = createSafeJsonRpcClient(`http://127.0.0.1:${httpServer.port}`, schema, false, false, noRetryFetch);
10
+ return { server, client, httpServer };
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvdGVzdC9pbnRlZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUEwQix1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBUXBHLE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLE9BQVUsRUFDVixNQUF1QjtJQUV2QixNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBSSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFJLG9CQUFvQixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDeEMsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/log/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvD,QAAA,MAAM,SAAS,kEAAmE,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AASlD,eAAO,IAAI,YAAY,4DAAgB,CAAC;AAqBxC,oDAAoD;AACpD,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;KAAG,CAAC,IAAI,QAAQ,GAAG,KAAK;CAAE,GAAG;IAA4B,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAElG;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;;;;;;GASG;AAEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAqB3D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,WAAW,CActG;AAED,sCAAsC;AACtC,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAInG;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,UAAU,QAExC;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,QAEvC;AA6BD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAIjD"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/log/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEvD,QAAA,MAAM,SAAS,kEAAmE,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAUlD,eAAO,IAAI,YAAY,4DAAgB,CAAC;AAqBxC,oDAAoD;AACpD,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG;KAAG,CAAC,IAAI,QAAQ,GAAG,KAAK;CAAE,GAAG;IAA4B,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAElG;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;;;;;;GASG;AAEH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAqB3D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,WAAW,CActG;AAED,sCAAsC;AACtC,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAInG;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,UAAU,QAExC;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,QAEvC;AA6BD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAIjD"}
@@ -3,7 +3,7 @@ import { inspect } from 'util';
3
3
  const LogLevels = ['silent', 'error', 'warn', 'info', 'verbose', 'debug'];
4
4
  function getLogLevel() {
5
5
  const envLogLevel = process.env.LOG_LEVEL?.toLowerCase();
6
- const defaultNonTestLogLevel = process.env.DEBUG === undefined ? 'info' : 'debug';
6
+ const defaultNonTestLogLevel = process.env.DEBUG === undefined || process.env.DEBUG === '' ? 'info' : 'debug';
7
7
  const defaultLogLevel = process.env.NODE_ENV === 'test' ? 'silent' : defaultNonTestLogLevel;
8
8
  return LogLevels.includes(envLogLevel) ? envLogLevel : defaultLogLevel;
9
9
  }
@@ -121,4 +121,4 @@ export function fmtLogData(data) {
121
121
  .map(([key, value]) => `${key}=${typeof value === 'object' && 'toString' in value ? value.toString() : value}`)
122
122
  .join(' ');
123
123
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZy9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVSxDQUFDO0FBT25GLFNBQVMsV0FBVztJQUNsQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQWMsQ0FBQztJQUNyRSxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUUsTUFBZ0IsQ0FBQyxDQUFDLENBQUUsT0FBaUIsQ0FBQztJQUN4RyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFFLFFBQWtCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO0lBQ3ZHLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sQ0FBQyxJQUFJLFlBQVksR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUV4QyxTQUFTLHNCQUFzQixDQUFDLFdBQW1CO0lBQ2pELE9BQU8sV0FBVztTQUNmLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUNELFNBQVMs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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZy9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBVSxDQUFDO0FBT25GLFNBQVMsV0FBVztJQUNsQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQWMsQ0FBQztJQUNyRSxNQUFNLHNCQUFzQixHQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBRSxNQUFnQixDQUFDLENBQUMsQ0FBRSxPQUFpQixDQUFDO0lBQ3ZHLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUUsUUFBa0IsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUM7SUFDdkcsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRSxDQUFDO0FBRXhDLFNBQVMsc0JBQXNCLENBQUMsV0FBbUI7SUFDakQsT0FBTyxXQUFXO1NBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQixJQUFJ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
@@ -0,0 +1,21 @@
1
+ import { type z } from 'zod';
2
+ import { type ZodNullableOptional } from './utils.js';
3
+ type ZodParameterTypeFor<T> = undefined extends T ? ZodNullableOptional<z.ZodType<T, z.ZodTypeDef, any>> : z.ZodType<T, z.ZodTypeDef, any>;
4
+ type ZodReturnTypeFor<T> = z.ZodType<T, z.ZodTypeDef, any>;
5
+ type ZodMapParameterTypes<T> = T extends [] ? [] : T extends [item: infer Head, ...infer Rest] ? [ZodParameterTypeFor<Head>, ...{
6
+ [K in keyof Rest]: ZodParameterTypeFor<Rest[K]>;
7
+ }] : T extends [item?: infer Head, ...infer Rest] ? [ZodNullableOptional<ZodParameterTypeFor<Head>>, ...{
8
+ [K in keyof Rest]: ZodParameterTypeFor<Rest[K]>;
9
+ }] : never;
10
+ /** Maps all functions in an interface to their schema representation. */
11
+ export type ApiSchemaFor<T> = {
12
+ [K in keyof T]: T[K] extends (...args: infer Args) => Promise<infer Ret> ? z.ZodFunction<z.ZodTuple<ZodMapParameterTypes<Args>, z.ZodUnknown>, ZodReturnTypeFor<Ret>> : never;
13
+ };
14
+ /** Generic Api schema not bounded to a specific implementation. */
15
+ export type ApiSchema = {
16
+ [key: string]: z.ZodFunction<z.ZodTuple<any, any>, z.ZodTypeAny>;
17
+ };
18
+ /** Return whether an API schema defines a valid function schema for a given method name. */
19
+ export declare function schemaHasMethod(schema: ApiSchema, methodName: string): boolean;
20
+ export {};
21
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/schemas/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,KAAK,mBAAmB,CAAC,CAAC,IAAI,SAAS,SAAS,CAAC,GAC7C,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,GACpD,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAEpC,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAS3D,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GACvC,EAAE,GACF,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAC3C,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG;KAAG,CAAC,IAAI,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GACnF,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAC5C,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG;KAAG,CAAC,IAAI,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GACxG,KAAK,CAAC;AAEV,yEAAyE;AACzE,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,GACpE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAC1F,KAAK;CACV,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;CAClE,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAOpE"}
@@ -0,0 +1,8 @@
1
+ /** Return whether an API schema defines a valid function schema for a given method name. */
2
+ export function schemaHasMethod(schema, methodName) {
3
+ return (typeof methodName === 'string' &&
4
+ Object.hasOwn(schema, methodName) &&
5
+ typeof schema[methodName].parameters === 'function' &&
6
+ typeof schema[methodName].returnType === 'function');
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYXMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNDQSw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFpQixFQUFFLFVBQWtCO0lBQ25FLE9BQU8sQ0FDTCxPQUFPLFVBQVUsS0FBSyxRQUFRO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVTtRQUNuRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUNwRCxDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,6 @@
1
+ export * from './api.js';
2
+ export * from './parse.js';
3
+ export * from './schemas.js';
4
+ export * from './utils.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './api.js';
2
+ export * from './parse.js';
3
+ export * from './schemas.js';
4
+ export * from './utils.js';
5
+ export * from './types.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFlBQVksQ0FBQyJ9
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ /** Parses the given arguments using a tuple from the provided schemas. */
3
+ export declare function parse<T extends [] | [z.ZodTypeAny, ...z.ZodTypeAny[]]>(args: IArguments, ...schemas: T): z.AssertArray<{ [k in keyof T]: T[k] extends z.ZodType<any, any, any> ? T[k]["_output"] : never; }>;
4
+ /**
5
+ * Parses the given arguments against a tuple, allowing empty for optional items.
6
+ * @dev Zod doesn't like tuplues with optional items. See https://github.com/colinhacks/zod/discussions/949.
7
+ */
8
+ export declare function parseWithOptionals<T extends z.AnyZodTuple>(args: any[], schema: T): T['_output'];
9
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/schemas/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,0EAA0E;AAC1E,wBAAgB,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,uGAEtG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAMhG"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { times } from '../collection/array.js';
3
+ /** Parses the given arguments using a tuple from the provided schemas. */
4
+ export function parse(args, ...schemas) {
5
+ return z.tuple(schemas).parse(args);
6
+ }
7
+ /**
8
+ * Parses the given arguments against a tuple, allowing empty for optional items.
9
+ * @dev Zod doesn't like tuplues with optional items. See https://github.com/colinhacks/zod/discussions/949.
10
+ */
11
+ export function parseWithOptionals(args, schema) {
12
+ const missingCount = schema.items.length - args.length;
13
+ const optionalCount = schema.items.filter(isOptional).length;
14
+ const toParse = missingCount > 0 && missingCount <= optionalCount ? args.concat(times(missingCount, () => undefined)) : args;
15
+ return schema.parse(toParse);
16
+ }
17
+ function isOptional(schema) {
18
+ try {
19
+ return schema.isOptional();
20
+ }
21
+ catch (err) {
22
+ // See https://github.com/colinhacks/zod/issues/1911
23
+ return schema._def.typeName === 'ZodOptional';
24
+ }
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy9wYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvQywwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLEtBQUssQ0FBbUQsSUFBZ0IsRUFBRSxHQUFHLE9BQVU7SUFDckcsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUEwQixJQUFXLEVBQUUsTUFBUztJQUNoRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FDWCxZQUFZLEdBQUcsQ0FBQyxJQUFJLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDL0csT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFvQjtJQUN0QyxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9EQUFvRDtRQUNwRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,79 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import { z } from 'zod';
4
+ import { type AbiDecoded } from '../abi/decoder.js';
5
+ import { EventSelector } from '../abi/event_selector.js';
6
+ import { FunctionSelector } from '../abi/function_selector.js';
7
+ import { NoteSelector } from '../abi/note_selector.js';
8
+ import { AztecAddress } from '../aztec-address/index.js';
9
+ import { Buffer32 } from '../buffer/buffer32.js';
10
+ import { EthAddress } from '../eth-address/index.js';
11
+ import { Signature } from '../eth-signature/eth_signature.js';
12
+ import { Fq, Fr } from '../fields/fields.js';
13
+ import { Point } from '../fields/point.js';
14
+ import { type ZodFor } from './types.js';
15
+ /** Validation schemas for common types. Every schema must match its toJSON. */
16
+ export declare const schemas: {
17
+ /** Accepts both a 0x string and a structured `{ type: EthAddress, value: '0x...' }` */
18
+ EthAddress: ZodFor<EthAddress>;
19
+ /** Accepts both a 0x string and a structured `{ type: AztecAddress, value: '0x...' }` */
20
+ AztecAddress: ZodFor<AztecAddress>;
21
+ /** Accepts both a 0x string and a structured type. */
22
+ FunctionSelector: ZodFor<FunctionSelector>;
23
+ /** Accepts both a 0x string and a structured type. */
24
+ NoteSelector: ZodFor<NoteSelector>;
25
+ /** Accepts both a 0x string and a structured type. */
26
+ EventSelector: ZodFor<EventSelector>;
27
+ /** Field element. Accepts a 0x prefixed hex string or a structured type. */
28
+ Fr: ZodFor<Fr>;
29
+ /** Field element. Accepts a 0x prefixed hex string or a structured type. */
30
+ Fq: ZodFor<Fq>;
31
+ /** Point. Serialized as 0x prefixed string or a type. */
32
+ Point: z.ZodEffects<z.ZodUnion<[z.ZodObject<{
33
+ x: ZodFor<Fr>;
34
+ y: ZodFor<Fr>;
35
+ isInfinite: z.ZodOptional<z.ZodBoolean>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ x: Fr;
38
+ y: Fr;
39
+ isInfinite?: boolean | undefined;
40
+ }, {
41
+ x?: any;
42
+ y?: any;
43
+ isInfinite?: boolean | undefined;
44
+ }>, z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>]>, Point, string | {
45
+ x?: any;
46
+ y?: any;
47
+ isInfinite?: boolean | undefined;
48
+ }>;
49
+ /** Accepts a 0x string */
50
+ Signature: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, `0x${string}`, string>, `0x${string}`, string>, Signature, string>;
51
+ /** Coerces any input to bigint */
52
+ BigInt: z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodBigInt>;
53
+ /** Coerces any input to integer number */
54
+ Integer: z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>;
55
+ /** Coerces input to UInt32 */
56
+ UInt32: z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>;
57
+ /** Accepts a hex string as a Buffer32 type */
58
+ Buffer32: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Buffer32, string>;
59
+ /** Accepts a base64 string or a structured `{ type: 'Buffer', data: [byte, byte...] }` as a buffer */
60
+ BufferB64: z.ZodUnion<[z.ZodEffects<z.ZodString, Buffer, string>, z.ZodEffects<z.ZodObject<{
61
+ type: z.ZodLiteral<"Buffer">;
62
+ data: z.ZodArray<z.ZodNumber, "many">;
63
+ }, "strip", z.ZodTypeAny, {
64
+ type: "Buffer";
65
+ data: number[];
66
+ }, {
67
+ type: "Buffer";
68
+ data: number[];
69
+ }>, Buffer, {
70
+ type: "Buffer";
71
+ data: number[];
72
+ }>]>;
73
+ /** Accepts a hex string with optional 0x prefix as a buffer */
74
+ BufferHex: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, Buffer, string>;
75
+ /** Hex string with an optional 0x prefix, which gets removed as part of the parsing */
76
+ HexString: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
77
+ };
78
+ export declare const AbiDecodedSchema: ZodFor<AbiDecoded>;
79
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas/schemas.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAMzC,+EAA+E;AAC/E,eAAO,MAAM,OAAO;IAClB,uFAAuF;;IAGvF,yFAAyF;;IAGzF,sDAAsD;;IAGtD,sDAAsD;;IAGtD,sDAAsD;;IAGtD,4EAA4E;;IAG5E,4EAA4E;;IAG5E,yDAAyD;;;;;;;;;;;;;;;;;;IAYzD,0BAA0B;;IAO1B,kCAAkC;;IAGlC,0CAA0C;;IAG1C,8BAA8B;;IAS9B,8CAA8C;;IAG9C,sGAAsG;;;;;;;;;;;;;;IActG,+DAA+D;;IAO/D,uFAAuF;;CAExF,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAM9C,CAAC"}