@aztec/bb.js 3.0.0-canary.a9708bd → 3.0.0-manual.20251030

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 (410) hide show
  1. package/README.md +13 -79
  2. package/dest/browser/barretenberg/backend.d.ts +2 -2
  3. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  4. package/dest/browser/barretenberg/backend.js +40 -25
  5. package/dest/browser/barretenberg/index.d.ts +45 -44
  6. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  7. package/dest/browser/barretenberg/index.js +131 -80
  8. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  9. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  10. package/dest/browser/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  11. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  12. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  13. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  14. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  16. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  17. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  18. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  19. package/dest/browser/bb_backends/browser/index.d.ts +11 -0
  20. package/dest/browser/bb_backends/browser/index.d.ts.map +1 -0
  21. package/dest/browser/bb_backends/browser/index.js +39 -0
  22. package/dest/browser/bb_backends/index.d.ts +45 -0
  23. package/dest/browser/bb_backends/index.d.ts.map +1 -0
  24. package/dest/browser/bb_backends/index.js +15 -0
  25. package/dest/browser/bb_backends/interface.d.ts +33 -0
  26. package/dest/browser/bb_backends/interface.d.ts.map +1 -0
  27. package/dest/browser/bb_backends/interface.js +2 -0
  28. package/dest/browser/bb_backends/sync_to_async_adapter.d.ts +15 -0
  29. package/dest/browser/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  30. package/dest/browser/bb_backends/sync_to_async_adapter.js +20 -0
  31. package/dest/browser/bb_backends/wasm.d.ts +49 -0
  32. package/dest/browser/bb_backends/wasm.d.ts.map +1 -0
  33. package/dest/browser/bb_backends/wasm.js +83 -0
  34. package/dest/browser/bbapi_exception.d.ts +7 -0
  35. package/dest/browser/bbapi_exception.d.ts.map +1 -0
  36. package/dest/browser/bbapi_exception.js +14 -0
  37. package/dest/browser/cbind/generate.js +94 -7
  38. package/dest/browser/cbind/generated/api_types.d.ts +1640 -227
  39. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  40. package/dest/browser/cbind/generated/api_types.js +2366 -478
  41. package/dest/browser/cbind/generated/async.d.ts +52 -13
  42. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  43. package/dest/browser/cbind/generated/async.js +586 -72
  44. package/dest/browser/cbind/generated/curve_constants.d.ts +45 -0
  45. package/dest/browser/cbind/generated/curve_constants.d.ts.map +1 -0
  46. package/dest/browser/cbind/generated/curve_constants.js +45 -0
  47. package/dest/browser/cbind/generated/sync.d.ts +53 -14
  48. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  49. package/dest/browser/cbind/generated/sync.js +548 -72
  50. package/dest/browser/cbind/schema_compiler.d.ts +2 -4
  51. package/dest/browser/cbind/schema_compiler.d.ts.map +1 -1
  52. package/dest/browser/cbind/schema_compiler.js +97 -181
  53. package/dest/browser/index.d.ts +4 -2
  54. package/dest/browser/index.d.ts.map +1 -1
  55. package/dest/browser/index.js +5 -3
  56. package/dest/browser/serialize/index.d.ts +0 -2
  57. package/dest/browser/serialize/index.d.ts.map +1 -1
  58. package/dest/browser/serialize/index.js +1 -3
  59. package/dest/browser/serialize/serialize.d.ts +0 -35
  60. package/dest/browser/serialize/serialize.d.ts.map +1 -1
  61. package/dest/browser/serialize/serialize.js +1 -68
  62. package/dest/browser/types/fields.d.ts +6 -26
  63. package/dest/browser/types/fields.d.ts.map +1 -1
  64. package/dest/browser/types/fields.js +16 -57
  65. package/dest/browser/types/index.d.ts +0 -3
  66. package/dest/browser/types/index.d.ts.map +1 -1
  67. package/dest/browser/types/index.js +1 -4
  68. package/dest/browser/types/point.d.ts +8 -6
  69. package/dest/browser/types/point.d.ts.map +1 -1
  70. package/dest/browser/types/point.js +12 -15
  71. package/dest/node/barretenberg/__snapshots__/pedersen.test.js.snap +2 -2
  72. package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +3 -3
  73. package/dest/node/barretenberg/backend.d.ts +2 -2
  74. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  75. package/dest/node/barretenberg/backend.js +40 -25
  76. package/dest/node/barretenberg/blake2s.test.js +21 -18
  77. package/dest/node/barretenberg/index.d.ts +45 -44
  78. package/dest/node/barretenberg/index.d.ts.map +1 -1
  79. package/dest/node/barretenberg/index.js +131 -80
  80. package/dest/node/barretenberg/pedersen.test.js +24 -17
  81. package/dest/node/barretenberg/poseidon.bench.test.d.ts +2 -0
  82. package/dest/node/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  83. package/dest/node/barretenberg/poseidon.bench.test.js +217 -0
  84. package/dest/node/barretenberg/poseidon.test.js +15 -15
  85. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  86. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  87. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  88. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  89. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  90. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  91. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  92. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  93. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  94. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  95. package/dest/node/barretenberg_wasm/index.test.js +11 -10
  96. package/dest/node/bb_backends/browser/index.d.ts +11 -0
  97. package/dest/node/bb_backends/browser/index.d.ts.map +1 -0
  98. package/dest/node/bb_backends/browser/index.js +39 -0
  99. package/dest/node/bb_backends/index.d.ts +45 -0
  100. package/dest/node/bb_backends/index.d.ts.map +1 -0
  101. package/dest/node/bb_backends/index.js +15 -0
  102. package/dest/node/bb_backends/interface.d.ts +33 -0
  103. package/dest/node/bb_backends/interface.d.ts.map +1 -0
  104. package/dest/node/bb_backends/interface.js +2 -0
  105. package/dest/node/bb_backends/node/index.d.ts +11 -0
  106. package/dest/node/bb_backends/node/index.d.ts.map +1 -0
  107. package/dest/node/bb_backends/node/index.js +80 -0
  108. package/dest/node/bb_backends/node/native_pipe.d.ts +25 -0
  109. package/dest/node/bb_backends/node/native_pipe.d.ts.map +1 -0
  110. package/dest/node/bb_backends/node/native_pipe.js +113 -0
  111. package/dest/node/bb_backends/node/native_shm.d.ts +28 -0
  112. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -0
  113. package/dest/node/bb_backends/node/native_shm.js +150 -0
  114. package/dest/node/bb_backends/node/native_socket.d.ts +34 -0
  115. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -0
  116. package/dest/node/bb_backends/node/native_socket.js +269 -0
  117. package/dest/node/bb_backends/node/platform.d.ts +27 -0
  118. package/dest/node/bb_backends/node/platform.d.ts.map +1 -0
  119. package/dest/node/bb_backends/node/platform.js +124 -0
  120. package/dest/node/bb_backends/sync_to_async_adapter.d.ts +15 -0
  121. package/dest/node/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  122. package/dest/node/bb_backends/sync_to_async_adapter.js +20 -0
  123. package/dest/node/bb_backends/wasm.d.ts +49 -0
  124. package/dest/node/bb_backends/wasm.d.ts.map +1 -0
  125. package/dest/node/bb_backends/wasm.js +83 -0
  126. package/dest/node/bbapi_exception.d.ts +7 -0
  127. package/dest/node/bbapi_exception.d.ts.map +1 -0
  128. package/dest/node/bbapi_exception.js +14 -0
  129. package/dest/node/cbind/generate.js +94 -7
  130. package/dest/node/cbind/generated/api_types.d.ts +1640 -227
  131. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  132. package/dest/node/cbind/generated/api_types.js +2366 -478
  133. package/dest/node/cbind/generated/async.d.ts +52 -13
  134. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  135. package/dest/node/cbind/generated/async.js +586 -72
  136. package/dest/node/cbind/generated/curve_constants.d.ts +45 -0
  137. package/dest/node/cbind/generated/curve_constants.d.ts.map +1 -0
  138. package/dest/node/cbind/generated/curve_constants.js +45 -0
  139. package/dest/node/cbind/generated/sync.d.ts +53 -14
  140. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  141. package/dest/node/cbind/generated/sync.js +548 -72
  142. package/dest/node/cbind/schema_compiler.d.ts +2 -4
  143. package/dest/node/cbind/schema_compiler.d.ts.map +1 -1
  144. package/dest/node/cbind/schema_compiler.js +97 -181
  145. package/dest/node/index.d.ts +4 -2
  146. package/dest/node/index.d.ts.map +1 -1
  147. package/dest/node/index.js +5 -3
  148. package/dest/node/serialize/index.d.ts +0 -2
  149. package/dest/node/serialize/index.d.ts.map +1 -1
  150. package/dest/node/serialize/index.js +1 -3
  151. package/dest/node/serialize/serialize.d.ts +0 -35
  152. package/dest/node/serialize/serialize.d.ts.map +1 -1
  153. package/dest/node/serialize/serialize.js +1 -68
  154. package/dest/node/types/fields.d.ts +6 -26
  155. package/dest/node/types/fields.d.ts.map +1 -1
  156. package/dest/node/types/fields.js +16 -57
  157. package/dest/node/types/index.d.ts +0 -3
  158. package/dest/node/types/index.d.ts.map +1 -1
  159. package/dest/node/types/index.js +1 -4
  160. package/dest/node/types/point.d.ts +8 -6
  161. package/dest/node/types/point.d.ts.map +1 -1
  162. package/dest/node/types/point.js +12 -15
  163. package/dest/node-cjs/barretenberg/backend.d.ts +2 -2
  164. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  165. package/dest/node-cjs/barretenberg/backend.js +38 -23
  166. package/dest/node-cjs/barretenberg/blake2s.test.js +19 -16
  167. package/dest/node-cjs/barretenberg/index.d.ts +45 -44
  168. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  169. package/dest/node-cjs/barretenberg/index.js +137 -85
  170. package/dest/node-cjs/barretenberg/pedersen.test.js +24 -17
  171. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts +2 -0
  172. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  173. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +219 -0
  174. package/dest/node-cjs/barretenberg/poseidon.test.js +15 -15
  175. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  176. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  177. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  178. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  179. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  180. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  181. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  182. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  183. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  184. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +55 -14
  185. package/dest/node-cjs/barretenberg_wasm/index.test.js +11 -10
  186. package/dest/node-cjs/bb_backends/browser/index.d.ts +11 -0
  187. package/dest/node-cjs/bb_backends/browser/index.d.ts.map +1 -0
  188. package/dest/node-cjs/bb_backends/browser/index.js +43 -0
  189. package/dest/node-cjs/bb_backends/index.d.ts +45 -0
  190. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -0
  191. package/dest/node-cjs/bb_backends/index.js +18 -0
  192. package/dest/node-cjs/bb_backends/interface.d.ts +33 -0
  193. package/dest/node-cjs/bb_backends/interface.d.ts.map +1 -0
  194. package/dest/node-cjs/bb_backends/interface.js +3 -0
  195. package/dest/node-cjs/bb_backends/node/index.d.ts +11 -0
  196. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -0
  197. package/dest/node-cjs/bb_backends/node/index.js +84 -0
  198. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts +25 -0
  199. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts.map +1 -0
  200. package/dest/node-cjs/bb_backends/node/native_pipe.js +117 -0
  201. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +28 -0
  202. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -0
  203. package/dest/node-cjs/bb_backends/node/native_shm.js +154 -0
  204. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +34 -0
  205. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -0
  206. package/dest/node-cjs/bb_backends/node/native_socket.js +274 -0
  207. package/dest/node-cjs/bb_backends/node/platform.d.ts +27 -0
  208. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -0
  209. package/dest/node-cjs/bb_backends/node/platform.js +131 -0
  210. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts +15 -0
  211. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  212. package/dest/node-cjs/bb_backends/sync_to_async_adapter.js +24 -0
  213. package/dest/node-cjs/bb_backends/wasm.d.ts +49 -0
  214. package/dest/node-cjs/bb_backends/wasm.d.ts.map +1 -0
  215. package/dest/node-cjs/bb_backends/wasm.js +88 -0
  216. package/dest/node-cjs/bbapi_exception.d.ts +7 -0
  217. package/dest/node-cjs/bbapi_exception.d.ts.map +1 -0
  218. package/dest/node-cjs/bbapi_exception.js +18 -0
  219. package/dest/node-cjs/cbind/generate.js +93 -6
  220. package/dest/node-cjs/cbind/generated/api_types.d.ts +1640 -227
  221. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  222. package/dest/node-cjs/cbind/generated/api_types.js +2572 -516
  223. package/dest/node-cjs/cbind/generated/async.d.ts +52 -13
  224. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  225. package/dest/node-cjs/cbind/generated/async.js +585 -71
  226. package/dest/node-cjs/cbind/generated/curve_constants.d.ts +45 -0
  227. package/dest/node-cjs/cbind/generated/curve_constants.d.ts.map +1 -0
  228. package/dest/node-cjs/cbind/generated/curve_constants.js +48 -0
  229. package/dest/node-cjs/cbind/generated/sync.d.ts +53 -14
  230. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  231. package/dest/node-cjs/cbind/generated/sync.js +547 -71
  232. package/dest/node-cjs/cbind/schema_compiler.d.ts +2 -4
  233. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -1
  234. package/dest/node-cjs/cbind/schema_compiler.js +97 -182
  235. package/dest/node-cjs/index.d.ts +4 -2
  236. package/dest/node-cjs/index.d.ts.map +1 -1
  237. package/dest/node-cjs/index.js +24 -9
  238. package/dest/node-cjs/serialize/index.d.ts +0 -2
  239. package/dest/node-cjs/serialize/index.d.ts.map +1 -1
  240. package/dest/node-cjs/serialize/index.js +1 -3
  241. package/dest/node-cjs/serialize/serialize.d.ts +0 -35
  242. package/dest/node-cjs/serialize/serialize.d.ts.map +1 -1
  243. package/dest/node-cjs/serialize/serialize.js +1 -79
  244. package/dest/node-cjs/types/fields.d.ts +6 -26
  245. package/dest/node-cjs/types/fields.d.ts.map +1 -1
  246. package/dest/node-cjs/types/fields.js +16 -58
  247. package/dest/node-cjs/types/index.d.ts +0 -3
  248. package/dest/node-cjs/types/index.d.ts.map +1 -1
  249. package/dest/node-cjs/types/index.js +1 -4
  250. package/dest/node-cjs/types/point.d.ts +8 -6
  251. package/dest/node-cjs/types/point.d.ts.map +1 -1
  252. package/dest/node-cjs/types/point.js +13 -16
  253. package/package.json +6 -6
  254. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +2 -2
  255. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +3 -3
  256. package/src/barretenberg/backend.ts +54 -42
  257. package/src/barretenberg/blake2s.test.ts +20 -21
  258. package/src/barretenberg/index.ts +137 -118
  259. package/src/barretenberg/pedersen.test.ts +23 -16
  260. package/src/barretenberg/poseidon.bench.test.ts +268 -0
  261. package/src/barretenberg/poseidon.test.ts +14 -14
  262. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +3 -3
  263. package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +17 -9
  264. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +67 -16
  265. package/src/barretenberg_wasm/index.test.ts +12 -11
  266. package/src/bb_backends/browser/index.ts +50 -0
  267. package/src/bb_backends/index.ts +49 -0
  268. package/src/bb_backends/interface.ts +35 -0
  269. package/src/bb_backends/node/index.ts +94 -0
  270. package/src/bb_backends/node/native_pipe.ts +127 -0
  271. package/src/bb_backends/node/native_shm.ts +171 -0
  272. package/src/bb_backends/node/native_socket.ts +312 -0
  273. package/src/bb_backends/node/platform.ts +151 -0
  274. package/src/bb_backends/sync_to_async_adapter.ts +21 -0
  275. package/src/bb_backends/wasm.ts +103 -0
  276. package/src/bbapi_exception.ts +13 -0
  277. package/src/cbind/README.md +1 -1
  278. package/src/cbind/generate.ts +99 -6
  279. package/src/cbind/schema_compiler.ts +156 -244
  280. package/src/index.ts +29 -1
  281. package/src/serialize/index.ts +0 -2
  282. package/src/serialize/serialize.ts +0 -82
  283. package/src/types/fields.ts +15 -64
  284. package/src/types/index.ts +0 -3
  285. package/src/types/point.ts +13 -19
  286. package/dest/browser/barretenberg_api/index.d.ts +0 -109
  287. package/dest/browser/barretenberg_api/index.d.ts.map +0 -1
  288. package/dest/browser/barretenberg_api/index.js +0 -699
  289. package/dest/browser/cbind/generated/native.d.ts +0 -31
  290. package/dest/browser/cbind/generated/native.d.ts.map +0 -1
  291. package/dest/browser/cbind/generated/native.js +0 -234
  292. package/dest/browser/serialize/buffer_reader.d.ts +0 -28
  293. package/dest/browser/serialize/buffer_reader.d.ts.map +0 -1
  294. package/dest/browser/serialize/buffer_reader.js +0 -66
  295. package/dest/browser/serialize/output_type.d.ts +0 -11
  296. package/dest/browser/serialize/output_type.d.ts.map +0 -1
  297. package/dest/browser/serialize/output_type.js +0 -44
  298. package/dest/browser/types/fixed_size_buffer.d.ts +0 -26
  299. package/dest/browser/types/fixed_size_buffer.d.ts.map +0 -1
  300. package/dest/browser/types/fixed_size_buffer.js +0 -51
  301. package/dest/browser/types/ptr.d.ts +0 -13
  302. package/dest/browser/types/ptr.d.ts.map +0 -1
  303. package/dest/browser/types/ptr.js +0 -19
  304. package/dest/browser/types/raw_buffer.d.ts +0 -3
  305. package/dest/browser/types/raw_buffer.d.ts.map +0 -1
  306. package/dest/browser/types/raw_buffer.js +0 -5
  307. package/dest/node/barretenberg/common.test.d.ts +0 -2
  308. package/dest/node/barretenberg/common.test.d.ts.map +0 -1
  309. package/dest/node/barretenberg/common.test.js +0 -20
  310. package/dest/node/barretenberg_api/index.d.ts +0 -109
  311. package/dest/node/barretenberg_api/index.d.ts.map +0 -1
  312. package/dest/node/barretenberg_api/index.js +0 -699
  313. package/dest/node/bindgen/function_declaration.d.ts +0 -11
  314. package/dest/node/bindgen/function_declaration.d.ts.map +0 -1
  315. package/dest/node/bindgen/function_declaration.js +0 -2
  316. package/dest/node/bindgen/index.d.ts +0 -2
  317. package/dest/node/bindgen/index.d.ts.map +0 -1
  318. package/dest/node/bindgen/index.js +0 -15
  319. package/dest/node/bindgen/mappings.d.ts +0 -4
  320. package/dest/node/bindgen/mappings.d.ts.map +0 -1
  321. package/dest/node/bindgen/mappings.js +0 -64
  322. package/dest/node/bindgen/rust.d.ts +0 -2
  323. package/dest/node/bindgen/rust.d.ts.map +0 -1
  324. package/dest/node/bindgen/rust.js +0 -43
  325. package/dest/node/bindgen/to_camel_case.d.ts +0 -2
  326. package/dest/node/bindgen/to_camel_case.d.ts.map +0 -1
  327. package/dest/node/bindgen/to_camel_case.js +0 -11
  328. package/dest/node/bindgen/typescript.d.ts +0 -2
  329. package/dest/node/bindgen/typescript.d.ts.map +0 -1
  330. package/dest/node/bindgen/typescript.js +0 -100
  331. package/dest/node/cbind/generated/native.d.ts +0 -31
  332. package/dest/node/cbind/generated/native.d.ts.map +0 -1
  333. package/dest/node/cbind/generated/native.js +0 -234
  334. package/dest/node/main.d.ts +0 -13
  335. package/dest/node/main.d.ts.map +0 -1
  336. package/dest/node/main.js +0 -459
  337. package/dest/node/serialize/buffer_reader.d.ts +0 -28
  338. package/dest/node/serialize/buffer_reader.d.ts.map +0 -1
  339. package/dest/node/serialize/buffer_reader.js +0 -66
  340. package/dest/node/serialize/output_type.d.ts +0 -11
  341. package/dest/node/serialize/output_type.d.ts.map +0 -1
  342. package/dest/node/serialize/output_type.js +0 -44
  343. package/dest/node/types/fixed_size_buffer.d.ts +0 -26
  344. package/dest/node/types/fixed_size_buffer.d.ts.map +0 -1
  345. package/dest/node/types/fixed_size_buffer.js +0 -51
  346. package/dest/node/types/ptr.d.ts +0 -13
  347. package/dest/node/types/ptr.d.ts.map +0 -1
  348. package/dest/node/types/ptr.js +0 -19
  349. package/dest/node/types/raw_buffer.d.ts +0 -3
  350. package/dest/node/types/raw_buffer.d.ts.map +0 -1
  351. package/dest/node/types/raw_buffer.js +0 -5
  352. package/dest/node-cjs/barretenberg/common.test.d.ts +0 -2
  353. package/dest/node-cjs/barretenberg/common.test.d.ts.map +0 -1
  354. package/dest/node-cjs/barretenberg/common.test.js +0 -22
  355. package/dest/node-cjs/barretenberg_api/index.d.ts +0 -109
  356. package/dest/node-cjs/barretenberg_api/index.d.ts.map +0 -1
  357. package/dest/node-cjs/barretenberg_api/index.js +0 -704
  358. package/dest/node-cjs/bindgen/function_declaration.d.ts +0 -11
  359. package/dest/node-cjs/bindgen/function_declaration.d.ts.map +0 -1
  360. package/dest/node-cjs/bindgen/function_declaration.js +0 -3
  361. package/dest/node-cjs/bindgen/index.d.ts +0 -2
  362. package/dest/node-cjs/bindgen/index.d.ts.map +0 -1
  363. package/dest/node-cjs/bindgen/index.js +0 -17
  364. package/dest/node-cjs/bindgen/mappings.d.ts +0 -4
  365. package/dest/node-cjs/bindgen/mappings.d.ts.map +0 -1
  366. package/dest/node-cjs/bindgen/mappings.js +0 -69
  367. package/dest/node-cjs/bindgen/rust.d.ts +0 -2
  368. package/dest/node-cjs/bindgen/rust.d.ts.map +0 -1
  369. package/dest/node-cjs/bindgen/rust.js +0 -47
  370. package/dest/node-cjs/bindgen/to_camel_case.d.ts +0 -2
  371. package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +0 -1
  372. package/dest/node-cjs/bindgen/to_camel_case.js +0 -14
  373. package/dest/node-cjs/bindgen/typescript.d.ts +0 -2
  374. package/dest/node-cjs/bindgen/typescript.d.ts.map +0 -1
  375. package/dest/node-cjs/bindgen/typescript.js +0 -104
  376. package/dest/node-cjs/cbind/generated/native.d.ts +0 -31
  377. package/dest/node-cjs/cbind/generated/native.d.ts.map +0 -1
  378. package/dest/node-cjs/cbind/generated/native.js +0 -238
  379. package/dest/node-cjs/main.d.ts +0 -13
  380. package/dest/node-cjs/main.d.ts.map +0 -1
  381. package/dest/node-cjs/main.js +0 -470
  382. package/dest/node-cjs/serialize/buffer_reader.d.ts +0 -28
  383. package/dest/node-cjs/serialize/buffer_reader.d.ts.map +0 -1
  384. package/dest/node-cjs/serialize/buffer_reader.js +0 -70
  385. package/dest/node-cjs/serialize/output_type.d.ts +0 -11
  386. package/dest/node-cjs/serialize/output_type.d.ts.map +0 -1
  387. package/dest/node-cjs/serialize/output_type.js +0 -51
  388. package/dest/node-cjs/types/fixed_size_buffer.d.ts +0 -26
  389. package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +0 -1
  390. package/dest/node-cjs/types/fixed_size_buffer.js +0 -57
  391. package/dest/node-cjs/types/ptr.d.ts +0 -13
  392. package/dest/node-cjs/types/ptr.d.ts.map +0 -1
  393. package/dest/node-cjs/types/ptr.js +0 -23
  394. package/dest/node-cjs/types/raw_buffer.d.ts +0 -3
  395. package/dest/node-cjs/types/raw_buffer.d.ts.map +0 -1
  396. package/dest/node-cjs/types/raw_buffer.js +0 -9
  397. package/src/barretenberg/common.test.ts +0 -23
  398. package/src/barretenberg_api/index.ts +0 -1216
  399. package/src/bindgen/function_declaration.ts +0 -11
  400. package/src/bindgen/index.ts +0 -17
  401. package/src/bindgen/mappings.ts +0 -67
  402. package/src/bindgen/rust.ts +0 -52
  403. package/src/bindgen/to_camel_case.ts +0 -10
  404. package/src/bindgen/typescript.ts +0 -116
  405. package/src/main.ts +0 -534
  406. package/src/serialize/buffer_reader.ts +0 -85
  407. package/src/serialize/output_type.ts +0 -53
  408. package/src/types/fixed_size_buffer.ts +0 -59
  409. package/src/types/ptr.ts +0 -20
  410. package/src/types/raw_buffer.ts +0 -3
