@aztec/foundation 0.0.0-test.1 → 0.0.1-commit.b655e406

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 (510) hide show
  1. package/dest/array/array.d.ts +5 -0
  2. package/dest/array/array.d.ts.map +1 -1
  3. package/dest/array/array.js +11 -0
  4. package/dest/async-pool/index.d.ts.map +1 -1
  5. package/dest/async-pool/index.js +1 -0
  6. package/dest/bigint/index.d.ts +7 -0
  7. package/dest/bigint/index.d.ts.map +1 -0
  8. package/dest/bigint/index.js +15 -0
  9. package/dest/bigint-buffer/index.d.ts +0 -2
  10. package/dest/bigint-buffer/index.d.ts.map +1 -1
  11. package/dest/buffer/buffer16.d.ts +80 -0
  12. package/dest/buffer/buffer16.d.ts.map +1 -0
  13. package/dest/buffer/buffer16.js +100 -0
  14. package/dest/buffer/buffer32.d.ts +3 -7
  15. package/dest/buffer/buffer32.d.ts.map +1 -1
  16. package/dest/buffer/buffer32.js +6 -6
  17. package/dest/buffer/index.d.ts +1 -0
  18. package/dest/buffer/index.d.ts.map +1 -1
  19. package/dest/buffer/index.js +1 -0
  20. package/dest/collection/array.d.ts +16 -3
  21. package/dest/collection/array.d.ts.map +1 -1
  22. package/dest/collection/array.js +57 -3
  23. package/dest/collection/object.d.ts +16 -0
  24. package/dest/collection/object.d.ts.map +1 -1
  25. package/dest/collection/object.js +25 -0
  26. package/dest/config/env_var.d.ts +1 -1
  27. package/dest/config/env_var.d.ts.map +1 -1
  28. package/dest/config/index.d.ts +48 -1
  29. package/dest/config/index.d.ts.map +1 -1
  30. package/dest/config/index.js +115 -7
  31. package/dest/config/network_config.d.ts +42 -0
  32. package/dest/config/network_config.d.ts.map +1 -0
  33. package/dest/config/network_config.js +9 -0
  34. package/dest/config/network_name.d.ts +3 -0
  35. package/dest/config/network_name.d.ts.map +1 -0
  36. package/dest/config/network_name.js +19 -0
  37. package/dest/config/secret_value.d.ts +28 -0
  38. package/dest/config/secret_value.d.ts.map +1 -0
  39. package/dest/config/secret_value.js +34 -0
  40. package/dest/crypto/aes128/index.d.ts +2 -4
  41. package/dest/crypto/aes128/index.d.ts.map +1 -1
  42. package/dest/crypto/aes128/index.js +23 -6
  43. package/dest/crypto/bls/bn254_keystore.d.ts +296 -0
  44. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -0
  45. package/dest/crypto/bls/bn254_keystore.js +218 -0
  46. package/dest/crypto/bls/index.d.ts +13 -0
  47. package/dest/crypto/bls/index.d.ts.map +1 -0
  48. package/dest/crypto/bls/index.js +87 -0
  49. package/dest/crypto/bn254/bn254_utils.d.ts +39 -0
  50. package/dest/crypto/bn254/bn254_utils.d.ts.map +1 -0
  51. package/dest/crypto/bn254/bn254_utils.js +56 -0
  52. package/dest/crypto/bn254/index.d.ts +55 -0
  53. package/dest/crypto/bn254/index.d.ts.map +1 -0
  54. package/dest/crypto/bn254/index.js +142 -0
  55. package/dest/crypto/ecdsa/index.d.ts +2 -2
  56. package/dest/crypto/ecdsa/index.d.ts.map +1 -1
  57. package/dest/crypto/ecdsa/index.js +70 -48
  58. package/dest/crypto/ecdsa/signature.d.ts +1 -3
  59. package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
  60. package/dest/crypto/grumpkin/index.d.ts +6 -13
  61. package/dest/crypto/grumpkin/index.d.ts.map +1 -1
  62. package/dest/crypto/grumpkin/index.js +69 -54
  63. package/dest/crypto/index.d.ts +2 -0
  64. package/dest/crypto/index.d.ts.map +1 -1
  65. package/dest/crypto/index.js +2 -0
  66. package/dest/crypto/keccak/index.d.ts +2 -4
  67. package/dest/crypto/keccak/index.d.ts.map +1 -1
  68. package/dest/crypto/keys/index.d.ts +0 -2
  69. package/dest/crypto/keys/index.d.ts.map +1 -1
  70. package/dest/crypto/keys/index.js +9 -4
  71. package/dest/crypto/pedersen/pedersen.noble.d.ts +2 -4
  72. package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -1
  73. package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -4
  74. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
  75. package/dest/crypto/pedersen/pedersen.wasm.js +29 -13
  76. package/dest/crypto/poseidon/index.d.ts +0 -2
  77. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  78. package/dest/crypto/poseidon/index.js +42 -17
  79. package/dest/crypto/random/index.d.ts +1 -3
  80. package/dest/crypto/random/index.d.ts.map +1 -1
  81. package/dest/crypto/random/index.js +2 -34
  82. package/dest/crypto/random/randomness_singleton.d.ts +0 -2
  83. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  84. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  85. package/dest/crypto/schnorr/index.js +35 -37
  86. package/dest/crypto/schnorr/signature.d.ts +3 -5
  87. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  88. package/dest/crypto/secp256k1/index.d.ts +4 -6
  89. package/dest/crypto/secp256k1/index.d.ts.map +1 -1
  90. package/dest/crypto/secp256k1/index.js +29 -18
  91. package/dest/crypto/secp256k1-signer/utils.d.ts +55 -4
  92. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  93. package/dest/crypto/secp256k1-signer/utils.js +92 -6
  94. package/dest/crypto/serialize.d.ts +4 -6
  95. package/dest/crypto/serialize.d.ts.map +1 -1
  96. package/dest/crypto/sha256/index.d.ts +21 -4
  97. package/dest/crypto/sha256/index.d.ts.map +1 -1
  98. package/dest/crypto/sha256/index.js +42 -0
  99. package/dest/crypto/sha512/index.d.ts +1 -3
  100. package/dest/crypto/sha512/index.d.ts.map +1 -1
  101. package/dest/crypto/signature/index.d.ts +0 -2
  102. package/dest/crypto/signature/index.d.ts.map +1 -1
  103. package/dest/crypto/sync/index.js +3 -1
  104. package/dest/crypto/sync/pedersen/index.d.ts +2 -4
  105. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
  106. package/dest/crypto/sync/pedersen/index.js +17 -10
  107. package/dest/crypto/sync/poseidon/index.d.ts +0 -2
  108. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
  109. package/dest/crypto/sync/poseidon/index.js +27 -12
  110. package/dest/decorators/memoize.d.ts.map +1 -1
  111. package/dest/eth-address/index.d.ts +6 -7
  112. package/dest/eth-address/index.d.ts.map +1 -1
  113. package/dest/eth-address/index.js +5 -0
  114. package/dest/eth-signature/eth_signature.d.ts +16 -14
  115. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  116. package/dest/eth-signature/eth_signature.js +31 -17
  117. package/dest/fields/bls12_fields.d.ts +148 -0
  118. package/dest/fields/bls12_fields.d.ts.map +1 -0
  119. package/dest/fields/bls12_fields.js +359 -0
  120. package/dest/fields/bls12_point.d.ts +229 -0
  121. package/dest/fields/bls12_point.d.ts.map +1 -0
  122. package/dest/fields/bls12_point.js +398 -0
  123. package/dest/fields/coordinate.d.ts +0 -2
  124. package/dest/fields/coordinate.d.ts.map +1 -1
  125. package/dest/fields/fields.d.ts +6 -3
  126. package/dest/fields/fields.d.ts.map +1 -1
  127. package/dest/fields/fields.js +43 -15
  128. package/dest/fields/index.d.ts +2 -0
  129. package/dest/fields/index.d.ts.map +1 -1
  130. package/dest/fields/index.js +2 -0
  131. package/dest/fields/point.d.ts +2 -4
  132. package/dest/fields/point.d.ts.map +1 -1
  133. package/dest/fields/point.js +3 -3
  134. package/dest/fs/index.d.ts +1 -0
  135. package/dest/fs/index.d.ts.map +1 -1
  136. package/dest/fs/index.js +1 -0
  137. package/dest/fs/try_rm_dir.d.ts +3 -0
  138. package/dest/fs/try_rm_dir.d.ts.map +1 -0
  139. package/dest/fs/try_rm_dir.js +16 -0
  140. package/dest/index.d.ts +1 -2
  141. package/dest/index.d.ts.map +1 -1
  142. package/dest/index.js +1 -2
  143. package/dest/iterable/filter.js +1 -1
  144. package/dest/iterable/map.js +1 -1
  145. package/dest/jest/env.js +48 -0
  146. package/dest/jest/setupAfterEnv.js +3 -0
  147. package/dest/json-rpc/client/fetch.d.ts +2 -2
  148. package/dest/json-rpc/client/fetch.d.ts.map +1 -1
  149. package/dest/json-rpc/client/fetch.js +16 -30
  150. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +9 -3
  151. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  152. package/dest/json-rpc/client/safe_json_rpc_client.js +173 -13
  153. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  154. package/dest/json-rpc/client/undici.js +6 -7
  155. package/dest/json-rpc/convert.d.ts +2 -9
  156. package/dest/json-rpc/convert.d.ts.map +1 -1
  157. package/dest/json-rpc/convert.js +1 -9
  158. package/dest/json-rpc/errors.d.ts +4 -0
  159. package/dest/json-rpc/errors.d.ts.map +1 -0
  160. package/dest/json-rpc/errors.js +6 -0
  161. package/dest/json-rpc/fixtures/class_a.d.ts +5 -3
  162. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
  163. package/dest/json-rpc/fixtures/class_b.d.ts +5 -3
  164. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
  165. package/dest/json-rpc/index.d.ts +2 -1
  166. package/dest/json-rpc/index.d.ts.map +1 -1
  167. package/dest/json-rpc/index.js +2 -1
  168. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  169. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +21 -22
  170. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  171. package/dest/json-rpc/server/safe_json_rpc_server.js +161 -56
  172. package/dest/json-rpc/test/integration.d.ts +1 -2
  173. package/dest/json-rpc/test/integration.d.ts.map +1 -1
  174. package/dest/log/console.d.ts.map +1 -1
  175. package/dest/log/gcloud-logger-config.d.ts +0 -1
  176. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  177. package/dest/log/gcloud-logger-config.js +1 -9
  178. package/dest/log/index.d.ts +4 -4
  179. package/dest/log/index.d.ts.map +1 -1
  180. package/dest/log/index.js +4 -4
  181. package/dest/log/libp2p_logger.js +13 -2
  182. package/dest/log/log_fn.d.ts +1 -1
  183. package/dest/log/log_fn.d.ts.map +1 -1
  184. package/dest/log/noir_debug_log_util.d.ts +14 -0
  185. package/dest/log/noir_debug_log_util.d.ts.map +1 -0
  186. package/dest/log/noir_debug_log_util.js +14 -0
  187. package/dest/log/pino-logger.d.ts +2 -2
  188. package/dest/log/pino-logger.d.ts.map +1 -1
  189. package/dest/log/pino-logger.js +28 -2
  190. package/dest/message/index.d.ts.map +1 -1
  191. package/dest/mutex/mutex_database.d.ts.map +1 -1
  192. package/dest/noir/noir_package_config.d.ts +4 -4
  193. package/dest/number/index.d.ts +3 -0
  194. package/dest/number/index.d.ts.map +1 -0
  195. package/dest/number/index.js +12 -0
  196. package/dest/profiler/index.d.ts +2 -0
  197. package/dest/profiler/index.d.ts.map +1 -0
  198. package/dest/profiler/index.js +1 -0
  199. package/dest/profiler/profiler.d.ts +8 -0
  200. package/dest/profiler/profiler.d.ts.map +1 -0
  201. package/dest/profiler/profiler.js +97 -0
  202. package/dest/promise/running-promise.d.ts +1 -1
  203. package/dest/promise/running-promise.d.ts.map +1 -1
  204. package/dest/promise/running-promise.js +2 -2
  205. package/dest/queue/batch_queue.d.ts +1 -1
  206. package/dest/queue/batch_queue.js +1 -1
  207. package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
  208. package/dest/queue/serial_queue.d.ts +2 -2
  209. package/dest/queue/serial_queue.d.ts.map +1 -1
  210. package/dest/queue/serial_queue.js +7 -5
  211. package/dest/retry/index.d.ts +3 -2
  212. package/dest/retry/index.d.ts.map +1 -1
  213. package/dest/retry/index.js +2 -2
  214. package/dest/schemas/api.d.ts.map +1 -1
  215. package/dest/schemas/parse.js +1 -1
  216. package/dest/schemas/schemas.d.ts +9 -6
  217. package/dest/schemas/schemas.d.ts.map +1 -1
  218. package/dest/schemas/schemas.js +15 -1
  219. package/dest/schemas/utils.d.ts +1 -3
  220. package/dest/schemas/utils.d.ts.map +1 -1
  221. package/dest/serialize/buffer_reader.d.ts +27 -2
  222. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  223. package/dest/serialize/buffer_reader.js +44 -2
  224. package/dest/serialize/field_reader.d.ts +10 -1
  225. package/dest/serialize/field_reader.d.ts.map +1 -1
  226. package/dest/serialize/field_reader.js +18 -1
  227. package/dest/serialize/free_funcs.d.ts +23 -21
  228. package/dest/serialize/free_funcs.d.ts.map +1 -1
  229. package/dest/serialize/free_funcs.js +21 -27
  230. package/dest/serialize/serialize.d.ts +4 -5
  231. package/dest/serialize/serialize.d.ts.map +1 -1
  232. package/dest/string/index.d.ts +7 -2
  233. package/dest/string/index.d.ts.map +1 -1
  234. package/dest/string/index.js +27 -1
  235. package/dest/testing/files/index.d.ts +0 -2
  236. package/dest/testing/files/index.d.ts.map +1 -1
  237. package/dest/testing/files/index.js +2 -2
  238. package/dest/testing/formatting.d.ts +4 -0
  239. package/dest/testing/formatting.d.ts.map +1 -0
  240. package/dest/testing/formatting.js +3 -0
  241. package/dest/testing/index.d.ts +1 -0
  242. package/dest/testing/index.d.ts.map +1 -1
  243. package/dest/testing/index.js +1 -0
  244. package/dest/timer/date.d.ts +2 -1
  245. package/dest/timer/date.d.ts.map +1 -1
  246. package/dest/timer/date.js +5 -3
  247. package/dest/timer/index.d.ts +1 -1
  248. package/dest/timer/index.d.ts.map +1 -1
  249. package/dest/timer/index.js +1 -1
  250. package/dest/timer/timeout.d.ts +18 -5
  251. package/dest/timer/timeout.d.ts.map +1 -1
  252. package/dest/timer/timeout.js +43 -22
  253. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
  254. package/dest/transport/index.d.ts +0 -1
  255. package/dest/transport/index.d.ts.map +1 -1
  256. package/dest/transport/index.js +0 -1
  257. package/dest/transport/interface/connector.d.ts.map +1 -1
  258. package/dest/transport/interface/listener.d.ts +0 -1
  259. package/dest/transport/interface/listener.d.ts.map +1 -1
  260. package/dest/transport/interface/socket.d.ts.map +1 -1
  261. package/dest/transport/node/node_connector.d.ts +0 -1
  262. package/dest/transport/node/node_connector.d.ts.map +1 -1
  263. package/dest/transport/node/node_connector_socket.d.ts +0 -1
  264. package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
  265. package/dest/transport/node/node_listener.d.ts +0 -1
  266. package/dest/transport/node/node_listener.d.ts.map +1 -1
  267. package/dest/transport/node/node_listener_socket.d.ts +0 -1
  268. package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
  269. package/dest/transport/transport_client.d.ts +0 -1
  270. package/dest/transport/transport_client.d.ts.map +1 -1
  271. package/dest/transport/transport_server.d.ts.map +1 -1
  272. package/dest/trees/hasher.d.ts +4 -6
  273. package/dest/trees/hasher.d.ts.map +1 -1
  274. package/dest/trees/index.d.ts +1 -0
  275. package/dest/trees/index.d.ts.map +1 -1
  276. package/dest/trees/index.js +1 -0
  277. package/dest/trees/indexed_merkle_tree.d.ts +0 -2
  278. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
  279. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -3
  280. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  281. package/dest/trees/indexed_tree_leaf.d.ts +0 -2
  282. package/dest/trees/indexed_tree_leaf.d.ts.map +1 -1
  283. package/dest/trees/membership_witness.d.ts +19 -3
  284. package/dest/trees/membership_witness.d.ts.map +1 -1
  285. package/dest/trees/membership_witness.js +13 -0
  286. package/dest/trees/merkle_tree.d.ts +0 -2
  287. package/dest/trees/merkle_tree.d.ts.map +1 -1
  288. package/dest/trees/merkle_tree_calculator.d.ts +11 -3
  289. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  290. package/dest/trees/merkle_tree_calculator.js +31 -1
  291. package/dest/trees/sibling_path.d.ts +6 -8
  292. package/dest/trees/sibling_path.d.ts.map +1 -1
  293. package/dest/trees/unbalanced_merkle_tree.d.ts +19 -8
  294. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
  295. package/dest/trees/unbalanced_merkle_tree.js +49 -50
  296. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts +48 -0
  297. package/dest/trees/unbalanced_merkle_tree_calculator.d.ts.map +1 -0
  298. package/dest/trees/unbalanced_merkle_tree_calculator.js +162 -0
  299. package/dest/trees/unbalanced_tree_store.d.ts +1 -0
  300. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -1
  301. package/dest/trees/unbalanced_tree_store.js +6 -0
  302. package/dest/types/index.d.ts +25 -2
  303. package/dest/types/index.d.ts.map +1 -1
  304. package/dest/url/index.d.ts.map +1 -1
  305. package/dest/url/index.js +1 -1
  306. package/package.json +35 -41
  307. package/src/array/array.ts +13 -0
  308. package/src/async-pool/index.ts +1 -0
  309. package/src/bigint/index.ts +20 -0
  310. package/src/buffer/buffer16.ts +133 -0
  311. package/src/buffer/buffer32.ts +8 -6
  312. package/src/buffer/index.ts +1 -0
  313. package/src/collection/array.ts +66 -4
  314. package/src/collection/object.ts +37 -0
  315. package/src/config/env_var.ts +142 -52
  316. package/src/config/index.ts +191 -8
  317. package/src/config/network_config.ts +16 -0
  318. package/src/config/network_name.ts +28 -0
  319. package/src/config/secret_value.ts +49 -0
  320. package/src/crypto/aes128/index.ts +19 -10
  321. package/src/crypto/bls/bn254_keystore.ts +287 -0
  322. package/src/crypto/bls/index.ts +77 -0
  323. package/src/crypto/bn254/bn254_utils.ts +64 -0
  324. package/src/crypto/bn254/index.ts +170 -0
  325. package/src/crypto/ecdsa/index.ts +41 -23
  326. package/src/crypto/grumpkin/index.ts +35 -45
  327. package/src/crypto/index.ts +2 -0
  328. package/src/crypto/keys/index.ts +5 -5
  329. package/src/crypto/pedersen/pedersen.wasm.ts +22 -18
  330. package/src/crypto/poseidon/index.ts +32 -24
  331. package/src/crypto/random/index.ts +2 -40
  332. package/src/crypto/schnorr/index.ts +20 -17
  333. package/src/crypto/secp256k1/index.ts +15 -11
  334. package/src/crypto/secp256k1-signer/utils.ts +120 -7
  335. package/src/crypto/sha256/index.ts +47 -0
  336. package/src/crypto/sync/index.ts +1 -1
  337. package/src/crypto/sync/pedersen/index.ts +16 -15
  338. package/src/crypto/sync/poseidon/index.ts +27 -22
  339. package/src/eth-address/index.ts +9 -2
  340. package/src/eth-signature/eth_signature.ts +44 -22
  341. package/src/fields/bls12_fields.ts +463 -0
  342. package/src/fields/bls12_point.ts +450 -0
  343. package/src/fields/fields.ts +37 -9
  344. package/src/fields/index.ts +2 -0
  345. package/src/fields/point.ts +1 -3
  346. package/src/fs/index.ts +1 -0
  347. package/src/fs/try_rm_dir.ts +15 -0
  348. package/src/index.ts +1 -2
  349. package/src/iterable/filter.ts +1 -1
  350. package/src/iterable/map.ts +1 -1
  351. package/src/jest/env.mjs +52 -0
  352. package/src/jest/setupAfterEnv.mjs +3 -0
  353. package/src/json-rpc/client/fetch.ts +14 -33
  354. package/src/json-rpc/client/safe_json_rpc_client.ts +226 -13
  355. package/src/json-rpc/client/undici.ts +8 -15
  356. package/src/json-rpc/convert.ts +3 -12
  357. package/src/json-rpc/errors.ts +6 -0
  358. package/src/json-rpc/fixtures/class_a.ts +4 -1
  359. package/src/json-rpc/fixtures/class_b.ts +4 -1
  360. package/src/json-rpc/index.ts +2 -1
  361. package/src/json-rpc/server/safe_json_rpc_server.ts +141 -48
  362. package/src/json-rpc/test/integration.ts +1 -1
  363. package/src/log/console.ts +4 -1
  364. package/src/log/gcloud-logger-config.ts +3 -7
  365. package/src/log/index.ts +4 -4
  366. package/src/log/libp2p_logger.ts +21 -2
  367. package/src/log/log_fn.ts +1 -1
  368. package/src/log/noir_debug_log_util.ts +21 -0
  369. package/src/log/pino-logger.ts +33 -2
  370. package/src/message/index.ts +5 -1
  371. package/src/mutex/mutex_database.ts +2 -3
  372. package/src/number/index.ts +14 -0
  373. package/src/profiler/index.ts +1 -0
  374. package/src/profiler/profiler.ts +125 -0
  375. package/src/promise/running-promise.ts +2 -2
  376. package/src/queue/batch_queue.ts +1 -1
  377. package/src/queue/bounded_serial_queue.ts +4 -1
  378. package/src/queue/serial_queue.ts +5 -5
  379. package/src/retry/index.ts +10 -5
  380. package/src/schemas/api.ts +4 -4
  381. package/src/schemas/parse.ts +1 -1
  382. package/src/schemas/schemas.ts +19 -1
  383. package/src/serialize/buffer_reader.ts +60 -3
  384. package/src/serialize/field_reader.ts +27 -3
  385. package/src/serialize/free_funcs.ts +25 -31
  386. package/src/serialize/serialize.ts +2 -0
  387. package/src/string/index.ts +36 -1
  388. package/src/testing/files/index.ts +6 -2
  389. package/src/testing/formatting.ts +3 -0
  390. package/src/testing/index.ts +1 -0
  391. package/src/timer/date.ts +9 -3
  392. package/src/timer/index.ts +1 -1
  393. package/src/timer/timeout.ts +54 -19
  394. package/src/transport/index.ts +0 -1
  395. package/src/transport/interface/connector.ts +0 -1
  396. package/src/transport/interface/listener.ts +2 -3
  397. package/src/transport/interface/socket.ts +2 -3
  398. package/src/transport/transport_client.ts +3 -4
  399. package/src/transport/transport_server.ts +4 -1
  400. package/src/trees/hasher.ts +4 -4
  401. package/src/trees/index.ts +1 -0
  402. package/src/trees/indexed_merkle_tree.ts +5 -1
  403. package/src/trees/indexed_merkle_tree_calculator.ts +2 -2
  404. package/src/trees/membership_witness.ts +13 -0
  405. package/src/trees/merkle_tree.ts +4 -1
  406. package/src/trees/merkle_tree_calculator.ts +43 -5
  407. package/src/trees/unbalanced_merkle_tree.ts +50 -42
  408. package/src/trees/unbalanced_merkle_tree_calculator.ts +194 -0
  409. package/src/trees/unbalanced_tree_store.ts +5 -1
  410. package/src/types/index.ts +25 -4
  411. package/src/url/index.ts +0 -1
  412. package/dest/crypto/pedersen/pedersen.elliptic.d.ts +0 -13
  413. package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +0 -1
  414. package/dest/crypto/pedersen/pedersen.elliptic.js +0 -582
  415. package/dest/log/debug.d.ts +0 -56
  416. package/dest/log/debug.d.ts.map +0 -1
  417. package/dest/log/debug.js +0 -75
  418. package/dest/log/log_history.d.ts +0 -31
  419. package/dest/log/log_history.d.ts.map +0 -1
  420. package/dest/log/log_history.js +0 -38
  421. package/dest/transport/browser/index.d.ts +0 -5
  422. package/dest/transport/browser/index.d.ts.map +0 -1
  423. package/dest/transport/browser/index.js +0 -4
  424. package/dest/transport/browser/message_port_socket.d.ts +0 -37
  425. package/dest/transport/browser/message_port_socket.d.ts.map +0 -1
  426. package/dest/transport/browser/message_port_socket.js +0 -42
  427. package/dest/transport/browser/shared_worker_connector.d.ts +0 -19
  428. package/dest/transport/browser/shared_worker_connector.d.ts.map +0 -1
  429. package/dest/transport/browser/shared_worker_connector.js +0 -19
  430. package/dest/transport/browser/shared_worker_listener.d.ts +0 -38
  431. package/dest/transport/browser/shared_worker_listener.d.ts.map +0 -1
  432. package/dest/transport/browser/shared_worker_listener.js +0 -33
  433. package/dest/transport/browser/worker_connector.d.ts +0 -26
  434. package/dest/transport/browser/worker_connector.d.ts.map +0 -1
  435. package/dest/transport/browser/worker_connector.js +0 -30
  436. package/dest/transport/browser/worker_listener.d.ts +0 -39
  437. package/dest/transport/browser/worker_listener.d.ts.map +0 -1
  438. package/dest/transport/browser/worker_listener.js +0 -35
  439. package/dest/wasm/empty_wasi_sdk.d.ts +0 -130
  440. package/dest/wasm/empty_wasi_sdk.d.ts.map +0 -1
  441. package/dest/wasm/empty_wasi_sdk.js +0 -148
  442. package/dest/wasm/index.d.ts +0 -2
  443. package/dest/wasm/index.d.ts.map +0 -1
  444. package/dest/wasm/index.js +0 -1
  445. package/dest/wasm/wasm_module.d.ts +0 -136
  446. package/dest/wasm/wasm_module.d.ts.map +0 -1
  447. package/dest/wasm/wasm_module.js +0 -196
  448. package/dest/worker/browser/index.d.ts +0 -3
  449. package/dest/worker/browser/index.d.ts.map +0 -1
  450. package/dest/worker/browser/index.js +0 -2
  451. package/dest/worker/browser/start_web_module.d.ts +0 -7
  452. package/dest/worker/browser/start_web_module.d.ts.map +0 -1
  453. package/dest/worker/browser/start_web_module.js +0 -27
  454. package/dest/worker/browser/web_data_store.d.ts +0 -24
  455. package/dest/worker/browser/web_data_store.d.ts.map +0 -1
  456. package/dest/worker/browser/web_data_store.js +0 -29
  457. package/dest/worker/browser/web_worker.d.ts +0 -10
  458. package/dest/worker/browser/web_worker.d.ts.map +0 -1
  459. package/dest/worker/browser/web_worker.js +0 -25
  460. package/dest/worker/data_store.d.ts +0 -21
  461. package/dest/worker/data_store.d.ts.map +0 -1
  462. package/dest/worker/data_store.js +0 -3
  463. package/dest/worker/index.d.ts +0 -3
  464. package/dest/worker/index.d.ts.map +0 -1
  465. package/dest/worker/index.js +0 -1
  466. package/dest/worker/node/index.d.ts +0 -3
  467. package/dest/worker/node/index.d.ts.map +0 -1
  468. package/dest/worker/node/index.js +0 -2
  469. package/dest/worker/node/node_data_store.d.ts +0 -13
  470. package/dest/worker/node/node_data_store.d.ts.map +0 -1
  471. package/dest/worker/node/node_data_store.js +0 -20
  472. package/dest/worker/node/node_worker.d.ts +0 -6
  473. package/dest/worker/node/node_worker.d.ts.map +0 -1
  474. package/dest/worker/node/node_worker.js +0 -22
  475. package/dest/worker/node/start_node_module.d.ts +0 -7
  476. package/dest/worker/node/start_node_module.d.ts.map +0 -1
  477. package/dest/worker/node/start_node_module.js +0 -31
  478. package/dest/worker/wasm_worker.d.ts +0 -9
  479. package/dest/worker/wasm_worker.d.ts.map +0 -1
  480. package/dest/worker/wasm_worker.js +0 -3
  481. package/dest/worker/worker_pool.d.ts +0 -40
  482. package/dest/worker/worker_pool.d.ts.map +0 -1
  483. package/dest/worker/worker_pool.js +0 -51
  484. package/src/crypto/pedersen/pedersen.elliptic.ts +0 -584
  485. package/src/log/debug.ts +0 -104
  486. package/src/log/log_history.ts +0 -44
  487. package/src/transport/browser/index.ts +0 -4
  488. package/src/transport/browser/message_port_socket.ts +0 -48
  489. package/src/transport/browser/shared_worker_connector.ts +0 -21
  490. package/src/transport/browser/shared_worker_listener.ts +0 -53
  491. package/src/transport/browser/worker_connector.ts +0 -30
  492. package/src/transport/browser/worker_listener.ts +0 -54
  493. package/src/wasm/README.md +0 -6
  494. package/src/wasm/empty_wasi_sdk.ts +0 -166
  495. package/src/wasm/fixtures/gcd.wasm +0 -0
  496. package/src/wasm/fixtures/gcd.wat +0 -27
  497. package/src/wasm/index.ts +0 -1
  498. package/src/wasm/wasm_module.ts +0 -260
  499. package/src/worker/browser/index.ts +0 -2
  500. package/src/worker/browser/start_web_module.ts +0 -24
  501. package/src/worker/browser/web_data_store.ts +0 -38
  502. package/src/worker/browser/web_worker.ts +0 -25
  503. package/src/worker/data_store.ts +0 -19
  504. package/src/worker/index.ts +0 -2
  505. package/src/worker/node/index.ts +0 -2
  506. package/src/worker/node/node_data_store.ts +0 -27
  507. package/src/worker/node/node_worker.ts +0 -23
  508. package/src/worker/node/start_node_module.ts +0 -30
  509. package/src/worker/wasm_worker.ts +0 -7
  510. package/src/worker/worker_pool.ts +0 -73
