@aztec/bb.js 3.0.0-nightly.20251015 → 3.0.0-nightly.20251022

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 (368) hide show
  1. package/README.md +12 -78
  2. package/dest/browser/barretenberg/backend.d.ts +1 -1
  3. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  4. package/dest/browser/barretenberg/backend.js +21 -13
  5. package/dest/browser/barretenberg/index.d.ts +44 -43
  6. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  7. package/dest/browser/barretenberg/index.js +130 -79
  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 +51 -13
  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 +56 -0
  32. package/dest/browser/bb_backends/wasm.d.ts.map +1 -0
  33. package/dest/browser/bb_backends/wasm.js +90 -0
  34. package/dest/browser/cbind/generate.js +2 -7
  35. package/dest/browser/cbind/generated/api_types.d.ts +1167 -0
  36. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  37. package/dest/browser/cbind/generated/api_types.js +1609 -47
  38. package/dest/browser/cbind/generated/async.d.ts +38 -4
  39. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  40. package/dest/browser/cbind/generated/async.js +327 -21
  41. package/dest/browser/cbind/generated/sync.d.ts +39 -5
  42. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  43. package/dest/browser/cbind/generated/sync.js +294 -21
  44. package/dest/browser/cbind/schema_compiler.d.ts +2 -4
  45. package/dest/browser/cbind/schema_compiler.d.ts.map +1 -1
  46. package/dest/browser/cbind/schema_compiler.js +74 -178
  47. package/dest/browser/index.d.ts +2 -2
  48. package/dest/browser/index.d.ts.map +1 -1
  49. package/dest/browser/index.js +3 -3
  50. package/dest/browser/serialize/index.d.ts +0 -1
  51. package/dest/browser/serialize/index.d.ts.map +1 -1
  52. package/dest/browser/serialize/index.js +1 -2
  53. package/dest/browser/serialize/serialize.d.ts +0 -35
  54. package/dest/browser/serialize/serialize.d.ts.map +1 -1
  55. package/dest/browser/serialize/serialize.js +1 -68
  56. package/dest/browser/types/fields.d.ts.map +1 -1
  57. package/dest/browser/types/fields.js +3 -3
  58. package/dest/browser/types/index.d.ts +0 -3
  59. package/dest/browser/types/index.d.ts.map +1 -1
  60. package/dest/browser/types/index.js +1 -4
  61. package/dest/node/barretenberg/__snapshots__/pedersen.test.js.snap +2 -2
  62. package/dest/node/barretenberg/__snapshots__/poseidon.test.js.snap +3 -3
  63. package/dest/node/barretenberg/backend.d.ts +1 -1
  64. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  65. package/dest/node/barretenberg/backend.js +21 -13
  66. package/dest/node/barretenberg/blake2s.test.js +21 -18
  67. package/dest/node/barretenberg/index.d.ts +44 -43
  68. package/dest/node/barretenberg/index.d.ts.map +1 -1
  69. package/dest/node/barretenberg/index.js +130 -79
  70. package/dest/node/barretenberg/pedersen.test.js +24 -17
  71. package/dest/node/barretenberg/poseidon.bench.test.d.ts +2 -0
  72. package/dest/node/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  73. package/dest/node/barretenberg/poseidon.bench.test.js +216 -0
  74. package/dest/node/barretenberg/poseidon.test.js +15 -15
  75. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  76. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  77. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  78. package/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  79. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  80. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  81. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  82. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  83. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  84. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +51 -13
  85. package/dest/node/barretenberg_wasm/index.test.js +11 -10
  86. package/dest/node/bb_backends/browser/index.d.ts +11 -0
  87. package/dest/node/bb_backends/browser/index.d.ts.map +1 -0
  88. package/dest/node/bb_backends/browser/index.js +39 -0
  89. package/dest/node/bb_backends/index.d.ts +45 -0
  90. package/dest/node/bb_backends/index.d.ts.map +1 -0
  91. package/dest/node/bb_backends/index.js +15 -0
  92. package/dest/node/bb_backends/interface.d.ts +33 -0
  93. package/dest/node/bb_backends/interface.d.ts.map +1 -0
  94. package/dest/node/bb_backends/interface.js +2 -0
  95. package/dest/node/bb_backends/node/index.d.ts +11 -0
  96. package/dest/node/bb_backends/node/index.d.ts.map +1 -0
  97. package/dest/node/bb_backends/node/index.js +80 -0
  98. package/dest/node/bb_backends/node/native_pipe.d.ts +25 -0
  99. package/dest/node/bb_backends/node/native_pipe.d.ts.map +1 -0
  100. package/dest/node/bb_backends/node/native_pipe.js +113 -0
  101. package/dest/node/bb_backends/node/native_shm.d.ts +28 -0
  102. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -0
  103. package/dest/node/bb_backends/node/native_shm.js +150 -0
  104. package/dest/node/bb_backends/node/native_socket.d.ts +34 -0
  105. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -0
  106. package/dest/node/bb_backends/node/native_socket.js +269 -0
  107. package/dest/node/bb_backends/node/platform.d.ts +27 -0
  108. package/dest/node/bb_backends/node/platform.d.ts.map +1 -0
  109. package/dest/node/bb_backends/node/platform.js +124 -0
  110. package/dest/node/bb_backends/sync_to_async_adapter.d.ts +15 -0
  111. package/dest/node/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  112. package/dest/node/bb_backends/sync_to_async_adapter.js +20 -0
  113. package/dest/node/bb_backends/wasm.d.ts +56 -0
  114. package/dest/node/bb_backends/wasm.d.ts.map +1 -0
  115. package/dest/node/bb_backends/wasm.js +90 -0
  116. package/dest/node/cbind/generate.js +2 -7
  117. package/dest/node/cbind/generated/api_types.d.ts +1167 -0
  118. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  119. package/dest/node/cbind/generated/api_types.js +1609 -47
  120. package/dest/node/cbind/generated/async.d.ts +38 -4
  121. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  122. package/dest/node/cbind/generated/async.js +327 -21
  123. package/dest/node/cbind/generated/sync.d.ts +39 -5
  124. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  125. package/dest/node/cbind/generated/sync.js +294 -21
  126. package/dest/node/cbind/schema_compiler.d.ts +2 -4
  127. package/dest/node/cbind/schema_compiler.d.ts.map +1 -1
  128. package/dest/node/cbind/schema_compiler.js +74 -178
  129. package/dest/node/index.d.ts +2 -2
  130. package/dest/node/index.d.ts.map +1 -1
  131. package/dest/node/index.js +3 -3
  132. package/dest/node/serialize/index.d.ts +0 -1
  133. package/dest/node/serialize/index.d.ts.map +1 -1
  134. package/dest/node/serialize/index.js +1 -2
  135. package/dest/node/serialize/serialize.d.ts +0 -35
  136. package/dest/node/serialize/serialize.d.ts.map +1 -1
  137. package/dest/node/serialize/serialize.js +1 -68
  138. package/dest/node/types/fields.d.ts.map +1 -1
  139. package/dest/node/types/fields.js +3 -3
  140. package/dest/node/types/index.d.ts +0 -3
  141. package/dest/node/types/index.d.ts.map +1 -1
  142. package/dest/node/types/index.js +1 -4
  143. package/dest/node-cjs/barretenberg/backend.d.ts +1 -1
  144. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  145. package/dest/node-cjs/barretenberg/backend.js +20 -12
  146. package/dest/node-cjs/barretenberg/blake2s.test.js +19 -16
  147. package/dest/node-cjs/barretenberg/index.d.ts +44 -43
  148. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  149. package/dest/node-cjs/barretenberg/index.js +136 -84
  150. package/dest/node-cjs/barretenberg/pedersen.test.js +24 -17
  151. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts +2 -0
  152. package/dest/node-cjs/barretenberg/poseidon.bench.test.d.ts.map +1 -0
  153. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +218 -0
  154. package/dest/node-cjs/barretenberg/poseidon.test.js +15 -15
  155. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  156. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +1 -1
  157. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -1
  158. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +2 -2
  159. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts +4 -4
  160. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.d.ts.map +1 -1
  161. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js +18 -10
  162. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +3 -0
  163. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -1
  164. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +51 -13
  165. package/dest/node-cjs/barretenberg_wasm/index.test.js +11 -10
  166. package/dest/node-cjs/bb_backends/browser/index.d.ts +11 -0
  167. package/dest/node-cjs/bb_backends/browser/index.d.ts.map +1 -0
  168. package/dest/node-cjs/bb_backends/browser/index.js +43 -0
  169. package/dest/node-cjs/bb_backends/index.d.ts +45 -0
  170. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -0
  171. package/dest/node-cjs/bb_backends/index.js +18 -0
  172. package/dest/node-cjs/bb_backends/interface.d.ts +33 -0
  173. package/dest/node-cjs/bb_backends/interface.d.ts.map +1 -0
  174. package/dest/node-cjs/bb_backends/interface.js +3 -0
  175. package/dest/node-cjs/bb_backends/node/index.d.ts +11 -0
  176. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -0
  177. package/dest/node-cjs/bb_backends/node/index.js +84 -0
  178. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts +25 -0
  179. package/dest/node-cjs/bb_backends/node/native_pipe.d.ts.map +1 -0
  180. package/dest/node-cjs/bb_backends/node/native_pipe.js +117 -0
  181. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +28 -0
  182. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -0
  183. package/dest/node-cjs/bb_backends/node/native_shm.js +154 -0
  184. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +34 -0
  185. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -0
  186. package/dest/node-cjs/bb_backends/node/native_socket.js +274 -0
  187. package/dest/node-cjs/bb_backends/node/platform.d.ts +27 -0
  188. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -0
  189. package/dest/node-cjs/bb_backends/node/platform.js +131 -0
  190. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts +15 -0
  191. package/dest/node-cjs/bb_backends/sync_to_async_adapter.d.ts.map +1 -0
  192. package/dest/node-cjs/bb_backends/sync_to_async_adapter.js +24 -0
  193. package/dest/node-cjs/bb_backends/wasm.d.ts +56 -0
  194. package/dest/node-cjs/bb_backends/wasm.d.ts.map +1 -0
  195. package/dest/node-cjs/bb_backends/wasm.js +95 -0
  196. package/dest/node-cjs/cbind/generate.js +1 -6
  197. package/dest/node-cjs/cbind/generated/api_types.d.ts +1167 -0
  198. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  199. package/dest/node-cjs/cbind/generated/api_types.js +1747 -47
  200. package/dest/node-cjs/cbind/generated/async.d.ts +38 -4
  201. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  202. package/dest/node-cjs/cbind/generated/async.js +326 -20
  203. package/dest/node-cjs/cbind/generated/sync.d.ts +39 -5
  204. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  205. package/dest/node-cjs/cbind/generated/sync.js +293 -20
  206. package/dest/node-cjs/cbind/schema_compiler.d.ts +2 -4
  207. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +1 -1
  208. package/dest/node-cjs/cbind/schema_compiler.js +74 -179
  209. package/dest/node-cjs/index.d.ts +2 -2
  210. package/dest/node-cjs/index.d.ts.map +1 -1
  211. package/dest/node-cjs/index.js +3 -3
  212. package/dest/node-cjs/serialize/index.d.ts +0 -1
  213. package/dest/node-cjs/serialize/index.d.ts.map +1 -1
  214. package/dest/node-cjs/serialize/index.js +1 -2
  215. package/dest/node-cjs/serialize/serialize.d.ts +0 -35
  216. package/dest/node-cjs/serialize/serialize.d.ts.map +1 -1
  217. package/dest/node-cjs/serialize/serialize.js +1 -79
  218. package/dest/node-cjs/types/fields.d.ts.map +1 -1
  219. package/dest/node-cjs/types/fields.js +2 -2
  220. package/dest/node-cjs/types/index.d.ts +0 -3
  221. package/dest/node-cjs/types/index.d.ts.map +1 -1
  222. package/dest/node-cjs/types/index.js +1 -4
  223. package/package.json +3 -4
  224. package/src/barretenberg/__snapshots__/pedersen.test.ts.snap +2 -2
  225. package/src/barretenberg/__snapshots__/poseidon.test.ts.snap +3 -3
  226. package/src/barretenberg/backend.ts +37 -32
  227. package/src/barretenberg/blake2s.test.ts +20 -21
  228. package/src/barretenberg/index.ts +136 -117
  229. package/src/barretenberg/pedersen.test.ts +23 -16
  230. package/src/barretenberg/poseidon.bench.test.ts +267 -0
  231. package/src/barretenberg/poseidon.test.ts +14 -14
  232. package/src/barretenberg_wasm/barretenberg_wasm_base/index.ts +3 -3
  233. package/src/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.ts +17 -9
  234. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +62 -15
  235. package/src/barretenberg_wasm/index.test.ts +12 -11
  236. package/src/bb_backends/browser/index.ts +50 -0
  237. package/src/bb_backends/index.ts +49 -0
  238. package/src/bb_backends/interface.ts +35 -0
  239. package/src/bb_backends/node/index.ts +94 -0
  240. package/src/bb_backends/node/native_pipe.ts +127 -0
  241. package/src/bb_backends/node/native_shm.ts +171 -0
  242. package/src/bb_backends/node/native_socket.ts +312 -0
  243. package/src/bb_backends/node/platform.ts +151 -0
  244. package/src/bb_backends/sync_to_async_adapter.ts +21 -0
  245. package/src/bb_backends/wasm.ts +110 -0
  246. package/src/cbind/README.md +1 -1
  247. package/src/cbind/generate.ts +0 -6
  248. package/src/cbind/schema_compiler.ts +131 -241
  249. package/src/index.ts +2 -1
  250. package/src/serialize/index.ts +0 -1
  251. package/src/serialize/serialize.ts +0 -82
  252. package/src/types/fields.ts +2 -2
  253. package/src/types/index.ts +0 -3
  254. package/dest/browser/barretenberg_api/index.d.ts +0 -109
  255. package/dest/browser/barretenberg_api/index.d.ts.map +0 -1
  256. package/dest/browser/barretenberg_api/index.js +0 -699
  257. package/dest/browser/cbind/generated/native.d.ts +0 -31
  258. package/dest/browser/cbind/generated/native.d.ts.map +0 -1
  259. package/dest/browser/cbind/generated/native.js +0 -234
  260. package/dest/browser/serialize/output_type.d.ts +0 -11
  261. package/dest/browser/serialize/output_type.d.ts.map +0 -1
  262. package/dest/browser/serialize/output_type.js +0 -44
  263. package/dest/browser/types/fixed_size_buffer.d.ts +0 -26
  264. package/dest/browser/types/fixed_size_buffer.d.ts.map +0 -1
  265. package/dest/browser/types/fixed_size_buffer.js +0 -51
  266. package/dest/browser/types/ptr.d.ts +0 -13
  267. package/dest/browser/types/ptr.d.ts.map +0 -1
  268. package/dest/browser/types/ptr.js +0 -19
  269. package/dest/browser/types/raw_buffer.d.ts +0 -3
  270. package/dest/browser/types/raw_buffer.d.ts.map +0 -1
  271. package/dest/browser/types/raw_buffer.js +0 -5
  272. package/dest/node/barretenberg/common.test.d.ts +0 -2
  273. package/dest/node/barretenberg/common.test.d.ts.map +0 -1
  274. package/dest/node/barretenberg/common.test.js +0 -20
  275. package/dest/node/barretenberg_api/index.d.ts +0 -109
  276. package/dest/node/barretenberg_api/index.d.ts.map +0 -1
  277. package/dest/node/barretenberg_api/index.js +0 -699
  278. package/dest/node/bindgen/function_declaration.d.ts +0 -11
  279. package/dest/node/bindgen/function_declaration.d.ts.map +0 -1
  280. package/dest/node/bindgen/function_declaration.js +0 -2
  281. package/dest/node/bindgen/index.d.ts +0 -2
  282. package/dest/node/bindgen/index.d.ts.map +0 -1
  283. package/dest/node/bindgen/index.js +0 -15
  284. package/dest/node/bindgen/mappings.d.ts +0 -4
  285. package/dest/node/bindgen/mappings.d.ts.map +0 -1
  286. package/dest/node/bindgen/mappings.js +0 -64
  287. package/dest/node/bindgen/rust.d.ts +0 -2
  288. package/dest/node/bindgen/rust.d.ts.map +0 -1
  289. package/dest/node/bindgen/rust.js +0 -43
  290. package/dest/node/bindgen/to_camel_case.d.ts +0 -2
  291. package/dest/node/bindgen/to_camel_case.d.ts.map +0 -1
  292. package/dest/node/bindgen/to_camel_case.js +0 -11
  293. package/dest/node/bindgen/typescript.d.ts +0 -2
  294. package/dest/node/bindgen/typescript.d.ts.map +0 -1
  295. package/dest/node/bindgen/typescript.js +0 -100
  296. package/dest/node/cbind/generated/native.d.ts +0 -31
  297. package/dest/node/cbind/generated/native.d.ts.map +0 -1
  298. package/dest/node/cbind/generated/native.js +0 -234
  299. package/dest/node/main.d.ts +0 -13
  300. package/dest/node/main.d.ts.map +0 -1
  301. package/dest/node/main.js +0 -459
  302. package/dest/node/serialize/output_type.d.ts +0 -11
  303. package/dest/node/serialize/output_type.d.ts.map +0 -1
  304. package/dest/node/serialize/output_type.js +0 -44
  305. package/dest/node/types/fixed_size_buffer.d.ts +0 -26
  306. package/dest/node/types/fixed_size_buffer.d.ts.map +0 -1
  307. package/dest/node/types/fixed_size_buffer.js +0 -51
  308. package/dest/node/types/ptr.d.ts +0 -13
  309. package/dest/node/types/ptr.d.ts.map +0 -1
  310. package/dest/node/types/ptr.js +0 -19
  311. package/dest/node/types/raw_buffer.d.ts +0 -3
  312. package/dest/node/types/raw_buffer.d.ts.map +0 -1
  313. package/dest/node/types/raw_buffer.js +0 -5
  314. package/dest/node-cjs/barretenberg/common.test.d.ts +0 -2
  315. package/dest/node-cjs/barretenberg/common.test.d.ts.map +0 -1
  316. package/dest/node-cjs/barretenberg/common.test.js +0 -22
  317. package/dest/node-cjs/barretenberg_api/index.d.ts +0 -109
  318. package/dest/node-cjs/barretenberg_api/index.d.ts.map +0 -1
  319. package/dest/node-cjs/barretenberg_api/index.js +0 -704
  320. package/dest/node-cjs/bindgen/function_declaration.d.ts +0 -11
  321. package/dest/node-cjs/bindgen/function_declaration.d.ts.map +0 -1
  322. package/dest/node-cjs/bindgen/function_declaration.js +0 -3
  323. package/dest/node-cjs/bindgen/index.d.ts +0 -2
  324. package/dest/node-cjs/bindgen/index.d.ts.map +0 -1
  325. package/dest/node-cjs/bindgen/index.js +0 -17
  326. package/dest/node-cjs/bindgen/mappings.d.ts +0 -4
  327. package/dest/node-cjs/bindgen/mappings.d.ts.map +0 -1
  328. package/dest/node-cjs/bindgen/mappings.js +0 -69
  329. package/dest/node-cjs/bindgen/rust.d.ts +0 -2
  330. package/dest/node-cjs/bindgen/rust.d.ts.map +0 -1
  331. package/dest/node-cjs/bindgen/rust.js +0 -47
  332. package/dest/node-cjs/bindgen/to_camel_case.d.ts +0 -2
  333. package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +0 -1
  334. package/dest/node-cjs/bindgen/to_camel_case.js +0 -14
  335. package/dest/node-cjs/bindgen/typescript.d.ts +0 -2
  336. package/dest/node-cjs/bindgen/typescript.d.ts.map +0 -1
  337. package/dest/node-cjs/bindgen/typescript.js +0 -104
  338. package/dest/node-cjs/cbind/generated/native.d.ts +0 -31
  339. package/dest/node-cjs/cbind/generated/native.d.ts.map +0 -1
  340. package/dest/node-cjs/cbind/generated/native.js +0 -238
  341. package/dest/node-cjs/main.d.ts +0 -13
  342. package/dest/node-cjs/main.d.ts.map +0 -1
  343. package/dest/node-cjs/main.js +0 -470
  344. package/dest/node-cjs/serialize/output_type.d.ts +0 -11
  345. package/dest/node-cjs/serialize/output_type.d.ts.map +0 -1
  346. package/dest/node-cjs/serialize/output_type.js +0 -51
  347. package/dest/node-cjs/types/fixed_size_buffer.d.ts +0 -26
  348. package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +0 -1
  349. package/dest/node-cjs/types/fixed_size_buffer.js +0 -57
  350. package/dest/node-cjs/types/ptr.d.ts +0 -13
  351. package/dest/node-cjs/types/ptr.d.ts.map +0 -1
  352. package/dest/node-cjs/types/ptr.js +0 -23
  353. package/dest/node-cjs/types/raw_buffer.d.ts +0 -3
  354. package/dest/node-cjs/types/raw_buffer.d.ts.map +0 -1
  355. package/dest/node-cjs/types/raw_buffer.js +0 -9
  356. package/src/barretenberg/common.test.ts +0 -23
  357. package/src/barretenberg_api/index.ts +0 -1216
  358. package/src/bindgen/function_declaration.ts +0 -11
  359. package/src/bindgen/index.ts +0 -17
  360. package/src/bindgen/mappings.ts +0 -67
  361. package/src/bindgen/rust.ts +0 -52
  362. package/src/bindgen/to_camel_case.ts +0 -10
  363. package/src/bindgen/typescript.ts +0 -116
  364. package/src/main.ts +0 -534
  365. package/src/serialize/output_type.ts +0 -53
  366. package/src/types/fixed_size_buffer.ts +0 -59
  367. package/src/types/ptr.ts +0 -20
  368. package/src/types/raw_buffer.ts +0 -3
