@aztec/bb-prover 5.0.0-private.20260318 → 5.0.0-rc.1

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 (58) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +9 -5
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -1
  3. package/dest/avm_proving_tests/avm_proving_tester.js +146 -104
  4. package/dest/bb/bb_js_backend.d.ts +196 -0
  5. package/dest/bb/bb_js_backend.d.ts.map +1 -0
  6. package/dest/bb/bb_js_backend.js +379 -0
  7. package/dest/bb/bb_js_debug.d.ts +52 -0
  8. package/dest/bb/bb_js_debug.d.ts.map +1 -0
  9. package/dest/bb/bb_js_debug.js +176 -0
  10. package/dest/bb/file_names.d.ts +4 -0
  11. package/dest/bb/file_names.d.ts.map +1 -0
  12. package/dest/bb/file_names.js +5 -0
  13. package/dest/config.d.ts +17 -1
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/index.d.ts +3 -2
  16. package/dest/index.d.ts.map +1 -1
  17. package/dest/index.js +2 -1
  18. package/dest/prover/client/bb_private_kernel_prover.d.ts +10 -2
  19. package/dest/prover/client/bb_private_kernel_prover.d.ts.map +1 -1
  20. package/dest/prover/client/bb_private_kernel_prover.js +38 -4
  21. package/dest/prover/proof_utils.d.ts +11 -1
  22. package/dest/prover/proof_utils.d.ts.map +1 -1
  23. package/dest/prover/proof_utils.js +24 -1
  24. package/dest/prover/server/bb_prover.d.ts +4 -5
  25. package/dest/prover/server/bb_prover.d.ts.map +1 -1
  26. package/dest/prover/server/bb_prover.js +207 -78
  27. package/dest/verification_key/verification_key_data.js +1 -1
  28. package/dest/verifier/batch_chonk_verifier.d.ts +45 -0
  29. package/dest/verifier/batch_chonk_verifier.d.ts.map +1 -0
  30. package/dest/verifier/batch_chonk_verifier.js +232 -0
  31. package/dest/verifier/bb_verifier.d.ts +4 -1
  32. package/dest/verifier/bb_verifier.d.ts.map +1 -1
  33. package/dest/verifier/bb_verifier.js +134 -45
  34. package/dest/verifier/index.d.ts +2 -1
  35. package/dest/verifier/index.d.ts.map +1 -1
  36. package/dest/verifier/index.js +1 -0
  37. package/dest/verifier/queued_chonk_verifier.d.ts +2 -3
  38. package/dest/verifier/queued_chonk_verifier.d.ts.map +1 -1
  39. package/dest/verifier/queued_chonk_verifier.js +6 -5
  40. package/package.json +19 -17
  41. package/src/avm_proving_tests/avm_proving_tester.ts +45 -126
  42. package/src/bb/bb_js_backend.ts +435 -0
  43. package/src/bb/bb_js_debug.ts +227 -0
  44. package/src/bb/file_names.ts +6 -0
  45. package/src/config.ts +16 -0
  46. package/src/index.ts +2 -1
  47. package/src/prover/client/bb_private_kernel_prover.ts +115 -3
  48. package/src/prover/proof_utils.ts +41 -1
  49. package/src/prover/server/bb_prover.ts +132 -137
  50. package/src/verification_key/verification_key_data.ts +1 -1
  51. package/src/verifier/batch_chonk_verifier.ts +276 -0
  52. package/src/verifier/bb_verifier.ts +66 -76
  53. package/src/verifier/index.ts +1 -0
  54. package/src/verifier/queued_chonk_verifier.ts +6 -7
  55. package/dest/bb/execute.d.ts +0 -108
  56. package/dest/bb/execute.d.ts.map +0 -1
  57. package/dest/bb/execute.js +0 -652
  58. package/src/bb/execute.ts +0 -687
@@ -6,17 +6,21 @@ import type { Gas } from '@aztec/stdlib/gas';
6
6
  import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
7
7
  import type { GlobalVariables } from '@aztec/stdlib/tx';
8
8
  import { NativeWorldStateService } from '@aztec/world-state';