@@ -23,6 +23,21 @@ export type DiagnosticsData = {
23
23
 
24
24
  export type DiagnosticsMiddleware = (ctx: DiagnosticsData, next: () => Promise<void>) => Promise<void>;
25
25
 
26
+ export type SafeJsonRpcServerConfig = {
27
+ /** Maximum batch size for batched rpc requests */
28
+ maxBatchSize: number;
29
+ /** Return an HTTP 200 status code on errors, but include an error object as per the JSON RPC spec */
30
+ http200OnError: boolean;
31
+ /** The maximum body size the server will accept */
32
+ maxBodySizeBytes: string;
33
+ };
34
+
35
+ const defaultServerConfig: SafeJsonRpcServerConfig = {
36
+ http200OnError: false,
37
+ maxBatchSize: 100,
38
+ maxBodySizeBytes: '50mb',
39
+ };
40
+
26
41
  export class SafeJsonRpcServer {
27
42
  /**
28
43
  * The HTTP server accepting remote requests.
@@ -30,21 +45,26 @@ export class SafeJsonRpcServer {
30
45
  */
31
46
  private httpServer?: http.Server;
32
47
 
48
+ private config: SafeJsonRpcServerConfig;
49
+
33
50
  constructor(
34
- /** The proxy object to delegate requests to. */
51
+ /** The proxy object to delegate requests to */
35
52
  private readonly proxy: Proxy,
36
- /**
37
- * Return an HTTP 200 status code on errors, but include an error object
38
- * as per the JSON RPC spec
39
- */
40
- private http200OnError = false,
53
+ config: Partial<SafeJsonRpcServerConfig> = {},
41
54
  /** Health check function */
42
55
  private readonly healthCheck: StatusCheckFn = () => true,
43
56
  /** Additional middlewares */
44
57
  private extraMiddlewares: Application.Middleware[] = [],
45
58
  /** Logger */
46
59
  private log = createLogger('json-rpc:server'),
47
- ) {}
60
+ ) {
61
+ this.config = { ...defaultServerConfig, ...config };
62
+
63
+ // handle empty string
64
+ if (!this.config.maxBodySizeBytes) {
65
+ this.config.maxBodySizeBytes = defaultServerConfig.maxBodySizeBytes;
66
+ }
67
+ }
48
68
 
49
69
  public isHealthy(): boolean | Promise<boolean> {
50
70
  return this.healthCheck();
@@ -63,20 +83,13 @@ export class SafeJsonRpcServer {
63
83
  await next();
64
84
  } catch (err: any) {
65
85
  const method = (ctx.request.body as any)?.method ?? 'unknown';
66
- this.log.warn(`Error in JSON RPC server call ${method}: ${inspect(err)}`);
67
- if (err instanceof SyntaxError) {
86
+ this.log.warn(`Uncaught error in JSON RPC server call ${method}: ${inspect(err)}`);
87
+ if (err && 'name' in err && err.name === 'BadRequestError') {
68
88
  ctx.status = 400;
69
- ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32700, message: `Parse error: ${err.message}` } };
70
- } else if (err instanceof ZodError) {
71
- const message = err.issues.map(e => `${e.message} (${e.path.join('.')})`).join('. ') || 'Validation error';
89
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32000, message: `Bad request: ${err.message}` } };
90
+ } else if (err && err instanceof SyntaxError) {
72
91
  ctx.status = 400;
73
- ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32701, message } };
74
- } else if (this.http200OnError) {
75
- ctx.body = {
76
- jsonrpc: '2.0',
77
- id: null,
78
- error: { code: err.code || -32600, data: err.data, message: err.message },
79
- };
92
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32700, message: `Parse error: ${err.message}` } };
80
93
  } else {
81
94
  ctx.status = 500;
82
95
  ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32600, message: err.message ?? 'Internal error' } };
