@aztec/bb.js 0.0.1-commit.5daedc8 → 0.0.1-commit.6230a0c

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 (204) hide show
  1. package/build/amd64-linux/bb +0 -0
  2. package/build/amd64-linux/nodejs_module.node +0 -0
  3. package/build/amd64-macos/bb +0 -0
  4. package/build/amd64-macos/nodejs_module.node +0 -0
  5. package/build/arm64-linux/bb +0 -0
  6. package/build/arm64-linux/nodejs_module.node +0 -0
  7. package/build/arm64-macos/bb +0 -0
  8. package/build/arm64-macos/nodejs_module.node +0 -0
  9. package/dest/browser/barretenberg/backend.d.ts +49 -17
  10. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  11. package/dest/browser/barretenberg/backend.js +111 -11
  12. package/dest/browser/barretenberg/index.d.ts +2 -2
  13. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  14. package/dest/browser/barretenberg/index.js +2 -2
  15. package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  16. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  17. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  18. package/dest/browser/bb_backends/index.d.ts +3 -1
  19. package/dest/browser/bb_backends/index.d.ts.map +1 -1
  20. package/dest/browser/cbind/generate.d.ts +5 -2
  21. package/dest/browser/cbind/generate.d.ts.map +1 -1
  22. package/dest/browser/cbind/generate.js +47 -25
  23. package/dest/browser/cbind/generated/api_types.d.ts +766 -1687
  24. package/dest/browser/cbind/generated/api_types.d.ts.map +1 -1
  25. package/dest/browser/cbind/generated/api_types.js +1465 -1555
  26. package/dest/browser/cbind/generated/async.d.ts +3 -5
  27. package/dest/browser/cbind/generated/async.d.ts.map +1 -1
  28. package/dest/browser/cbind/generated/async.js +13 -33
  29. package/dest/browser/cbind/generated/sync.d.ts +3 -5
  30. package/dest/browser/cbind/generated/sync.d.ts.map +1 -1
  31. package/dest/browser/cbind/generated/sync.js +13 -31
  32. package/dest/browser/cbind/naming.d.ts +16 -0
  33. package/dest/browser/cbind/naming.d.ts.map +1 -0
  34. package/dest/browser/cbind/naming.js +24 -0
  35. package/dest/browser/cbind/rust_codegen.d.ts +26 -0
  36. package/dest/browser/cbind/rust_codegen.d.ts.map +1 -0
  37. package/dest/browser/cbind/rust_codegen.js +461 -0
  38. package/dest/browser/cbind/schema_visitor.d.ts +47 -0
  39. package/dest/browser/cbind/schema_visitor.d.ts.map +1 -0
  40. package/dest/browser/cbind/schema_visitor.js +158 -0
  41. package/dest/browser/cbind/typescript_codegen.d.ts +30 -0
  42. package/dest/browser/cbind/typescript_codegen.d.ts.map +1 -0
  43. package/dest/browser/cbind/typescript_codegen.js +365 -0
  44. package/dest/browser/crs/net_crs.d.ts +6 -1
  45. package/dest/browser/crs/net_crs.d.ts.map +1 -1
  46. package/dest/browser/crs/net_crs.js +30 -7
  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 +2 -2
  50. package/dest/node/barretenberg/backend.d.ts +49 -17
  51. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  52. package/dest/node/barretenberg/backend.js +111 -11
  53. package/dest/node/barretenberg/backend.test.d.ts +2 -0
  54. package/dest/node/barretenberg/backend.test.d.ts.map +1 -0
  55. package/dest/node/barretenberg/backend.test.js +103 -0
  56. package/dest/node/barretenberg/index.d.ts +2 -2
  57. package/dest/node/barretenberg/index.d.ts.map +1 -1
  58. package/dest/node/barretenberg/index.js +2 -2
  59. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  60. package/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  61. package/dest/node/bb_backends/index.d.ts +3 -1
  62. package/dest/node/bb_backends/index.d.ts.map +1 -1
  63. package/dest/node/bb_backends/node/index.d.ts +1 -1
  64. package/dest/node/bb_backends/node/index.d.ts.map +1 -1
  65. package/dest/node/bb_backends/node/index.js +5 -5
  66. package/dest/node/bb_backends/node/native_shm.d.ts +3 -2
  67. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
  68. package/dest/node/bb_backends/node/native_shm.js +40 -21
  69. package/dest/node/bb_backends/node/native_shm_async.d.ts +2 -2
  70. package/dest/node/bb_backends/node/native_shm_async.d.ts.map +1 -1
  71. package/dest/node/bb_backends/node/native_shm_async.js +17 -21
  72. package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
  73. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
  74. package/dest/node/bb_backends/node/native_socket.js +7 -5
  75. package/dest/node/bb_backends/node/platform.d.ts +1 -1
  76. package/dest/node/bb_backends/node/platform.d.ts.map +1 -1
  77. package/dest/node/bb_backends/node/platform.js +7 -2
  78. package/dest/node/cbind/generate.d.ts +5 -2
  79. package/dest/node/cbind/generate.d.ts.map +1 -1
  80. package/dest/node/cbind/generate.js +47 -25
  81. package/dest/node/cbind/generated/api_types.d.ts +766 -1687
  82. package/dest/node/cbind/generated/api_types.d.ts.map +1 -1
  83. package/dest/node/cbind/generated/api_types.js +1465 -1555
  84. package/dest/node/cbind/generated/async.d.ts +3 -5
  85. package/dest/node/cbind/generated/async.d.ts.map +1 -1
  86. package/dest/node/cbind/generated/async.js +13 -33
  87. package/dest/node/cbind/generated/sync.d.ts +3 -5
  88. package/dest/node/cbind/generated/sync.d.ts.map +1 -1
  89. package/dest/node/cbind/generated/sync.js +13 -31
  90. package/dest/node/cbind/naming.d.ts +16 -0
  91. package/dest/node/cbind/naming.d.ts.map +1 -0
  92. package/dest/node/cbind/naming.js +24 -0
  93. package/dest/node/cbind/rust_codegen.d.ts +26 -0
  94. package/dest/node/cbind/rust_codegen.d.ts.map +1 -0
  95. package/dest/node/cbind/rust_codegen.js +461 -0
  96. package/dest/node/cbind/schema_visitor.d.ts +47 -0
  97. package/dest/node/cbind/schema_visitor.d.ts.map +1 -0
  98. package/dest/node/cbind/schema_visitor.js +158 -0
  99. package/dest/node/cbind/typescript_codegen.d.ts +30 -0
  100. package/dest/node/cbind/typescript_codegen.d.ts.map +1 -0
  101. package/dest/node/cbind/typescript_codegen.js +365 -0
  102. package/dest/node/crs/net_crs.d.ts +6 -1
  103. package/dest/node/crs/net_crs.d.ts.map +1 -1
  104. package/dest/node/crs/net_crs.js +30 -7
  105. package/dest/node/crs/net_crs.test.d.ts +2 -0
  106. package/dest/node/crs/net_crs.test.d.ts.map +1 -0
  107. package/dest/node/crs/net_crs.test.js +39 -0
  108. package/dest/node/index.d.ts +2 -2
  109. package/dest/node/index.d.ts.map +1 -1
  110. package/dest/node/index.js +2 -2
  111. package/dest/node-cjs/barretenberg/backend.d.ts +49 -17
  112. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  113. package/dest/node-cjs/barretenberg/backend.js +113 -11
  114. package/dest/node-cjs/barretenberg/backend.test.d.ts +2 -0
  115. package/dest/node-cjs/barretenberg/backend.test.d.ts.map +1 -0
  116. package/dest/node-cjs/barretenberg/backend.test.js +105 -0
  117. package/dest/node-cjs/barretenberg/index.d.ts +2 -2
  118. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  119. package/dest/node-cjs/barretenberg/index.js +4 -2
  120. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  121. package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +1 -1
  122. package/dest/node-cjs/bb_backends/index.d.ts +3 -1
  123. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
  124. package/dest/node-cjs/bb_backends/node/index.d.ts +1 -1
  125. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
  126. package/dest/node-cjs/bb_backends/node/index.js +5 -5
  127. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +3 -2
  128. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
  129. package/dest/node-cjs/bb_backends/node/native_shm.js +39 -20
  130. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts +2 -2
  131. package/dest/node-cjs/bb_backends/node/native_shm_async.d.ts.map +1 -1
  132. package/dest/node-cjs/bb_backends/node/native_shm_async.js +17 -21
  133. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
  134. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
  135. package/dest/node-cjs/bb_backends/node/native_socket.js +7 -5
  136. package/dest/node-cjs/bb_backends/node/platform.d.ts +1 -1
  137. package/dest/node-cjs/bb_backends/node/platform.d.ts.map +1 -1
  138. package/dest/node-cjs/bb_backends/node/platform.js +7 -2
  139. package/dest/node-cjs/cbind/generate.d.ts +5 -2
  140. package/dest/node-cjs/cbind/generate.d.ts.map +1 -1
  141. package/dest/node-cjs/cbind/generate.js +47 -25
  142. package/dest/node-cjs/cbind/generated/api_types.d.ts +766 -1687
  143. package/dest/node-cjs/cbind/generated/api_types.d.ts.map +1 -1
  144. package/dest/node-cjs/cbind/generated/api_types.js +1671 -1771
  145. package/dest/node-cjs/cbind/generated/async.d.ts +3 -5
  146. package/dest/node-cjs/cbind/generated/async.d.ts.map +1 -1
  147. package/dest/node-cjs/cbind/generated/async.js +12 -32
  148. package/dest/node-cjs/cbind/generated/sync.d.ts +3 -5
  149. package/dest/node-cjs/cbind/generated/sync.d.ts.map +1 -1
  150. package/dest/node-cjs/cbind/generated/sync.js +12 -30
  151. package/dest/node-cjs/cbind/naming.d.ts +16 -0
  152. package/dest/node-cjs/cbind/naming.d.ts.map +1 -0
  153. package/dest/node-cjs/cbind/naming.js +28 -0
  154. package/dest/node-cjs/cbind/rust_codegen.d.ts +26 -0
  155. package/dest/node-cjs/cbind/rust_codegen.d.ts.map +1 -0
  156. package/dest/node-cjs/cbind/rust_codegen.js +465 -0
  157. package/dest/node-cjs/cbind/schema_visitor.d.ts +47 -0
  158. package/dest/node-cjs/cbind/schema_visitor.d.ts.map +1 -0
  159. package/dest/node-cjs/cbind/schema_visitor.js +162 -0
  160. package/dest/node-cjs/cbind/typescript_codegen.d.ts +30 -0
  161. package/dest/node-cjs/cbind/typescript_codegen.d.ts.map +1 -0
  162. package/dest/node-cjs/cbind/typescript_codegen.js +369 -0
  163. package/dest/node-cjs/crs/net_crs.d.ts +6 -1
  164. package/dest/node-cjs/crs/net_crs.d.ts.map +1 -1
  165. package/dest/node-cjs/crs/net_crs.js +31 -7
  166. package/dest/node-cjs/crs/net_crs.test.d.ts +2 -0
  167. package/dest/node-cjs/crs/net_crs.test.d.ts.map +1 -0
  168. package/dest/node-cjs/crs/net_crs.test.js +41 -0
  169. package/dest/node-cjs/index.d.ts +2 -2
  170. package/dest/node-cjs/index.d.ts.map +1 -1
  171. package/dest/node-cjs/index.js +4 -2
  172. package/package.json +1 -1
  173. package/src/barretenberg/backend.test.ts +122 -0
  174. package/src/barretenberg/backend.ts +151 -25
  175. package/src/barretenberg/index.ts +9 -1
  176. package/src/barretenberg_wasm/barretenberg_wasm_main/index.ts +1 -1
  177. package/src/bb_backends/index.ts +3 -0
  178. package/src/bb_backends/node/index.ts +9 -4
  179. package/src/bb_backends/node/native_shm.ts +38 -19
  180. package/src/bb_backends/node/native_shm_async.ts +15 -19
  181. package/src/bb_backends/node/native_socket.ts +7 -5
  182. package/src/bb_backends/node/platform.ts +6 -1
  183. package/src/cbind/generate.ts +51 -32
  184. package/src/cbind/generated/api_types.ts +3050 -0
  185. package/src/cbind/generated/async.ts +696 -0
  186. package/src/cbind/generated/curve_constants.ts +53 -0
  187. package/src/cbind/generated/sync.ts +644 -0
  188. package/src/cbind/naming.ts +27 -0
  189. package/src/cbind/rust_codegen.ts +504 -0
  190. package/src/cbind/schema_visitor.ts +219 -0
  191. package/src/cbind/typescript_codegen.ts +419 -0
  192. package/src/crs/net_crs.test.ts +47 -0
  193. package/src/crs/net_crs.ts +45 -14
  194. package/src/index.ts +4 -0
  195. package/dest/browser/cbind/schema_compiler.d.ts +0 -68
  196. package/dest/browser/cbind/schema_compiler.d.ts.map +0 -1
  197. package/dest/browser/cbind/schema_compiler.js +0 -600
  198. package/dest/node/cbind/schema_compiler.d.ts +0 -68
  199. package/dest/node/cbind/schema_compiler.d.ts.map +0 -1
  200. package/dest/node/cbind/schema_compiler.js +0 -600
  201. package/dest/node-cjs/cbind/schema_compiler.d.ts +0 -68
  202. package/dest/node-cjs/cbind/schema_compiler.d.ts.map +0 -1
  203. package/dest/node-cjs/cbind/schema_compiler.js +0 -607
  204. package/src/cbind/schema_compiler.ts +0 -745