@@ -0,0 +1,171 @@
1
+ import { createRequire } from 'module';
2
+ import { spawn, ChildProcess } from 'child_process';
3
+ import { IMsgpackBackendSync } from '../interface.js';
4
+ import { findNapiBinary, findPackageRoot } from './platform.js';
5
+
6
+ // Import the NAPI module
7
+ // The addon is built to the nodejs_module directory
8
+ const addonPath = findNapiBinary();
9
+ // Try loading, but don't throw if it doesn't exist (will be caught in constructor)
10
+ let addon: any = null;
11
+ try {
12
+ if (addonPath) {
13
+ const require = createRequire(findPackageRoot()!);
14
+ addon = require(addonPath);
15
+ }
16
+ } catch (err) {
17
+ // Addon not built yet or not available
18
+ addon = null;
19
+ }
20
+
21
+ /**
22
+ * Synchronous shared memory backend that communicates with bb binary via shared memory.
23
+ * Uses NAPI module to interface with shared memory IPC.
24
+ *
25
+ * Architecture: bb acts as the SERVER, TypeScript is the CLIENT
26
+ * - bb creates the shared memory region
27
+ * - TypeScript connects via NAPI wrapper
28
+ *
29
+ * Protocol:
30
+ * - Handled internally by IpcClient (no manual length prefixes needed)
31
+ */
32
+ export class BarretenbergNativeShmSyncBackend implements IMsgpackBackendSync {
33
+ private process: ChildProcess;
34
+ private client: any; // NAPI MsgpackClient instance
35
+
36
+ private constructor(process: ChildProcess, client: any) {
37
+ this.process = process;
38
+ this.client = client;
39
+ }
40
+
41
+ /**
42
+ * Create and initialize a shared memory backend.
43
+ * @param bbBinaryPath Path to bb binary
44
+ * @param threads Optional number of threads
45
+ * @param maxClients Optional maximum concurrent clients (default: 1)
46
+ */
47
+ static async new(
48
+ bbBinaryPath: string,
49
+ threads?: number,
50
+ maxClients?: number,
51
+ ): Promise<BarretenbergNativeShmSyncBackend> {
52
+ if (!addon || !addon.MsgpackClient) {
53
+ throw new Error('Shared memory NAPI not available.');
54
+ }
55
+
56
+ // Create a unique shared memory name
57
+ const shmName = `bb-${process.pid}-${Date.now()}`;
58
+
59
+ // Default maxClients to 1 if not specified
60
+ const clientCount = maxClients ?? 1;
61
+
62
+ // Set HARDWARE_CONCURRENCY if threads specified
63
+ const env = threads !== undefined ? { ...process.env, HARDWARE_CONCURRENCY: threads.toString() } : process.env;
64
+
65
+ // Spawn bb process with shared memory mode
66
+ const args = [bbBinaryPath, 'msgpack', 'run', '--input', `${shmName}.shm`, '--max-clients', clientCount.toString()];
67
+ const bbProcess = spawn(findPackageRoot() + '/scripts/kill_wrapper.sh', args, {
68
+ stdio: ['ignore', 'ignore', 'ignore'],
69
+ env,
70
+ });
71
+ // Disconnect from event loop so process can exit. The kill wrapper will reap bb once parent (node) dies.
72
+ bbProcess.unref();
73
+
74
+ // Capture stderr for error diagnostics
75
+ // bbProcess.stderr?.on('data', (data: Buffer) => {
76
+ // stderrOutput += data.toString();
77
+ // });
78
+
79
+ // Track if process has exited
80
+ let processExited = false;
81
+ let exitError: Error | null = null;
82
+
83
+ bbProcess.on('error', err => {
84
+ processExited = true;
85
+ exitError = new Error(`Native backend process error: ${err.message}`);
86
+ });
87
+
88
+ bbProcess.on('exit', (code, signal) => {
89
+ processExited = true;
90
+ if (code !== null && code !== 0) {
91
+ exitError = new Error(`Native backend process exited with code ${code}`);
92
+ } else if (signal && signal !== 'SIGTERM') {
93
+ exitError = new Error(`Native backend process killed with signal ${signal}`);
94
+ }
95
+ });
96
+
97
+ // Wait for bb to create shared memory
98
+ // Retry connection every 100ms for up to 3 seconds
99
+ const retryInterval = 100; // ms
100
+ const timeout = 3000; // ms
101
+ const maxAttempts = Math.floor(timeout / retryInterval);
102
+ let client: any = null;
103
+
104
+ try {
105
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
106
+ // Check if bb process has exited before attempting connection
107
+ if (processExited) {
108
+ throw exitError || new Error('Native backend process exited unexpectedly during startup');
109
+ }
110
+
111
+ // Wait before attempting connection (except first attempt)
112
+ if (attempt > 0) {
113
+ await new Promise(resolve => setTimeout(resolve, retryInterval));
114
+ }
115
+
116
+ try {
117
+ // Create NAPI client with matching max_clients value
118
+ client = new addon.MsgpackClient(shmName, clientCount);
119
+ break; // Success!
120
+ } catch (err: any) {
121
+ // Connection failed, will retry
122
+ if (attempt === maxAttempts - 1) {
123
+ // Last attempt failed - check one more time if process exited
124
+ if (processExited && exitError) {
125
+ throw exitError;
126
+ }
127
+ throw new Error(`Failed to connect to shared memory after ${timeout}ms: ${err.message}`);
128
+ }
129
+ }
130
+ }
131
+
132
+ if (!client) {
133
+ throw new Error('Failed to create client connection');
134
+ }
135
+
136
+ return new BarretenbergNativeShmSyncBackend(bbProcess, client);
137
+ } finally {
138
+ // If we failed to connect, ensure the process is killed
139
+ // kill() returns false if process already exited, but doesn't throw
140
+ if (!client) {
141
+ bbProcess.kill('SIGKILL');
142
+ }
143
+ }
144
+ }
145
+
146
+ call(inputBuffer: Uint8Array): Uint8Array {
147
+ try {
148
+ const responseBuffer = this.client.call(Buffer.from(inputBuffer));
149
+ return new Uint8Array(responseBuffer);
150
+ } catch (err: any) {
151
+ throw new Error(`Shared memory call failed: ${err.message}`);
152
+ }
153
+ }
154
+
155
+ private cleanup(): void {
156
+ if (this.client) {
157
+ try {
158
+ this.client.close();
159
+ } catch (e) {
160
+ // Ignore errors during cleanup
161
+ }
162
+ }
163
+ }
164
+
165
+ destroy(): void {
166
+ this.cleanup();
167
+ this.process.kill('SIGTERM');
168
+ // Remove process event listeners to prevent hanging
169
+ this.process.removeAllListeners();
170
+ }
171
+ }
@@ -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
+ }