@@ -107,7 +120,12 @@ export class SafeJsonRpcServer {
107
120
  app.use(middleware);
108
121
  }
109
122
  app.use(exceptionHandler);
110
- app.use(bodyParser({ jsonLimit: '50mb', enableTypes: ['json'], detectJSON: () => true }));
123
+ app.use(
124
+ bodyParser({
125
+ jsonLimit: this.config.maxBodySizeBytes,
126
+ enableTypes: ['json'],
127
+ }),
128
+ );
111
129
  app.use(cors());
112
130
  app.use(router.routes());
113
131
  app.use(router.allowedMethods());
@@ -124,23 +142,93 @@ export class SafeJsonRpcServer {
124
142
  const router = new Router({ prefix });
125
143
  // "JSON RPC mode" where a single endpoint is used and the method is given in the request body
126
144
  router.post('/', async (ctx: Koa.Context) => {
127
- const { params = [], jsonrpc, id, method } = ctx.request.body as any;
128
- // Fail if not a registered function in the proxy
129
- if (typeof method !== 'string' || method === 'constructor' || !this.proxy.hasMethod(method)) {
130
- ctx.status = 400;
131
- const code = -32601;
132
- const message = `Method not found: ${method}`;
133
- ctx.body = { jsonrpc, id, error: { code, message } };
145
+ if (Array.isArray(ctx.request.body)) {
146
+ if (ctx.request.body.length > this.config.maxBatchSize) {
147
+ ctx.status = this.config.http200OnError ? 200 : 400;
148
+ ctx.body = {
149
+ jsonrpc: '2.0',
150
+ error: {
151
+ code: -32600,
152
+ message: `Batch request exceeds maximum allowed size of ${this.config.maxBatchSize}`,
153
+ },
154
+ id: null,
155
+ };
156
+ return;
157
+ }
158
+ const resp = await this.processBatch(ctx.request.body);
159
+ if (Array.isArray(resp)) {
160
+ ctx.status = 200;
161
+ ctx.body = resp;
162
+ } else {
163
+ ctx.status = this.config.http200OnError ? 200 : 400;
164
+ ctx.body = resp;
165
+ }
134
166
  } else {
135
- ctx.status = 200;
136
- const result = await this.proxy.call(method, params);
137
- ctx.body = { jsonrpc, id, result };
167
+ const resp = await this.processRequest(ctx.request.body);
168
+ if ('error' in resp) {
169
+ ctx.status = this.config.http200OnError ? 200 : 400;
170
+ }
171
+
172
+ ctx.body = resp;
138
173
  }
139
174
  });
140
175
 
141
176
  return router;
142
177
  }
143
178
 
179
+ private async processBatch(requests: any[]) {
180
+ if (requests.length === 0) {
181
+ return { jsonrpc: '2.0', error: { code: -32600, message: 'Invalid Request' }, id: null };
182
+ }
183
+ const results = await Promise.allSettled(requests.map(req => this.processRequest(req)));
184
+ return results.map(res => {
185
+ if (res.status === 'fulfilled') {
186
+ return res.value;
187
+ }
188
+
189
+ this.log.warn(`Uncaught error executing request in batch: ${res.reason}.`);
190
+ return { jsonrpc: '2.0', error: { code: -32600, message: 'Invalid Request' }, id: null };
191
+ });
192
+ }
193
+
194
+ private async processRequest(request: any) {
195
+ if (!request || typeof request !== 'object') {
196
+ return { jsonrpc: '2.0', error: { code: -32600, message: 'Invalid Request' }, id: null };
197
+ }
198
+
199
+ const { params = [], jsonrpc = '2.0', id, method } = request;
200
+ if (typeof method !== 'string' || !method) {
201
+ return { jsonrpc: '2.0', id, error: { code: -32600, message: `Invalid request` } };
202
+ }
203
+
204
+ // Fail if not a registered function in the proxy
205
+ if (typeof method !== 'string' || method === 'constructor' || !this.proxy.hasMethod(method)) {
206
+ return { jsonrpc, id, error: { code: -32601, message: `Method not found: ${method}` } };
207
+ } else {
208
+ try {
209
+ const result = await this.proxy.call(method, params);
210
+ return { jsonrpc, id, result };
211
+ } catch (err: any) {
212
+ if (err && err instanceof ZodError) {
213
+ const message = err.issues.map(e => `${e.message} (${e.path.join('.')})`).join('. ') || 'Validation error';
214
+ return { jsonrpc: '2.0', id, error: { code: -32701, message } };
215
+ } else if (err) {
216
+ return {
217
+ jsonrpc,
218
+ id,
219
+ error: { code: -32702, data: err.data, message: err.message },
220
+ };
221
+ } else {
222
+ return {
223
+ jsonrpc,
224
+ id,
225
+ error: { code: -32702, message: 'Error executing request' },
226
+ };
227
+ }
228
+ }
229
+ }
230
+ }
231
+
144
232
  /**
145
233
  * Start this server with koa.
146
234
  * @param port - Port number.
@@ -201,7 +289,10 @@ export class SafeJsonProxy<T extends object = any> implements Proxy {
201
289
  private log = createLogger('json-rpc:proxy');
202
290
  private schema: ApiSchema;
203
291
 
204
- constructor(private handler: T, schema: ApiSchemaFor<T>) {
292
+ constructor(
293
+ private handler: T,
294
+ schema: ApiSchemaFor<T>,
295
+ ) {
205
296
  this.schema = schema;
206
297
  }
207
298
 
@@ -265,7 +356,10 @@ function makeAggregateHealthcheck(namedHandlers: NamespacedApiHandlers, log?: Lo
265
356
  return async () => {
266
357
  try {
267
358
  const results = await Promise.all(
268
- Object.entries(namedHandlers).map(([name, [, , healthCheck]]) => [name, healthCheck ? healthCheck() : true]),
359
+ Object.entries(namedHandlers).map(async ([name, [, , healthCheck]]) => [
360
+ name,
361
+ healthCheck ? await healthCheck() : true,
362
+ ]),
269
363
  );
270
364
  const failed = results.filter(([_, result]) => !result);
271
365
  if (failed.length > 0) {
@@ -280,12 +374,13 @@ function makeAggregateHealthcheck(namedHandlers: NamespacedApiHandlers, log?: Lo
280
374
  };
281
375
  }
282
376
 
283
- export type SafeJsonRpcServerOptions = {
284
- http200OnError: boolean;
285
- healthCheck?: StatusCheckFn;
286
- log?: Logger;
287
- middlewares?: Application.Middleware[];
288
- };
377
+ export type SafeJsonRpcServerOptions = Partial<
378
+ SafeJsonRpcServerConfig & {
379
+ healthCheck: StatusCheckFn;
380
+ log: Logger;
381
+ middlewares: Application.Middleware[];
382
+ }
383
+ >;
289
384
 
290
385
  /**
291
386
  * Creates a single SafeJsonRpcServer from multiple handlers.
@@ -294,24 +389,22 @@ export type SafeJsonRpcServerOptions = {
294
389
  */
295
390
  export function createNamespacedSafeJsonRpcServer(
296
391
  handlers: NamespacedApiHandlers,
297
- options: Partial<Omit<SafeJsonRpcServerOptions, 'healthcheck'>> = {
298
- log: createLogger('json-rpc:server'),
299
- },
392
+ options: Omit<SafeJsonRpcServerOptions, 'healthcheck'> = {},
300
393
  ): SafeJsonRpcServer {
301
- const { middlewares, http200OnError, log } = options;
394
+ const { middlewares, log } = options;
302
395
  const proxy = new NamespacedSafeJsonProxy(handlers);
303
396
  const healthCheck = makeAggregateHealthcheck(handlers, log);
304
- return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, middlewares, log);
397
+ return new SafeJsonRpcServer(proxy, options, healthCheck, middlewares, log);
305
398
  }
