@aztec/foundation 0.1.0-alpha10

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 (414) hide show
  1. package/.eslintrc.cjs +103 -0
  2. package/.prettierrc.json +6 -0
  3. package/.tsbuildinfo +1 -0
  4. package/README.md +1 -0
  5. package/dest/abi/index.d.ts +137 -0
  6. package/dest/abi/index.d.ts.map +1 -0
  7. package/dest/abi/index.js +18 -0
  8. package/dest/async-map/async_map.test.d.ts +2 -0
  9. package/dest/async-map/async_map.test.d.ts.map +1 -0
  10. package/dest/async-map/async_map.test.js +9 -0
  11. package/dest/async-map/index.d.ts +13 -0
  12. package/dest/async-map/index.d.ts.map +1 -0
  13. package/dest/async-map/index.js +19 -0
  14. package/dest/aztec-address/index.d.ts +96 -0
  15. package/dest/aztec-address/index.d.ts.map +1 -0
  16. package/dest/aztec-address/index.js +124 -0
  17. package/dest/bigint-buffer/bigint-buffer.test.d.ts +2 -0
  18. package/dest/bigint-buffer/bigint-buffer.test.d.ts.map +1 -0
  19. package/dest/bigint-buffer/bigint-buffer.test.js +18 -0
  20. package/dest/bigint-buffer/index.d.ts +35 -0
  21. package/dest/bigint-buffer/index.d.ts.map +1 -0
  22. package/dest/bigint-buffer/index.js +68 -0
  23. package/dest/collection/array.d.ts +30 -0
  24. package/dest/collection/array.d.ts.map +1 -0
  25. package/dest/collection/array.js +47 -0
  26. package/dest/collection/index.d.ts +2 -0
  27. package/dest/collection/index.d.ts.map +1 -0
  28. package/dest/collection/index.js +2 -0
  29. package/dest/crypto/index.d.ts +4 -0
  30. package/dest/crypto/index.d.ts.map +1 -0
  31. package/dest/crypto/index.js +4 -0
  32. package/dest/crypto/keccak/index.d.ts +20 -0
  33. package/dest/crypto/keccak/index.d.ts.map +1 -0
  34. package/dest/crypto/keccak/index.js +31 -0
  35. package/dest/crypto/random/index.d.ts +3 -0
  36. package/dest/crypto/random/index.d.ts.map +1 -0
  37. package/dest/crypto/random/index.js +36 -0
  38. package/dest/crypto/random/index.test.d.ts +2 -0
  39. package/dest/crypto/random/index.test.d.ts.map +1 -0
  40. package/dest/crypto/random/index.test.js +13 -0
  41. package/dest/crypto/sha256/index.d.ts +11 -0
  42. package/dest/crypto/sha256/index.d.ts.map +1 -0
  43. package/dest/crypto/sha256/index.js +14 -0
  44. package/dest/crypto/sha256/index.test.d.ts +2 -0
  45. package/dest/crypto/sha256/index.test.d.ts.map +1 -0
  46. package/dest/crypto/sha256/index.test.js +11 -0
  47. package/dest/errors/index.d.ts +8 -0
  48. package/dest/errors/index.d.ts.map +1 -0
  49. package/dest/errors/index.js +8 -0
  50. package/dest/eth-address/eth_address.test.d.ts +2 -0
  51. package/dest/eth-address/eth_address.test.d.ts.map +1 -0
  52. package/dest/eth-address/eth_address.test.js +87 -0
  53. package/dest/eth-address/index.d.ts +139 -0
  54. package/dest/eth-address/index.d.ts.map +1 -0
  55. package/dest/eth-address/index.js +221 -0
  56. package/dest/fields/coordinate.d.ts +67 -0
  57. package/dest/fields/coordinate.d.ts.map +1 -0
  58. package/dest/fields/coordinate.js +95 -0
  59. package/dest/fields/coordinate.test.d.ts +2 -0
  60. package/dest/fields/coordinate.test.d.ts.map +1 -0
  61. package/dest/fields/coordinate.test.js +22 -0
  62. package/dest/fields/fields.d.ts +170 -0
  63. package/dest/fields/fields.d.ts.map +1 -0
  64. package/dest/fields/fields.js +210 -0
  65. package/dest/fields/index.d.ts +4 -0
  66. package/dest/fields/index.d.ts.map +1 -0
  67. package/dest/fields/index.js +4 -0
  68. package/dest/fields/point.d.ts +111 -0
  69. package/dest/fields/point.d.ts.map +1 -0
  70. package/dest/fields/point.js +133 -0
  71. package/dest/fifo/bounded_serial_queue.d.ts +56 -0
  72. package/dest/fifo/bounded_serial_queue.d.ts.map +1 -0
  73. package/dest/fifo/bounded_serial_queue.js +94 -0
  74. package/dest/fifo/index.d.ts +5 -0
  75. package/dest/fifo/index.d.ts.map +1 -0
  76. package/dest/fifo/index.js +5 -0
  77. package/dest/fifo/memory_fifo.d.ts +55 -0
  78. package/dest/fifo/memory_fifo.d.ts.map +1 -0
  79. package/dest/fifo/memory_fifo.js +109 -0
  80. package/dest/fifo/semaphore.d.ts +23 -0
  81. package/dest/fifo/semaphore.d.ts.map +1 -0
  82. package/dest/fifo/semaphore.js +30 -0
  83. package/dest/fifo/serial_queue.d.ts +48 -0
  84. package/dest/fifo/serial_queue.d.ts.map +1 -0
  85. package/dest/fifo/serial_queue.js +74 -0
  86. package/dest/json-rpc/class_converter.d.ts +109 -0
  87. package/dest/json-rpc/class_converter.d.ts.map +1 -0
  88. package/dest/json-rpc/class_converter.js +85 -0
  89. package/dest/json-rpc/client/index.d.ts +2 -0
  90. package/dest/json-rpc/client/index.d.ts.map +1 -0
  91. package/dest/json-rpc/client/index.js +2 -0
  92. package/dest/json-rpc/client/json_rpc_client.d.ts +22 -0
  93. package/dest/json-rpc/client/json_rpc_client.d.ts.map +1 -0
  94. package/dest/json-rpc/client/json_rpc_client.js +83 -0
  95. package/dest/json-rpc/client/json_rpc_client.test.d.ts +2 -0
  96. package/dest/json-rpc/client/json_rpc_client.test.d.ts.map +1 -0
  97. package/dest/json-rpc/client/json_rpc_client.test.js +20 -0
  98. package/dest/json-rpc/convert.d.ts +22 -0
  99. package/dest/json-rpc/convert.d.ts.map +1 -0
  100. package/dest/json-rpc/convert.js +93 -0
  101. package/dest/json-rpc/convert.test.d.ts +2 -0
  102. package/dest/json-rpc/convert.test.d.ts.map +1 -0
  103. package/dest/json-rpc/convert.test.js +14 -0
  104. package/dest/json-rpc/fixtures/test_state.d.ts +47 -0
  105. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -0
  106. package/dest/json-rpc/fixtures/test_state.js +62 -0
  107. package/dest/json-rpc/index.d.ts +4 -0
  108. package/dest/json-rpc/index.d.ts.map +1 -0
  109. package/dest/json-rpc/index.js +4 -0
  110. package/dest/json-rpc/js_utils.d.ts +13 -0
  111. package/dest/json-rpc/js_utils.d.ts.map +1 -0
  112. package/dest/json-rpc/js_utils.js +18 -0
  113. package/dest/json-rpc/server/index.d.ts +3 -0
  114. package/dest/json-rpc/server/index.d.ts.map +1 -0
  115. package/dest/json-rpc/server/index.js +3 -0
  116. package/dest/json-rpc/server/json_proxy.d.ts +18 -0
  117. package/dest/json-rpc/server/json_proxy.d.ts.map +1 -0
  118. package/dest/json-rpc/server/json_proxy.js +35 -0
  119. package/dest/json-rpc/server/json_rpc_server.d.ts +34 -0
  120. package/dest/json-rpc/server/json_rpc_server.d.ts.map +1 -0
  121. package/dest/json-rpc/server/json_rpc_server.js +109 -0
  122. package/dest/json-rpc/server/json_rpc_server.test.d.ts +2 -0
  123. package/dest/json-rpc/server/json_rpc_server.test.d.ts.map +1 -0
  124. package/dest/json-rpc/server/json_rpc_server.test.js +22 -0
  125. package/dest/log/console.d.ts +16 -0
  126. package/dest/log/console.d.ts.map +1 -0
  127. package/dest/log/console.js +39 -0
  128. package/dest/log/debug.d.ts +46 -0
  129. package/dest/log/debug.d.ts.map +1 -0
  130. package/dest/log/debug.js +75 -0
  131. package/dest/log/index.d.ts +4 -0
  132. package/dest/log/index.d.ts.map +1 -0
  133. package/dest/log/index.js +4 -0
  134. package/dest/log/log_history.d.ts +31 -0
  135. package/dest/log/log_history.d.ts.map +1 -0
  136. package/dest/log/log_history.js +42 -0
  137. package/dest/log/log_history.test.d.ts +2 -0
  138. package/dest/log/log_history.test.d.ts.map +1 -0
  139. package/dest/log/log_history.test.js +78 -0
  140. package/dest/mutex/index.d.ts +53 -0
  141. package/dest/mutex/index.d.ts.map +1 -0
  142. package/dest/mutex/index.js +74 -0
  143. package/dest/mutex/mutex.test.d.ts +9 -0
  144. package/dest/mutex/mutex.test.d.ts.map +1 -0
  145. package/dest/mutex/mutex.test.js +58 -0
  146. package/dest/mutex/mutex_database.d.ts +10 -0
  147. package/dest/mutex/mutex_database.d.ts.map +1 -0
  148. package/dest/mutex/mutex_database.js +2 -0
  149. package/dest/retry/index.d.ts +33 -0
  150. package/dest/retry/index.d.ts.map +1 -0
  151. package/dest/retry/index.js +70 -0
  152. package/dest/running-promise/index.d.ts +35 -0
  153. package/dest/running-promise/index.d.ts.map +1 -0
  154. package/dest/running-promise/index.js +59 -0
  155. package/dest/serialize/buffer_reader.d.ts +188 -0
  156. package/dest/serialize/buffer_reader.d.ts.map +1 -0
  157. package/dest/serialize/buffer_reader.js +229 -0
  158. package/dest/serialize/buffer_reader.test.d.ts +2 -0
  159. package/dest/serialize/buffer_reader.test.d.ts.map +1 -0
  160. package/dest/serialize/buffer_reader.test.js +156 -0
  161. package/dest/serialize/deserializer.d.ts +134 -0
  162. package/dest/serialize/deserializer.d.ts.map +1 -0
  163. package/dest/serialize/deserializer.js +145 -0
  164. package/dest/serialize/free_funcs.d.ts +203 -0
  165. package/dest/serialize/free_funcs.d.ts.map +1 -0
  166. package/dest/serialize/free_funcs.js +250 -0
  167. package/dest/serialize/index.d.ts +6 -0
  168. package/dest/serialize/index.d.ts.map +1 -0
  169. package/dest/serialize/index.js +6 -0
  170. package/dest/serialize/serialize.test.d.ts +2 -0
  171. package/dest/serialize/serialize.test.d.ts.map +1 -0
  172. package/dest/serialize/serialize.test.js +68 -0
  173. package/dest/serialize/serializer.d.ts +89 -0
  174. package/dest/serialize/serializer.d.ts.map +1 -0
  175. package/dest/serialize/serializer.js +111 -0
  176. package/dest/serialize/types.d.ts +33 -0
  177. package/dest/serialize/types.d.ts.map +1 -0
  178. package/dest/serialize/types.js +22 -0
  179. package/dest/sleep/index.d.ts +52 -0
  180. package/dest/sleep/index.d.ts.map +1 -0
  181. package/dest/sleep/index.js +70 -0
  182. package/dest/timer/index.d.ts +3 -0
  183. package/dest/timer/index.d.ts.map +1 -0
  184. package/dest/timer/index.js +3 -0
  185. package/dest/timer/timeout.d.ts +41 -0
  186. package/dest/timer/timeout.d.ts.map +1 -0
  187. package/dest/timer/timeout.js +62 -0
  188. package/dest/timer/timer.d.ts +33 -0
  189. package/dest/timer/timer.d.ts.map +1 -0
  190. package/dest/timer/timer.js +38 -0
  191. package/dest/transport/browser/index.d.ts +5 -0
  192. package/dest/transport/browser/index.d.ts.map +1 -0
  193. package/dest/transport/browser/index.js +5 -0
  194. package/dest/transport/browser/message_port_socket.d.ts +37 -0
  195. package/dest/transport/browser/message_port_socket.d.ts.map +1 -0
  196. package/dest/transport/browser/message_port_socket.js +46 -0
  197. package/dest/transport/browser/shared_worker_connector.d.ts +19 -0
  198. package/dest/transport/browser/shared_worker_connector.d.ts.map +1 -0
  199. package/dest/transport/browser/shared_worker_connector.js +21 -0
  200. package/dest/transport/browser/shared_worker_listener.d.ts +38 -0
  201. package/dest/transport/browser/shared_worker_listener.d.ts.map +1 -0
  202. package/dest/transport/browser/shared_worker_listener.js +37 -0
  203. package/dest/transport/browser/worker_connector.d.ts +26 -0
  204. package/dest/transport/browser/worker_connector.d.ts.map +1 -0
  205. package/dest/transport/browser/worker_connector.js +30 -0
  206. package/dest/transport/browser/worker_listener.d.ts +39 -0
  207. package/dest/transport/browser/worker_listener.d.ts.map +1 -0
  208. package/dest/transport/browser/worker_listener.js +39 -0
  209. package/dest/transport/dispatch/create_dispatch_fn.d.ts +25 -0
  210. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -0
  211. package/dest/transport/dispatch/create_dispatch_fn.js +18 -0
  212. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +102 -0
  213. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -0
  214. package/dest/transport/dispatch/create_dispatch_proxy.js +56 -0
  215. package/dest/transport/dispatch/messages.d.ts +52 -0
  216. package/dest/transport/dispatch/messages.d.ts.map +1 -0
  217. package/dest/transport/dispatch/messages.js +12 -0
  218. package/dest/transport/index.d.ts +12 -0
  219. package/dest/transport/index.d.ts.map +1 -0
  220. package/dest/transport/index.js +12 -0
  221. package/dest/transport/interface/connector.d.ts +8 -0
  222. package/dest/transport/interface/connector.d.ts.map +1 -0
  223. package/dest/transport/interface/connector.js +2 -0
  224. package/dest/transport/interface/listener.d.ts +13 -0
  225. package/dest/transport/interface/listener.d.ts.map +1 -0
  226. package/dest/transport/interface/listener.js +2 -0
  227. package/dest/transport/interface/socket.d.ts +13 -0
  228. package/dest/transport/interface/socket.d.ts.map +1 -0
  229. package/dest/transport/interface/socket.js +2 -0
  230. package/dest/transport/interface/transferable.d.ts +68 -0
  231. package/dest/transport/interface/transferable.d.ts.map +1 -0
  232. package/dest/transport/interface/transferable.js +63 -0
  233. package/dest/transport/node/index.d.ts +3 -0
  234. package/dest/transport/node/index.d.ts.map +1 -0
  235. package/dest/transport/node/index.js +3 -0
  236. package/dest/transport/node/node_connector.d.ts +28 -0
  237. package/dest/transport/node/node_connector.d.ts.map +1 -0
  238. package/dest/transport/node/node_connector.js +28 -0
  239. package/dest/transport/node/node_connector_socket.d.ts +42 -0
  240. package/dest/transport/node/node_connector_socket.d.ts.map +1 -0
  241. package/dest/transport/node/node_connector_socket.js +48 -0
  242. package/dest/transport/node/node_listener.d.ts +26 -0
  243. package/dest/transport/node/node_listener.d.ts.map +1 -0
  244. package/dest/transport/node/node_listener.js +30 -0
  245. package/dest/transport/node/node_listener_socket.d.ts +37 -0
  246. package/dest/transport/node/node_listener_socket.d.ts.map +1 -0
  247. package/dest/transport/node/node_listener_socket.js +44 -0
  248. package/dest/transport/transport_client.d.ts +61 -0
  249. package/dest/transport/transport_client.d.ts.map +1 -0
  250. package/dest/transport/transport_client.js +94 -0
  251. package/dest/transport/transport_server.d.ts +56 -0
  252. package/dest/transport/transport_server.d.ts.map +1 -0
  253. package/dest/transport/transport_server.js +101 -0
  254. package/dest/types/index.d.ts +7 -0
  255. package/dest/types/index.d.ts.map +1 -0
  256. package/dest/types/index.js +2 -0
  257. package/dest/wasm/index.d.ts +5 -0
  258. package/dest/wasm/index.d.ts.map +1 -0
  259. package/dest/wasm/index.js +5 -0
  260. package/dest/wasm/wasm/empty_wasi_sdk.d.ts +130 -0
  261. package/dest/wasm/wasm/empty_wasi_sdk.d.ts.map +1 -0
  262. package/dest/wasm/wasm/empty_wasi_sdk.js +166 -0
  263. package/dest/wasm/wasm/index.d.ts +2 -0
  264. package/dest/wasm/wasm/index.d.ts.map +1 -0
  265. package/dest/wasm/wasm/index.js +2 -0
  266. package/dest/wasm/wasm/wasm_module.d.ts +135 -0
  267. package/dest/wasm/wasm/wasm_module.d.ts.map +1 -0
  268. package/dest/wasm/wasm/wasm_module.js +205 -0
  269. package/dest/wasm/wasm/wasm_module.test.d.ts +2 -0
  270. package/dest/wasm/wasm/wasm_module.test.d.ts.map +1 -0
  271. package/dest/wasm/wasm/wasm_module.test.js +24 -0
  272. package/dest/wasm/worker/browser/index.d.ts +3 -0
  273. package/dest/wasm/worker/browser/index.d.ts.map +1 -0
  274. package/dest/wasm/worker/browser/index.js +3 -0
  275. package/dest/wasm/worker/browser/start_web_module.d.ts +7 -0
  276. package/dest/wasm/worker/browser/start_web_module.d.ts.map +1 -0
  277. package/dest/wasm/worker/browser/start_web_module.js +22 -0
  278. package/dest/wasm/worker/browser/web_data_store.d.ts +23 -0
  279. package/dest/wasm/worker/browser/web_data_store.d.ts.map +1 -0
  280. package/dest/wasm/worker/browser/web_data_store.js +32 -0
  281. package/dest/wasm/worker/browser/web_worker.d.ts +10 -0
  282. package/dest/wasm/worker/browser/web_worker.d.ts.map +1 -0
  283. package/dest/wasm/worker/browser/web_worker.js +23 -0
  284. package/dest/wasm/worker/data_store.d.ts +9 -0
  285. package/dest/wasm/worker/data_store.d.ts.map +1 -0
  286. package/dest/wasm/worker/data_store.js +2 -0
  287. package/dest/wasm/worker/index.d.ts +3 -0
  288. package/dest/wasm/worker/index.d.ts.map +1 -0
  289. package/dest/wasm/worker/index.js +2 -0
  290. package/dest/wasm/worker/node/index.d.ts +3 -0
  291. package/dest/wasm/worker/node/index.d.ts.map +1 -0
  292. package/dest/wasm/worker/node/index.js +3 -0
  293. package/dest/wasm/worker/node/node_data_store.d.ts +22 -0
  294. package/dest/wasm/worker/node/node_data_store.d.ts.map +1 -0
  295. package/dest/wasm/worker/node/node_data_store.js +31 -0
  296. package/dest/wasm/worker/node/node_worker.d.ts +6 -0
  297. package/dest/wasm/worker/node/node_worker.d.ts.map +1 -0
  298. package/dest/wasm/worker/node/node_worker.js +20 -0
  299. package/dest/wasm/worker/node/start_node_module.d.ts +7 -0
  300. package/dest/wasm/worker/node/start_node_module.d.ts.map +1 -0
  301. package/dest/wasm/worker/node/start_node_module.js +26 -0
  302. package/dest/wasm/worker/wasm_worker.d.ts +9 -0
  303. package/dest/wasm/worker/wasm_worker.d.ts.map +1 -0
  304. package/dest/wasm/worker/wasm_worker.js +2 -0
  305. package/dest/wasm/worker/worker_pool.d.ts +40 -0
  306. package/dest/wasm/worker/worker_pool.d.ts.map +1 -0
  307. package/dest/wasm/worker/worker_pool.js +62 -0
  308. package/package.json +44 -0
  309. package/src/abi/index.ts +147 -0
  310. package/src/async-map/async_map.test.ts +9 -0
  311. package/src/async-map/index.ts +18 -0
  312. package/src/aztec-address/index.ts +135 -0
  313. package/src/bigint-buffer/bigint-buffer.test.ts +21 -0
  314. package/src/bigint-buffer/index.ts +68 -0
  315. package/src/collection/array.ts +48 -0
  316. package/src/collection/index.ts +1 -0
  317. package/src/crypto/index.ts +3 -0
  318. package/src/crypto/keccak/index.ts +33 -0
  319. package/src/crypto/random/index.test.ts +13 -0
  320. package/src/crypto/random/index.ts +38 -0
  321. package/src/crypto/sha256/index.test.ts +13 -0
  322. package/src/crypto/sha256/index.ts +15 -0
  323. package/src/errors/index.ts +6 -0
  324. package/src/eth-address/eth_address.test.ts +104 -0
  325. package/src/eth-address/index.ts +236 -0
  326. package/src/fields/coordinate.test.ts +26 -0
  327. package/src/fields/coordinate.ts +104 -0
  328. package/src/fields/fields.ts +234 -0
  329. package/src/fields/index.ts +3 -0
  330. package/src/fields/point.ts +143 -0
  331. package/src/fifo/bounded_serial_queue.ts +100 -0
  332. package/src/fifo/index.ts +4 -0
  333. package/src/fifo/memory_fifo.ts +114 -0
  334. package/src/fifo/semaphore.ts +33 -0
  335. package/src/fifo/serial_queue.ts +78 -0
  336. package/src/json-rpc/README.md +55 -0
  337. package/src/json-rpc/class_converter.ts +160 -0
  338. package/src/json-rpc/client/index.ts +1 -0
  339. package/src/json-rpc/client/json_rpc_client.test.ts +20 -0
  340. package/src/json-rpc/client/json_rpc_client.ts +103 -0
  341. package/src/json-rpc/convert.test.ts +15 -0
  342. package/src/json-rpc/convert.ts +109 -0
  343. package/src/json-rpc/fixtures/test_state.ts +59 -0
  344. package/src/json-rpc/index.ts +3 -0
  345. package/src/json-rpc/js_utils.ts +20 -0
  346. package/src/json-rpc/server/index.ts +2 -0
  347. package/src/json-rpc/server/json_proxy.ts +36 -0
  348. package/src/json-rpc/server/json_rpc_server.test.ts +23 -0
  349. package/src/json-rpc/server/json_rpc_server.ts +124 -0
  350. package/src/log/console.ts +45 -0
  351. package/src/log/debug.ts +86 -0
  352. package/src/log/index.ts +3 -0
  353. package/src/log/log_history.test.ts +87 -0
  354. package/src/log/log_history.ts +44 -0
  355. package/src/mutex/index.ts +83 -0
  356. package/src/mutex/mutex.test.ts +75 -0
  357. package/src/mutex/mutex_database.ts +9 -0
  358. package/src/retry/index.ts +78 -0
  359. package/src/running-promise/index.ts +60 -0
  360. package/src/serialize/buffer_reader.test.ts +175 -0
  361. package/src/serialize/buffer_reader.ts +272 -0
  362. package/src/serialize/deserializer.ts +180 -0
  363. package/src/serialize/free_funcs.ts +285 -0
  364. package/src/serialize/index.ts +5 -0
  365. package/src/serialize/serialize.test.ts +89 -0
  366. package/src/serialize/serializer.ts +128 -0
  367. package/src/serialize/types.ts +40 -0
  368. package/src/sleep/index.ts +71 -0
  369. package/src/timer/index.ts +2 -0
  370. package/src/timer/timeout.ts +64 -0
  371. package/src/timer/timer.ts +41 -0
  372. package/src/transport/browser/index.ts +4 -0
  373. package/src/transport/browser/message_port_socket.ts +48 -0
  374. package/src/transport/browser/shared_worker_connector.ts +21 -0
  375. package/src/transport/browser/shared_worker_listener.ts +52 -0
  376. package/src/transport/browser/worker_connector.ts +30 -0
  377. package/src/transport/browser/worker_listener.ts +53 -0
  378. package/src/transport/dispatch/create_dispatch_fn.ts +33 -0
  379. package/src/transport/dispatch/create_dispatch_proxy.ts +140 -0
  380. package/src/transport/dispatch/messages.ts +58 -0
  381. package/src/transport/index.ts +11 -0
  382. package/src/transport/interface/connector.ts +8 -0
  383. package/src/transport/interface/listener.ts +14 -0
  384. package/src/transport/interface/socket.ts +12 -0
  385. package/src/transport/interface/transferable.ts +121 -0
  386. package/src/transport/node/index.ts +2 -0
  387. package/src/transport/node/node_connector.ts +29 -0
  388. package/src/transport/node/node_connector_socket.ts +51 -0
  389. package/src/transport/node/node_listener.ts +33 -0
  390. package/src/transport/node/node_listener_socket.ts +47 -0
  391. package/src/transport/transport_client.ts +125 -0
  392. package/src/transport/transport_server.ts +108 -0
  393. package/src/types/index.ts +7 -0
  394. package/src/wasm/README.md +6 -0
  395. package/src/wasm/fixtures/gcd.wasm +0 -0
  396. package/src/wasm/fixtures/gcd.wat +27 -0
  397. package/src/wasm/index.ts +4 -0
  398. package/src/wasm/wasm/empty_wasi_sdk.ts +166 -0
  399. package/src/wasm/wasm/index.ts +1 -0
  400. package/src/wasm/wasm/wasm_module.test.ts +27 -0
  401. package/src/wasm/wasm/wasm_module.ts +257 -0
  402. package/src/wasm/worker/browser/index.ts +2 -0
  403. package/src/wasm/worker/browser/start_web_module.ts +23 -0
  404. package/src/wasm/worker/browser/web_data_store.ts +37 -0
  405. package/src/wasm/worker/browser/web_worker.ts +24 -0
  406. package/src/wasm/worker/data_store.ts +7 -0
  407. package/src/wasm/worker/index.ts +2 -0
  408. package/src/wasm/worker/node/index.ts +2 -0
  409. package/src/wasm/worker/node/node_data_store.ts +36 -0
  410. package/src/wasm/worker/node/node_worker.ts +21 -0
  411. package/src/wasm/worker/node/start_node_module.ts +28 -0
  412. package/src/wasm/worker/wasm_worker.ts +7 -0
  413. package/src/wasm/worker/worker_pool.ts +73 -0
  414. package/tsconfig.json +10 -0
