@aztec/foundation 0.0.0-test.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 (736) hide show
  1. package/README.md +1 -0
  2. package/dest/array/array.d.ts +71 -0
  3. package/dest/array/array.d.ts.map +1 -0
  4. package/dest/array/array.js +100 -0
  5. package/dest/array/index.d.ts +2 -0
  6. package/dest/array/index.d.ts.map +1 -0
  7. package/dest/array/index.js +1 -0
  8. package/dest/async-map/index.d.ts +13 -0
  9. package/dest/async-map/index.d.ts.map +1 -0
  10. package/dest/async-map/index.js +17 -0
  11. package/dest/async-pool/index.d.ts +3 -0
  12. package/dest/async-pool/index.d.ts.map +1 -0
  13. package/dest/async-pool/index.js +47 -0
  14. package/dest/bigint-buffer/index.d.ts +42 -0
  15. package/dest/bigint-buffer/index.d.ts.map +1 -0
  16. package/dest/bigint-buffer/index.js +76 -0
  17. package/dest/buffer/buffer32.d.ts +91 -0
  18. package/dest/buffer/buffer32.d.ts.map +1 -0
  19. package/dest/buffer/buffer32.js +115 -0
  20. package/dest/buffer/index.d.ts +2 -0
  21. package/dest/buffer/index.d.ts.map +1 -0
  22. package/dest/buffer/index.js +1 -0
  23. package/dest/collection/array.d.ts +101 -0
  24. package/dest/collection/array.d.ts.map +1 -0
  25. package/dest/collection/array.js +164 -0
  26. package/dest/collection/index.d.ts +3 -0
  27. package/dest/collection/index.d.ts.map +1 -0
  28. package/dest/collection/index.js +2 -0
  29. package/dest/collection/object.d.ts +14 -0
  30. package/dest/collection/object.d.ts.map +1 -0
  31. package/dest/collection/object.js +32 -0
  32. package/dest/committable/committable.d.ts +28 -0
  33. package/dest/committable/committable.d.ts.map +1 -0
  34. package/dest/committable/committable.js +36 -0
  35. package/dest/committable/index.d.ts +2 -0
  36. package/dest/committable/index.d.ts.map +1 -0
  37. package/dest/committable/index.js +1 -0
  38. package/dest/config/env_var.d.ts +2 -0
  39. package/dest/config/env_var.d.ts.map +1 -0
  40. package/dest/config/env_var.js +1 -0
  41. package/dest/config/index.d.ts +66 -0
  42. package/dest/config/index.d.ts.map +1 -0
  43. package/dest/config/index.js +125 -0
  44. package/dest/crypto/aes128/index.d.ts +34 -0
  45. package/dest/crypto/aes128/index.d.ts.map +1 -0
  46. package/dest/crypto/aes128/index.js +49 -0
  47. package/dest/crypto/ecdsa/index.d.ts +39 -0
  48. package/dest/crypto/ecdsa/index.d.ts.map +1 -0
  49. package/dest/crypto/ecdsa/index.js +88 -0
  50. package/dest/crypto/ecdsa/signature.d.ts +71 -0
  51. package/dest/crypto/ecdsa/signature.d.ts.map +1 -0
  52. package/dest/crypto/ecdsa/signature.js +92 -0
  53. package/dest/crypto/grumpkin/index.d.ts +47 -0
  54. package/dest/crypto/grumpkin/index.d.ts.map +1 -0
  55. package/dest/crypto/grumpkin/index.js +154 -0
  56. package/dest/crypto/index.d.ts +15 -0
  57. package/dest/crypto/index.d.ts.map +1 -0
  58. package/dest/crypto/index.js +14 -0
  59. package/dest/crypto/keccak/index.d.ts +28 -0
  60. package/dest/crypto/keccak/index.d.ts.map +1 -0
  61. package/dest/crypto/keccak/index.js +248 -0
  62. package/dest/crypto/keys/index.d.ts +5 -0
  63. package/dest/crypto/keys/index.d.ts.map +1 -0
  64. package/dest/crypto/keys/index.js +7 -0
  65. package/dest/crypto/pedersen/index.d.ts +2 -0
  66. package/dest/crypto/pedersen/index.d.ts.map +1 -0
  67. package/dest/crypto/pedersen/index.js +1 -0
  68. package/dest/crypto/pedersen/pedersen.elliptic.d.ts +13 -0
  69. package/dest/crypto/pedersen/pedersen.elliptic.d.ts.map +1 -0
  70. package/dest/crypto/pedersen/pedersen.elliptic.js +582 -0
  71. package/dest/crypto/pedersen/pedersen.noble.d.ts +11 -0
  72. package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -0
  73. package/dest/crypto/pedersen/pedersen.noble.js +558 -0
  74. package/dest/crypto/pedersen/pedersen.wasm.d.ts +21 -0
  75. package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -0
  76. package/dest/crypto/pedersen/pedersen.wasm.js +41 -0
  77. package/dest/crypto/poseidon/index.d.ts +26 -0
  78. package/dest/crypto/poseidon/index.d.ts.map +1 -0
  79. package/dest/crypto/poseidon/index.js +58 -0
  80. package/dest/crypto/random/index.d.ts +25 -0
  81. package/dest/crypto/random/index.d.ts.map +1 -0
  82. package/dest/crypto/random/index.js +70 -0
  83. package/dest/crypto/random/randomness_singleton.d.ts +25 -0
  84. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -0
  85. package/dest/crypto/random/randomness_singleton.js +55 -0
  86. package/dest/crypto/schnorr/index.d.ts +30 -0
  87. package/dest/crypto/schnorr/index.d.ts.map +1 -0
  88. package/dest/crypto/schnorr/index.js +68 -0
  89. package/dest/crypto/schnorr/signature.d.ts +70 -0
  90. package/dest/crypto/schnorr/signature.d.ts.map +1 -0
  91. package/dest/crypto/schnorr/signature.js +93 -0
  92. package/dest/crypto/secp256k1/index.d.ts +32 -0
  93. package/dest/crypto/secp256k1/index.d.ts.map +1 -0
  94. package/dest/crypto/secp256k1/index.js +116 -0
  95. package/dest/crypto/secp256k1-signer/index.d.ts +3 -0
  96. package/dest/crypto/secp256k1-signer/index.d.ts.map +1 -0
  97. package/dest/crypto/secp256k1-signer/index.js +2 -0
  98. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts +24 -0
  99. package/dest/crypto/secp256k1-signer/secp256k1_signer.d.ts.map +1 -0
  100. package/dest/crypto/secp256k1-signer/secp256k1_signer.js +30 -0
  101. package/dest/crypto/secp256k1-signer/utils.d.ts +40 -0
  102. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -0
  103. package/dest/crypto/secp256k1-signer/utils.js +84 -0
  104. package/dest/crypto/serialize.d.ts +53 -0
  105. package/dest/crypto/serialize.d.ts.map +1 -0
  106. package/dest/crypto/serialize.js +68 -0
  107. package/dest/crypto/sha256/index.d.ts +20 -0
  108. package/dest/crypto/sha256/index.d.ts.map +1 -0
  109. package/dest/crypto/sha256/index.js +166 -0
  110. package/dest/crypto/sha512/index.d.ts +11 -0
  111. package/dest/crypto/sha512/index.d.ts.map +1 -0
  112. package/dest/crypto/sha512/index.js +12 -0
  113. package/dest/crypto/signature/index.d.ts +19 -0
  114. package/dest/crypto/signature/index.d.ts.map +1 -0
  115. package/dest/crypto/signature/index.js +3 -0
  116. package/dest/crypto/sync/index.d.ts +3 -0
  117. package/dest/crypto/sync/index.d.ts.map +1 -0
  118. package/dest/crypto/sync/index.js +4 -0
  119. package/dest/crypto/sync/pedersen/index.d.ts +21 -0
  120. package/dest/crypto/sync/pedersen/index.d.ts.map +1 -0
  121. package/dest/crypto/sync/pedersen/index.js +38 -0
  122. package/dest/crypto/sync/poseidon/index.d.ts +26 -0
  123. package/dest/crypto/sync/poseidon/index.d.ts.map +1 -0
  124. package/dest/crypto/sync/poseidon/index.js +53 -0
  125. package/dest/decorators/index.d.ts +2 -0
  126. package/dest/decorators/index.d.ts.map +1 -0
  127. package/dest/decorators/index.js +1 -0
  128. package/dest/decorators/memoize.d.ts +2 -0
  129. package/dest/decorators/memoize.d.ts.map +1 -0
  130. package/dest/decorators/memoize.js +11 -0
  131. package/dest/error/index.d.ts +21 -0
  132. package/dest/error/index.d.ts.map +1 -0
  133. package/dest/error/index.js +17 -0
  134. package/dest/eth-address/index.d.ts +134 -0
  135. package/dest/eth-address/index.d.ts.map +1 -0
  136. package/dest/eth-address/index.js +198 -0
  137. package/dest/eth-signature/eth_signature.d.ts +62 -0
  138. package/dest/eth-signature/eth_signature.d.ts.map +1 -0
  139. package/dest/eth-signature/eth_signature.js +91 -0
  140. package/dest/eth-signature/index.d.ts +2 -0
  141. package/dest/eth-signature/index.d.ts.map +1 -0
  142. package/dest/eth-signature/index.js +1 -0
  143. package/dest/fields/coordinate.d.ts +68 -0
  144. package/dest/fields/coordinate.d.ts.map +1 -0
  145. package/dest/fields/coordinate.js +96 -0
  146. package/dest/fields/fields.d.ts +176 -0
  147. package/dest/fields/fields.d.ts.map +1 -0
  148. package/dest/fields/fields.js +383 -0
  149. package/dest/fields/index.d.ts +4 -0
  150. package/dest/fields/index.d.ts.map +1 -0
  151. package/dest/fields/index.js +3 -0
  152. package/dest/fields/point.d.ts +175 -0
  153. package/dest/fields/point.d.ts.map +1 -0
  154. package/dest/fields/point.js +260 -0
  155. package/dest/fs/index.d.ts +2 -0
  156. package/dest/fs/index.d.ts.map +1 -0
  157. package/dest/fs/index.js +1 -0
  158. package/dest/fs/run_in_dir.d.ts +2 -0
  159. package/dest/fs/run_in_dir.d.ts.map +1 -0
  160. package/dest/fs/run_in_dir.js +31 -0
  161. package/dest/index.d.ts +31 -0
  162. package/dest/index.d.ts.map +1 -0
  163. package/dest/index.js +31 -0
  164. package/dest/iterable/all.d.ts +9 -0
  165. package/dest/iterable/all.d.ts.map +1 -0
  166. package/dest/iterable/all.js +18 -0
  167. package/dest/iterable/filter.d.ts +10 -0
  168. package/dest/iterable/filter.d.ts.map +1 -0
  169. package/dest/iterable/filter.js +48 -0
  170. package/dest/iterable/index.d.ts +8 -0
  171. package/dest/iterable/index.d.ts.map +1 -0
  172. package/dest/iterable/index.js +7 -0
  173. package/dest/iterable/isAsyncIt.d.ts +7 -0
  174. package/dest/iterable/isAsyncIt.d.ts.map +1 -0
  175. package/dest/iterable/isAsyncIt.js +7 -0
  176. package/dest/iterable/map.d.ts +12 -0
  177. package/dest/iterable/map.d.ts.map +1 -0
  178. package/dest/iterable/map.js +36 -0
  179. package/dest/iterable/peek.d.ts +19 -0
  180. package/dest/iterable/peek.d.ts.map +1 -0
  181. package/dest/iterable/peek.js +33 -0
  182. package/dest/iterable/sort.d.ts +14 -0
  183. package/dest/iterable/sort.d.ts.map +1 -0
  184. package/dest/iterable/sort.js +15 -0
  185. package/dest/iterable/take.d.ts +10 -0
  186. package/dest/iterable/take.d.ts.map +1 -0
  187. package/dest/iterable/take.js +32 -0
  188. package/dest/iterable/toArray.d.ts +2 -0
  189. package/dest/iterable/toArray.d.ts.map +1 -0
  190. package/dest/iterable/toArray.js +7 -0
  191. package/dest/jest/setup.js +7 -0
  192. package/dest/json-rpc/client/fetch.d.ts +32 -0
  193. package/dest/json-rpc/client/fetch.d.ts.map +1 -0
  194. package/dest/json-rpc/client/fetch.js +77 -0
  195. package/dest/json-rpc/client/index.d.ts +3 -0
  196. package/dest/json-rpc/client/index.d.ts.map +1 -0
  197. package/dest/json-rpc/client/index.js +2 -0
  198. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +26 -0
  199. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
  200. package/dest/json-rpc/client/safe_json_rpc_client.js +57 -0
  201. package/dest/json-rpc/client/undici.d.ts +5 -0
  202. package/dest/json-rpc/client/undici.d.ts.map +1 -0
  203. package/dest/json-rpc/client/undici.js +63 -0
  204. package/dest/json-rpc/convert.d.ts +27 -0
  205. package/dest/json-rpc/convert.d.ts.map +1 -0
  206. package/dest/json-rpc/convert.js +48 -0
  207. package/dest/json-rpc/fixtures/class_a.d.ts +11 -0
  208. package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -0
  209. package/dest/json-rpc/fixtures/class_a.js +20 -0
  210. package/dest/json-rpc/fixtures/class_b.d.ts +11 -0
  211. package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -0
  212. package/dest/json-rpc/fixtures/class_b.js +20 -0
  213. package/dest/json-rpc/fixtures/test_state.d.ts +89 -0
  214. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
  215. package/dest/json-rpc/fixtures/test_state.js +131 -0
  216. package/dest/json-rpc/index.d.ts +2 -0
  217. package/dest/json-rpc/index.d.ts.map +1 -0
  218. package/dest/json-rpc/index.js +1 -0
  219. package/dest/json-rpc/js_utils.d.ts +13 -0
  220. package/dest/json-rpc/js_utils.d.ts.map +1 -0
  221. package/dest/json-rpc/js_utils.js +16 -0
  222. package/dest/json-rpc/server/index.d.ts +2 -0
  223. package/dest/json-rpc/server/index.d.ts.map +1 -0
  224. package/dest/json-rpc/server/index.js +1 -0
  225. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +140 -0
  226. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
  227. package/dest/json-rpc/server/safe_json_rpc_server.js +346 -0
  228. package/dest/json-rpc/server/telemetry.d.ts +2 -0
  229. package/dest/json-rpc/server/telemetry.d.ts.map +1 -0
  230. package/dest/json-rpc/server/telemetry.js +0 -0
  231. package/dest/json-rpc/test/index.d.ts +2 -0
  232. package/dest/json-rpc/test/index.d.ts.map +1 -0
  233. package/dest/json-rpc/test/index.js +1 -0
  234. package/dest/json-rpc/test/integration.d.ts +15 -0
  235. package/dest/json-rpc/test/integration.d.ts.map +1 -0
  236. package/dest/json-rpc/test/integration.js +21 -0
  237. package/dest/log/console.d.ts +11 -0
  238. package/dest/log/console.d.ts.map +1 -0
  239. package/dest/log/console.js +36 -0
  240. package/dest/log/debug.d.ts +56 -0
  241. package/dest/log/debug.d.ts.map +1 -0
  242. package/dest/log/debug.js +75 -0
  243. package/dest/log/gcloud-logger-config.d.ts +14 -0
  244. package/dest/log/gcloud-logger-config.d.ts.map +1 -0
  245. package/dest/log/gcloud-logger-config.js +66 -0
  246. package/dest/log/index.d.ts +7 -0
  247. package/dest/log/index.d.ts.map +1 -0
  248. package/dest/log/index.js +6 -0
  249. package/dest/log/libp2p_logger.d.ts +7 -0
  250. package/dest/log/libp2p_logger.d.ts.map +1 -0
  251. package/dest/log/libp2p_logger.js +55 -0
  252. package/dest/log/log-filters.d.ts +7 -0
  253. package/dest/log/log-filters.d.ts.map +1 -0
  254. package/dest/log/log-filters.js +59 -0
  255. package/dest/log/log-levels.d.ts +3 -0
  256. package/dest/log/log-levels.d.ts.map +1 -0
  257. package/dest/log/log-levels.js +10 -0
  258. package/dest/log/log_fn.d.ts +7 -0
  259. package/dest/log/log_fn.d.ts.map +1 -0
  260. package/dest/log/log_fn.js +1 -0
  261. package/dest/log/log_history.d.ts +31 -0
  262. package/dest/log/log_history.d.ts.map +1 -0
  263. package/dest/log/log_history.js +38 -0
  264. package/dest/log/pino-logger.d.ts +57 -0
  265. package/dest/log/pino-logger.d.ts.map +1 -0
  266. package/dest/log/pino-logger.js +207 -0
  267. package/dest/message/index.d.ts +32 -0
  268. package/dest/message/index.d.ts.map +1 -0
  269. package/dest/message/index.js +27 -0
  270. package/dest/mutex/index.d.ts +53 -0
  271. package/dest/mutex/index.d.ts.map +1 -0
  272. package/dest/mutex/index.js +78 -0
  273. package/dest/mutex/mutex_database.d.ts +10 -0
  274. package/dest/mutex/mutex_database.d.ts.map +1 -0
  275. package/dest/mutex/mutex_database.js +4 -0
  276. package/dest/noir/index.d.ts +2 -0
  277. package/dest/noir/index.d.ts.map +1 -0
  278. package/dest/noir/index.js +1 -0
  279. package/dest/noir/noir_package_config.d.ts +129 -0
  280. package/dest/noir/noir_package_config.d.ts.map +1 -0
  281. package/dest/noir/noir_package_config.js +36 -0
  282. package/dest/promise/index.d.ts +3 -0
  283. package/dest/promise/index.d.ts.map +1 -0
  284. package/dest/promise/index.js +2 -0
  285. package/dest/promise/running-promise.d.ts +47 -0
  286. package/dest/promise/running-promise.d.ts.map +1 -0
  287. package/dest/promise/running-promise.js +110 -0
  288. package/dest/promise/utils.d.ts +12 -0
  289. package/dest/promise/utils.d.ts.map +1 -0
  290. package/dest/promise/utils.js +20 -0
  291. package/dest/queue/base_memory_queue.d.ts +65 -0
  292. package/dest/queue/base_memory_queue.d.ts.map +1 -0
  293. package/dest/queue/base_memory_queue.js +116 -0
  294. package/dest/queue/batch_queue.d.ts +47 -0
  295. package/dest/queue/batch_queue.d.ts.map +1 -0
  296. package/dest/queue/batch_queue.js +105 -0
  297. package/dest/queue/bounded_serial_queue.d.ts +56 -0
  298. package/dest/queue/bounded_serial_queue.d.ts.map +1 -0
  299. package/dest/queue/bounded_serial_queue.js +84 -0
  300. package/dest/queue/fifo_memory_queue.d.ts +21 -0
  301. package/dest/queue/fifo_memory_queue.d.ts.map +1 -0
  302. package/dest/queue/fifo_memory_queue.js +29 -0
  303. package/dest/queue/index.d.ts +7 -0
  304. package/dest/queue/index.d.ts.map +1 -0
  305. package/dest/queue/index.js +6 -0
  306. package/dest/queue/priority_memory_queue.d.ts +13 -0
  307. package/dest/queue/priority_memory_queue.d.ts.map +1 -0
  308. package/dest/queue/priority_memory_queue.js +16 -0
  309. package/dest/queue/priority_queue.d.ts +14 -0
  310. package/dest/queue/priority_queue.d.ts.map +1 -0
  311. package/dest/queue/priority_queue.js +29 -0
  312. package/dest/queue/semaphore.d.ts +23 -0
  313. package/dest/queue/semaphore.d.ts.map +1 -0
  314. package/dest/queue/semaphore.js +26 -0
  315. package/dest/queue/serial_queue.d.ts +49 -0
  316. package/dest/queue/serial_queue.d.ts.map +1 -0
  317. package/dest/queue/serial_queue.js +72 -0
  318. package/dest/retry/index.d.ts +44 -0
  319. package/dest/retry/index.d.ts.map +1 -0
  320. package/dest/retry/index.js +93 -0
  321. package/dest/running-promise/index.d.ts +2 -0
  322. package/dest/running-promise/index.d.ts.map +1 -0
  323. package/dest/running-promise/index.js +1 -0
  324. package/dest/schemas/api.d.ts +21 -0
  325. package/dest/schemas/api.d.ts.map +1 -0
  326. package/dest/schemas/api.js +3 -0
  327. package/dest/schemas/index.d.ts +6 -0
  328. package/dest/schemas/index.d.ts.map +1 -0
  329. package/dest/schemas/index.js +5 -0
  330. package/dest/schemas/parse.d.ts +9 -0
  331. package/dest/schemas/parse.d.ts.map +1 -0
  332. package/dest/schemas/parse.js +22 -0
  333. package/dest/schemas/schemas.d.ts +45 -0
  334. package/dest/schemas/schemas.d.ts.map +1 -0
  335. package/dest/schemas/schemas.js +38 -0
  336. package/dest/schemas/types.d.ts +3 -0
  337. package/dest/schemas/types.d.ts.map +1 -0
  338. package/dest/schemas/types.js +1 -0
  339. package/dest/schemas/utils.d.ts +53 -0
  340. package/dest/schemas/utils.d.ts.map +1 -0
  341. package/dest/schemas/utils.js +60 -0
  342. package/dest/serialize/buffer_reader.d.ts +239 -0
  343. package/dest/serialize/buffer_reader.d.ts.map +1 -0
  344. package/dest/serialize/buffer_reader.js +290 -0
  345. package/dest/serialize/field_reader.d.ts +112 -0
  346. package/dest/serialize/field_reader.d.ts.map +1 -0
  347. package/dest/serialize/field_reader.js +147 -0
  348. package/dest/serialize/free_funcs.d.ts +105 -0
  349. package/dest/serialize/free_funcs.d.ts.map +1 -0
  350. package/dest/serialize/free_funcs.js +189 -0
  351. package/dest/serialize/index.d.ts +7 -0
  352. package/dest/serialize/index.d.ts.map +1 -0
  353. package/dest/serialize/index.js +6 -0
  354. package/dest/serialize/serialize.d.ts +182 -0
  355. package/dest/serialize/serialize.d.ts.map +1 -0
  356. package/dest/serialize/serialize.js +248 -0
  357. package/dest/serialize/type_registry.d.ts +23 -0
  358. package/dest/serialize/type_registry.d.ts.map +1 -0
  359. package/dest/serialize/type_registry.js +61 -0
  360. package/dest/serialize/types.d.ts +33 -0
  361. package/dest/serialize/types.d.ts.map +1 -0
  362. package/dest/serialize/types.js +21 -0
  363. package/dest/sleep/index.d.ts +51 -0
  364. package/dest/sleep/index.d.ts.map +1 -0
  365. package/dest/sleep/index.js +67 -0
  366. package/dest/string/index.d.ts +11 -0
  367. package/dest/string/index.d.ts.map +1 -0
  368. package/dest/string/index.js +24 -0
  369. package/dest/testing/files/index.d.ts +20 -0
  370. package/dest/testing/files/index.d.ts.map +1 -0
  371. package/dest/testing/files/index.js +58 -0
  372. package/dest/testing/index.d.ts +4 -0
  373. package/dest/testing/index.d.ts.map +1 -0
  374. package/dest/testing/index.js +3 -0
  375. package/dest/testing/port_allocator.d.ts +10 -0
  376. package/dest/testing/port_allocator.d.ts.map +1 -0
  377. package/dest/testing/port_allocator.js +29 -0
  378. package/dest/testing/snapshot_serializer.d.ts +5 -0
  379. package/dest/testing/snapshot_serializer.d.ts.map +1 -0
  380. package/dest/testing/snapshot_serializer.js +32 -0
  381. package/dest/testing/test_data.d.ts +7 -0
  382. package/dest/testing/test_data.d.ts.map +1 -0
  383. package/dest/testing/test_data.js +29 -0
  384. package/dest/timer/date.d.ts +13 -0
  385. package/dest/timer/date.d.ts.map +1 -0
  386. package/dest/timer/date.js +24 -0
  387. package/dest/timer/elapsed.d.ts +13 -0
  388. package/dest/timer/elapsed.d.ts.map +1 -0
  389. package/dest/timer/elapsed.js +25 -0
  390. package/dest/timer/index.d.ts +5 -0
  391. package/dest/timer/index.d.ts.map +1 -0
  392. package/dest/timer/index.js +4 -0
  393. package/dest/timer/timeout.d.ts +41 -0
  394. package/dest/timer/timeout.d.ts.map +1 -0
  395. package/dest/timer/timeout.js +66 -0
  396. package/dest/timer/timer.d.ts +37 -0
  397. package/dest/timer/timer.d.ts.map +1 -0
  398. package/dest/timer/timer.js +40 -0
  399. package/dest/transport/browser/index.d.ts +5 -0
  400. package/dest/transport/browser/index.d.ts.map +1 -0
  401. package/dest/transport/browser/index.js +4 -0
  402. package/dest/transport/browser/message_port_socket.d.ts +37 -0
  403. package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
  404. package/dest/transport/browser/message_port_socket.js +42 -0
  405. package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
  406. package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
  407. package/dest/transport/browser/shared_worker_connector.js +19 -0
  408. package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
  409. package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
  410. package/dest/transport/browser/shared_worker_listener.js +33 -0
  411. package/dest/transport/browser/worker_connector.d.ts +26 -0
  412. package/dest/transport/browser/worker_connector.d.ts.map +1 -0
  413. package/dest/transport/browser/worker_connector.js +30 -0
  414. package/dest/transport/browser/worker_listener.d.ts +39 -0
  415. package/dest/transport/browser/worker_listener.d.ts.map +1 -0
  416. package/dest/transport/browser/worker_listener.js +35 -0
  417. package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
  418. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
  419. package/dest/transport/dispatch/create_dispatch_fn.js +17 -0
  420. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
  421. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
  422. package/dest/transport/dispatch/create_dispatch_proxy.js +59 -0
  423. package/dest/transport/dispatch/messages.d.ts +52 -0
  424. package/dest/transport/dispatch/messages.d.ts.map +1 -0
  425. package/dest/transport/dispatch/messages.js +13 -0
  426. package/dest/transport/index.d.ts +12 -0
  427. package/dest/transport/index.d.ts.map +1 -0
  428. package/dest/transport/index.js +11 -0
  429. package/dest/transport/interface/connector.d.ts +8 -0
  430. package/dest/transport/interface/connector.d.ts.map +1 -0
  431. package/dest/transport/interface/connector.js +3 -0
  432. package/dest/transport/interface/listener.d.ts +13 -0
  433. package/dest/transport/interface/listener.d.ts.map +1 -0
  434. package/dest/transport/interface/listener.js +4 -0
  435. package/dest/transport/interface/socket.d.ts +13 -0
  436. package/dest/transport/interface/socket.d.ts.map +1 -0
  437. package/dest/transport/interface/socket.js +7 -0
  438. package/dest/transport/interface/transferable.d.ts +68 -0
  439. package/dest/transport/interface/transferable.d.ts.map +1 -0
  440. package/dest/transport/interface/transferable.js +63 -0
  441. package/dest/transport/node/index.d.ts +3 -0
  442. package/dest/transport/node/index.d.ts.map +1 -0
  443. package/dest/transport/node/index.js +2 -0
  444. package/dest/transport/node/node_connector.d.ts +28 -0
  445. package/dest/transport/node/node_connector.d.ts.map +1 -0
  446. package/dest/transport/node/node_connector.js +26 -0
  447. package/dest/transport/node/node_connector_socket.d.ts +42 -0
  448. package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
  449. package/dest/transport/node/node_connector_socket.js +44 -0
  450. package/dest/transport/node/node_listener.d.ts +26 -0
  451. package/dest/transport/node/node_listener.d.ts.map +1 -0
  452. package/dest/transport/node/node_listener.js +26 -0
  453. package/dest/transport/node/node_listener_socket.d.ts +37 -0
  454. package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
  455. package/dest/transport/node/node_listener_socket.js +40 -0
  456. package/dest/transport/transport_client.d.ts +61 -0
  457. package/dest/transport/transport_client.d.ts.map +1 -0
  458. package/dest/transport/transport_client.js +96 -0
  459. package/dest/transport/transport_server.d.ts +56 -0
  460. package/dest/transport/transport_server.d.ts.map +1 -0
  461. package/dest/transport/transport_server.js +114 -0
  462. package/dest/trees/hasher.d.ts +39 -0
  463. package/dest/trees/hasher.d.ts.map +1 -0
  464. package/dest/trees/hasher.js +5 -0
  465. package/dest/trees/index.d.ts +11 -0
  466. package/dest/trees/index.d.ts.map +1 -0
  467. package/dest/trees/index.js +10 -0
  468. package/dest/trees/indexed_merkle_tree.d.ts +13 -0
  469. package/dest/trees/indexed_merkle_tree.d.ts.map +1 -0
  470. package/dest/trees/indexed_merkle_tree.js +27 -0
  471. package/dest/trees/indexed_merkle_tree_calculator.d.ts +23 -0
  472. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -0
  473. package/dest/trees/indexed_merkle_tree_calculator.js +83 -0
  474. package/dest/trees/indexed_tree_leaf.d.ts +57 -0
  475. package/dest/trees/indexed_tree_leaf.d.ts.map +1 -0
  476. package/dest/trees/indexed_tree_leaf.js +5 -0
  477. package/dest/trees/membership_witness.d.ts +62 -0
  478. package/dest/trees/membership_witness.d.ts.map +1 -0
  479. package/dest/trees/membership_witness.js +70 -0
  480. package/dest/trees/merkle_tree.d.ts +18 -0
  481. package/dest/trees/merkle_tree.d.ts.map +1 -0
  482. package/dest/trees/merkle_tree.js +58 -0
  483. package/dest/trees/merkle_tree_calculator.d.ts +16 -0
  484. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -0
  485. package/dest/trees/merkle_tree_calculator.js +61 -0
  486. package/dest/trees/sibling_path.d.ts +132 -0
  487. package/dest/trees/sibling_path.d.ts.map +1 -0
  488. package/dest/trees/sibling_path.js +144 -0
  489. package/dest/trees/unbalanced_merkle_tree.d.ts +17 -0
  490. package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -0
  491. package/dest/trees/unbalanced_merkle_tree.js +100 -0
  492. package/dest/trees/unbalanced_tree_store.d.ts +19 -0
  493. package/dest/trees/unbalanced_tree_store.d.ts.map +1 -0
  494. package/dest/trees/unbalanced_tree_store.js +94 -0
  495. package/dest/types/index.d.ts +19 -0
  496. package/dest/types/index.d.ts.map +1 -0
  497. package/dest/types/index.js +3 -0
  498. package/dest/url/index.d.ts +9 -0
  499. package/dest/url/index.d.ts.map +1 -0
  500. package/dest/url/index.js +62 -0
  501. package/dest/validation/index.d.ts +9 -0
  502. package/dest/validation/index.d.ts.map +1 -0
  503. package/dest/validation/index.js +15 -0
  504. package/dest/wasm/empty_wasi_sdk.d.ts +130 -0
  505. package/dest/wasm/empty_wasi_sdk.d.ts.map +1 -0
  506. package/dest/wasm/empty_wasi_sdk.js +148 -0
  507. package/dest/wasm/index.d.ts +2 -0
  508. package/dest/wasm/index.d.ts.map +1 -0
  509. package/dest/wasm/index.js +1 -0
  510. package/dest/wasm/wasm_module.d.ts +136 -0
  511. package/dest/wasm/wasm_module.d.ts.map +1 -0
  512. package/dest/wasm/wasm_module.js +196 -0
  513. package/dest/worker/browser/index.d.ts +3 -0
  514. package/dest/worker/browser/index.d.ts.map +1 -0
  515. package/dest/worker/browser/index.js +2 -0
  516. package/dest/worker/browser/start_web_module.d.ts +7 -0
  517. package/dest/worker/browser/start_web_module.d.ts.map +1 -0
  518. package/dest/worker/browser/start_web_module.js +27 -0
  519. package/dest/worker/browser/web_data_store.d.ts +24 -0
  520. package/dest/worker/browser/web_data_store.d.ts.map +1 -0
  521. package/dest/worker/browser/web_data_store.js +29 -0
  522. package/dest/worker/browser/web_worker.d.ts +10 -0
  523. package/dest/worker/browser/web_worker.d.ts.map +1 -0
  524. package/dest/worker/browser/web_worker.js +25 -0
  525. package/dest/worker/data_store.d.ts +21 -0
  526. package/dest/worker/data_store.d.ts.map +1 -0
  527. package/dest/worker/data_store.js +3 -0
  528. package/dest/worker/index.d.ts +3 -0
  529. package/dest/worker/index.d.ts.map +1 -0
  530. package/dest/worker/index.js +1 -0
  531. package/dest/worker/node/index.d.ts +3 -0
  532. package/dest/worker/node/index.d.ts.map +1 -0
  533. package/dest/worker/node/index.js +2 -0
  534. package/dest/worker/node/node_data_store.d.ts +13 -0
  535. package/dest/worker/node/node_data_store.d.ts.map +1 -0
  536. package/dest/worker/node/node_data_store.js +20 -0
  537. package/dest/worker/node/node_worker.d.ts +6 -0
  538. package/dest/worker/node/node_worker.d.ts.map +1 -0
  539. package/dest/worker/node/node_worker.js +22 -0
  540. package/dest/worker/node/start_node_module.d.ts +7 -0
  541. package/dest/worker/node/start_node_module.d.ts.map +1 -0
  542. package/dest/worker/node/start_node_module.js +31 -0
  543. package/dest/worker/wasm_worker.d.ts +9 -0
  544. package/dest/worker/wasm_worker.d.ts.map +1 -0
  545. package/dest/worker/wasm_worker.js +3 -0
  546. package/dest/worker/worker_pool.d.ts +40 -0
  547. package/dest/worker/worker_pool.d.ts.map +1 -0
  548. package/dest/worker/worker_pool.js +51 -0
  549. package/package.json +176 -0
  550. package/src/array/array.ts +150 -0
  551. package/src/array/index.ts +1 -0
  552. package/src/async-map/index.ts +18 -0
  553. package/src/async-pool/index.ts +50 -0
  554. package/src/bigint-buffer/index.ts +87 -0
  555. package/src/buffer/buffer32.ts +144 -0
  556. package/src/buffer/index.ts +1 -0
  557. package/src/collection/array.ts +203 -0
  558. package/src/collection/index.ts +2 -0
  559. package/src/collection/object.ts +52 -0
  560. package/src/committable/committable.ts +46 -0
  561. package/src/committable/index.ts +1 -0
  562. package/src/config/env_var.ts +207 -0
  563. package/src/config/index.ts +167 -0
  564. package/src/crypto/aes128/index.ts +59 -0
  565. package/src/crypto/ecdsa/index.ts +70 -0
  566. package/src/crypto/ecdsa/signature.ts +100 -0
  567. package/src/crypto/grumpkin/index.ts +97 -0
  568. package/src/crypto/index.ts +14 -0
  569. package/src/crypto/keccak/index.ts +283 -0
  570. package/src/crypto/keys/index.ts +10 -0
  571. package/src/crypto/pedersen/index.ts +1 -0
  572. package/src/crypto/pedersen/pedersen.elliptic.ts +584 -0
  573. package/src/crypto/pedersen/pedersen.noble.ts +573 -0
  574. package/src/crypto/pedersen/pedersen.wasm.ts +48 -0
  575. package/src/crypto/poseidon/index.ts +77 -0
  576. package/src/crypto/random/index.ts +85 -0
  577. package/src/crypto/random/randomness_singleton.ts +62 -0
  578. package/src/crypto/schnorr/index.ts +55 -0
  579. package/src/crypto/schnorr/signature.ts +116 -0
  580. package/src/crypto/secp256k1/index.ts +57 -0
  581. package/src/crypto/secp256k1-signer/index.ts +2 -0
  582. package/src/crypto/secp256k1-signer/secp256k1_signer.ts +38 -0
  583. package/src/crypto/secp256k1-signer/utils.ts +99 -0
  584. package/src/crypto/serialize.ts +85 -0
  585. package/src/crypto/sha256/index.ts +147 -0
  586. package/src/crypto/sha512/index.ts +16 -0
  587. package/src/crypto/signature/index.ts +17 -0
  588. package/src/crypto/sync/index.ts +6 -0
  589. package/src/crypto/sync/pedersen/index.ts +45 -0
  590. package/src/crypto/sync/poseidon/index.ts +76 -0
  591. package/src/decorators/index.ts +1 -0
  592. package/src/decorators/memoize.ts +11 -0
  593. package/src/error/index.ts +22 -0
  594. package/src/eth-address/index.ts +241 -0
  595. package/src/eth-signature/eth_signature.ts +128 -0
  596. package/src/eth-signature/index.ts +1 -0
  597. package/src/fields/coordinate.ts +104 -0
  598. package/src/fields/fields.ts +505 -0
  599. package/src/fields/index.ts +3 -0
  600. package/src/fields/point.ts +300 -0
  601. package/src/fs/index.ts +1 -0
  602. package/src/fs/run_in_dir.ts +33 -0
  603. package/src/index.ts +31 -0
  604. package/src/iterable/all.ts +32 -0
  605. package/src/iterable/filter.ts +77 -0
  606. package/src/iterable/index.ts +7 -0
  607. package/src/iterable/isAsyncIt.ts +8 -0
  608. package/src/iterable/map.ts +66 -0
  609. package/src/iterable/peek.ts +58 -0
  610. package/src/iterable/sort.ts +39 -0
  611. package/src/iterable/take.ts +54 -0
  612. package/src/iterable/toArray.ts +9 -0
  613. package/src/jest/setup.mjs +9 -0
  614. package/src/json-rpc/README.md +55 -0
  615. package/src/json-rpc/client/fetch.ts +103 -0
  616. package/src/json-rpc/client/index.ts +2 -0
  617. package/src/json-rpc/client/safe_json_rpc_client.ts +67 -0
  618. package/src/json-rpc/client/undici.ts +75 -0
  619. package/src/json-rpc/convert.ts +61 -0
  620. package/src/json-rpc/fixtures/class_a.ts +15 -0
  621. package/src/json-rpc/fixtures/class_b.ts +15 -0
  622. package/src/json-rpc/fixtures/test_state.ts +143 -0
  623. package/src/json-rpc/index.ts +1 -0
  624. package/src/json-rpc/js_utils.ts +21 -0
  625. package/src/json-rpc/server/index.ts +1 -0
  626. package/src/json-rpc/server/safe_json_rpc_server.ts +376 -0
  627. package/src/json-rpc/server/telemetry.ts +0 -0
  628. package/src/json-rpc/test/index.ts +1 -0
  629. package/src/json-rpc/test/integration.ts +35 -0
  630. package/src/log/console.ts +39 -0
  631. package/src/log/debug.ts +104 -0
  632. package/src/log/gcloud-logger-config.ts +71 -0
  633. package/src/log/index.ts +6 -0
  634. package/src/log/libp2p_logger.ts +67 -0
  635. package/src/log/log-filters.ts +63 -0
  636. package/src/log/log-levels.ts +3 -0
  637. package/src/log/log_fn.ts +5 -0
  638. package/src/log/log_history.ts +44 -0
  639. package/src/log/pino-logger.ts +243 -0
  640. package/src/message/index.ts +43 -0
  641. package/src/mutex/index.ts +84 -0
  642. package/src/mutex/mutex_database.ts +12 -0
  643. package/src/noir/index.ts +1 -0
  644. package/src/noir/noir_package_config.ts +54 -0
  645. package/src/promise/index.ts +2 -0
  646. package/src/promise/running-promise.ts +125 -0
  647. package/src/promise/utils.ts +29 -0
  648. package/src/queue/base_memory_queue.ts +138 -0
  649. package/src/queue/batch_queue.ts +120 -0
  650. package/src/queue/bounded_serial_queue.ts +100 -0
  651. package/src/queue/fifo_memory_queue.ts +39 -0
  652. package/src/queue/index.ts +6 -0
  653. package/src/queue/priority_memory_queue.ts +20 -0
  654. package/src/queue/priority_queue.ts +34 -0
  655. package/src/queue/semaphore.ts +33 -0
  656. package/src/queue/serial_queue.ts +86 -0
  657. package/src/retry/index.ts +100 -0
  658. package/src/running-promise/index.ts +1 -0
  659. package/src/schemas/api.ts +47 -0
  660. package/src/schemas/index.ts +5 -0
  661. package/src/schemas/parse.ts +29 -0
  662. package/src/schemas/schemas.ts +64 -0
  663. package/src/schemas/types.ts +3 -0
  664. package/src/schemas/utils.ts +112 -0
  665. package/src/serialize/buffer_reader.ts +383 -0
  666. package/src/serialize/field_reader.ts +184 -0
  667. package/src/serialize/free_funcs.ts +204 -0
  668. package/src/serialize/index.ts +6 -0
  669. package/src/serialize/serialize.ts +336 -0
  670. package/src/serialize/type_registry.ts +75 -0
  671. package/src/serialize/types.ts +40 -0
  672. package/src/sleep/index.ts +75 -0
  673. package/src/string/index.ts +31 -0
  674. package/src/testing/files/index.ts +69 -0
  675. package/src/testing/index.ts +3 -0
  676. package/src/testing/port_allocator.ts +31 -0
  677. package/src/testing/snapshot_serializer.ts +33 -0
  678. package/src/testing/test_data.ts +36 -0
  679. package/src/timer/date.ts +24 -0
  680. package/src/timer/elapsed.ts +23 -0
  681. package/src/timer/index.ts +4 -0
  682. package/src/timer/timeout.ts +70 -0
  683. package/src/timer/timer.ts +48 -0
  684. package/src/transport/browser/index.ts +4 -0
  685. package/src/transport/browser/message_port_socket.ts +48 -0
  686. package/src/transport/browser/shared_worker_connector.ts +21 -0
  687. package/src/transport/browser/shared_worker_listener.ts +53 -0
  688. package/src/transport/browser/worker_connector.ts +30 -0
  689. package/src/transport/browser/worker_listener.ts +54 -0
  690. package/src/transport/dispatch/create_dispatch_fn.ts +35 -0
  691. package/src/transport/dispatch/create_dispatch_proxy.ts +141 -0
  692. package/src/transport/dispatch/messages.ts +58 -0
  693. package/src/transport/index.ts +11 -0
  694. package/src/transport/interface/connector.ts +9 -0
  695. package/src/transport/interface/listener.ts +16 -0
  696. package/src/transport/interface/socket.ts +15 -0
  697. package/src/transport/interface/transferable.ts +125 -0
  698. package/src/transport/node/index.ts +2 -0
  699. package/src/transport/node/node_connector.ts +30 -0
  700. package/src/transport/node/node_connector_socket.ts +52 -0
  701. package/src/transport/node/node_listener.ts +34 -0
  702. package/src/transport/node/node_listener_socket.ts +48 -0
  703. package/src/transport/transport_client.ts +131 -0
  704. package/src/transport/transport_server.ts +108 -0
  705. package/src/trees/hasher.ts +39 -0
  706. package/src/trees/index.ts +10 -0
  707. package/src/trees/indexed_merkle_tree.ts +36 -0
  708. package/src/trees/indexed_merkle_tree_calculator.ts +94 -0
  709. package/src/trees/indexed_tree_leaf.ts +56 -0
  710. package/src/trees/membership_witness.ts +99 -0
  711. package/src/trees/merkle_tree.ts +72 -0
  712. package/src/trees/merkle_tree_calculator.ts +67 -0
  713. package/src/trees/sibling_path.ts +183 -0
  714. package/src/trees/unbalanced_merkle_tree.ts +103 -0
  715. package/src/trees/unbalanced_tree_store.ts +102 -0
  716. package/src/types/index.ts +25 -0
  717. package/src/url/index.ts +73 -0
  718. package/src/validation/index.ts +18 -0
  719. package/src/wasm/README.md +6 -0
  720. package/src/wasm/empty_wasi_sdk.ts +166 -0
  721. package/src/wasm/fixtures/gcd.wasm +0 -0
  722. package/src/wasm/fixtures/gcd.wat +27 -0
  723. package/src/wasm/index.ts +1 -0
  724. package/src/wasm/wasm_module.ts +260 -0
  725. package/src/worker/browser/index.ts +2 -0
  726. package/src/worker/browser/start_web_module.ts +24 -0
  727. package/src/worker/browser/web_data_store.ts +38 -0
  728. package/src/worker/browser/web_worker.ts +25 -0
  729. package/src/worker/data_store.ts +19 -0
  730. package/src/worker/index.ts +2 -0
  731. package/src/worker/node/index.ts +2 -0
  732. package/src/worker/node/node_data_store.ts +27 -0
  733. package/src/worker/node/node_worker.ts +23 -0
  734. package/src/worker/node/start_node_module.ts +30 -0
  735. package/src/worker/wasm_worker.ts +7 -0
  736. package/src/worker/worker_pool.ts +73 -0