@@ -1,7 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NetGrumpkinCrs = exports.NetCrs = void 0;
4
+ exports.fetchWithFallback = fetchWithFallback;
4
5
  const index_js_1 = require("../retry/index.js");
6
+ // Primary CRS host (Cloudflare R2)
7
+ const CRS_PRIMARY_HOST = 'https://crs.aztec-cdn.foundation';
8
+ // Fallback CRS host (AWS S3)
9
+ const CRS_FALLBACK_HOST = 'https://crs.aztec-labs.com';
10
+ /**
11
+ * Fetches data from primary URL, falling back to secondary on failure
12
+ * @internal Exported for testing
13
+ */
14
+ async function fetchWithFallback(primaryUrl, fallbackUrl, options) {
15
+ try {
16
+ const response = await fetch(primaryUrl, options);
17
+ if (response.ok || response.status === 206) {
18
+ return response;
19
+ }
20
+ throw new Error(`HTTP ${response.status}`);
21
+ }
22
+ catch {
23
+ return await fetch(fallbackUrl, options);
24
+ }
25
+ }
5
26
  /**
6
27
  * Downloader for CRS from the web or local.
7
28
  */
@@ -71,20 +92,22 @@ class NetCrs {
71
92
  return new Response(new Uint8Array([]));
72
93
  }