306
399
 
307
400
  export function createSafeJsonRpcServer<T extends object = any>(
308
401
  handler: T,
309
402
  schema: ApiSchemaFor<T>,
310
- options: Partial<SafeJsonRpcServerOptions> = {},
403
+ options: SafeJsonRpcServerOptions = {},
311
404
  ) {
312
- const { http200OnError, log, healthCheck, middlewares: extraMiddlewares } = options;
405
+ const { log, healthCheck, middlewares: extraMiddlewares } = options;
313
406
  const proxy = new SafeJsonProxy(handler, schema);
314
- return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, extraMiddlewares, log);
407
+ return new SafeJsonRpcServer(proxy, options, healthCheck, extraMiddlewares, log);
315
408
  }
316
409
 
317
410
  /**
@@ -326,7 +419,7 @@ export function createStatusRouter(getCurrentStatus: StatusCheckFn, apiPrefix =
326
419
  let ok: boolean;
327
420
  try {
328
421
  ok = (await getCurrentStatus()) === true;
329
- } catch (err) {
422
+ } catch {
330
423
  ok = false;
331
424
  }
332
425
 
@@ -364,7 +457,7 @@ export async function startHttpRpcServer(
364
457
 
365
458
  const { promise, resolve } = promiseWithResolvers<void>();
366
459
  const listenPort = options.port ? (typeof options.port === 'string' ? parseInt(options.port) : options.port) : 0;
367
- httpServer.listen(listenPort, options.host, () => resolve());
460
+ httpServer.listen({ host: options.host, port: listenPort, reuseAddress: true }, () => resolve());
368
461
 
369
462
  // Wait until listen callback is called
370
463
  if (!options.noWait) {
@@ -20,7 +20,7 @@ export type JsonRpcTestContext<T extends object> = {
20
20
  export async function createJsonRpcTestSetup<T extends object>(
21
21
  handler: T,
22
22
  schema: ApiSchemaFor<T>,
23
- serverOptions: Partial<SafeJsonRpcServerOptions> = {},
23
+ serverOptions: SafeJsonRpcServerOptions = {},
24
24
  clientOptions: SafeJsonRpcClientOptions = {},
25
25
  ): Promise<JsonRpcTestContext<T>> {
26
26
  const server = createSafeJsonRpcServer<T>(handler, schema, serverOptions);
@@ -7,7 +7,10 @@ import type { LogFn } from './log_fn.js';
7
7
  * which can be useful for controlling the format of the output or redirecting logs to a different destination.
8
8
  */