@@ -0,0 +1,74 @@
1
+ import { MemoryFifo } from './memory_fifo.js';
2
+ /**
3
+ * A more specialised fifo queue that enqueues functions to execute. Enqueued functions are executed in serial.
4
+ */
5
+ export class SerialQueue {
6
+ constructor() {
7
+ this.queue = new MemoryFifo();
8
+ }
9
+ /**
10
+ * Initializes the execution of enqueued functions in the serial queue.
11
+ * Functions are executed in the order they were added to the queue, with each function
12
+ * waiting for the completion of the previous one before starting its execution.
13
+ * This method should be called once to start processing the queue.
14
+ */
15
+ start() {
16
+ this.runningPromise = this.queue.process(fn => fn());
17
+ }
18
+ /**
19
+ * Returns the current number of enqueued functions in the serial queue.
20
+ * This provides a way to check the size of the queue and monitor its progress.
21
+ *
22
+ * @returns The length of the serial queue as a number.
23
+ */
24
+ length() {
25
+ return this.queue.length();
26
+ }
27
+ /**
28
+ * Cancels the processing of the remaining functions in the serial queue and resolves the running promise.
29
+ * Any enqueued functions that have not yet been executed will be discarded. The queue can still accept new
30
+ * functions after cancellation, but the previously enqueued functions will not be re-processed.
31
+ *
32
+ * @returns The running promise which resolves when the current executing function (if any) completes.
33
+ */
34
+ cancel() {
35
+ this.queue.cancel();
36
+ return this.runningPromise;
37
+ }
38
+ /**
39
+ * Signals the SerialQueue that it should finish processing its current task and stop accepting new tasks.
40
+ * The returned Promise resolves when all enqueued tasks have completed execution.
41
+ *
42
+ * @returns A Promise that resolves when the queue is completely emptied and no new tasks are allowed.
43
+ */
44
+ end() {
45
+ this.queue.end();
46
+ return this.runningPromise;
47
+ }
48
+ /**
49
+ * Enqueues fn for execution on the serial queue.
50
+ * Returns the result of the function after execution.
51
+ * @param fn - The function to enqueue.
52
+ * @returns A resolution promise.
53
+ */
54
+ put(fn) {
55
+ return new Promise((resolve, reject) => {
56
+ this.queue.put(async () => {
57
+ try {
58
+ const res = await fn();
59
+ resolve(res);
60
+ }
61
+ catch (e) {
62
+ reject(e);
63
+ }
64
+ });
65
+ });
66
+ }
67
+ /**
68
+ * Awaiting this ensures the queue is empty before resuming.
69
+ */
70
+ async syncPoint() {
71
+ await this.put(async () => { });
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsX3F1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpZm8vc2VyaWFsX3F1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQXhCO1FBQ21CLFVBQUssR0FBRyxJQUFJLFVBQVUsRUFBdUIsQ0FBQztJQXVFakUsQ0FBQztJQXBFQzs7Ozs7T0FLRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksR0FBRztRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEdBQUcsQ0FBSSxFQUFvQjtRQUNoQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUN4QixJQUFJO29CQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDZDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ1g7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFNBQVM7UUFDcEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGIn0=
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Represents a class compatible with our class conversion system.
3
+ * E.g. PublicKey here satisfies 'IOClass'.
4
+ * ```
5
+ * class PublicKey {
6
+ * toString() {
7
+ * return '...';
8
+ * }
9
+ * static fromString(str) {
10
+ * return new PublicKey(...);
11
+ * }
12
+ * }
13
+ * ```
14
+ */
15
+ interface IOClass {
16
+ new (...args: any): any;
17
+ /**
18
+ * Creates an IOClass from a given string.
19
+ */
20
+ fromString?: (str: string) => any;
21
+ /**
22
+ * Creates an IOClass from a given JSON object.
23
+ */
24
+ fromJSON?: (obj: object) => any;
25
+ }
26
+ /**
27
+ * Registered classes available for conversion.
28
+ */
29
+ export interface ClassConverterInput {
30
+ [className: string]: IOClass;
31
+ }
32
+ /**
33
+ * Represents a class in a JSON-friendly encoding.
34
+ */
35
+ export interface StringEncodedClass {
36
+ /**
37
+ * The class type.
38
+ */
39
+ type: string;
40
+ /**
41
+ * The class data string.
42
+ */
43
+ data: string;
44
+ }
45
+ /**
46
+ * Represents a class in a JSON-friendly encoding.
47
+ */
48
+ export interface JsonEncodedClass {
49
+ /**
50
+ * The class type.
51
+ */
52
+ type: string;
53
+ /**
54
+ * The class data string.
55
+ */
56
+ data: object;
57
+ }
58
+ /**
59
+ * Whether a class is a complex object or simply represented by a string.
60
+ */
61
+ export type ClassEncoding = 'string' | 'object';
62
+ /**
63
+ * Handles mapping of classes to names, and calling toString and fromString to convert to and from JSON-friendly formats.
64
+ * Takes a class map as input.
65
+ */
66
+ export declare class ClassConverter {
67
+ private toClass;
68
+ private toName;
69
+ /**
70
+ * Create a class converter from a table of classes.
71
+ * @param stringClassMap - The class table of string encoded classes.
72
+ * @param objectClassMap - The class table of complex object classes
73
+ */
74
+ constructor(stringClassMap?: ClassConverterInput, objectClassMap?: ClassConverterInput);
75
+ /**
76
+ * Register a class with a certain name.
77
+ * This name is used for conversion from and to this class.
78
+ * @param type - The class name to use for serialization.
79
+ * @param class_ - The class object.
80
+ * @param encoding - Whether the class is a complex object or simply represented by a string.
81
+ */
82
+ register(type: string, class_: IOClass, encoding: ClassEncoding): void;
83
+ /**
84
+ * Does this type name have a registered class?
85
+ * @param type - The type name.
86
+ * @returns If there's a registered class.
87
+ */
88
+ isRegisteredClassName(type: string): boolean;
89
+ /**
90
+ * Is this class object registered?
91
+ * @param obj - The class object.
92
+ * @returns If it is a registered class.
93
+ */
94
+ isRegisteredClass(obj: any): boolean;
95
+ /**
96
+ * Convert a JSON-like object to a class object.
97
+ * @param jsonObj - An object encoding a class.
98
+ * @returns The class object.
99
+ */
100
+ toClassObj(jsonObj: JsonEncodedClass | StringEncodedClass): any;
101
+ /**
102
+ * Convert a class object to a JSON object.
103
+ * @param classObj - A JSON encoding a class.
104
+ * @returns The class object.
105
+ */
106
+ toJsonObj(classObj: any): JsonEncodedClass | StringEncodedClass;
107
+ }
108
+ export {};
109
+ //# sourceMappingURL=class_converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class_converter.d.ts","sourceRoot":"","sources":["../../src/json-rpc/class_converter.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,UAAU,OAAO;IACf,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AACD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,MAAM,CAA+C;IAE7D;;;;OAIG;gBACS,cAAc,CAAC,EAAE,mBAAmB,EAAE,cAAc,CAAC,EAAE,mBAAmB;IAatF;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IAc/D;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM;IAGlC;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,GAAG;IAG1B;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,GAAG;IAW/D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,gBAAgB,GAAG,kBAAkB;CAOhE"}
@@ -0,0 +1,85 @@
1
+ import { assert, hasOwnProperty } from './js_utils.js';
2
+ /**
3
+ * Handles mapping of classes to names, and calling toString and fromString to convert to and from JSON-friendly formats.
4
+ * Takes a class map as input.
5
+ */
6
+ export class ClassConverter {
7
+ /**
8
+ * Create a class converter from a table of classes.
9
+ * @param stringClassMap - The class table of string encoded classes.
10
+ * @param objectClassMap - The class table of complex object classes
11
+ */
12
+ constructor(stringClassMap, objectClassMap) {
13
+ this.toClass = new Map();
14
+ this.toName = new Map();
15
+ if (stringClassMap) {
16
+ for (const key of Object.keys(stringClassMap)) {
17
+ this.register(key, stringClassMap[key], 'string');
18
+ }
19
+ }
20
+ if (objectClassMap) {
21
+ for (const key of Object.keys(objectClassMap)) {
22
+ this.register(key, objectClassMap[key], 'object');
23
+ }
24
+ }
25
+ }
26
+ /**
27
+ * Register a class with a certain name.
28
+ * This name is used for conversion from and to this class.
29
+ * @param type - The class name to use for serialization.
30
+ * @param class_ - The class object.
31
+ * @param encoding - Whether the class is a complex object or simply represented by a string.
32
+ */
33
+ register(type, class_, encoding) {
34
+ assert(type !== 'Buffer', "'Buffer' handling is hardcoded. Cannot use as name.");
35
+ assert(hasOwnProperty(class_.prototype, 'toString') || hasOwnProperty(class_.prototype, 'toJSON'), `Class ${type} must define a toString() OR toJSON() method.`);
36
+ assert(class_['fromString'] || class_['fromJSON'], `Class ${type} must define a fromString() OR fromJSON() static method.`);
37
+ this.toName.set(class_, [type, encoding]);
38
+ this.toClass.set(type, [class_, encoding]);
39
+ }
40
+ /**
41
+ * Does this type name have a registered class?
42
+ * @param type - The type name.
43
+ * @returns If there's a registered class.
44
+ */
45
+ isRegisteredClassName(type) {
46
+ return this.toClass.has(type);
47
+ }
48
+ /**
49
+ * Is this class object registered?
50
+ * @param obj - The class object.
51
+ * @returns If it is a registered class.
52
+ */
53
+ isRegisteredClass(obj) {
54
+ return this.toName.has(obj);
55
+ }
56
+ /**
57
+ * Convert a JSON-like object to a class object.
58
+ * @param jsonObj - An object encoding a class.
59
+ * @returns The class object.
60
+ */
61
+ toClassObj(jsonObj) {
62
+ const result = this.toClass.get(jsonObj.type);
63
+ assert(result, `Could not find type in lookup.`);
64
+ const [class_, encoding] = result;
65
+ if (encoding === 'string' && typeof jsonObj.data === 'string') {
66
+ return class_.fromString(jsonObj.data);
67
+ }
68
+ else {
69
+ return class_.fromJSON(jsonObj.data);
70
+ }
71
+ }
72
+ /**
73
+ * Convert a class object to a JSON object.
74
+ * @param classObj - A JSON encoding a class.
75
+ * @returns The class object.
76
+ */
77
+ toJsonObj(classObj) {
78
+ const result = this.toName.get(classObj.constructor);
79
+ assert(result, `Could not find class in lookup.`);
80
+ const [type, encoding] = result;
81
+ const data = encoding === 'string' ? classObj.toString() : classObj.toJSON();
82
+ return { type: type, data };
83
+ }
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NfY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb24tcnBjL2NsYXNzX2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW9FdkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFJekI7Ozs7T0FJRztJQUNILFlBQVksY0FBb0MsRUFBRSxjQUFvQztRQVI5RSxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFDdEQsV0FBTSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBUTNELElBQUksY0FBYyxFQUFFO1lBQ2xCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNuRDtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FBQyxJQUFZLEVBQUUsTUFBZSxFQUFFLFFBQXVCO1FBQzdELE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDakYsTUFBTSxDQUNKLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUMxRixTQUFTLElBQUksK0NBQStDLENBQzdELENBQUM7UUFDRixNQUFNLENBQ0osTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFDMUMsU0FBUyxJQUFJLDBEQUEwRCxDQUN4RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxJQUFZO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsT0FBOEM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUVqRCxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNsQyxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3RCxPQUFPLE1BQU8sQ0FBQyxVQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxPQUFPLE1BQU8sQ0FBQyxRQUFTLENBQUMsT0FBTyxDQUFDLElBQWMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsUUFBYTtRQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLE1BQU0sRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7Q0FDRiJ9
@@ -0,0 +1,2 @@
1
+ export { createJsonRpcClient, JsonStringify } from './json_rpc_client.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createJsonRpcClient, JsonStringify } from './json_rpc_client.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyJ9
@@ -0,0 +1,22 @@
1
+ import { RemoteObject } from 'comlink';
2
+ import { ClassConverterInput } from '../class_converter.js';
3
+ export { JsonStringify } from '../convert.js';
4
+ /**
5
+ * A normal fetch function that does not retry.
6
+ * Alternatives are a fetch function with retries, or a mocked fetch.
7
+ * @param host - The host URL.
8
+ * @param method - The RPC method name.
9
+ * @param body - The RPC payload.
10
+ * @returns The parsed JSON response, or throws an error.
11
+ */
12
+ export declare function defaultFetch(host: string, rpcMethod: string, body: any, useApiEndpoints: boolean): Promise<any>;
13
+ /**
14
+ * A fetch function with retries.
15
+ */
16
+ export declare function mustSucceedFetch(host: string, rpcMethod: string, body: any, useApiEndpoints: boolean): Promise<any>;
17
+ /**
18
+ * Creates a Proxy object that delegates over RPC and satisfies RemoteObject<T>.
19
+ * The server should have ran new JsonRpcServer().
20
+ */
21
+ export declare function createJsonRpcClient<T extends object>(host: string, stringClassMap: ClassConverterInput, objectClassMap: ClassConverterInput, useApiEndpoints: boolean, fetch?: typeof defaultFetch): RemoteObject<T>;
22
+ //# sourceMappingURL=json_rpc_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json_rpc_client.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/json_rpc_client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAkB,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,gBA2BtG;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,gBAE1G;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,mBAAmB,EACnC,cAAc,EAAE,mBAAmB,EACnC,eAAe,EAAE,OAAO,EACxB,KAAK,sBAAe,mBAoCrB"}
@@ -0,0 +1,83 @@
1
+ import { createDebugLogger } from '../../log/index.js';
2
+ import { retry } from '../../retry/index.js';
3
+ import { ClassConverter } from '../class_converter.js';
4
+ import { JsonStringify, convertFromJsonObj, convertToJsonObj } from '../convert.js';
5
+ export { JsonStringify } from '../convert.js';
6
+ const debug = createDebugLogger('json-rpc:json_rpc_client');
7
+ /**
8
+ * A normal fetch function that does not retry.
9
+ * Alternatives are a fetch function with retries, or a mocked fetch.
10
+ * @param host - The host URL.
11
+ * @param method - The RPC method name.
12
+ * @param body - The RPC payload.
13
+ * @returns The parsed JSON response, or throws an error.
14
+ */
15
+ export async function defaultFetch(host, rpcMethod, body, useApiEndpoints) {
16
+ debug(`JsonRpcClient.fetch`, host, rpcMethod, '->', body);
17
+ let resp;
18
+ if (useApiEndpoints) {
19
+ resp = await fetch(`${host}/${rpcMethod}`, {
20
+ method: 'POST',
21
+ body: JsonStringify(body),
22
+ headers: { 'content-type': 'application/json' },
23
+ });
24
+ }
25
+ else {
26
+ resp = await fetch(host, {
27
+ method: 'POST',
28
+ body: JsonStringify({ ...body, method: rpcMethod }),
29
+ headers: { 'content-type': 'application/json' },
30
+ });
31
+ }
32
+ if (!resp.ok) {
33
+ throw new Error(resp.statusText);
34
+ }
35
+ const text = await resp.text();
36
+ try {
37
+ return JSON.parse(text);
38
+ }
39
+ catch (err) {
40
+ throw new Error(`Failed to parse body as JSON: ${text}`);
41
+ }
42
+ }
43
+ /**
44
+ * A fetch function with retries.
45
+ */
46
+ export async function mustSucceedFetch(host, rpcMethod, body, useApiEndpoints) {
47
+ return await retry(() => defaultFetch(host, rpcMethod, body, useApiEndpoints), 'JsonRpcClient request');
48
+ }
49
+ /**
50
+ * Creates a Proxy object that delegates over RPC and satisfies RemoteObject<T>.
51
+ * The server should have ran new JsonRpcServer().
52
+ */
53
+ export function createJsonRpcClient(host, stringClassMap, objectClassMap, useApiEndpoints, fetch = defaultFetch) {
54
+ const classConverter = new ClassConverter(stringClassMap, objectClassMap);
55
+ let id = 0;
56
+ const request = async (method, params) => {
57
+ const body = {
58
+ jsonrpc: '2.0',
59
+ id: id++,
60
+ method,
61
+ params: params.map(param => convertToJsonObj(classConverter, param)),
62
+ };
63
+ debug(`JsonRpcClient.request`, method, '<-', params);
64
+ const res = await fetch(host, method, body, useApiEndpoints);
65
+ debug(`JsonRpcClient.result`, method, '->', res);
66
+ if (res.error) {
67
+ throw res.error;
68
+ }
69
+ if ([null, undefined, 'null', 'undefined'].includes(res.result)) {
70
+ return;
71
+ }
72
+ return convertFromJsonObj(classConverter, JSON.parse(res.result));
73
+ };
74
+ // Intercept any RPC methods with a proxy
75
+ // This wraps 'request' with a method-call syntax wrapper
76
+ return new Proxy({}, {
77
+ get: (_, rpcMethod) => (...params) => {
78
+ debug(`JsonRpcClient.constructor`, 'proxy', rpcMethod, '<-', params);
79
+ return request(rpcMethod, params);
80
+ },
81
+ });
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGNfY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pzb24tcnBjL2NsaWVudC9qc29uX3JwY19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDNUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLElBQVMsRUFBRSxlQUF3QjtJQUNyRyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsSUFBSSxJQUFjLENBQUM7SUFDbkIsSUFBSSxlQUFlLEVBQUU7UUFDbkIsSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDekIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1NBQ2hELENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLGFBQWEs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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=json_rpc_client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json_rpc_client.test.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/json_rpc_client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import request from 'supertest';
2
+ import { JsonRpcServer } from '../server/json_rpc_server.js';
3
+ import { TestState, TestNote } from '../fixtures/test_state.js';
4
+ import { createJsonRpcClient } from './json_rpc_client.js';
5
+ test('test an RPC function over client', async () => {
6
+ const mockFetch = async (host, method, body) => {
7
+ const server = new JsonRpcServer(new TestState([new TestNote('a'), new TestNote('b')]), { TestNote }, {}, true);
8
+ const result = await request(server.getApp().callback()).post(`/${method}`).send(body);
9
+ return JSON.parse(result.text);
10
+ };
11
+ const client = createJsonRpcClient('', { TestNote }, {}, true, mockFetch);
12
+ const result = await client.addNotes([new TestNote('c')]);
13
+ expect(result[0]).toBeInstanceOf(TestNote);
14
+ expect(result[1]).toBeInstanceOf(TestNote);
15
+ expect(result[2]).toBeInstanceOf(TestNote);
16
+ expect(result[0].toString()).toBe('a');
17
+ expect(result[1].toString()).toBe('b');
18
+ expect(result[2].toString()).toBe('c');
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGNfY2xpZW50LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvY2xpZW50L2pzb25fcnBjX2NsaWVudC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxJQUFJLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxNQUFjLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEgsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,22 @@
1
+ import { ClassConverter } from './class_converter.js';
2
+ /**
3
+ * JSON.stringify helper that handles bigints.
4
+ * @param obj - The object to be stringified.
5
+ * @returns The resulting string.
6
+ */
7
+ export declare function JsonStringify(obj: object, prettify?: boolean): string;
8
+ /**
9
+ * Convert a JSON-friendly object, which may encode a class object.
10
+ * @param cc - The class converter.
11
+ * @param obj - The encoded object.
12
+ * @returns The decoded object.
13
+ */
14
+ export declare function convertFromJsonObj(cc: ClassConverter, obj: any): any;
15
+ /**
16
+ * Convert objects or classes to a JSON-friendly object.
17
+ * @param cc - The class converter.
18
+ * @param obj - The object.
19
+ * @returns The encoded object.
20
+ */
21
+ export declare function convertToJsonObj(cc: ClassConverter, obj: any): any;
22
+ //# sourceMappingURL=convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/json-rpc/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAYrE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAqCpE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAmClE"}
@@ -0,0 +1,93 @@
1
+ import { Buffer } from 'buffer';
2
+ /**
3
+ * JSON.stringify helper that handles bigints.
4
+ * @param obj - The object to be stringified.
5
+ * @returns The resulting string.
6
+ */
7
+ export function JsonStringify(obj, prettify) {
8
+ return JSON.stringify(obj, (key, value) => typeof value === 'bigint'
9
+ ? JSON.stringify({
10
+ type: 'bigint',
11
+ data: value.toString(),
12
+ })
13
+ : value, prettify ? 2 : 0);
14
+ }
15
+ /**
16
+ * Convert a JSON-friendly object, which may encode a class object.
17
+ * @param cc - The class converter.
18
+ * @param obj - The encoded object.
19
+ * @returns The decoded object.
20
+ */
21
+ export function convertFromJsonObj(cc, obj) {
22
+ if (obj === null) {
23
+ return undefined; // `null` doesn't work with default args.
24
+ }
25
+ if (!obj) {
26
+ return obj; // Primitive type
27
+ }
28
+ // Is this a serialized Node buffer?
29
+ if (obj.type === 'Buffer' && typeof obj.data === 'string') {
30
+ return Buffer.from(obj.data, 'base64');
31
+ }
32
+ if (obj.type === 'bigint' && typeof obj.data === 'string') {
33
+ return BigInt(obj.data);
34
+ }
35
+ // Is this a convertible type?
36
+ if (typeof obj.type === 'string' && cc.isRegisteredClassName(obj.type)) {
37
+ return cc.toClassObj(obj);
38
+ }
39
+ // Is this an array?
40
+ if (Array.isArray(obj)) {
41
+ return obj.map((x) => convertFromJsonObj(cc, x));
42
+ }
43
+ // Is this a dictionary?
44
+ if (obj.constructor === Object) {
45
+ const newObj = {};
46
+ for (const key of Object.keys(obj)) {
47
+ newObj[key] = convertFromJsonObj(cc, obj[key]);
48
+ }
49
+ return newObj;
50
+ }
51
+ // Leave alone, assume JSON primitive
52
+ return obj;
53
+ }
54
+ /**
55
+ * Convert objects or classes to a JSON-friendly object.
56
+ * @param cc - The class converter.
57
+ * @param obj - The object.
58
+ * @returns The encoded object.
59
+ */
60
+ export function convertToJsonObj(cc, obj) {
61
+ if (!obj) {
62
+ return obj; // Primitive type
63
+ }
64
+ // Is this a Node buffer?
65
+ if (obj instanceof Buffer) {
66
+ return { type: 'Buffer', data: obj.toString('base64') };
67
+ }
68
+ if (typeof obj === 'bigint') {
69
+ return {
70
+ type: 'bigint',
71
+ data: obj.toString(),
72
+ };
73
+ }
74
+ // Is this a convertible type?
75
+ if (cc.isRegisteredClass(obj.constructor)) {
76
+ return cc.toJsonObj(obj);
77
+ }
78
+ // Is this an array?
79
+ if (Array.isArray(obj)) {
80
+ return obj.map((x) => convertToJsonObj(cc, x));
81
+ }
82
+ // Is this a dictionary?
83
+ if (obj.constructor === Object) {
84
+ const newObj = {};
85
+ for (const key of Object.keys(obj)) {
86
+ newObj[key] = convertToJsonObj(cc, obj[key]);
87
+ }
88
+ return newObj;
89
+ }
90
+ // Leave alone, assume JSON primitive
91
+ return obj;
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29uLXJwYy9jb252ZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFaEM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVyxFQUFFLFFBQWtCO0lBQzNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FDbkIsR0FBRyxFQUNILENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ2IsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN2QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7U0FDdkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxLQUFLLEVBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUFrQixFQUFFLEdBQVE7SUFDN0QsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLENBQUMseUNBQXlDO0tBQzVEO0lBRUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNSLE9BQU8sR0FBRyxDQUFDLENBQUMsaUJBQWlCO0tBQzlCO0lBQ0Qsb0NBQW9DO0lBQ3BDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUN6RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4QztJQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxHQUFH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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=convert.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.test.d.ts","sourceRoot":"","sources":["../../src/json-rpc/convert.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ClassConverter } from './class_converter.js';
2
+ import { convertFromJsonObj, convertToJsonObj } from './convert.js';
3
+ import { TestNote } from './fixtures/test_state.js';
4
+ import { Buffer } from 'buffer';
5
+ const TEST_BASE64 = 'YmFzZTY0IGRlY29kZXI=';
6
+ test('test an RPC function over client', () => {
7
+ const cc = new ClassConverter({ TestNote });
8
+ const buffer = Buffer.from(TEST_BASE64, 'base64');
9
+ expect(convertFromJsonObj(cc, convertToJsonObj(cc, buffer)).toString('base64')).toBe(TEST_BASE64);
10
+ const note = new TestNote('1');
11
+ expect(convertFromJsonObj(cc, convertToJsonObj(cc, note))).toBeInstanceOf(TestNote);
12
+ expect(convertFromJsonObj(cc, convertToJsonObj(cc, note)).toString()).toBe('1');
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb24tcnBjL2NvbnZlcnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWhDLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDO0FBQzNDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xHLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEYsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRixDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Contrived example for JSON RPC tests.
3
+ */
4
+ export declare class TestNote {
5
+ private data;
6
+ constructor(data: string);
7
+ /**
8
+ * Create a string representation of this class.
9
+ * @returns The string representation.
10
+ */
11
+ toString(): string;
12
+ /**
13
+ * Creates a string representation of this class.
14
+ * @param data - The data.
15
+ * @returns The string representation.
16
+ */
17
+ static fromString(data: string): TestNote;
18
+ }
19
+ /**
20
+ * Represents a simple state management for TestNote instances.
21
+ * Provides functionality to get a note by index and add notes asynchronously.
22
+ * Primarily used for testing JSON RPC-related functionalities.
23
+ */
24
+ export declare class TestState {
25
+ private notes;
26
+ constructor(notes: TestNote[]);
27
+ /**
28
+ * Retrieve the TestNote instance at the specified index from the notes array.
29
+ * This method allows getting a desired TestNote from the collection of notes
30
+ * maintained by the TestState instance using the provided index value.
31
+ *
32
+ * @param index - The index of the TestNote to be retrieved from the notes array.
33
+ * @returns The TestNote instance corresponding to the given index.
34
+ */
35
+ getNote(index: number): TestNote;
36
+ /**
37
+ * Add an array of TestNote instances to the current TestState's notes.
38
+ * This function simulates asynchronous behavior by waiting for a duration
39
+ * equal to the number of notes being added. It then returns the updated
40
+ * list of TestNote instances in the TestState.
41
+ *
42
+ * @param notes - An array of TestNote instances to be added.
43
+ * @returns A Promise that resolves to an array of TestNote instances, including the newly added notes.
44
+ */
45
+ addNotes(notes: TestNote[]): Promise<TestNote[]>;
46
+ }
47
+ //# sourceMappingURL=test_state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_state.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/fixtures/test_state.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAChC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAGlB;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;CAG1C;AAED;;;;GAIG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,QAAQ,EAAE;IACrC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAGhC;;;;;;;;OAQG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAOvD"}