73
94
  const g1End = this.numPoints * 64 - 1;
74
- return await (0, index_js_1.retry)(() => fetch('https://crs.aztec.network/g1.dat', {
95
+ const options = {
75
96
  headers: {
76
97
  Range: `bytes=0-${g1End}`,
77
98
  },
78
99
  cache: 'force-cache',
79
- }), (0, index_js_1.makeBackoff)([5, 5, 5]));
100
+ };
101
+ return await (0, index_js_1.retry)(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g1.dat`, `${CRS_FALLBACK_HOST}/g1.dat`, options), (0, index_js_1.makeBackoff)([5, 5, 5]));
80
102
  }
81
103
  /**
82
104
  * Fetches the appropriate range of points from a remote source
83
105
  */
84
106
  async fetchG2Data() {
85
- return await (0, index_js_1.retry)(() => fetch('https://crs.aztec.network/g2.dat', {
107
+ const options = {
86
108
  cache: 'force-cache',
87
- }), (0, index_js_1.makeBackoff)([5, 5, 5]));
109
+ };
110
+ return await (0, index_js_1.retry)(() => fetchWithFallback(`${CRS_PRIMARY_HOST}/g2.dat`, `${CRS_FALLBACK_HOST}/g2.dat`, options), (0, index_js_1.makeBackoff)([5, 5, 5]));
88
111
  }
89
112
  }
90
113
  exports.NetCrs = NetCrs;
@@ -134,13 +157,14 @@ class NetGrumpkinCrs {
134
157
  return new Response(new Uint8Array([]));
135
158
  }
136
159
  const g1End = this.numPoints * 64 - 1;
137
- return await fetch('https://crs.aztec.network/grumpkin_g1.dat', {
160
+ const options = {
138
161
  headers: {
139
162
  Range: `bytes=0-${g1End}`,
140
163
  },
141
164
  cache: 'force-cache',
142
- });
165
+ };
166
+ return await fetchWithFallback(`${CRS_PRIMARY_HOST}/grumpkin_g1.dat`, `${CRS_FALLBACK_HOST}/grumpkin_g1.dat`, options);
143
167
  }
144
168
  }
145
169
  exports.NetGrumpkinCrs = NetGrumpkinCrs;
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBdUQ7QUFDdkQ7O0dBRUc7QUFDSDtJQVFvQixTQUFTO0lBUG5CLElBQUksQ0FBYztJQUNsQixNQUFNLENBQWM7SUFFNUI7SUFDRTs7T0FFRztJQUNhLFNBQWlCLEVBQ2pDO3lCQURnQixTQUFTO0lBQ3hCLENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLEdBQUc7UUFDWCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUFBLENBQzdCO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxHQUF3QztRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFFBQVEsQ0FBQyxJQUFLLENBQUM7SUFBQSxDQUN2QjtJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksR0FBd0M7UUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsT0FBTyxRQUFRLENBQUMsSUFBSyxDQUFDO0lBQUEsQ0FDdkI7SUFFRCxLQUFLLENBQUMsY0FBYyxHQUFHO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQ25FO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYyxHQUFHO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNDLE9BQU8s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
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsZ0RBQXVEO0FBRXZELG1DQUFtQztBQUNuQyxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0FBQzVELDZCQUE2QjtBQUM3QixNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDO0FBRXZEOzs7R0FHRztBQUNJLEtBQUssNEJBQ1YsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsT0FBb0IsRUFDRDtJQUNuQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDM0MsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztBQUFBLENBQ0Y7QUFFRDs7R0FFRztBQUNIO0lBUW9CLFNBQVM7SUFQbkIsSUFBSSxDQUFjO0lBQ2xCLE1BQU0sQ0FBYztJQUU1QjtJQUNFOztPQUVHO0lBQ2EsU0FBaUIsRUFDakM7eUJBRGdCLFNBQVM7SUFDeEIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksR0FBRztRQUNYLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQUEsQ0FDN0I7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZLEdBQXdDO1FBQ3hELE1B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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy50ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3JzL25ldF9jcnMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net_crs.test.d.ts","sourceRoot":"","sources":["../../../src/crs/net_crs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const net_crs_js_1 = require("./net_crs.js");
4
+ // Expected first G1 point from BN254 CRS (generator point with x=1, y=2 in big-endian)
5
+ const BN254_G1_FIRST_ELEMENT = new Uint8Array([
6
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
7
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
8
+ ]);
9
+ describe('NetCrs', () => {
10
+ it('should download CRS data from primary host', async () => {
11
+ const crs = new net_crs_js_1.NetCrs(1);
12
+ await crs.init();
13
+ const g1Data = crs.getG1Data();
14
+ expect(g1Data.length).toBe(64); // 1 point * 64 bytes
15
+ // Verify first point matches expected generator
16
+ expect(g1Data).toEqual(BN254_G1_FIRST_ELEMENT);
17
+ }, 30000);
18
+ it('should download G2 data', async () => {
19
+ const crs = new net_crs_js_1.NetCrs(1);
20
+ await crs.init();
21
+ const g2Data = crs.getG2Data();
22
+ expect(g2Data.length).toBe(128); // G2 point is 128 bytes
23
+ }, 30000);
24
+ });
25
+ describe('fetchWithFallback', () => {
26
+ it('should fallback to secondary URL when primary fails', async () => {
27
+ const badPrimaryUrl = 'https://nonexistent.invalid/g1.dat';
28
+ const goodFallbackUrl = 'https://crs.aztec-labs.com/g1.dat';
29
+ const options = {
30
+ headers: {
31
+ Range: 'bytes=0-63',
32
+ },
33
+ };
34
+ const response = await (0, net_crs_js_1.fetchWithFallback)(badPrimaryUrl, goodFallbackUrl, options);
35
+ expect(response.ok || response.status === 206).toBe(true);
36
+ const data = new Uint8Array(await response.arrayBuffer());
37
+ expect(data.length).toBe(64);
38
+ expect(data).toEqual(BN254_G1_FIRST_ELEMENT);
39
+ }, 30000);
40
+ });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nycy9uZXRfY3JzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBeUQ7QUFFekQsdUZBQXVGO0FBQ3ZGLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxVQUFVLENBQUM7SUFDNUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0SCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDdkUsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCO1FBRXJELGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFBQSxDQUNoRCxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRVYsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUF6QixDQUNqQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsQ0FDWCxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbEMsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEUsTUFBTSxhQUFhLEdBQUcsb0NBQW9DLENBQUM7UUFDM0QsTUFBTSxlQUFlLEdBQUcsbUNBQW1DLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQWdCO1lBQzNCLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsWUFBWTthQUNwQjtTQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsOEJBQWlCLEVBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUFBLENBQzlDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFBQSxDQUNYLENBQUMsQ0FBQyJ9
@@ -1,9 +1,9 @@
1
1
  export { Crs, GrumpkinCrs } from './crs/index.js';
2
- export { type BackendOptions, BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, } from './barretenberg/index.js';
2
+ export { type BackendOptions, BackendType, Barretenberg, BarretenbergSync, UltraHonkVerifierBackend, UltraHonkBackend, AztecClientBackend, fieldToString, fieldsToStrings, type UltraHonkBackendOptions, type VerifierTarget, } from './barretenberg/index.js';
3
3
  export { randomBytes } from './random/index.js';
4
4
  export { splitHonkProof, reconstructHonkProof, deflattenFields, type ProofData } from './proof/index.js';
5
5
  export { BBApiException } from './bbapi_exception.js';
6
6
  export type { Bn254G1Point, Bn254G2Point, GrumpkinPoint, Secp256k1Point, Secp256r1Point, Field2, } from './cbind/generated/api_types.js';
7
7
  export { BN254_FQ_MODULUS, BN254_FR_MODULUS, BN254_G1_GENERATOR, BN254_G2_GENERATOR, GRUMPKIN_FR_MODULUS, GRUMPKIN_FQ_MODULUS, GRUMPKIN_G1_GENERATOR, SECP256K1_FR_MODULUS, SECP256K1_FQ_MODULUS, SECP256K1_G1_GENERATOR, SECP256R1_FR_MODULUS, SECP256R1_FQ_MODULUS, SECP256R1_G1_GENERATOR, } from './cbind/generated/curve_constants.js';
8
8
  export { findNapiBinary } from './bb_backends/node/platform.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsR0FDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsWUFBWSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQyJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsRUFDZixLQUFLLHVCQUF1QixFQUM1QixLQUFLLGNBQWMsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsS0FBSyxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsWUFBWSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,MAAM,GACP,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,MAAM,GACP,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findNapiBinary = exports.SECP256R1_G1_GENERATOR = exports.SECP256R1_FQ_MODULUS = exports.SECP256R1_FR_MODULUS = exports.SECP256K1_G1_GENERATOR = exports.SECP256K1_FQ_MODULUS = exports.SECP256K1_FR_MODULUS = exports.GRUMPKIN_G1_GENERATOR = exports.GRUMPKIN_FQ_MODULUS = exports.GRUMPKIN_FR_MODULUS = exports.BN254_G2_GENERATOR = exports.BN254_G1_GENERATOR = exports.BN254_FR_MODULUS = exports.BN254_FQ_MODULUS = exports.BBApiException = exports.deflattenFields = exports.reconstructHonkProof = exports.splitHonkProof = exports.randomBytes = exports.AztecClientBackend = exports.UltraHonkBackend = exports.UltraHonkVerifierBackend = exports.BarretenbergSync = exports.Barretenberg = exports.BackendType = exports.GrumpkinCrs = exports.Crs = void 0;
3
+ exports.findNapiBinary = exports.SECP256R1_G1_GENERATOR = exports.SECP256R1_FQ_MODULUS = exports.SECP256R1_FR_MODULUS = exports.SECP256K1_G1_GENERATOR = exports.SECP256K1_FQ_MODULUS = exports.SECP256K1_FR_MODULUS = exports.GRUMPKIN_G1_GENERATOR = exports.GRUMPKIN_FQ_MODULUS = exports.GRUMPKIN_FR_MODULUS = exports.BN254_G2_GENERATOR = exports.BN254_G1_GENERATOR = exports.BN254_FR_MODULUS = exports.BN254_FQ_MODULUS = exports.BBApiException = exports.deflattenFields = exports.reconstructHonkProof = exports.splitHonkProof = exports.randomBytes = exports.fieldsToStrings = exports.fieldToString = exports.AztecClientBackend = exports.UltraHonkBackend = exports.UltraHonkVerifierBackend = exports.BarretenbergSync = exports.Barretenberg = exports.BackendType = exports.GrumpkinCrs = exports.Crs = void 0;
4
4
  const index_js_1 = require("./crs/index.js");
5
5
  Object.defineProperty(exports, "Crs", { enumerable: true, get: function () { return index_js_1.Crs; } });
6
6
  Object.defineProperty(exports, "GrumpkinCrs", { enumerable: true, get: function () { return index_js_1.GrumpkinCrs; } });
@@ -11,6 +11,8 @@ Object.defineProperty(exports, "BarretenbergSync", { enumerable: true, get: func
11
11
  Object.defineProperty(exports, "UltraHonkVerifierBackend", { enumerable: true, get: function () { return index_js_2.UltraHonkVerifierBackend; } });
12
12
  Object.defineProperty(exports, "UltraHonkBackend", { enumerable: true, get: function () { return index_js_2.UltraHonkBackend; } });
13
13
  Object.defineProperty(exports, "AztecClientBackend", { enumerable: true, get: function () { return index_js_2.AztecClientBackend; } });
14
+ Object.defineProperty(exports, "fieldToString", { enumerable: true, get: function () { return index_js_2.fieldToString; } });
15
+ Object.defineProperty(exports, "fieldsToStrings", { enumerable: true, get: function () { return index_js_2.fieldsToStrings; } });
14
16
  const index_js_3 = require("./random/index.js");
15
17
  Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return index_js_3.randomBytes; } });
16
18
  const index_js_4 = require("./proof/index.js");
@@ -36,4 +38,4 @@ Object.defineProperty(exports, "SECP256R1_FQ_MODULUS", { enumerable: true, get:
36
38
  Object.defineProperty(exports, "SECP256R1_G1_GENERATOR", { enumerable: true, get: function () { return curve_constants_js_1.SECP256R1_G1_GENERATOR; } });
37
39
  const platform_js_1 = require("./bb_backends/node/platform.js");
38
40
  Object.defineProperty(exports, "findNapiBinary", { enumerable: true, get: function () { return platform_js_1.findNapiBinary; } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQXpDLCtGQUFBLEdBQUcsT0FBQTtBQUFFLHVHQUFBLFdBQVcsT0FBQTtBQUN6QixzREFRaUM7QUFOL0IsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsd0dBQUEsWUFBWSxPQUFBO0FBQ1osNEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsb0hBQUEsd0JBQXdCLE9BQUE7QUFDeEIsNEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsOEdBQUEsa0JBQWtCLE9BQUE7QUFHcEIsZ0RBQWdEO0FBQXZDLHVHQUFBLFdBQVcsT0FBQTtBQUNwQiwrQ0FBeUc7QUFBaEcsMEdBQUEsY0FBYyxPQUFBO0FBQUUsZ0hBQUEsb0JBQW9CLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUE7QUFDOUQsNkRBQXNEO0FBQTdDLG9IQUFBLGNBQWMsT0FBQTtBQVl2QiwrQ0FBK0M7QUFDL0MsNkVBYzhDO0FBYjVDLHNIQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHNIQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHdIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHdIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHlIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHlIQUFBLG1CQUFtQixPQUFBO0FBQ25CLDJIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLDBIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDBIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDRIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDBIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDBIQUFBLG9CQUFvQixPQUFBO0FBQ3BCLDRIQUFBLHNCQUFzQixPQUFBO0FBR3hCLGdFQUFnRTtBQUF2RCw2R0FBQSxjQUFjLE9BQUEifQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQXpDLCtGQUFBLEdBQUcsT0FBQTtBQUFFLHVHQUFBLFdBQVcsT0FBQTtBQUN6QixzREFZaUM7QUFWL0IsdUdBQUEsV0FBVyxPQUFBO0FBQ1gsd0dBQUEsWUFBWSxPQUFBO0FBQ1osNEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsb0hBQUEsd0JBQXdCLE9BQUE7QUFDeEIsNEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsOEdBQUEsa0JBQWtCLE9BQUE7QUFDbEIseUdBQUEsYUFBYSxPQUFBO0FBQ2IsMkdBQUEsZUFBZSxPQUFBO0FBS2pCLGdEQUFnRDtBQUF2Qyx1R0FBQSxXQUFXLE9BQUE7QUFDcEIsK0NBQXlHO0FBQWhHLDBHQUFBLGNBQWMsT0FBQTtBQUFFLGdIQUFBLG9CQUFvQixPQUFBO0FBQUUsMkdBQUEsZUFBZSxPQUFBO0FBQzlELDZEQUFzRDtBQUE3QyxvSEFBQSxjQUFjLE9BQUE7QUFZdkIsK0NBQStDO0FBQy9DLDZFQWM4QztBQWI1QyxzSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixzSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQix3SEFBQSxrQkFBa0IsT0FBQTtBQUNsQix3SEFBQSxrQkFBa0IsT0FBQTtBQUNsQix5SEFBQSxtQkFBbUIsT0FBQTtBQUNuQix5SEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwySEFBQSxxQkFBcUIsT0FBQTtBQUNyQiwwSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiwwSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiw0SEFBQSxzQkFBc0IsT0FBQTtBQUN0QiwwSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiwwSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiw0SEFBQSxzQkFBc0IsT0FBQTtBQUd4QixnRUFBZ0U7QUFBdkQsNkdBQUEsY0FBYyxPQUFBIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aztec/bb.js",
3
3
  "packageManager": "yarn@4.5.2",
4
- "version": "0.0.1-commit.5daedc8",
4
+ "version": "0.0.1-commit.6230a0c",
5
5
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -0,0 +1,122 @@
1
+ import { fieldToString, fieldsToStrings } from './backend.js';
2
+
3
+ describe('field helper functions', () => {
4
+ describe('fieldToString', () => {
5
+ it('converts zero field to "0"', () => {
6
+ const zeroField = new Uint8Array(32).fill(0);
7
+ expect(fieldToString(zeroField)).toBe('0');
8
+ });
9
+
10
+ it('converts field with value 1 to "1"', () => {
11
+ const oneField = new Uint8Array(32).fill(0);
12
+ oneField[31] = 1;
13
+ expect(fieldToString(oneField)).toBe('1');
14
+ });
15
+
16
+ it('converts field with value 256 to "256"', () => {
17
+ const field = new Uint8Array(32).fill(0);
18
+ field[30] = 1;
19
+ field[31] = 0;
20
+ expect(fieldToString(field)).toBe('256');
21
+ });
22
+
23
+ it('converts field with max uint8 in last byte to "255"', () => {
24
+ const field = new Uint8Array(32).fill(0);
25
+ field[31] = 255;
26
+ expect(fieldToString(field)).toBe('255');
27
+ });
28
+
29
+ it('converts larger values correctly', () => {
30
+ // 0x0100 = 256 in decimal
31
+ const field = new Uint8Array(32).fill(0);
32
+ field[30] = 0x01;
33
+ field[31] = 0x00;
34
+ expect(fieldToString(field)).toBe('256');
35
+ });
36
+
37
+ it('handles multi-byte values', () => {
38
+ // 0x010203 = 66051 in decimal
39
+ const field = new Uint8Array(32).fill(0);
40
+ field[29] = 0x01;
41
+ field[30] = 0x02;
42
+ field[31] = 0x03;
43
+ expect(fieldToString(field)).toBe('66051');
44
+ });
45
+
46
+ it('handles large field values', () => {
47
+ // A known value: all bytes set to 1
48
+ const field = new Uint8Array(32).fill(1);
49
+ const result = fieldToString(field);
50
+ // Verify it's a valid decimal string
51
+ expect(result).toMatch(/^\d+$/);
52
+ // Verify the length is reasonable for a 256-bit number
53
+ expect(result.length).toBeGreaterThan(70);
54
+ });
55
+
56
+ it('converts to hex with radix 16', () => {
57
+ const field = new Uint8Array(32).fill(0);
58
+ field[31] = 255;
59
+ expect(fieldToString(field, 16)).toBe('ff');
60
+ });
61
+
62
+ it('converts to hex for multi-byte values', () => {
63
+ // 0x010203
64
+ const field = new Uint8Array(32).fill(0);
65
+ field[29] = 0x01;
66
+ field[30] = 0x02;
67
+ field[31] = 0x03;
68
+ expect(fieldToString(field, 16)).toBe('10203');
69
+ });
70
+
71
+ it('converts to binary with radix 2', () => {
72
+ const field = new Uint8Array(32).fill(0);
73
+ field[31] = 5;
74
+ expect(fieldToString(field, 2)).toBe('101');
75
+ });
76
+ });
77
+
78
+ describe('fieldsToStrings', () => {
79
+ it('converts empty array to empty array', () => {
80
+ expect(fieldsToStrings([])).toEqual([]);
81
+ });
82
+
83
+ it('converts single field', () => {
84
+ const oneField = new Uint8Array(32).fill(0);
85
+ oneField[31] = 42;
86
+ expect(fieldsToStrings([oneField])).toEqual(['42']);
87
+ });
88
+
89
+ it('converts multiple fields', () => {
90
+ const field1 = new Uint8Array(32).fill(0);
91
+ field1[31] = 1;
92
+
93
+ const field2 = new Uint8Array(32).fill(0);
94
+ field2[31] = 2;
95
+
96
+ const field3 = new Uint8Array(32).fill(0);
97
+ field3[31] = 3;
98
+
99
+ expect(fieldsToStrings([field1, field2, field3])).toEqual(['1', '2', '3']);
100
+ });
101
+
102
+ it('preserves order of fields', () => {
103
+ const fields = [10, 20, 30, 40, 50].map(v => {
104
+ const field = new Uint8Array(32).fill(0);
105
+ field[31] = v;
106
+ return field;
107
+ });
108
+
109
+ expect(fieldsToStrings(fields)).toEqual(['10', '20', '30', '40', '50']);
110
+ });
111
+
112
+ it('converts to hex with radix 16', () => {
113
+ const fields = [15, 16, 255].map(v => {
114
+ const field = new Uint8Array(32).fill(0);
115
+ field[31] = v;
116
+ return field;
117
+ });
118
+
119
+ expect(fieldsToStrings(fields, 16)).toEqual(['f', '10', 'ff']);
120
+ });
121
+ });
122
+ });
@@ -1,6 +1,6 @@
1
1
  import { Barretenberg } from './index.js';
2
2
  import { ProofData, uint8ArrayToHex, hexToUint8Array } from '../proof/index.js';
3
- import { fromChonkProof, toChonkProof } from '../cbind/generated/api_types.js';
3
+ import { fromChonkProof, toChonkProof, ChonkProof } from '../cbind/generated/api_types.js';
4
4
  import { ungzip } from 'pako';
5
5
  import { Decoder, Encoder } from 'msgpackr';
6
6
 
@@ -10,29 +10,46 @@ export class AztecClientBackendError extends Error {
10
10
  }
11
11
  }
12
12
 
13
+ /**
14
+ * Target verification environment for proof generation.
15
+ * This determines the hash function used and whether zero-knowledge is enabled.
16
+ */
17
+ export type VerifierTarget =
18
+ | 'evm' // Ethereum/Solidity verification (keccak, ZK enabled)
19
+ | 'evm-no-zk' // Ethereum/Solidity without zero-knowledge
20
+ | 'noir-recursive' // Recursive verification in Noir circuits (poseidon2, ZK enabled)
21
+ | 'noir-recursive-no-zk' // Recursive verification without ZK
22
+ | 'noir-rollup' // Rollup circuits with IPA accumulation (poseidon2, ZK enabled)
23
+ | 'noir-rollup-no-zk' // Rollup circuits without ZK
24
+ | 'starknet' // Starknet verification via Garaga (ZK enabled)
25
+ | 'starknet-no-zk'; // Starknet without zero-knowledge
26
+
13
27
  /**
14
28
  * Options for the UltraHonkBackend.
15
29
  */
16
30
  export type UltraHonkBackendOptions = {
17
- /** Selecting this option will use the keccak hash function instead of poseidon
18
- * when generating challenges in the proof.
19
- * Use this when you want to verify the created proof on an EVM chain.
31
+ /**
32
+ * Target verification environment. Determines hash function and ZK settings.
33
+ * This is the recommended way to configure proof generation.
34
+ *
35
+ * @example
36
+ * // For EVM/Solidity verification
37
+ * backend.generateProof(witness, { verifierTarget: 'evm' });
38
+ *
39
+ * // For recursive verification in Noir
40
+ * backend.generateProof(witness, { verifierTarget: 'noir-recursive' });
20
41
  */
42
+ verifierTarget?: VerifierTarget;
43
+
44
+ // Legacy options - prefer using verifierTarget instead
45
+
46
+ /** @deprecated Use verifierTarget: 'evm-no-zk' instead */
21
47
  keccak?: boolean;
22
- /** Selecting this option will use the keccak hash function instead of poseidon
23
- * when generating challenges in the proof.
24
- * Use this when you want to verify the created proof on an EVM chain.
25
- */
48
+ /** @deprecated Use verifierTarget: 'evm' instead */
26
49
  keccakZK?: boolean;
27
- /** Selecting this option will use the poseidon/stark252 hash function instead of poseidon
28
- * when generating challenges in the proof.
29
- * Use this when you want to verify the created proof on an Starknet chain with Garaga.
30
- */
50
+ /** @deprecated Use verifierTarget: 'starknet-no-zk' instead */
31
51
  starknet?: boolean;
32
- /** Selecting this option will use the poseidon/stark252 hash function instead of poseidon
33
- * when generating challenges in the proof.
34
- * Use this when you want to verify the created proof on an Starknet chain with Garaga.
35
- */
52
+ /** @deprecated Use verifierTarget: 'starknet' instead */
36
53
  starknetZK?: boolean;
37
54
  };
38
55
 
@@ -42,6 +59,67 @@ function getProofSettingsFromOptions(options?: UltraHonkBackendOptions): {
42
59
  disableZk: boolean;
43
60
  optimizedSolidityVerifier: boolean;
44
61
  } {
62
+ // Check for conflicting options - verifierTarget should not be combined with legacy options
63
+ if (options?.verifierTarget) {
64
+ const legacyOptions = [options.keccak, options.keccakZK, options.starknet, options.starknetZK].filter(Boolean);
65
+ if (legacyOptions.length > 0) {
66
+ throw new Error(
67
+ 'Cannot use verifierTarget with legacy options (keccak, keccakZK, starknet, starknetZK). ' +
68
+ 'Use verifierTarget alone.',
69
+ );
70
+ }
71
+
72
+ switch (options.verifierTarget) {
73
+ case 'evm':
74
+ return { ipaAccumulation: false, oracleHashType: 'keccak', disableZk: false, optimizedSolidityVerifier: false };
75
+ case 'evm-no-zk':
76
+ return { ipaAccumulation: false, oracleHashType: 'keccak', disableZk: true, optimizedSolidityVerifier: false };
77
+ case 'noir-recursive':
78
+ return {
79
+ ipaAccumulation: false,
80
+ oracleHashType: 'poseidon2',
81
+ disableZk: false,
82
+ optimizedSolidityVerifier: false,
83
+ };
84
+ case 'noir-recursive-no-zk':
85
+ return {
86
+ ipaAccumulation: false,
87
+ oracleHashType: 'poseidon2',
88
+ disableZk: true,
89
+ optimizedSolidityVerifier: false,
90
+ };
91
+ case 'noir-rollup':
92
+ return {
93
+ ipaAccumulation: true,
94
+ oracleHashType: 'poseidon2',
95
+ disableZk: false,
96
+ optimizedSolidityVerifier: false,
97
+ };
98
+ case 'noir-rollup-no-zk':
99
+ return {
100
+ ipaAccumulation: true,
101
+ oracleHashType: 'poseidon2',
102
+ disableZk: true,
103
+ optimizedSolidityVerifier: false,
104
+ };
105
+ case 'starknet':
106
+ return {
107
+ ipaAccumulation: false,
108
+ oracleHashType: 'starknet',
109
+ disableZk: false,
110
+ optimizedSolidityVerifier: false,
111
+ };
112
+ case 'starknet-no-zk':
113
+ return {
114
+ ipaAccumulation: false,
115
+ oracleHashType: 'starknet',
116
+ disableZk: true,
117
+ optimizedSolidityVerifier: false,
118
+ };
119
+ }
120
+ }
121
+
122
+ // Legacy options support (deprecated)
45
123
  return {
46
124
  ipaAccumulation: false,
47
125
  oracleHashType:
@@ -50,7 +128,6 @@ function getProofSettingsFromOptions(options?: UltraHonkBackendOptions): {
50
128
  : options?.starknet || options?.starknetZK
51
129
  ? 'starknet'
52
130
  : 'poseidon2',
53
- // TODO no current way to target non-zk poseidon2 hash
54
131
  disableZk: options?.keccak || options?.starknet ? true : false,
55
132
  optimizedSolidityVerifier: false,
56
133
  };
@@ -162,6 +239,7 @@ export class UltraHonkBackend {
162
239
  _proof: Uint8Array,
163
240
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
164
241
  _numOfPublicInputs: number,
242
+ options?: UltraHonkBackendOptions,
165
243
  ): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> {
166
244
  // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation.
167
245
  // There is still a proofAsFields method but we could consider getting rid of it as the proof itself
@@ -171,14 +249,12 @@ export class UltraHonkBackend {
171
249
  // const proof = reconstructProofWithPublicInputs(proofData);
172
250
  // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs);
173
251
 
174
- // TODO: perhaps we should put this in the init function. Need to benchmark
175
- // TODO how long it takes.
176
252
  const vkResult = await this.api.circuitComputeVk({
177
253
  circuit: {
178
254
  name: 'circuit',
179
255
  bytecode: this.acirUncompressedBytecode,
180
256
  },
181
- settings: getProofSettingsFromOptions({}),
257
+ settings: getProofSettingsFromOptions(options),
182
258
  });
183
259
 
184
260
  // Convert VK bytes to field elements (32-byte chunks)
@@ -250,7 +326,7 @@ export class AztecClientBackend {
250
326
  // The API currently expects a msgpack-encoded API.
251
327
  const proof = new Encoder({ useRecords: false }).encode(fromChonkProof(proveResult.proof));
252
328
  // Generate the VK
253
- const vkResult = await this.api.chonkComputeIvcVk({
329
+ const vkResult = await this.api.chonkComputeVk({
254
330
  circuit: {
255
331
  name: 'hiding',
256
332
  bytecode: this.acirBuf[this.acirBuf.length - 1],
@@ -260,13 +336,13 @@ export class AztecClientBackend {
260
336
  const proofFields = [
261
337
  proveResult.proof.megaProof,
262
338
  proveResult.proof.goblinProof.mergeProof,
263
- proveResult.proof.goblinProof.eccvmProof.preIpaProof,
264
- proveResult.proof.goblinProof.eccvmProof.ipaProof,
339
+ proveResult.proof.goblinProof.eccvmProof,
340
+ proveResult.proof.goblinProof.ipaProof,
265
341
  proveResult.proof.goblinProof.translatorProof,
266
342
  ].flat();
267
343
 
268
- // Note: Verification may not work correctly until we properly serialize the proof
269
- if (!(await this.verify(proof, vkResult.bytes))) {
344
+ // Verify using native proof directly to avoid redundant encode/decode cycle
345
+ if (!(await this.verifyNative(proveResult.proof, vkResult.bytes))) {
270
346
  throw new AztecClientBackendError('Failed to verify the private (Chonk) transaction proof!');
271
347
  }
272
348
  return [proofFields, proof, vkResult.bytes];
@@ -280,6 +356,18 @@ export class AztecClientBackend {
280
356
  return result.valid;
281
357
  }
282
358
 
359
+ /**
360
+ * Internal verification using native ChonkProof type.
361
+ * Avoids encode/decode cycle when called from prove().
362
+ */
363
+ private async verifyNative(proof: ChonkProof, vk: Uint8Array): Promise<boolean> {
364
+ const result = await this.api.chonkVerify({
365
+ proof,
366
+ vk,
367
+ });
368
+ return result.valid;
369
+ }
370
+
283
371
  async gates(): Promise<number[]> {
284
372
  const circuitSizes: number[] = [];
285
373
  for (const buf of this.acirBuf) {
@@ -310,3 +398,41 @@ function base64Decode(input: string): Uint8Array {
310
398
  throw new Error('atob is not available. Node.js 18+ or browser required.');
311
399
  }
312
400
  }
401
+
402
+ /**
403
+ * Convert a field element (32-byte Uint8Array) to a string.
404
+ *
405
+ * @param field - A 32-byte field element
406
+ * @param radix - The radix for string conversion (2-36), defaults to 10 (decimal)
407
+ * @returns The field value as a string in the specified radix
408
+ *
409
+ * @example
410
+ * const decimal = fieldToString(field); // "12345678"
411
+ * const hex = fieldToString(field, 16); // "bc614e"
412
+ */
413
+ export function fieldToString(field: Uint8Array, radix: number = 10): string {
414
+ let result = 0n;
415
+ for (const byte of field) {
416
+ result <<= 8n;
417
+ result += BigInt(byte);
418
+ }
419
+ return result.toString(radix);
420
+ }
421
+
422
+ /**
423
+ * Convert an array of field elements to an array of strings.
424
+ * Useful for passing VK fields to Noir circuits.
425
+ *
426
+ * @param fields - Array of 32-byte field elements
427
+ * @param radix - The radix for string conversion (2-36), defaults to 10 (decimal)
428
+ * @returns Array of strings in the specified radix
429
+ *
430
+ * @example
431
+ * const vkAsFields = await barretenbergAPI.vkAsFields({ verificationKey: vk });
432
+ * const vkDecimalStrings = fieldsToStrings(vkAsFields.fields); // ["12345678", "87654321", ...]
433
+ * const vkHexStrings = fieldsToStrings(vkAsFields.fields, 16); // ["bc614e", "5397fb1", ...]
434
+ */
435
+ export function fieldsToStrings(fields: Uint8Array[], radix: number = 10): string[] {
436
+ return fields.map(field => fieldToString(field, radix));
437
+ }
438
+
@@ -5,7 +5,15 @@ import { IMsgpackBackendSync, IMsgpackBackendAsync } from '../bb_backends/interf
5
5
  import { BackendOptions, BackendType } from '../bb_backends/index.js';
6
6
  import { createAsyncBackend, createSyncBackend } from '../bb_backends/node/index.js';
7
7
 
8
- export { UltraHonkBackend, UltraHonkVerifierBackend, AztecClientBackend } from './backend.js';
8
+ export {
9
+ UltraHonkBackend,
10
+ UltraHonkVerifierBackend,
11
+ AztecClientBackend,
12
+ fieldToString,
13
+ fieldsToStrings,
14
+ type UltraHonkBackendOptions,
15
+ type VerifierTarget,
16
+ } from './backend.js';
9
17
  export * from '../bb_backends/index.js';
10
18
 
11
19
  export type CircuitOptions = {
@@ -35,7 +35,7 @@ export class BarretenbergWasmMain extends BarretenbergWasmBase {
35
35
  module: WebAssembly.Module,
36
36
  threads = Math.min(getNumCpu(), BarretenbergWasmMain.MAX_THREADS),
37
37
  logger?: (msg: string) => void,
38
- initial = 33,
38
+ initial = 35,
39
39
  maximum = this.getDefaultMaximumMemoryPages(),
40
40
  ) {
41
41
  // Track whether a custom logger was provided so workers know whether to postMessage logs
@@ -28,6 +28,9 @@ export type BackendOptions = {
28
28
  /** @description Custom path to bb binary for native backend (overrides automatic detection) */
29
29
  bbPath?: string;
30
30
 
31
+ /** @description Custom path to bb NAPI module for native backend (overrides automatic detection) */
32
+ napiPath?: string;
33
+
31
34
  /**
32
35
  * @description Logging function
33
36
  * Warning: Attaching a logger can prevent nodejs from exiting without explicitly destroying the backend.