9
- import { type BBResult, type BBSuccess } from '../bb/execute.js';
10
9
  export declare class AvmProvingTester extends PublicTxSimulationTester {
11
10
  private checkCircuitOnly;
12
- private bbWorkingDirectory;
11
+ private readonly bbJsFactory;
13
12
  constructor(checkCircuitOnly: boolean, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, globals?: GlobalVariables, metrics?: TestExecutorMetrics);
14
13
  static new(worldStateService: NativeWorldStateService, checkCircuitOnly?: boolean, globals?: GlobalVariables, metrics?: TestExecutorMetrics): Promise<AvmProvingTester>;
15
- prove(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<BBResult>;
16
- verify(proofRes: BBSuccess, publicInputs: AvmCircuitPublicInputs): Promise<BBResult>;
14
+ /**
15
+ * Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
16
+ * Returns the in-memory proof fields on success; throws via jest expect() on failure.
17
+ */
18
+ prove(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<Uint8Array[]>;
19
+ verify(proof: Uint8Array[], publicInputs: AvmCircuitPublicInputs): Promise<void>;
17
20
  proveVerify(avmCircuitInputs: AvmCircuitInputs, txLabel?: string): Promise<void>;
21
+ private recordProverMetrics;
18
22
  simProveVerify(sender: AztecAddress, setupCalls: TestEnqueuedCall[], appCalls: TestEnqueuedCall[], teardownCall: TestEnqueuedCall | undefined, expectRevert: boolean | undefined, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, txLabel?: string, disableRevertCheck?: boolean, gasLimits?: Gas): Promise<PublicTxResult>;
19
23
  executeTxWithLabel(txLabel: string, sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress, privateInsertions?: TestPrivateInsertions, gasLimits?: Gas): Promise<PublicTxResult>;
20
24
  simProveVerifyAppLogic(appCall: TestEnqueuedCall, expectRevert?: boolean, txLabel?: string, gasLimits?: Gas): Promise<void>;
21
25
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3Byb3ZpbmdfdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtX3Byb3ZpbmdfdGVzdHMvYXZtX3Byb3ZpbmdfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUsscUJBQXFCLEVBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBTTdELE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBK0MsTUFBTSxrQkFBa0IsQ0FBQztBQTZFOUcscUJBQWEsZ0JBQWlCLFNBQVEsd0JBQXdCO0lBSTFELE9BQU8sQ0FBQyxnQkFBZ0I7SUFIMUIsT0FBTyxDQUFDLGtCQUFrQixDQUFjO0lBRXhDLFlBQ1UsZ0JBQWdCLEVBQUUsT0FBTyxFQUNqQyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFDNUMsV0FBVyxFQUFFLHlCQUF5QixFQUN0QyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQ3pCLE9BQU8sQ0FBQyxFQUFFLG1CQUFtQixFQUk5QjtJQUVELE9BQWEsR0FBRyxDQUNkLGlCQUFpQixFQUFFLHVCQUF1QixFQUMxQyxnQkFBZ0IsR0FBRSxPQUFlLEVBQ2pDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFDekIsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLDZCQUs5QjtJQUVLLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEdBQUUsTUFBc0IsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBNkRsRztJQUVLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBUXpGO0lBRVksV0FBVyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sR0FBRSxNQUFzQixpQkFNM0Y7SUFFWSxjQUFjLENBQ3pCLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxFQUM5QixRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsRUFDNUIsWUFBWSxFQUFFLGdCQUFnQixHQUFHLFNBQVMsRUFDMUMsWUFBWSxFQUFFLE9BQU8sR0FBRyxTQUFTLEVBQ2pDLFFBQVEsZUFBUyxFQUNqQixpQkFBaUIsQ0FBQyxFQUFFLHFCQUFxQixFQUN6QyxPQUFPLEdBQUUsTUFBc0IsRUFDL0Isa0JBQWtCLEdBQUUsT0FBZSxFQUNuQyxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQ2QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQTJCekI7SUFFcUIsa0JBQWtCLENBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQ2YsTUFBTSxFQUFFLFlBQVksRUFDcEIsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsRUFDL0IsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsRUFDN0IsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCLEVBQy9CLFFBQVEsQ0FBQyxFQUFFLFlBQVksRUFDdkIsaUJBQWlCLENBQUMsRUFBRSxxQkFBcUIsRUFDekMsU0FBUyxDQUFDLEVBQUUsR0FBRywyQkFjaEI7SUFFWSxzQkFBc0IsQ0FDakMsT0FBTyxFQUFFLGdCQUFnQixFQUN6QixZQUFZLENBQUMsRUFBRSxPQUFPLEVBQ3RCLE9BQU8sR0FBRSxNQUFzQixFQUMvQixTQUFTLENBQUMsRUFBRSxHQUFHLGlCQWNoQjtDQUNGIn0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3Byb3ZpbmdfdGVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtX3Byb3ZpbmdfdGVzdHMvYXZtX3Byb3ZpbmdfdGVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUsscUJBQXFCLEVBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUF5QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBa0I3RCxxQkFBYSxnQkFBaUIsU0FBUSx3QkFBd0I7SUFJMUQsT0FBTyxDQUFDLGdCQUFnQjtJQUgxQixPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBNEI7SUFFeEQsWUFDVSxnQkFBZ0IsRUFBRSxPQUFPLEVBQ2pDLGtCQUFrQixFQUFFLHdCQUF3QixFQUM1QyxXQUFXLEVBQUUseUJBQXlCLEVBQ3RDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFDekIsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLEVBSTlCO0lBRUQsT0FBYSxHQUFHLENBQ2QsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQzFDLGdCQUFnQixHQUFFLE9BQWUsRUFDakMsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUN6QixPQUFPLENBQUMsRUFBRSxtQkFBbUIsNkJBSzlCO0lBRUQ7OztPQUdHO0lBQ0csS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sR0FBRSxNQUFzQixHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWV0RztJQUVLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FTckY7SUFFWSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxHQUFFLE1BQXNCLGlCQUczRjtJQUVELE9BQU8sQ0FBQyxtQkFBbUI7SUE0QmQsY0FBYyxDQUN6QixNQUFNLEVBQUUsWUFBWSxFQUNwQixVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFDOUIsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQzVCLFlBQVksRUFBRSxnQkFBZ0IsR0FBRyxTQUFTLEVBQzFDLFlBQVksRUFBRSxPQUFPLEdBQUcsU0FBUyxFQUNqQyxRQUFRLGVBQVMsRUFDakIsaUJBQWlCLENBQUMsRUFBRSxxQkFBcUIsRUFDekMsT0FBTyxHQUFFLE1BQXNCLEVBQy9CLGtCQUFrQixHQUFFLE9BQWUsRUFDbkMsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUNkLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EyQnpCO0lBRXFCLGtCQUFrQixDQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUNmLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQy9CLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEVBQzdCLFlBQVksQ0FBQyxFQUFFLGdCQUFnQixFQUMvQixRQUFRLENBQUMsRUFBRSxZQUFZLEVBQ3ZCLGlCQUFpQixDQUFDLEVBQUUscUJBQXFCLEVBQ3pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsMkJBY2hCO0lBRVksc0JBQXNCLENBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUN0QixPQUFPLEdBQUUsTUFBc0IsRUFDL0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxpQkFjaEI7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAM7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAA+C,MAAM,kBAAkB,CAAC;AA6E9G,qBAAa,gBAAiB,SAAQ,wBAAwB;IAI1D,OAAO,CAAC,gBAAgB;IAH1B,OAAO,CAAC,kBAAkB,CAAc;IAExC,YACU,gBAAgB,EAAE,OAAO,EACjC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAI9B;IAED,OAAa,GAAG,CACd,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,GAAE,OAAe,EACjC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,6BAK9B;IAEK,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6DlG;IAEK,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQzF;IAEY,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,iBAM3F;IAEY,cAAc,CACzB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS,EACjB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,EAC/B,kBAAkB,GAAE,OAAe,EACnC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CA2BzB;IAEqB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,2BAchB;IAEY,sBAAsB,CACjC,OAAO,EAAE,gBAAgB,EACzB,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,MAAsB,EAC/B,SAAS,CAAC,EAAE,GAAG,iBAchB;CACF"}
1
+ {"version":3,"file":"avm_proving_tester.d.ts","sourceRoot":"","sources":["../../src/avm_proving_tests/avm_proving_tester.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAyB,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAkB7D,qBAAa,gBAAiB,SAAQ,wBAAwB;IAI1D,OAAO,CAAC,gBAAgB;IAH1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAExD,YACU,gBAAgB,EAAE,OAAO,EACjC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,EAI9B;IAED,OAAa,GAAG,CACd,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,GAAE,OAAe,EACjC,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,6BAK9B;IAED;;;OAGG;IACG,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAetG;IAEK,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF;IAEY,WAAW,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,GAAE,MAAsB,iBAG3F;IAED,OAAO,CAAC,mBAAmB;IA4Bd,cAAc,CACzB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,YAAY,EAAE,OAAO,GAAG,SAAS,EACjC,QAAQ,eAAS,EACjB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,OAAO,GAAE,MAAsB,EAC/B,kBAAkB,GAAE,OAAe,EACnC,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CA2BzB;IAEqB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,CAAC,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,EAC7B,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,CAAC,EAAE,YAAY,EACvB,iBAAiB,CAAC,EAAE,qBAAqB,EACzC,SAAS,CAAC,EAAE,GAAG,2BAchB;IAEY,sBAAsB,CACjC,OAAO,EAAE,gBAAgB,EACzB,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,MAAsB,EAC/B,SAAS,CAAC,EAAE,GAAG,iBAchB;CACF"}
@@ -1,66 +1,75 @@
1
+ function _ts_add_disposable_resource(env, value, async) {
2
+ if (value !== null && value !== void 0) {
3
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
+ var dispose, inner;
5
+ if (async) {
6
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
+ dispose = value[Symbol.asyncDispose];
8
+ }
9
+ if (dispose === void 0) {
10
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
+ dispose = value[Symbol.dispose];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ env.stack.push({
23
+ value: value,
24
+ dispose: dispose,
25
+ async: async
26
+ });
27
+ } else if (async) {
28
+ env.stack.push({
29
+ async: true
30
+ });
31
+ }
32
+ return value;
33
+ }
34
+ function _ts_dispose_resources(env) {
35
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
36
+ var e = new Error(message);
37
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
+ };
39
+ return (_ts_dispose_resources = function _ts_dispose_resources(env) {
40
+ function fail(e) {
41
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
42
+ env.hasError = true;
43
+ }
44
+ var r, s = 0;
45
+ function next() {
46
+ while(r = env.stack.pop()){
47
+ try {
48
+ if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
49
+ if (r.dispose) {
50
+ var result = r.dispose.call(r.value);
51
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
52
+ fail(e);
53
+ return next();
54
+ });
55
+ } else s |= 1;
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
61
+ if (env.hasError) throw env.error;
62
+ }
63
+ return next();
64
+ })(env);
65
+ }
1
66
  import { Timer } from '@aztec/foundation/timer';
2
67
  import { PublicTxSimulationTester, SimpleContractDataSource } from '@aztec/simulator/public/fixtures';
3
68
  import { AvmCircuitInputs, PublicSimulatorConfig } from '@aztec/stdlib/avm';
4
69
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import fs from 'node:fs/promises';
6
- import { tmpdir } from 'node:os';
7
70
  import path from 'path';
8
- import { BB_RESULT, generateAvmProof, verifyAvmProof } from '../bb/execute.js';
71
+ import { BBJsFactory } from '../bb/bb_js_backend.js';
9
72
  const BB_PATH = path.resolve('../../barretenberg/cpp/build/bin/bb-avm');
10
- // An InterceptingLogger that records all log messages and forwards them to a wrapped logger.
11
- class InterceptingLogger {
12
- logs = [];
13
- level;
14
- module;
15
- logger;
16
- constructor(logger){
17
- this.logger = logger;
18
- this.level = logger.level;
19
- this.module = logger.module;
20
- }
21
- isLevelEnabled(level) {
22
- return this.logger.isLevelEnabled(level);
23
- }
24
- createChild(_childModule) {
25
- throw new Error('Not implemented');
26
- }
27
- getBindings() {
28
- return this.logger.getBindings();
29
- }
30
- intercept(level, msg, ...args) {
31
- this.logs.push(...msg.split('\n'));
32
- // Forward to the wrapped logger
33
- this.logger[level](msg, ...args);
34
- }
35
- // Log methods for each level
36
- silent(msg, ...args) {
37
- this.intercept('silent', msg, ...args);
38
- }
39
- fatal(msg, ...args) {
40
- this.intercept('fatal', msg, ...args);
41
- }
42
- warn(msg, ...args) {
43
- this.intercept('warn', msg, ...args);
44
- }
45
- info(msg, ...args) {
46
- this.intercept('info', msg, ...args);
47
- }
48
- verbose(msg, ...args) {
49
- this.intercept('verbose', msg, ...args);
50
- }
51
- debug(msg, ...args) {
52
- this.intercept('debug', msg, ...args);
53
- }
54
- trace(msg, ...args) {
55
- this.intercept('trace', msg, ...args);
56
- }
57
- // Error log function can be string or Error
58
- error(err, ...args) {
59
- const msg = typeof err === 'string' ? err : err.message;
60
- this.logs.push(msg);
61
- this.logger.error(msg, err, ...args);
62
- }
63
- }
64
73
  // Config with collectHints enabled for proving tests
65
74
  const provingConfig = PublicSimulatorConfig.from({
66
75
  skipFeeEnforcement: false,
@@ -72,52 +81,100 @@ const provingConfig = PublicSimulatorConfig.from({
72
81
  });
73
82
  export class AvmProvingTester extends PublicTxSimulationTester {
74
83
  checkCircuitOnly;
75
- bbWorkingDirectory;
84
+ bbJsFactory;
76
85
  constructor(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics){
77
86
  // simulator factory is undefined because for proving, we use the default C++ simulator
78
- super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.bbWorkingDirectory = '';
87
+ super(merkleTrees, contractDataSource, globals, metrics, /*simulatorFactory=*/ undefined, provingConfig), this.checkCircuitOnly = checkCircuitOnly, this.bbJsFactory = new BBJsFactory(BB_PATH);
79
88
  }
80
89
  static async new(worldStateService, checkCircuitOnly = false, globals, metrics) {
81
90
  const contractDataSource = new SimpleContractDataSource();
82
91
  const merkleTrees = await worldStateService.fork();
83
92
  return new AvmProvingTester(checkCircuitOnly, contractDataSource, merkleTrees, globals, metrics);
84
93
  }
85
- async prove(avmCircuitInputs, txLabel = 'unlabeledTx') {
86
- // We use a new working directory for each proof.
87
- this.bbWorkingDirectory = await fs.mkdtemp(path.join(tmpdir(), 'bb-'));
88
- const interceptingLogger = new InterceptingLogger(this.logger);
89
- // Then we prove.
90
- const proofRes = await generateAvmProof(BB_PATH, this.bbWorkingDirectory, avmCircuitInputs, interceptingLogger, this.checkCircuitOnly);
91
- if (proofRes.status === BB_RESULT.FAILURE) {
92
- this.logger.error(`Proof generation failed: ${proofRes.reason}`);
94
+ /**
95
+ * Generate an AVM proof (or run check-circuit if configured). Records per-stage timings in the test metrics.
96
+ * Returns the in-memory proof fields on success; throws via jest expect() on failure.
97
+ */ async prove(avmCircuitInputs, txLabel = 'unlabeledTx') {
98
+ const env = {
99
+ stack: [],
100
+ error: void 0,
101
+ hasError: false
102
+ };
103
+ try {
104
+ const inputsBuffer = avmCircuitInputs.serializeWithMessagePack();
105
+ if (this.checkCircuitOnly) {
106
+ const env = {
107
+ stack: [],
108
+ error: void 0,
109
+ hasError: false
110
+ };
111
+ try {
112
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
113
+ const { passed, stats } = await instance.checkAvmCircuit(inputsBuffer);
114
+ this.recordProverMetrics(stats, txLabel);
115
+ expect(passed).toBe(true);
116
+ return [];
117
+ } catch (e) {
118
+ env.error = e;
119
+ env.hasError = true;
120
+ } finally{
121
+ const result = _ts_dispose_resources(env);
122
+ if (result) await result;
123
+ }
124
+ }
125
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
126
+ const { proof, stats } = await instance.generateAvmProof(inputsBuffer);
127
+ this.recordProverMetrics(stats, txLabel);
128
+ return proof;
129
+ } catch (e) {
130
+ env.error = e;
131
+ env.hasError = true;
132
+ } finally{
133
+ const result = _ts_dispose_resources(env);
134
+ if (result) await result;
93
135
  }
94
- expect(proofRes.status).toEqual(BB_RESULT.SUCCESS);
95
- // Parse the logs into a structured format.
96
- const logs = interceptingLogger.logs;
97
- // const traceSizes: { name: string; size: number }[] = [];
98
- // logs.forEach(log => {
99
- // const match = log.match(/\b(\w+): (\d+) \(~2/);
100
- // if (match) {
101
- // traceSizes.push({
102
- // name: match[1],
103
- // size: parseInt(match[2]),
104
- // });
105
- // }
106
- // });
107
- const times = {};
108
- logs.forEach((log)=>{
109
- const match = log.match(/\b([\w/]+)_ms: (\d+)/);
110
- if (match) {
111
- times[match[1]] = parseInt(match[2]);
136
+ }
137
+ async verify(proof, publicInputs) {
138
+ const env = {
139
+ stack: [],
140
+ error: void 0,
141
+ hasError: false
142
+ };
143
+ try {
144
+ if (this.checkCircuitOnly) {
145
+ // Check-circuit did not generate a proof; nothing to verify.
146
+ return;
112
147
  }
113
- });
114
- // Throw if logs did not contain any times.
148
+ const piBuffer = publicInputs.serializeWithMessagePack();
149
+ const instance = _ts_add_disposable_resource(env, await this.bbJsFactory.getInstance(), true);
150
+ const { verified } = await instance.verifyAvmProof(proof, piBuffer);
151
+ expect(verified).toBe(true);
152
+ } catch (e) {
153
+ env.error = e;
154
+ env.hasError = true;
155
+ } finally{
156
+ const result = _ts_dispose_resources(env);
157
+ if (result) await result;
158
+ }
159
+ }
160
+ async proveVerify(avmCircuitInputs, txLabel = 'unlabeledTx') {
161
+ const proof = await this.prove(avmCircuitInputs, txLabel);
162
+ await this.verify(proof, avmCircuitInputs.publicInputs);
163
+ }
164
+ recordProverMetrics(stats, txLabel) {
165
+ // Build a lookup keyed on the stage name with the `_ms` suffix stripped, matching the legacy
166
+ // stdout-scraped shape. bb::avm2::Stats::time() stores keys with `_ms` appended.
167
+ const times = {};
168
+ for (const { name, valueMs } of stats){
169
+ const key = name.endsWith('_ms') ? name.slice(0, -'_ms'.length) : name;
170
+ times[key] = valueMs;
171
+ }
115
172
  if (Object.keys(times).length === 0) {
116
- throw new Error('AVM stdout did not contain any proving times in the stats!');
173
+ throw new Error('AVM response did not contain any proving-stage timings!');
117
174
  }
118
175
  // Hack to make labels match.
119
176
  const txLabelWithCount = `${txLabel}/${this.txCount - 1}`;
120
- // I need to cast because TS doesnt realize metrics is protected not private.
177
+ // Cast because TS doesn't realize `metrics` is protected, not private on the parent class.
121
178
  this.metrics?.recordProverMetrics(txLabelWithCount, {
122
179
  proverSimulationStepMs: times['simulation/all'],
123
180
  proverProvingStepMs: times['proving/all'],
@@ -130,21 +187,6 @@ export class AvmProvingTester extends PublicTxSimulationTester {
130
187
  provingLogDerivativeInverseCommitmentsMs: times['prove/log_derivative_inverse_commitments_round'],
131
188
  provingWireCommitmentsMs: times['prove/wire_commitments_round']
132
189
  });
133
- return proofRes;
134
- }
135
- async verify(proofRes, publicInputs) {
136
- if (this.checkCircuitOnly) {
137
- // Skip verification if we are only checking the circuit.
138
- // Check-circuit does not generate a proof to verify.
139
- return proofRes;
140
- }
141
- return await verifyAvmProof(BB_PATH, this.bbWorkingDirectory, proofRes.proofPath, publicInputs, this.logger);
142
- }
143
- async proveVerify(avmCircuitInputs, txLabel = 'unlabeledTx') {
144
- const provingRes = await this.prove(avmCircuitInputs, txLabel);
145
- expect(provingRes.status).toEqual(BB_RESULT.SUCCESS);
146
- const verificationRes = await this.verify(provingRes, avmCircuitInputs.publicInputs);
147
- expect(verificationRes.status).toBe(BB_RESULT.SUCCESS);
148
190
  }
149
191
  async simProveVerify(sender, setupCalls, appCalls, teardownCall, expectRevert, feePayer = sender, privateInsertions, txLabel = 'unlabeledTx', disableRevertCheck = false, gasLimits) {
150
192
  const simTimer = new Timer();
@@ -0,0 +1,196 @@
1
+ import { type AvmStat } from '@aztec/bb.js';
2
+ import type { LogFn, Logger } from '@aztec/foundation/log';
3
+ import type { UltraHonkFlavor } from '../honk.js';
4
+ /** Result of a successful proof generation via bb.js. */
5
+ export type BBJsProofResult = {
6
+ /** Proof fields as 32-byte Uint8Arrays. */
7
+ proofFields: Uint8Array[];
8
+ /** Public input fields as 32-byte Uint8Arrays. */
9
+ publicInputFields: Uint8Array[];
10
+ /** Duration of the proving operation in ms. */
11
+ durationMs: number;
12
+ };
13
+ /** Public API surface of a bb.js instance, used by the factory and debug wrapper. */
14
+ export interface BBJsApi {
15
+ generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
16
+ verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
17
+ verified: boolean;
18
+ durationMs: number;
19
+ }>;
20
+ verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
21
+ verified: boolean;
22
+ durationMs: number;
23
+ }>;
24
+ computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
25
+ circuitSize: number;
26
+ durationMs: number;
27
+ }>;
28
+ generateContract(verificationKey: Uint8Array): Promise<{
29
+ solidityCode: string;
30
+ durationMs: number;
31
+ }>;
32
+ /** Generate an AVM proof from serialized inputs. Callers should call verifyAvmProof separately. */
33
+ generateAvmProof(inputs: Uint8Array): Promise<{
34
+ proof: Uint8Array[];
35
+ stats: AvmStat[];
36
+ durationMs: number;
37
+ }>;
38
+ /** Verify an AVM proof against serialized public inputs. */
39
+ verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
40
+ verified: boolean;
41
+ durationMs: number;
42
+ }>;
43
+ /** Check the AVM circuit from serialized inputs. Returns pass/fail and per-stage timings. */
44
+ checkAvmCircuit(inputs: Uint8Array): Promise<{
45
+ passed: boolean;
46
+ stats: AvmStat[];
47
+ durationMs: number;
48
+ }>;
49
+ destroy(): Promise<void>;
50
+ }
51
+ /**
52
+ * Thin wrapper around a single Barretenberg instance.
53
+ * Each instance spawns its own bb process via the NativeUnixSocket backend.
54
+ */
55
+ export declare class BBJsInstance implements BBJsApi {
56
+ private api;
57
+ private constructor();
58
+ /** Creates a new Barretenberg instance connected to a fresh bb process. */
59
+ static create(bbPath: string, logger?: LogFn, threads?: number): Promise<BBJsInstance>;
60
+ /**
61
+ * Generate an UltraHonk proof for a circuit.
62
+ * @param circuitName - Identifier for the circuit (used by bb internally).
63
+ * @param bytecode - Uncompressed ACIR bytecode.
64
+ * @param verificationKey - The circuit's verification key bytes.
65
+ * @param witness - Uncompressed witness bytes.
66
+ * @param flavor - The UltraHonk flavor to use.
67
+ */
68
+ generateProof(circuitName: string, bytecode: Uint8Array, verificationKey: Uint8Array, witness: Uint8Array, flavor: UltraHonkFlavor): Promise<BBJsProofResult>;
69
+ /**
70
+ * Verify an UltraHonk proof.
71
+ * @param proofFields - Proof fields as 32-byte Uint8Arrays.
72
+ * @param verificationKey - The VK bytes.
73
+ * @param publicInputFields - Public input fields as 32-byte Uint8Arrays.
74
+ * @param flavor - The UltraHonk flavor.
75
+ * @returns Whether the proof is valid.
76
+ */
77
+ verifyProof(proofFields: Uint8Array[], verificationKey: Uint8Array, publicInputFields: Uint8Array[], flavor: UltraHonkFlavor): Promise<{
78
+ verified: boolean;
79
+ durationMs: number;
80
+ }>;
81
+ /**
82
+ * Compute circuit gate count / circuit size.
83
+ * @param circuitName - Identifier for the circuit.
84
+ * @param bytecode - Uncompressed ACIR bytecode.
85
+ * @param flavor - 'mega_honk' for chonk circuits, or an UltraHonk flavor.
86
+ * @returns The dyadic circuit size (next power of 2 of gate count).
87
+ */
88
+ computeGateCount(circuitName: string, bytecode: Uint8Array, flavor: UltraHonkFlavor | 'mega_honk'): Promise<{
89
+ circuitSize: number;
90
+ durationMs: number;
91
+ }>;
92
+ /**
93
+ * Generate a Solidity verifier contract from a verification key.
94
+ * @param verificationKey - The VK bytes.
95
+ * @returns The Solidity source code.
96
+ */
97
+ generateContract(verificationKey: Uint8Array): Promise<{
98
+ solidityCode: string;
99
+ durationMs: number;
100
+ }>;
101
+ /**
102
+ * Verify a Chonk (IVC) proof passed as flat field elements (with public inputs prepended).
103
+ * The split into structured sub-proofs happens server-side in `ChonkProof::from_field_elements`,
104
+ * so this layer doesn't need to know per-component sub-proof sizes.
105
+ * @param fieldsWithPublicInputs - Flat proof fields as 32-byte Uint8Arrays (public inputs prepended).
106
+ * @param verificationKey - The VK bytes.
107
+ */
108
+ verifyChonkProof(fieldsWithPublicInputs: Uint8Array[], verificationKey: Uint8Array): Promise<{
109
+ verified: boolean;
110
+ durationMs: number;
111
+ }>;
112
+ /** Generate an AVM proof from serialized inputs. */
113
+ generateAvmProof(inputs: Uint8Array): Promise<{
114
+ proof: Uint8Array[];
115
+ stats: AvmStat[];
116
+ durationMs: number;
117
+ }>;
118
+ /** Verify an AVM proof against serialized public inputs. */
119
+ verifyAvmProof(proof: Uint8Array[], publicInputs: Uint8Array): Promise<{
120
+ verified: boolean;
121
+ durationMs: number;
122
+ }>;
123
+ /** Check the AVM circuit from serialized inputs. */
124
+ checkAvmCircuit(inputs: Uint8Array): Promise<{
125
+ passed: boolean;
126
+ stats: AvmStat[];
127
+ durationMs: number;
128
+ }>;
129
+ /** Destroy this instance and kill the underlying bb process. */
130
+ destroy(): Promise<void>;
131
+ }
132
+ /** Options for {@link BBJsFactory}. */
133
+ export interface BBJsFactoryOptions {
134
+ /**
135
+ * Number of long-lived bb processes to keep in the pool.
136
+ * If omitted, every `getInstance()` call spawns a fresh bb that is destroyed on dispose.
137
+ */
138
+ poolSize?: number;
139
+ logger?: Logger;
140
+ threads?: number;
141
+ debugDir?: string;
142
+ }
143
+ /**
144
+ * Manages bb.js instance lifecycle. By default every `getInstance()` call spawns a fresh
145
+ * bb process that is destroyed when the borrow is disposed. Pass `poolSize` to keep a fixed
146
+ * set of long-lived bb processes that are reused across calls — useful when the per-call
147
+ * bb startup cost dominates the workload (e.g. high-rate IVC verification).
148
+ *
149
+ * Idiomatic usage:
150
+ * ```
151
+ * await using inst = await factory.getInstance();
152
+ * await inst.someMethod(...);
153
+ * // disposed automatically when `inst` goes out of scope
154
+ * ```
155
+ */
156
+ export declare class BBJsFactory {
157
+ private bbPath;
158
+ private readonly poolSize?;
159
+ private readonly logger?;
160
+ private readonly threads?;
161
+ private readonly debugDir?;
162
+ /** Available pooled instances when poolSize is set; otherwise undefined. */
163
+ private pool?;
164
+ /** Lazily-resolved on first `getInstance()` call to prevent racing pool initialization. */
165
+ private initPromise?;
166
+ private destroyed;
167
+ constructor(bbPath: string, options?: BBJsFactoryOptions);
168
+ /**
169
+ * Acquire a bb instance. The returned object implements `BBJsApi` and `AsyncDisposable`.
170
+ * With no pool: spawns a fresh bb that is destroyed on dispose. With a pool: borrows from
171
+ * the pool and returns to it on dispose.
172
+ */
173
+ getInstance(): Promise<BBJsApi & AsyncDisposable>;
174
+ /**
175
+ * Tear down all pooled instances. Idempotent. No-op when no pool is configured (fresh-per-call
176
+ * instances are destroyed by their own dispose callbacks). Instances currently held by an
177
+ * in-flight pooled borrow are destroyed by their dispose callback when released.
178
+ */
179
+ destroy(): Promise<void>;
180
+ private initPool;
181
+ private createInstance;
182
+ private maybeWrapDebug;
183
+ /**
184
+ * Wrap a fresh instance with an `AsyncDisposable` that destroys it on dispose. Used when no
185
+ * pool is configured. Destroy errors are propagated so that a teardown failure (e.g. a bb child
186
+ * that didn't shut down cleanly) surfaces instead of being silently swallowed.
187
+ */
188
+ private makeOwned;
189
+ /**
190
+ * Wrap a pooled instance with an `AsyncDisposable` that returns it to the pool (or destroys it
191
+ * if the factory was destroyed in the meantime). Destroy errors are propagated.
192
+ */
193
+ private makeBorrowed;
194
+ private makeDisposable;
195
+ }
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJfanNfYmFja2VuZC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JiL2JiX2pzX2JhY2tlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFrRCxNQUFNLGNBQWMsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBb0JsRCx5REFBeUQ7QUFDekQsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwyQ0FBMkM7SUFDM0MsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFCLGtEQUFrRDtJQUNsRCxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNoQywrQ0FBK0M7SUFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQixDQUFDO0FBRUYscUZBQXFGO0FBQ3JGLE1BQU0sV0FBVyxPQUFPO0lBQ3RCLGFBQWEsQ0FDWCxXQUFXLEVBQUUsTUFBTSxFQUNuQixRQUFRLEVBQUUsVUFBVSxFQUNwQixlQUFlLEVBQUUsVUFBVSxFQUMzQixPQUFPLEVBQUUsVUFBVSxFQUNuQixNQUFNLEVBQUUsZUFBZSxHQUN0QixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUIsV0FBVyxDQUNULFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFDekIsZUFBZSxFQUFFLFVBQVUsRUFDM0IsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQy9CLE1BQU0sRUFBRSxlQUFlLEdBQ3RCLE9BQU8sQ0FBQztRQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixDQUNkLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxFQUNwQyxlQUFlLEVBQUUsVUFBVSxHQUMxQixPQUFPLENBQUM7UUFB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bb_js_backend.d.ts","sourceRoot":"","sources":["../../src/bb/bb_js_backend.ts"],"names":[],"mappings":"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"}