@@ -0,0 +1,376 @@
1
+ import cors from '@koa/cors';
2
+ import http from 'http';
3
+ import { type default as Application, default as Koa } from 'koa';
4
+ import bodyParser from 'koa-bodyparser';
5
+ import compress from 'koa-compress';
6
+ import Router from 'koa-router';
7
+ import type { AddressInfo } from 'net';
8
+ import { format, inspect } from 'util';
9
+ import { ZodError } from 'zod';
10
+
11
+ import { type Logger, createLogger } from '../../log/index.js';
12
+ import { promiseWithResolvers } from '../../promise/utils.js';
13
+ import { type ApiSchema, type ApiSchemaFor, parseWithOptionals, schemaHasMethod } from '../../schemas/index.js';
14
+ import { jsonStringify } from '../convert.js';
15
+ import { assert } from '../js_utils.js';
16
+
17
+ export type DiagnosticsData = {
18
+ id: number | string | null;
19
+ method: string;
20
+ params: any[];
21
+ headers: http.IncomingHttpHeaders;
22
+ };
23
+
24
+ export type DiagnosticsMiddleware = (ctx: DiagnosticsData, next: () => Promise<void>) => Promise<void>;
25
+
26
+ export class SafeJsonRpcServer {
27
+ /**
28
+ * The HTTP server accepting remote requests.
29
+ * This member field is initialized when the server is started.
30
+ */
31
+ private httpServer?: http.Server;
32
+
33
+ constructor(
34
+ /** The proxy object to delegate requests to. */
35
+ 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,
41
+ /** Health check function */
42
+ private readonly healthCheck: StatusCheckFn = () => true,
43
+ /** Additional middlewares */
44
+ private extraMiddlewares: Application.Middleware[] = [],
45
+ /** Logger */
46
+ private log = createLogger('json-rpc:server'),
47
+ ) {}
48
+
49
+ public isHealthy(): boolean | Promise<boolean> {
50
+ return this.healthCheck();
51
+ }
52
+
53
+ /**
54
+ * Get an express app object.
55
+ * @param prefix - Our server prefix.
56
+ * @returns The app object.
57
+ */
58
+ public getApp(prefix = '') {
59
+ const router = this.getRouter(prefix);
60
+
61
+ const exceptionHandler = async (ctx: Koa.Context, next: () => Promise<void>) => {
62
+ try {
63
+ await next();
64
+ } catch (err: any) {
65
+ 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) {
68
+ 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';
72
+ 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
+ };
80
+ } else {
81
+ ctx.status = 500;
82
+ ctx.body = { jsonrpc: '2.0', id: null, error: { code: -32600, message: err.message ?? 'Internal error' } };
83
+ }
84
+ }
85
+ };
86
+
87
+ const jsonResponse = async (ctx: Koa.Context, next: () => Promise<void>) => {
88
+ try {
89
+ await next();
90
+ if (ctx.body && typeof ctx.body === 'object') {
91
+ ctx.body = jsonStringify(ctx.body);
92
+ }
93
+ } catch (err: any) {
94
+ ctx.status = 500;
95
+ ctx.body = { jsonrpc: '2.0', error: { code: -32700, message: `Unable to serialize response: ${err.message}` } };
96
+ }
97
+ };
98
+
99
+ const app = new Koa();
100
+ app.on('error', error => {
101
+ this.log.error(`Error on API handler: ${error}`);
102
+ });
103
+
104
+ app.use(compress({ br: false }));
105
+ app.use(jsonResponse);
106
+ for (const middleware of this.extraMiddlewares) {
107
+ app.use(middleware);
108
+ }
109
+ app.use(exceptionHandler);
110
+ app.use(bodyParser({ jsonLimit: '50mb', enableTypes: ['json'], detectJSON: () => true }));
111
+ app.use(cors());
112
+ app.use(router.routes());
113
+ app.use(router.allowedMethods());
114
+
115
+ return app;
116
+ }
117
+
118
+ /**
119
+ * Get a router object wrapping our RPC class.
120
+ * @param prefix - The server prefix.
121
+ * @returns The router object.
122
+ */
123
+ private getRouter(prefix: string) {
124
+ const router = new Router({ prefix });
125
+ // "JSON RPC mode" where a single endpoint is used and the method is given in the request body
126
+ 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 } };
134
+ } else {
135
+ ctx.status = 200;
136
+ const result = await this.proxy.call(method, params);
137
+ ctx.body = { jsonrpc, id, result };
138
+ }
139
+ });
140
+
141
+ return router;
142
+ }
143
+
144
+ /**
145
+ * Start this server with koa.
146
+ * @param port - Port number.
147
+ * @param prefix - Prefix string.
148
+ */
149
+ public start(port: number, prefix = ''): void {
150
+ if (this.httpServer) {
151
+ throw new Error('Server is already listening');
152
+ }
153
+
154
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
155
+ this.httpServer = http.createServer(this.getApp(prefix).callback());
156
+ this.httpServer.listen(port);
157
+ }
158
+
159
+ /**
160
+ * Stops the HTTP server
161
+ */
162
+ public stop(): Promise<void> {
163
+ if (!this.httpServer) {
164
+ return Promise.resolve();
165
+ }
166
+
167
+ const { promise, resolve, reject } = promiseWithResolvers<void>();
168
+ this.httpServer.close(err => {
169
+ if (err) {
170
+ reject(err);
171
+ } else {
172
+ resolve();
173
+ }
174
+ });
175
+ return promise;
176
+ }
177
+
178
+ /**
179
+ * Explicitly calls an RPC method.
180
+ * @param methodName - The RPC method.
181
+ * @param jsonParams - The RPC parameters.
182
+ * @returns The remote result.
183
+ */
184
+ public async call(methodName: string, jsonParams: any[] = []) {
185
+ return await this.proxy.call(methodName, jsonParams);
186
+ }
187
+ }
188
+
189
+ export type StatusCheckFn = () => boolean | Promise<boolean>;
190
+
191
+ interface Proxy {
192
+ hasMethod(methodName: string): boolean;
193
+ call(methodName: string, jsonParams?: any[]): Promise<any>;
194
+ }
195
+
196
+ /**
197
+ * Forwards calls to a handler. Relies on a schema definition to validate and convert inputs
198
+ * before forwarding calls, and then converts outputs into JSON using default conversions.
199
+ */
200
+ export class SafeJsonProxy<T extends object = any> implements Proxy {
201
+ private log = createLogger('json-rpc:proxy');
202
+ private schema: ApiSchema;
203
+
204
+ constructor(private handler: T, schema: ApiSchemaFor<T>) {
205
+ this.schema = schema;
206
+ }
207
+
208
+ /**
209
+ * Call an RPC method.
210
+ * @param methodName - The RPC method.
211
+ * @param jsonParams - The RPC parameters.
212
+ * @returns The remote result.
213
+ */
214
+ public async call(methodName: string, jsonParams: any[] = []) {
215
+ this.log.debug(format(`request`, methodName, jsonParams));
216
+
217
+ assert(Array.isArray(jsonParams), `Params to ${methodName} is not an array: ${jsonParams}`);
218
+ assert(schemaHasMethod(this.schema, methodName), `Method ${methodName} not found in schema`);
219
+ const method = this.handler[methodName as keyof T];
220
+ assert(typeof method === 'function', `Method ${methodName} is not a function`);
221
+ const args = await parseWithOptionals(jsonParams, this.schema[methodName].parameters());
222
+ const ret = await method.apply(this.handler, args);
223
+ this.log.debug(format('response', methodName, ret));
224
+ return ret;
225
+ }
226
+
227
+ public hasMethod(methodName: string): boolean {
228
+ return schemaHasMethod(this.schema, methodName) && typeof this.handler[methodName as keyof T] === 'function';
229
+ }
230
+ }
231
+
232
+ class NamespacedSafeJsonProxy implements Proxy {
233
+ private readonly proxies: Record<string, Proxy> = {};
234
+
235
+ constructor(handlers: NamespacedApiHandlers) {
236
+ for (const [namespace, [handler, schema]] of Object.entries(handlers)) {
237
+ this.proxies[namespace] = new SafeJsonProxy(handler, schema);
238
+ }
239
+ }
240
+
241
+ public call(namespacedMethodName: string, jsonParams: any[] = []) {
242
+ const [namespace, methodName] = namespacedMethodName.split('_', 2);
243
+ assert(namespace && methodName, `Invalid namespaced method name: ${namespacedMethodName}`);
244
+ const handler = this.proxies[namespace];
245
+ assert(handler, `Namespace not found: ${namespace}`);
246
+ return handler.call(methodName, jsonParams);
247
+ }
248
+
249
+ public hasMethod(namespacedMethodName: string): boolean {
250
+ const [namespace, methodName] = namespacedMethodName.split('_', 2);
251
+ const handler = this.proxies[namespace];
252
+ return handler?.hasMethod(methodName);
253
+ }
254
+ }
255
+
256
+ export type NamespacedApiHandlers = Record<string, ApiHandler>;
257
+
258
+ export type ApiHandler<T extends object = any> = [T, ApiSchemaFor<T>, StatusCheckFn?];
259
+
260
+ export function makeHandler<T extends object>(handler: T, schema: ApiSchemaFor<T>): ApiHandler<T> {
261
+ return [handler, schema];
262
+ }
263
+
264
+ function makeAggregateHealthcheck(namedHandlers: NamespacedApiHandlers, log?: Logger): StatusCheckFn {
265
+ return async () => {
266
+ try {
267
+ const results = await Promise.all(
268
+ Object.entries(namedHandlers).map(([name, [, , healthCheck]]) => [name, healthCheck ? healthCheck() : true]),
269
+ );
270
+ const failed = results.filter(([_, result]) => !result);
271
+ if (failed.length > 0) {
272
+ log?.warn(`Health check failed for ${failed.map(([name]) => name).join(', ')}`);
273
+ return false;
274
+ }
275
+ return true;
276
+ } catch (err) {
277
+ log?.error(`Error during health check`, err);
278
+ return false;
279
+ }
280
+ };
281
+ }
282
+
283
+ export type SafeJsonRpcServerOptions = {
284
+ http200OnError: boolean;
285
+ healthCheck?: StatusCheckFn;
286
+ log?: Logger;
287
+ middlewares?: Application.Middleware[];
288
+ };
289
+
290
+ /**
291
+ * Creates a single SafeJsonRpcServer from multiple handlers.
292
+ * @param servers - List of handlers to be combined.
293
+ * @returns A single JsonRpcServer with namespaced methods.
294
+ */
295
+ export function createNamespacedSafeJsonRpcServer(
296
+ handlers: NamespacedApiHandlers,
297
+ options: Partial<Omit<SafeJsonRpcServerOptions, 'healthcheck'>> = {
298
+ log: createLogger('json-rpc:server'),
299
+ },
300
+ ): SafeJsonRpcServer {
301
+ const { middlewares, http200OnError, log } = options;
302
+ const proxy = new NamespacedSafeJsonProxy(handlers);
303
+ const healthCheck = makeAggregateHealthcheck(handlers, log);
304
+ return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, middlewares, log);
305
+ }
306
+
307
+ export function createSafeJsonRpcServer<T extends object = any>(
308
+ handler: T,
309
+ schema: ApiSchemaFor<T>,
310
+ options: Partial<SafeJsonRpcServerOptions> = {},
311
+ ) {
312
+ const { http200OnError, log, healthCheck, middlewares: extraMiddlewares } = options;
313
+ const proxy = new SafeJsonProxy(handler, schema);
314
+ return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, extraMiddlewares, log);
315
+ }
316
+
317
+ /**
318
+ * Creates a router for handling a plain status request that will return 200 status when running.
319
+ * @param getCurrentStatus - List of health check functions to run.
320
+ * @param apiPrefix - The prefix to use for all api requests
321
+ * @returns - The router for handling status requests.
322
+ */
323
+ export function createStatusRouter(getCurrentStatus: StatusCheckFn, apiPrefix = '') {
324
+ const router = new Router({ prefix: `${apiPrefix}` });
325
+ router.get('/status', async (ctx: Koa.Context) => {
326
+ let ok: boolean;
327
+ try {
328
+ ok = (await getCurrentStatus()) === true;
329
+ } catch (err) {
330
+ ok = false;
331
+ }
332
+
333
+ ctx.status = ok ? 200 : 500;
334
+ });
335
+ return router;
336
+ }
337
+
338
+ /**
339
+ * Wraps a JsonRpcServer in a nodejs http server and starts it.
340
+ * Installs a status router that calls to the isHealthy method to the server.
341
+ * Returns once starts listening unless noWait is set.
342
+ * @returns A running http server.
343
+ */
344
+ export async function startHttpRpcServer(
345
+ rpcServer: Pick<SafeJsonRpcServer, 'getApp' | 'isHealthy'>,
346
+ options: {
347
+ host?: string;
348
+ port?: number | string;
349
+ apiPrefix?: string;
350
+ timeoutMs?: number;
351
+ noWait?: boolean;
352
+ } = {},
353
+ ): Promise<http.Server & { port: number }> {
354
+ const app = rpcServer.getApp(options.apiPrefix);
355
+
356
+ const statusRouter = createStatusRouter(rpcServer.isHealthy.bind(rpcServer), options.apiPrefix);
357
+ app.use(statusRouter.routes()).use(statusRouter.allowedMethods());
358
+
359
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
360
+ const httpServer = http.createServer(app.callback());
361
+ if (options.timeoutMs) {
362
+ httpServer.timeout = options.timeoutMs;
363
+ }
364
+
365
+ const { promise, resolve } = promiseWithResolvers<void>();
366
+ const listenPort = options.port ? (typeof options.port === 'string' ? parseInt(options.port) : options.port) : 0;
367
+ httpServer.listen(listenPort, options.host, () => resolve());
368
+
369
+ // Wait until listen callback is called
370
+ if (!options.noWait) {
371
+ await promise;
372
+ }
373
+
374
+ const port = (httpServer.address() as AddressInfo).port;
375
+ return Object.assign(httpServer, { port });
376
+ }
File without changes
@@ -0,0 +1 @@
1
+ export { createJsonRpcTestSetup, type JsonRpcTestContext } from './integration.js';
@@ -0,0 +1,35 @@
1
+ import type http from 'http';
2
+
3
+ import type { ApiSchemaFor } from '../../schemas/api.js';
4
+ import { makeFetch } from '../client/fetch.js';
5
+ import { type SafeJsonRpcClientOptions, createSafeJsonRpcClient } from '../client/safe_json_rpc_client.js';
6
+ import {
7
+ type SafeJsonRpcServer,
8
+ type SafeJsonRpcServerOptions,
9
+ createSafeJsonRpcServer,
10
+ startHttpRpcServer,
11
+ } from '../server/safe_json_rpc_server.js';
12
+
13
+ export type JsonRpcTestContext<T extends object> = {
14
+ server: SafeJsonRpcServer;
15
+ client: T;
16
+ httpServer: http.Server & { port: number };
17
+ url: string;
18
+ };
19
+
20
+ export async function createJsonRpcTestSetup<T extends object>(
21
+ handler: T,
22
+ schema: ApiSchemaFor<T>,
23
+ serverOptions: Partial<SafeJsonRpcServerOptions> = {},
24
+ clientOptions: SafeJsonRpcClientOptions = {},
25
+ ): Promise<JsonRpcTestContext<T>> {
26
+ const server = createSafeJsonRpcServer<T>(handler, schema, serverOptions);
27
+ const httpServer = await startHttpRpcServer(server, { host: '127.0.0.1' });
28
+ const noRetryFetch = makeFetch([], true);
29
+ const url = `http://127.0.0.1:${httpServer.port}`;
30
+ const client = createSafeJsonRpcClient<T>(url, schema, {
31
+ fetch: noRetryFetch,
32
+ ...clientOptions,
33
+ });
34
+ return { server, client, httpServer, url };
35
+ }
@@ -0,0 +1,39 @@
1
+ /* eslint-disable no-console */
2
+ import type { LogFn } from './log_fn.js';
3
+
4
+ /**
5
+ * ConsoleLogger is a utility class that provides customizable console logging functionality.
6
+ * It allows setting a custom prefix for log messages and an optional custom logger function,
7
+ * which can be useful for controlling the format of the output or redirecting logs to a different destination.
8
+ */
9
+ class ConsoleLogger {
10
+ constructor(private prefix: string, private logger: (...args: any[]) => void = console.log) {}
11
+
12
+ /**
13
+ * Log messages with the specified prefix using the provided logger.
14
+ * By default, it uses 'console.log' as the logger but can be overridden
15
+ * during ConsoleLogger instantiation. This method allows for easy
16
+ * organization and readability of log messages in the console.
17
+ *
18
+ * @param args - The data to be logged, any number of arguments can be passed to this function.
19
+ */
20
+ public log(...args: any[]) {
21
+ this.logger(`${this.prefix}:`, ...args);
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Creates a Logger function with an optional prefix for log messages.
27
+ * If a prefix is provided, the created logger will prepend it to each log message.
28
+ * If no prefix is provided, the default console.log will be returned.
29
+ *
30
+ * @param prefix - The optional string to prepend to each log message.
31
+ * @returns A Logger function that accepts any number of arguments and logs them with the specified prefix.
32
+ */
33
+ export function createConsoleLogger(prefix?: string): LogFn {
34
+ if (prefix) {
35
+ const logger = new ConsoleLogger(prefix, console.log);
36
+ return (...args: any[]) => logger.log(...args);
37
+ }
38
+ return console.log;
39
+ }
@@ -0,0 +1,104 @@
1
+ import debug from 'debug';
2
+
3
+ import type { LogFn } from './log_fn.js';
4
+
5
+ let preLogHook: ((...args: any[]) => void) | undefined;
6
+ let postLogHook: ((...args: any[]) => void) | undefined;
7
+
8
+ /**
9
+ * Process and handle the logging of messages through custom hooks and the given logger.
10
+ * This function checks if the logger's namespace is enabled, executes any preLogHook functions, logs the message using the provided logger, and then executes any postLogHook functions.
11
+ *
12
+ * @param logger - The debug logger instance to be used for logging.
13
+ * @param args - The arguments to be passed to the logger and any hook functions.
14
+ */
15
+ function theFunctionThroughWhichAllLogsPass(logger: any, ...args: any[]) {
16
+ if (!debug.enabled(logger.namespace)) {
17
+ return;
18
+ }
19
+ if (preLogHook) {
20
+ preLogHook(logger.namespace, ...args);
21
+ }
22
+ logger(...args);
23
+ if (postLogHook) {
24
+ postLogHook(logger.namespace, ...args);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Return a logger, meant to be silent by default and verbose during debugging.
30
+ * @param name - The module name of the logger.
31
+ * @returns A callable log function.
32
+ */
33
+ export function createDebugOnlyLogger(name: string): LogFn {
34
+ const logger = debug(name);
35
+ return (...args: any[]) => theFunctionThroughWhichAllLogsPass(logger, ...args);
36
+ }
37
+
38
+ /**
39
+ * Set a function to be called before each log message is handled by the debug logger.
40
+ * The hook function will receive the logger namespace and any arguments passed to the logger.
41
+ * This can be useful for adding additional context, filtering logs, or performing side-effects
42
+ * based on logged messages.
43
+ *
44
+ * @param fn - The function to be called before each log message.
45
+ */
46
+ export function setPreDebugLogHook(fn: (...args: any[]) => void) {
47
+ preLogHook = fn;
48
+ }
49
+
50
+ /**
51
+ * Set a callback function to be executed after each log is written by the debug logger.
52
+ * This allows additional behavior or side effects to occur after a log has been written,
53
+ * such as sending logs to external services, formatting output, or triggering events.
54
+ *
55
+ * @param fn - The callback function to be executed after each log. It receives the same arguments as the original log function call.
56
+ */
57
+ export function setPostDebugLogHook(fn: (...args: any[]) => void) {
58
+ postLogHook = fn;
59
+ }
60
+
61
+ /**
62
+ * Enable logs for the specified namespace(s) or wildcard pattern(s).
63
+ * This function activates the logging functionality for the given
64
+ * namespace(s) or pattern(s), allowing developers to selectively display
65
+ * debug logs that match the provided string(s).
66
+ *
67
+ * @param str - The namespace(s) or wildcard pattern(s) for which logs should be enabled.
68
+ */
69
+ export function enableLogs(str: string) {
70
+ debug.enable(str);
71
+ }
72
+
73
+ /**
74
+ * Check if the logging is enabled for a given namespace.
75
+ * The input 'str' represents the namespace for which the log status is being checked.
76
+ * Returns true if the logging is enabled, otherwise false.
77
+ *
78
+ * @param str - The namespace string used to determine if logging is enabled.
79
+ * @returns A boolean indicating whether logging is enabled for the given namespace.
80
+ */
81
+ export function isLogEnabled(str: string) {
82
+ return debug.enabled(str);
83
+ }
84
+
85
+ /**
86
+ * Format a debug string filling in `'{0}'` entries with their
87
+ * corresponding values from the args array, amd `'{}'` with the whole array.
88
+ *
89
+ * @param formatStr - str of form `'this is a string with some entries like {0} and {1}'`
90
+ * @param args - array of fields to fill in the string format entries with
91
+ * @returns formatted string
92
+ */
93
+ interface Printable {
94
+ toString(): string;
95
+ }
96
+ export function applyStringFormatting(formatStr: string, args: Printable[]): string {
97
+ return formatStr
98
+ .replace(/{(\d+)}/g, (match, index) => {
99
+ return typeof args[index] === 'undefined' ? match : args[index].toString();
100
+ })
101
+ .replace(/{}/g, (_match, _index) => {
102
+ return args.toString();
103
+ });
104
+ }
@@ -0,0 +1,71 @@
1
+ import type { pino } from 'pino';
2
+
3
+ /* eslint-disable camelcase */
4
+
5
+ const GOOGLE_CLOUD_TRACE_ID = 'logging.googleapis.com/trace';
6
+ const GOOGLE_CLOUD_SPAN_ID = 'logging.googleapis.com/spanId';
7
+ const GOOGLE_CLOUD_TRACE_SAMPLED = 'logging.googleapis.com/trace_sampled';
8
+
9
+ /**
10
+ * Pino configuration for google cloud observability. Tweaks message and timestamp,
11
+ * adds trace context attributes, and injects severity level.
12
+ * Adapted from https://cloud.google.com/trace/docs/setup/nodejs-ot#config-structured-logging.
13
+ */
14
+ export const GoogleCloudLoggerConfig = {
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
+ formatters: {
21
+ log(object: Record<string, unknown>): Record<string, unknown> {
22
+ // Add trace context attributes following Cloud Logging structured log format described
23
+ // in https://cloud.google.com/logging/docs/structured-logging#special-payload-fields
24
+ const { trace_id, span_id, trace_flags, ...rest } = object;
25
+
26
+ if (trace_id && span_id) {
27
+ return {
28
+ [GOOGLE_CLOUD_TRACE_ID]: trace_id,
29
+ [GOOGLE_CLOUD_SPAN_ID]: span_id,
30
+ [GOOGLE_CLOUD_TRACE_SAMPLED]: trace_flags ? trace_flags === '01' : undefined,
31
+ trace_flags, // Keep the original trace_flags for otel-pino-stream
32
+ ...rest,
33
+ };
34
+ }
35
+ return object;
36
+ },
37
+ level(label: string, level: number): object {
38
+ // Inspired by https://github.com/pinojs/pino/issues/726#issuecomment-605814879
39
+ // Severity labels https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity
40
+ let severity: string;
41
+
42
+ switch (label as pino.Level | keyof typeof customLevels) {
43
+ case 'trace':
44
+ case 'debug':
45
+ severity = 'DEBUG';
46
+ break;
47
+ case 'verbose':
48
+ case 'info':
49
+ severity = 'INFO';
50
+ break;
51
+ case 'warn':
52
+ severity = 'WARNING';
53
+ break;
54
+ case 'error':
55
+ severity = 'ERROR';
56
+ break;
57
+ case 'fatal':
58
+ severity = 'CRITICAL';
59
+ break;
60
+ default:
61
+ severity = 'DEFAULT';
62
+ break;
63
+ }
64
+
65
+ return { severity, level };
66
+ },
67
+ },
68
+ } satisfies pino.LoggerOptions;
69
+
70
+ // Define custom logging levels for pino. Duplicate from pino-logger.ts.
71
+ const customLevels = { verbose: 25 };
@@ -0,0 +1,6 @@
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
+ export * from './libp2p_logger.js';