@@ -0,0 +1,312 @@
1
+ import { spawn, ChildProcess } from 'child_process';
2
+ import * as net from 'net';
3
+ import * as fs from 'fs';
4
+ import * as os from 'os';
5
+ import * as path from 'path';
6
+ import { IMsgpackBackendAsync } from '../interface.js';
7
+ import { findPackageRoot } from './platform.js';
8
+
9
+ /**
10
+ * Asynchronous native backend that communicates with bb binary via Unix Domain Socket.
11
+ * Uses event-based I/O with a state machine to handle partial reads.
12
+ *
13
+ * Architecture: bb acts as the SERVER, TypeScript is the CLIENT
14
+ * - bb creates the socket and listens for connections
15
+ * - TypeScript waits for socket file to exist, then connects
16
+ *
17
+ * Protocol:
18
+ * - Request: 4-byte little-endian length + msgpack buffer
19
+ * - Response: 4-byte little-endian length + msgpack buffer
20
+ */
21
+ export class BarretenbergNativeSocketAsyncBackend implements IMsgpackBackendAsync {
22
+ private process: ChildProcess;
23
+ private socket: net.Socket | null = null;
24
+ private socketPath: string;
25
+ private connectionPromise: Promise<void>;
26
+ private connectionTimeout: NodeJS.Timeout | null = null;
27
+
28
+ // Queue of pending callbacks for pipelined requests
29
+ // Responses come back in FIFO order, so we match them with queued callbacks
30
+ private pendingCallbacks: Array<{
31
+ resolve: (data: Uint8Array) => void;
32
+ reject: (error: Error) => void;
33
+ }> = [];
34
+
35
+ // State machine for reading responses
36
+ private readingLength: boolean = true;
37
+ private lengthBuffer: Buffer = Buffer.alloc(4);
38
+ private lengthBytesRead: number = 0;
39
+ private responseLength: number = 0;
40
+ private responseBuffer: Buffer | null = null;
41
+ private responseBytesRead: number = 0;
42
+
43
+ constructor(bbBinaryPath: string, threads?: number) {
44
+ // Create a unique socket path in temp directory
45
+ this.socketPath = path.join(os.tmpdir(), `bb-${process.pid}-${Date.now()}.sock`);
46
+
47
+ // Ensure socket path doesn't already exist (cleanup from previous crashes)
48
+ if (fs.existsSync(this.socketPath)) {
49
+ fs.unlinkSync(this.socketPath);
50
+ }
51
+
52
+ let connectionResolve: (() => void) | null = null;
53
+ let connectionReject: ((error: Error) => void) | null = null;
54
+
55
+ this.connectionPromise = new Promise<void>((resolve, reject) => {
56
+ connectionResolve = resolve;
57
+ connectionReject = reject;
58
+ });
59
+
60
+ // Set HARDWARE_CONCURRENCY if threads specified
61
+ const env = threads !== undefined ? { ...process.env, HARDWARE_CONCURRENCY: threads.toString() } : process.env;
62
+
63
+ // Spawn bb process - it will create the socket server
64
+ const args = [bbBinaryPath, 'msgpack', 'run', '--input', this.socketPath];
65
+ this.process = spawn(findPackageRoot() + '/scripts/kill_wrapper.sh', args, {
66
+ stdio: ['ignore', 'ignore', 'ignore'],
67
+ env,
68
+ });
69
+ // Disconnect from event loop so process can exit. The kill wrapper will reap bb once parent (node) dies.
70
+ this.process.unref();
71
+
72
+ this.process.on('error', err => {
73
+ if (connectionReject) {
74
+ connectionReject(new Error(`Native backend process error: ${err.message}`));
75
+ connectionReject = null;
76
+ connectionResolve = null;
77
+ }
78
+ // Reject all pending callbacks
79
+ const error = new Error(`Native backend process error: ${err.message}`);
80
+ for (const callback of this.pendingCallbacks) {
81
+ callback.reject(error);
82
+ }
83
+ this.pendingCallbacks = [];
84
+ });
85
+
86
+ this.process.on('exit', (code, signal) => {
87
+ const errorMsg =
88
+ code !== null && code !== 0
89
+ ? `Native backend process exited with code ${code}`
90
+ : signal && signal !== 'SIGTERM'
91
+ ? `Native backend process killed with signal ${signal}`
92
+ : 'Native backend process exited unexpectedly';
93
+
94
+ if (connectionReject) {
95
+ connectionReject(new Error(errorMsg));
96
+ connectionReject = null;
97
+ connectionResolve = null;
98
+ }
99
+ // Reject all pending callbacks
100
+ const error = new Error(errorMsg);
101
+ for (const callback of this.pendingCallbacks) {
102
+ callback.reject(error);
103
+ }
104
+ this.pendingCallbacks = [];
105
+ });
106
+
107
+ // Wait for bb to create socket file, then connect
108
+ this.waitForSocketAndConnect()
109
+ .then(() => {
110
+ if (connectionResolve) {
111
+ connectionResolve();
112
+ connectionResolve = null;
113
+ connectionReject = null;
114
+ }
115
+ })
116
+ .catch(err => {
117
+ if (connectionReject) {
118
+ connectionReject(err);
119
+ connectionReject = null;
120
+ connectionResolve = null;
121
+ }
122
+ });
123
+
124
+ // Set a timeout for connection
125
+ this.connectionTimeout = setTimeout(() => {
126
+ if (connectionReject) {
127
+ connectionReject(new Error('Timeout waiting for bb socket connection'));
128
+ connectionReject = null;
129
+ connectionResolve = null;
130
+ this.cleanup();
131
+ }
132
+ }, 5000);
133
+ }
134
+
135
+ private async waitForSocketAndConnect(): Promise<void> {
136
+ // Poll for socket file to exist (bb is creating it)
137
+ const startTime = Date.now();
138
+ while (!fs.existsSync(this.socketPath)) {
139
+ if (Date.now() - startTime > 5000) {
140
+ throw new Error('Timeout waiting for bb to create socket file');
141
+ }
142
+ await new Promise(resolve => setTimeout(resolve, 50));
143
+ }
144
+
145
+ // Additional check: ensure it's actually a socket
146
+ const stats = fs.statSync(this.socketPath);
147
+ if (!stats.isSocket()) {
148
+ throw new Error(`Path exists but is not a socket: ${this.socketPath}`);
149
+ }
150
+
151
+ // Connect to bb's socket server as a client
152
+ return new Promise<void>((resolve, reject) => {
153
+ this.socket = net.connect(this.socketPath);
154
+
155
+ // Disable Nagle's algorithm for lower latency
156
+ this.socket.setNoDelay(true);
157
+
158
+ // Set up event handlers
159
+ this.socket.once('connect', () => {
160
+ this.socket!.unref();
161
+
162
+ // Clear connection timeout on successful connection
163
+ if (this.connectionTimeout) {
164
+ clearTimeout(this.connectionTimeout);
165
+ this.connectionTimeout = null;
166
+ }
167
+ resolve();
168
+ });
169
+
170
+ this.socket.once('error', err => {
171
+ reject(new Error(`Failed to connect to bb socket: ${err.message}`));
172
+ });
173
+
174
+ // Set up data handler after connection is established
175
+ this.socket.on('data', (chunk: Buffer) => {
176
+ this.handleData(chunk);
177
+ });
178
+
179
+ // Handle ongoing errors after initial connection
180
+ this.socket.on('error', err => {
181
+ // Reject all pending callbacks
182
+ const error = new Error(`Socket error: ${err.message}`);
183
+ for (const callback of this.pendingCallbacks) {
184
+ callback.reject(error);
185
+ }
186
+ this.pendingCallbacks = [];
187
+ });
188
+
189
+ this.socket.on('end', () => {
190
+ // Reject all pending callbacks
191
+ const error = new Error('Socket connection ended unexpectedly');
192
+ for (const callback of this.pendingCallbacks) {
193
+ callback.reject(error);
194
+ }
195
+ this.pendingCallbacks = [];
196
+ });
197
+ });
198
+ }
199
+
200
+ private handleData(chunk: Buffer): void {
201
+ let offset = 0;
202
+
203
+ while (offset < chunk.length) {
204
+ if (this.readingLength) {
205
+ // Reading 4-byte length prefix
206
+ const bytesToCopy = Math.min(4 - this.lengthBytesRead, chunk.length - offset);
207
+ chunk.copy(this.lengthBuffer, this.lengthBytesRead, offset, offset + bytesToCopy);
208
+ this.lengthBytesRead += bytesToCopy;
209
+ offset += bytesToCopy;
210
+
211
+ if (this.lengthBytesRead === 4) {
212
+ // Length is complete, switch to reading data
213
+ this.responseLength = this.lengthBuffer.readUInt32LE(0);
214
+ this.responseBuffer = Buffer.alloc(this.responseLength);
215
+ this.responseBytesRead = 0;
216
+ this.readingLength = false;
217
+ }
218
+ } else {
219
+ // Reading response data
220
+ const bytesToCopy = Math.min(this.responseLength - this.responseBytesRead, chunk.length - offset);
221
+ chunk.copy(this.responseBuffer!, this.responseBytesRead, offset, offset + bytesToCopy);
222
+ this.responseBytesRead += bytesToCopy;
223
+ offset += bytesToCopy;
224
+
225
+ if (this.responseBytesRead === this.responseLength) {
226
+ // Response is complete - dequeue the next pending callback (FIFO)
227
+ const callback = this.pendingCallbacks.shift();
228
+ if (callback) {
229
+ callback.resolve(new Uint8Array(this.responseBuffer!));
230
+ } else {
231
+ // This shouldn't happen - response without a pending request
232
+ console.warn('Received response but no pending callback');
233
+ }
234
+
235
+ // Reset state for next message
236
+ this.readingLength = true;
237
+ this.lengthBytesRead = 0;
238
+ this.responseLength = 0;
239
+ this.responseBuffer = null;
240
+ this.responseBytesRead = 0;
241
+ }
242
+ }
243
+ }
244
+ }
245
+
246
+ async call(inputBuffer: Uint8Array): Promise<Uint8Array> {
247
+ // Wait for connection to be established
248
+ await this.connectionPromise;
249
+
250
+ if (!this.socket) {
251
+ throw new Error('Socket not connected');
252
+ }
253
+
254
+ return new Promise((resolve, reject) => {
255
+ // Enqueue this promise's callbacks (FIFO order)
256
+ this.pendingCallbacks.push({ resolve, reject });
257
+
258
+ // Write request: 4-byte little-endian length + msgpack data
259
+ // Socket will buffer these if needed, maintaining order
260
+ const lengthBuf = Buffer.alloc(4);
261
+ lengthBuf.writeUInt32LE(inputBuffer.length, 0);
262
+ this.socket!.write(lengthBuf);
263
+ this.socket!.write(inputBuffer);
264
+ });
265
+ }
266
+
267
+ private cleanup(): void {
268
+ // Reject any remaining pending callbacks
269
+ const error = new Error('Backend connection closed');
270
+ for (const callback of this.pendingCallbacks) {
271
+ callback.reject(error);
272
+ }
273
+ this.pendingCallbacks = [];
274
+
275
+ try {
276
+ // Remove all event listeners to prevent hanging
277
+ if (this.socket) {
278
+ this.socket.removeAllListeners();
279
+ // Unref so socket doesn't keep event loop alive
280
+ // this.socket.unref();
281
+ this.socket.destroy();
282
+ }
283
+ } catch (e) {
284
+ // Ignore errors during cleanup
285
+ }
286
+
287
+ // Clear connection timeout if still pending
288
+ if (this.connectionTimeout) {
289
+ clearTimeout(this.connectionTimeout);
290
+ this.connectionTimeout = null;
291
+ }
292
+
293
+ // Remove process event listeners and unref to not block event loop
294
+ this.process.removeAllListeners();
295
+ // this.process.unref();
296
+
297
+ // Don't try to unlink socket - bb owns it and will clean it up
298
+ }
299
+
300
+ async destroy(): Promise<void> {
301
+ // Cleanup first (closes socket, unrefs everything)
302
+ this.cleanup();
303
+
304
+ // Send SIGTERM for graceful shutdown
305
+ // Process is unref'd so won't block event loop - just kill and return
306
+ try {
307
+ this.process.kill('SIGTERM');
308
+ } catch (e) {
309
+ // Already dead
310
+ }
311
+ }
312
+ }
@@ -0,0 +1,151 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ function getCurrentDir() {
6
+ if (typeof __dirname !== 'undefined') {
7
+ return __dirname;
8
+ } else {
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ // @ts-ignore
11
+ return path.dirname(fileURLToPath(import.meta.url));
12
+ }
13
+ }
14
+
15
+ /**
16
+ * Find package root by climbing directory tree until package.json is found.
17
+ * @param startDir Starting directory to search from
18
+ * @returns Absolute path to package root, or null if not found
19
+ */
20
+ export function findPackageRoot(): string | null {
21
+ let currentDir = getCurrentDir();
22
+ const root = path.parse(currentDir).root;
23
+
24
+ while (currentDir !== root) {
25
+ const packageJsonPath = path.join(currentDir, 'package.json');
26
+ if (fs.existsSync(packageJsonPath)) {
27
+ return currentDir;
28
+ }
29
+ currentDir = path.dirname(currentDir);
30
+ }
31
+
32
+ return null;
33
+ }
34
+
35
+ /**
36
+ * Supported platform/architecture combinations.
37
+ */
38
+ export type Platform = 'x86_64-linux' | 'x86_64-darwin' | 'aarch64-linux' | 'aarch64-darwin';
39
+
40
+ /**
41
+ * Map from Platform to build directory name.
42
+ */
43
+ const PLATFORM_TO_BUILD_DIR: Record<Platform, string> = {
44
+ 'x86_64-linux': 'amd64-linux',
45
+ 'x86_64-darwin': 'amd64-macos',
46
+ 'aarch64-linux': 'arm64-linux',
47
+ 'aarch64-darwin': 'arm64-macos',
48
+ };
49
+
50
+ /**
51
+ * Detect the current platform and architecture.
52
+ * @returns Platform identifier or null if unsupported
53
+ */
54
+ export function detectPlatform(): Platform | null {
55
+ const arch = process.arch; // 'x64' | 'arm64' | ...
56
+ const platform = process.platform; // 'linux' | 'darwin' | 'win32' | ...
57
+
58
+ if (arch === 'x64' && platform === 'linux') {
59
+ return 'x86_64-linux';
60
+ }
61
+ if (arch === 'x64' && platform === 'darwin') {
62
+ return 'x86_64-darwin';
63
+ }
64
+ if (arch === 'arm64' && platform === 'linux') {
65
+ return 'aarch64-linux';
66
+ }
67
+ if (arch === 'arm64' && platform === 'darwin') {
68
+ return 'aarch64-darwin';
69
+ }
70
+
71
+ return null;
72
+ }
73
+
74
+ /**
75
+ * Find the bb binary for the native backend.
76
+ * @param customPath Optional custom path to bb binary (overrides automatic detection)
77
+ * @returns Absolute path to bb binary, or null if not found
78
+ *
79
+ * Search order:
80
+ * 1. If customPath is provided and exists, return it
81
+ * 2. Otherwise search in <package-root>/build/<platform>/bb
82
+ */
83
+ export function findBbBinary(customPath?: string): string | null {
84
+ // Check custom path first if provided
85
+ if (customPath) {
86
+ if (fs.existsSync(customPath)) {
87
+ return path.resolve(customPath);
88
+ }
89
+ // Custom path provided but doesn't exist - return null
90
+ return null;
91
+ }
92
+
93
+ // Automatic detection
94
+ const platform = detectPlatform();
95
+ if (!platform) {
96
+ return null;
97
+ }
98
+
99
+ const buildDir = PLATFORM_TO_BUILD_DIR[platform];
100
+
101
+ // Get package root by climbing directory tree to find package.json
102
+ const packageRoot = findPackageRoot();
103
+
104
+ if (!packageRoot) {
105
+ return null;
106
+ }
107
+
108
+ // Check in build/<platform>/bb
109
+ const bbPath = path.join(packageRoot, 'build', buildDir, 'bb');
110
+
111
+ if (fs.existsSync(bbPath)) {
112
+ return bbPath;
113
+ }
114
+
115
+ return null;
116
+ }
117
+
118
+ export function findNapiBinary(customPath?: string): string | null {
119
+ // Check custom path first if provided
120
+ if (customPath) {
121
+ if (fs.existsSync(customPath)) {
122
+ return path.resolve(customPath);
123
+ }
124
+ // Custom path provided but doesn't exist - return null
125
+ return null;
126
+ }
127
+
128
+ // Automatic detection
129
+ const platform = detectPlatform();
130
+ if (!platform) {
131
+ return null;
132
+ }
133
+
134
+ const buildDir = PLATFORM_TO_BUILD_DIR[platform];
135
+
136
+ // Get package root by climbing directory tree to find package.json
137
+ const packageRoot = findPackageRoot();
138
+
139
+ if (!packageRoot) {
140
+ return null;
141
+ }
142
+
143
+ // Check in build/<platform>/nodejs_module.node
144
+ const bbPath = path.join(packageRoot, 'build', buildDir, 'nodejs_module.node');
145
+
146
+ if (fs.existsSync(bbPath)) {
147
+ return bbPath;
148
+ }
149
+
150
+ return null;
151
+ }
@@ -0,0 +1,21 @@
1
+ import { IMsgpackBackendSync, IMsgpackBackendAsync } from './interface.js';
2
+
3
+ /**
4
+ * Adapter that wraps a synchronous backend to provide an async interface.
5
+ * The sync backend's blocking calls are simply wrapped in Promise.resolve().
6
+ *
7
+ * This is useful for backends like shared memory where the call is actually
8
+ * synchronous but we want to use it with the async API.
9
+ */
10
+ export class SyncToAsyncAdapter implements IMsgpackBackendAsync {
11
+ constructor(private syncBackend: IMsgpackBackendSync) {}
12
+
13
+ async call(inputBuffer: Uint8Array): Promise<Uint8Array> {
14
+ // The sync backend blocks until complete, so just wrap in a resolved promise
15
+ return Promise.resolve(this.syncBackend.call(inputBuffer));
16
+ }
17
+
18
+ async destroy(): Promise<void> {
19
+ this.syncBackend.destroy();
20
+ }
21
+ }
@@ -0,0 +1,103 @@
1
+ import { BarretenbergWasmMain, BarretenbergWasmMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';
2
+ import { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';
3
+ import { IMsgpackBackendSync, IMsgpackBackendAsync } from './interface.js';
4
+ import { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';
5
+ import { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';
6
+ import { createDebugLogger } from '../log/index.js';
7
+ import { proxy } from 'comlink';
8
+
9
+ /**
10
+ * Synchronous WASM backend that wraps BarretenbergWasmMain.
11
+ * Encapsulates all WASM initialization and memory management.
12
+ */
13
+ export class BarretenbergWasmSyncBackend implements IMsgpackBackendSync {
14
+ private constructor(private wasm: BarretenbergWasmMain) {}
15
+
16
+ /**
17
+ * Create and initialize a synchronous WASM backend.
18
+ * @param wasmPath Optional path to WASM files
19
+ * @param logger Optional logging function
20
+ */
21
+ static async new(wasmPath?: string, logger?: (msg: string) => void): Promise<BarretenbergWasmSyncBackend> {
22
+ const wasm = new BarretenbergWasmMain();
23
+ const { module, threads } = await fetchModuleAndThreads(1, wasmPath, logger);
24
+ await wasm.init(module, threads, logger);
25
+ return new BarretenbergWasmSyncBackend(wasm);
26
+ }
27
+
28
+ call(inputBuffer: Uint8Array): Uint8Array {
29
+ return this.wasm.cbindCall('bbapi', inputBuffer);
30
+ }
31
+
32
+ destroy(): void {
33
+ // BarretenbergWasmMain has async destroy, but for sync API we call it without awaiting
34
+ // This is consistent with the synchronous semantics expected by the caller
35
+ void this.wasm.destroy();
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Asynchronous WASM backend that supports both direct WASM and worker-based modes.
41
+ *
42
+ * Worker mode (default): Runs WASM on a worker thread to avoid blocking the main thread. Used in browsers.
43
+ * Direct mode: Runs WASM directly on the calling thread. Used by node.js for better performance.
44
+ */
45
+ export class BarretenbergWasmAsyncBackend implements IMsgpackBackendAsync {
46
+ private constructor(
47
+ private wasm: BarretenbergWasmMain | BarretenbergWasmMainWorker,
48
+ private worker?: any,
49
+ ) {}
50
+
51
+ /**
52
+ * Create and initialize an asynchronous WASM backend.
53
+ * @param options.threads Number of threads (defaults to hardware max, up to 32 for parallel proving)
54
+ * @param options.wasmPath Optional path to WASM files
55
+ * @param options.logger Optional logging function
56
+ * @param options.memory Optional initial and maximum memory configuration
57
+ * @param options.useWorker Run on worker thread (default: true for browser safety)
58
+ */
59
+ static async new(
60
+ options: {
61
+ threads?: number;
62
+ wasmPath?: string;
63
+ logger?: (msg: string) => void;
64
+ memory?: { initial?: number; maximum?: number };
65
+ useWorker?: boolean;
66
+ } = {},
67
+ ): Promise<BarretenbergWasmAsyncBackend> {
68
+ // Default to worker mode for browser safety
69
+ const useWorker = options.useWorker ?? true;
70
+
71
+ if (useWorker) {
72
+ // Worker-based mode: runs on worker thread (browser-safe)
73
+ const worker = await createMainWorker();
74
+ const wasm = getRemoteBarretenbergWasm<BarretenbergWasmMainWorker>(worker);
75
+ const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath, options.logger);
76
+ await wasm.init(
77
+ module,
78
+ threads,
79
+ proxy(options.logger ?? createDebugLogger('bb_wasm_async')),
80
+ options.memory?.initial,
81
+ options.memory?.maximum,
82
+ );
83
+ return new BarretenbergWasmAsyncBackend(wasm, worker);
84
+ } else {
85
+ // Direct mode: runs on calling thread (faster but blocks thread)
86
+ const wasm = new BarretenbergWasmMain();
87
+ const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath, options.logger);
88
+ await wasm.init(module, threads, options.logger, options.memory?.initial, options.memory?.maximum);
89
+ return new BarretenbergWasmAsyncBackend(wasm);
90
+ }
91
+ }
92
+
93
+ async call(inputBuffer: Uint8Array): Promise<Uint8Array> {
94
+ return this.wasm.cbindCall('bbapi', inputBuffer);
95
+ }
96
+
97
+ async destroy(): Promise<void> {
98
+ await this.wasm.destroy();
99
+ if (this.worker) {
100
+ await this.worker.terminate();
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Exception thrown when barretenberg API operations fail
3
+ */
4
+ export class BBApiException extends Error {
5
+ constructor(message: string) {
6
+ super(message);
7
+ this.name = 'BBApiException';
8
+ // Maintains proper stack trace for where our error was thrown (only available on V8)
9
+ if (Error.captureStackTrace) {
10
+ Error.captureStackTrace(this, BBApiException);
11
+ }
12
+ }
13
+ }
@@ -1 +1 @@
1
- Derive bindings from the reported scheme of msgpack from bb. Currently redundant with bindgen, until that is supplanted.
1
+ Derives bindings from the reported msgpack schema from bb.