9
9
  class ConsoleLogger {
10
- constructor(private prefix: string, private logger: (...args: any[]) => void = console.log) {}
10
+ constructor(
11
+ private prefix: string,
12
+ private logger: (...args: any[]) => void = console.log,
13
+ ) {}
11
14
 
12
15
  /**
13
16
  * Log messages with the specified prefix using the provided logger.
@@ -13,10 +13,6 @@ const GOOGLE_CLOUD_TRACE_SAMPLED = 'logging.googleapis.com/trace_sampled';
13
13
  */
14
14
  export const GoogleCloudLoggerConfig = {
15
15
  messageKey: 'message',
16
- // Same as pino.stdTimeFunctions.isoTime but uses "timestamp" key instead of "time"
17
- timestamp(): string {
18
- return `,"timestamp":"${new Date(Date.now()).toISOString()}"`;
19
- },
20
16
  formatters: {
21
17
  log(object: Record<string, unknown>): Record<string, unknown> {
22
18
  // Add trace context attributes following Cloud Logging structured log format described
@@ -39,12 +35,12 @@ export const GoogleCloudLoggerConfig = {
39
35
  // Severity labels https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity
40
36
  let severity: string;
41
37
 
42
- switch (label as pino.Level | keyof typeof customLevels) {
38
+ switch (label as pino.Level | keyof CustomLevels) {
43
39
  case 'trace':
44
40
  case 'debug':
41
+ case 'verbose':
45
42
  severity = 'DEBUG';
46
43
  break;
47
- case 'verbose':
48
44
  case 'info':
49
45
  severity = 'INFO';
50
46
  break;
@@ -68,4 +64,4 @@ export const GoogleCloudLoggerConfig = {
68
64
  } satisfies pino.LoggerOptions;
69
65
 
70
66
  // Define custom logging levels for pino. Duplicate from pino-logger.ts.
71
- const customLevels = { verbose: 25 };
67
+ type CustomLevels = { verbose: 25 };
package/src/log/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './console.js';
2
- export * from './debug.js';
3
- export * from './pino-logger.js';
4
- export * from './log_history.js';
5
- export * from './log_fn.js';
6
2
  export * from './libp2p_logger.js';
3
+ export * from './log_fn.js';
4
+ export * from './noir_debug_log_util.js';
5
+ export * from './pino-logger.js';
6
+ export * from './log-levels.js';
@@ -33,7 +33,7 @@ function createLibp2pLogger(component: string): Logger {
33
33
  return;
34
34
  }
35
35
 
36
- log[level](replaceFormatting(message), ...args);
36
+ log[level](replaceFormatting(message), ...formatArgs(message, args));
37
37
  };
38
38
 
39
39
  // Default log level is trace as this is super super noisy
@@ -45,7 +45,7 @@ function createLibp2pLogger(component: string): Logger {
45
45
  enabled: log.isLevelEnabled('debug'),
46
46
  error(message: string, ...args: unknown[]) {
47
47
  // We write error outputs as debug as they are often expected, e.g. connection errors can happen in happy paths
48
- logIfEnabled('debug', message, ...args);
48
+ logIfEnabled('debug', `error: ${message}`, ...args);
49
49
  },
50
50
 
51
51
  debug(message: string, ...args: unknown[]) {
@@ -65,3 +65,22 @@ function createLibp2pLogger(component: string): Logger {
65
65
  },
66
66
  });
67
67
  }
68
+
69
+ function formatArgs(message: string, args: unknown[]) {
70
+ if (!args) {
71
+ return args;
72
+ }
73
+ return args.map(arg => {
74
+ if (
75
+ typeof arg === 'object' &&
76
+ arg &&
77
+ 'err' in arg &&
78
+ arg.err instanceof Error &&
79
+ 'type' in arg.err &&
80
+ arg.err.type === 'AbortError'
81
+ ) {
82
+ delete arg.err; // Remove the AbortError from the logs
83
+ }
84
+ return arg;
85
+ });
86
+ }
package/src/log/log_fn.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Structured log data to include with the message. */
2
- export type LogData = Record<string, string | number | bigint | boolean | { toString(): string } | undefined>;
2
+ export type LogData = Record<string, string | number | bigint | boolean | { toString(): string } | undefined | null>;
3
3
 
4
4
  /** A callable logger instance. */
5
5
  export type LogFn = (msg: string, data?: unknown) => void;
@@ -0,0 +1,21 @@
1
+ interface Printable {
2
+ toString(): string;
3
+ }
4
+
5
+ /**
6
+ * Format a debug string filling in `'{0}'` entries with their
7
+ * corresponding values from the args array, amd `'{}'` with the whole array.
8
+ *
9
+ * @param formatStr - str of form `'this is a string with some entries like {0} and {1}'`
10
+ * @param args - array of fields to fill in the string format entries with
11
+ * @returns formatted string
12
+ */
13
+ export function applyStringFormatting(formatStr: string, args: Printable[]): string {
14
+ return formatStr
15
+ .replace(/{(\d+)}/g, (match, index) => {
16
+ return typeof args[index] === 'undefined' ? match : args[index].toString();
17
+ })
18
+ .replace(/{}/g, (_match, _index) => {
19
+ return args.toString();
20
+ });
21
+ }
@@ -37,11 +37,14 @@ export function createLogger(module: string): Logger {
37
37
  debug: (msg: string, data?: unknown) => logFn('debug', msg, data),
38
38
  /** Log as trace. Use for when we want to denial-of-service any recipient of the logs. */
39
39
  trace: (msg: string, data?: unknown) => logFn('trace', msg, data),
40
+ /** Level of the logger */
40
41
  level: pinoLogger.level as LogLevel,
41
42
  /** Whether the given level is enabled for this logger. */
42
43
  isLevelEnabled: (level: LogLevel) => isLevelEnabled(pinoLogger, level),
43
44
  /** Module name for the logger. */
44
45
  module,
46
+ /** Creates another logger by extending this logger module name. */
47
+ createChild: (childModule: string) => createLogger(`${module}:${childModule}`),
45
48
  };
46
49
  }
47
50
 
@@ -99,11 +102,38 @@ const customLevels = { verbose: 25 };
99
102
 
100
103
  // Global pino options, tweaked for google cloud if running there.
101
104
  const useGcloudLogging = parseBooleanEnv(process.env['USE_GCLOUD_LOGGING' satisfies EnvVar]);
105
+
106
+ const redactedPaths = [
107
+ 'validatorPrivateKeys',
108
+ // for both the validator and the prover
109
+ 'publisherPrivateKeys',
110
+ 'peerIdPrivateKey',
111
+ // bot keys
112
+ 'l1PrivateKey',
113
+ 'senderPrivateKey',
114
+ // blob sink
115
+ 'l1ConsensusHostApiKeys',
116
+ // sensitive options used in the CLI
117
+ 'privateKey',
118
+ 'mnemonic',
119
+ 'l1Mnemonic',
120
+ 'l1PrivateKey',
121
+ ];
122
+
102
123
  const pinoOpts: pino.LoggerOptions<keyof typeof customLevels> = {
103
124
  customLevels,
104
125
  messageKey: 'msg',
105
126
  useOnlyCustomLevels: false,
106
127
  level: logLevel,
128
+ redact: {
129
+ paths: [
130
+ ...redactedPaths,
131
+ ...redactedPaths.map(p => `config.${p}`),
132
+ ...redactedPaths.map(p => `cfg.${p}`),
133
+ ...redactedPaths.map(p => `options.${p}`),
134
+ ...redactedPaths.map(p => `opts.${p}`),
135
+ ],
136
+ },
107
137
  ...(useGcloudLogging ? GoogleCloudLoggerConfig : {}),
108
138
  };
109
139
 
@@ -221,7 +251,7 @@ export function registerLoggingStream(stream: Writable): void {
221
251
  }
222
252
 
223
253
  /** Log function that accepts an exception object */
224
- type ErrorLogFn = (msg: string, err?: Error | unknown, data?: LogData) => void;
254
+ type ErrorLogFn = (msg: string, err?: unknown, data?: LogData) => void;
225
255
 
226
256
  /**
227
257
  * Logger that supports multiple severity levels.
@@ -230,6 +260,7 @@ export type Logger = { [K in LogLevel]: LogFn } & { /** Error log function */ er
230
260
  level: LogLevel;
231
261
  isLevelEnabled: (level: LogLevel) => boolean;
232
262
  module: string;
263
+ createChild: (childModule: string) => Logger;
233
264
  };
234
265
 
235
266
  /**
@@ -238,6 +269,6 @@ export type Logger = { [K in LogLevel]: LogFn } & { /** Error log function */ er
238
269
  * @param err - Error to log
239
270
  * @returns A string with both the log message and the error message.
240
271
  */
241
- function formatErr(msg: string, err?: Error | unknown): string {
272
+ function formatErr(msg: string, err?: unknown): string {
242
273
  return err ? `${msg}: ${inspect(err)}` : msg;
243
274
  }
@@ -31,7 +31,11 @@ interface TypedMessageLike {
31
31
  }
32
32
 
33
33
  export class TypedMessage<T, B> {
34
- public constructor(public readonly msgType: T, public readonly header: MessageHeader, public readonly value: B) {}
34
+ public constructor(
35
+ public readonly msgType: T,
36
+ public readonly header: MessageHeader,
37
+ public readonly value: B,
38
+ ) {}
35
39
 
36
40
  static fromMessagePack<T, B>(data: TypedMessageLike): TypedMessage<T, B> {
37
41
  return new TypedMessage<T, B>(data['msgType'] as T, MessageHeader.fromMessagePack(data['header']), data['value']);
@@ -3,10 +3,9 @@
3
3
  * Provides functionality for acquiring, extending, and releasing locks on resources to ensure exclusive access and prevent conflicts in concurrent applications.
4
4
  */
5
5
  export interface MutexDatabase {
6
- // eslint-disable-next-line jsdoc/require-jsdoc
7
6
  acquireLock(name: string, timeout: number): Promise<boolean>;
8
- // eslint-disable-next-line jsdoc/require-jsdoc
7
+
9
8
  extendLock(name: string, timeout: number): Promise<void>;
10
- // eslint-disable-next-line jsdoc/require-jsdoc
9
+
11
10
  releaseLock(name: string): Promise<void>;
12
11
  }
@@ -0,0 +1,14 @@
1
+ /** Bounds the given value between the min and max provided (both inclusive) */
2
+ export function boundInclusive(value: number, min: number, max: number): number {
3
+ if (min > max) {
4
+ throw new Error('Minimum bound cannot be greater than maximum bound');
5
+ }
6
+
7
+ if (value < min) {
8
+ return min;
9
+ } else if (value > max) {
10
+ return max;
11
+ } else {
12
+ return value;
13
+ }
14
+ }
@@ -0,0 +1 @@
1
+ export * from './profiler.js';
@@ -0,0 +1,125 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { performance } from 'node:perf_hooks';
5
+
6
+ interface Span {
7
+ label: string;
8
+ start: number;
9
+ dur: number;
10
+ count: number;
11
+ children: Span[];
12
+ parent: Span | undefined;
13
+ }
14
+
15
+ interface ProfileData {
16
+ spans: SerializedSpan[];
17
+ timestamp: string;
18
+ totalTime: number;
19
+ }
20
+
21
+ interface SerializedSpan {
22
+ label: string;
23
+ dur: number;
24
+ count: number;
25
+ children: SerializedSpan[];
26
+ }
27
+
28
+ const als = new AsyncLocalStorage<Span>();
29
+ const roots: Span[] = [];
30
+
31
+ function reset(): void {
32
+ roots.length = 0;
33
+ }
34
+
35
+ // Strip out circular references (parent) and unused fields (start) for JSON serialization
36
+ function serializeSpans(spans: Span[]): SerializedSpan[] {
37
+ return spans.map(span => ({
38
+ label: span.label,
39
+ dur: span.dur,
40
+ count: span.count,
41
+ children: serializeSpans(span.children),
42
+ }));
43
+ }
44
+
45
+ let i = 0;
46
+ function save(): void {
47
+ if (roots.length === 0) {
48
+ return;
49
+ }
50
+
51
+ // Find max single execution time across all spans (dur/count since dur is accumulated)
52
+ const findMaxSingleDuration = (spans: Span[]): number => {
53
+ let max = 0;
54
+ for (const span of spans) {
55
+ const singleDur = span.dur / span.count;
56
+ max = Math.max(max, singleDur);
57
+ if (span.children.length > 0) {
58
+ max = Math.max(max, findMaxSingleDuration(span.children));
59
+ }
60
+ }
61
+ return max;
62
+ };
63
+
64
+ const profileData: ProfileData = {
65
+ spans: serializeSpans(roots),
66
+ timestamp: new Date().toISOString(),
67
+ totalTime: findMaxSingleDuration(roots),
68
+ };
69
+
70
+ const profilePath = path.join(process.cwd(), `profile-${i++}.json`);
71
+ process.stdout.write(`Writing profile data to ${profilePath}\n`);
72
+ fs.writeFileSync(profilePath, JSON.stringify(profileData, null, 2));
73
+ }
74
+
75
+ // Hook into Jest to save after each test
76
+ if (typeof afterEach === 'function') {
77
+ afterEach(() => {
78
+ save();
79
+ reset();
80
+ });
81
+ }
82
+
83
+ // Also save on process exit for non-Jest environments
84
+ process.on('exit', () => {
85
+ save();
86
+ });
87
+
88
+ // Wrapper for async functions to maintain context properly
89
+ async function runAsync<ReturnType>(label: string, fn: () => Promise<ReturnType>): Promise<ReturnType> {
90
+ const parent = als.getStore();
91
+
92
+ // Check if we already have a span with this label in the current context
93
+ let existingSpan: Span | undefined;
94
+ if (parent) {
95
+ existingSpan = parent.children.find(c => c.label === label);
96
+ } else {
97
+ existingSpan = roots.find(r => r.label === label);
98
+ }
99
+
100
+ let span: Span;
101
+ if (existingSpan) {
102
+ // Reuse existing span and increment count
103
+ span = existingSpan;
104
+ span.count++;
105
+ } else {
106
+ // Create new span
107
+ span = { label, start: performance.now(), dur: 0, count: 1, children: [], parent };
108
+ if (parent) {
109
+ parent.children.push(span);
110
+ } else {
111
+ roots.push(span);
112
+ }
113
+ }
114
+
115
+ const startTime = performance.now();
116
+ const result: ReturnType = await als.run(span, fn);
117
+ const elapsed = performance.now() - startTime;
118
+
119
+ // Add to total duration (for averaging)
120
+ span.dur += elapsed;
121
+
122
+ return result;
123
+ }
124
+
125
+ export const profiler = { reset, runAsync };