@aztec/foundation 0.35.1 → 0.37.0

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 (51) hide show
  1. package/dest/abi/abi.d.ts +44 -0
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +6 -3
  4. package/dest/abi/decoder.d.ts +2 -3
  5. package/dest/abi/decoder.d.ts.map +1 -1
  6. package/dest/abi/decoder.js +1 -1
  7. package/dest/abi/function_selector.d.ts.map +1 -1
  8. package/dest/abi/function_selector.js +1 -1
  9. package/dest/aztec-address/index.d.ts.map +1 -1
  10. package/dest/aztec-address/index.js +1 -1
  11. package/dest/{errors → error}/index.d.ts +10 -0
  12. package/dest/error/index.d.ts.map +1 -0
  13. package/dest/error/index.js +18 -0
  14. package/dest/fifo/memory_fifo.d.ts +8 -4
  15. package/dest/fifo/memory_fifo.d.ts.map +1 -1
  16. package/dest/fifo/memory_fifo.js +18 -8
  17. package/dest/index.d.ts +1 -1
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +2 -2
  20. package/dest/noir/noir_package_config.d.ts +2 -2
  21. package/dest/promise/index.d.ts +3 -0
  22. package/dest/promise/index.d.ts.map +1 -0
  23. package/dest/promise/index.js +3 -0
  24. package/dest/promise/running-promise.d.ts +28 -0
  25. package/dest/promise/running-promise.d.ts.map +1 -0
  26. package/dest/promise/running-promise.js +45 -0
  27. package/dest/promise/utils.d.ts +12 -0
  28. package/dest/promise/utils.d.ts.map +1 -0
  29. package/dest/promise/utils.js +22 -0
  30. package/dest/running-promise/index.d.ts +1 -34
  31. package/dest/running-promise/index.d.ts.map +1 -1
  32. package/dest/running-promise/index.js +2 -59
  33. package/dest/sleep/index.js +2 -2
  34. package/dest/testing/test_data.js +2 -2
  35. package/dest/timer/timeout.d.ts.map +1 -1
  36. package/package.json +12 -3
  37. package/src/abi/abi.ts +52 -2
  38. package/src/abi/decoder.ts +3 -4
  39. package/src/abi/function_selector.ts +4 -4
  40. package/src/aztec-address/index.ts +6 -6
  41. package/src/{errors → error}/index.ts +10 -0
  42. package/src/fifo/memory_fifo.ts +18 -7
  43. package/src/index.ts +1 -1
  44. package/src/promise/index.ts +2 -0
  45. package/src/promise/running-promise.ts +47 -0
  46. package/src/promise/utils.ts +29 -0
  47. package/src/running-promise/index.ts +1 -60
  48. package/src/sleep/index.ts +1 -1
  49. package/src/testing/test_data.ts +1 -1
  50. package/dest/errors/index.d.ts.map +0 -1
  51. package/dest/errors/index.js +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/running-promise/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,cAAc;IAKb,OAAO,CAAC,EAAE;IAAuB,OAAO,CAAC,eAAe;IAJpE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAY;gBAChB,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAU,eAAe,SAAQ;IAE5E;;OAEG;IACI,KAAK;IAaZ;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;;;OAIG;YACW,kBAAkB;IAShC;;;OAGG;IACI,SAAS;CAGjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/running-promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -1,59 +1,2 @@
1
- /**
2
- * RunningPromise is a utility class that helps manage the execution of an asynchronous function
3
- * at a specified polling interval. It allows starting, stopping, and checking the status of the
4
- * internally managed promise. The class also supports interrupting the polling process when stopped.
5
- */
6
- export class RunningPromise {
7
- constructor(fn, pollingInterval = 10000) {
8
- this.fn = fn;
9
- this.pollingInterval = pollingInterval;
10
- this.running = false;
11
- this.runningPromise = Promise.resolve();
12
- this.interruptPromise = Promise.resolve();
13
- this.interruptResolve = () => { };
14
- }
15
- /**
16
- * Starts the running promise.
17
- */
18
- start() {
19
- this.running = true;
20
- this.interruptPromise = new Promise(resolve => (this.interruptResolve = resolve));
21
- const poll = async () => {
22
- while (this.running) {
23
- await this.fn();
24
- await this.interruptibleSleep(this.pollingInterval);
25
- }
26
- };
27
- this.runningPromise = poll();
28
- }
29
- /**
30
- * Stops the running promise, resolves any pending interruptible sleep,
31
- * and waits for the currently executing function to complete.
32
- */
33
- async stop() {
34
- this.running = false;
35
- this.interruptResolve();
36
- await this.runningPromise;
37
- }
38
- /**
39
- * A sleep function that can be interrupted before the specified time.
40
- * The sleep duration is determined by 'timeInMs', and it can be terminated early if the 'interruptPromise' is resolved.
41
- * @param timeInMs - The time in milliseconds.
42
- */
43
- async interruptibleSleep(timeInMs) {
44
- let timeout;
45
- const sleepPromise = new Promise(resolve => {
46
- timeout = setTimeout(resolve, timeInMs);
47
- });
48
- await Promise.race([sleepPromise, this.interruptPromise]);
49
- clearTimeout(timeout);
50
- }
51
- /**
52
- * Checks if the running promise is currently active.
53
- * @returns True if the promise is running.
54
- */
55
- isRunning() {
56
- return this.running;
57
- }
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmluZy1wcm9taXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUt6QixZQUFvQixFQUF1QixFQUFVLGtCQUFrQixLQUFLO1FBQXhELE9BQUUsR0FBRixFQUFFLENBQXFCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFKcEUsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixtQkFBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMscUJBQWdCLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQzJDLENBQUM7SUFFaEY7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVsRixNQUFNLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBZ0I7UUFDL0MsSUFBSSxPQUF3QixDQUFDO1FBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDMUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
1
+ export * from '../promise/running-promise.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmluZy1wcm9taXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUMifQ==
@@ -1,4 +1,4 @@
1
- import { InterruptError } from '../errors/index.js';
1
+ import { InterruptError } from '../error/index.js';
2
2
  /**
3
3
  * InterruptibleSleep is a utility class that allows you to create an interruptible sleep function.
4
4
  * The sleep function can be interrupted at any time by calling the `interrupt` method, which can
@@ -68,4 +68,4 @@ export class InterruptibleSleep {
68
68
  export function sleep(ms, returnValue) {
69
69
  return new Promise(resolve => setTimeout(() => resolve(returnValue), ms));
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xlZXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUEvQjtRQUNVLGVBQVUsR0FBMEMsRUFBRSxDQUFDO0lBc0NqRSxDQUFDO0lBcENDOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQVU7UUFDM0IsSUFBSSxnQkFBZ0QsQ0FBQztRQUNyRCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFVLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELGdCQUFnQixHQUFHLE9BQU8sQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFVLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUksRUFBVSxFQUFFLFdBQWU7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIn0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xlZXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQUEvQjtRQUNVLGVBQVUsR0FBMEMsRUFBRSxDQUFDO0lBc0NqRSxDQUFDO0lBcENDOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQVU7UUFDM0IsSUFBSSxnQkFBZ0QsQ0FBQztRQUNyRCxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFVLE9BQU8sQ0FBQyxFQUFFO1lBQ3RELGdCQUFnQixHQUFHLE9BQU8sQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFVLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUksRUFBVSxFQUFFLFdBQWU7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIn0=
@@ -55,7 +55,7 @@ export function updateInlineTestData(targetFileFromRepoRoot, itemName, value) {
55
55
  const logger = createConsoleLogger('aztec:testing:test_data');
56
56
  const targetFile = getPathToFile(targetFileFromRepoRoot);
57
57
  const contents = readFileSync(targetFile, 'utf8').toString();
58
- const regex = new RegExp(`let ${itemName} = .*;`, 'g');
58
+ const regex = new RegExp(`let ${itemName} = [\\s\\S]*?;`, 'g');
59
59
  if (!regex.exec(contents)) {
60
60
  throw new Error(`Test data marker for ${itemName} not found in ${targetFile}`);
61
61
  }
@@ -70,4 +70,4 @@ function getPathToFile(targetFileFromRepoRoot) {
70
70
  }
71
71
  return join(repoRoot, targetFileFromRepoRoot);
72
72
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdGVzdF9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sUUFBUSxHQUFnRCxFQUFFLENBQUM7QUFFakUsc0RBQXNEO0FBQ3RELE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDdkYsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWdCLEVBQUUsSUFBNEI7SUFDekUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUNqQyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDbEMsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFHLEdBQUcsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUM1QixRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxD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
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdGVzdF9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sUUFBUSxHQUFnRCxFQUFFLENBQUM7QUFFakUsc0RBQXNEO0FBQ3RELE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDdkYsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWdCLEVBQUUsSUFBNEI7SUFDekUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUNqQyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDbEMsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFHLEdBQUcsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUM1QixRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxD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
@@ -1 +1 @@
1
- {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timer/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKZ,OAAO,CAAC,EAAE;IAAoB,OAAO,CAAC,OAAO;IAJzD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAK;gBAEF,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAU,OAAO,SAAI,EAAE,MAAM,SAAK;IAM1E;;;;;;;OAOG;IACU,IAAI;IAYjB;;;;;;OAMG;IACI,mBAAmB;IAI1B;;;;;OAKG;IACI,OAAO;CAGf;AAED,eAAO,MAAM,cAAc,4EAG1B,CAAC"}
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timer/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKZ,OAAO,CAAC,EAAE;IAAoB,OAAO,CAAC,OAAO;IAJzD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAK;gBAEF,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAU,OAAO,SAAI,EAAE,MAAM,SAAK;IAM1E;;;;;;;OAOG;IACU,IAAI;IAYjB;;;;;;OAMG;IACI,mBAAmB;IAI1B;;;;;OAKG;IACI,OAAO;CAGf;AAED,eAAO,MAAM,cAAc,UAAiB,MAAM,QAAQ,CAAC,CAAC,kDAG3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.35.1",
3
+ "version": "0.37.0",
4
4
  "packageManager": "yarn@3.4.1",
5
5
  "type": "module",
6
6
  "main": "./dest/index.js",
@@ -39,7 +39,8 @@
39
39
  "./noir": "./dest/noir/index.js",
40
40
  "./testing": "./dest/testing/index.js",
41
41
  "./array": "./dest/array/index.js",
42
- "./validation": "./dest/validation/index.js"
42
+ "./validation": "./dest/validation/index.js",
43
+ "./promise": "./dest/promise/index.js"
43
44
  },
44
45
  "scripts": {
45
46
  "build": "yarn clean && tsc -b",
@@ -66,10 +67,18 @@
66
67
  "rootDir": "./src",
67
68
  "extensionsToTreatAsEsm": [
68
69
  ".ts"
70
+ ],
71
+ "reporters": [
72
+ [
73
+ "default",
74
+ {
75
+ "summaryThreshold": 9999
76
+ }
77
+ ]
69
78
  ]
70
79
  },
71
80
  "dependencies": {
72
- "@aztec/bb.js": "0.35.1",
81
+ "@aztec/bb.js": "0.37.0",
73
82
  "@koa/cors": "^5.0.0",
74
83
  "@noble/curves": "^1.2.0",
75
84
  "bn.js": "^5.2.1",
package/src/abi/abi.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { inflate } from 'pako';
2
2
 
3
+ import { type Fr } from '../fields/fields.js';
3
4
  import { type FunctionSelector } from './function_selector.js';
4
5
 
5
6
  /**
@@ -240,6 +241,16 @@ export interface DebugInfo {
240
241
  locations: Record<OpcodeLocation, SourceCodeLocation[]>;
241
242
  }
242
243
 
244
+ /**
245
+ * The debug information for a given program (a collection of functions)
246
+ */
247
+ export interface ProgramDebugInfo {
248
+ /**
249
+ * A list of debug information that matches with each function in a program
250
+ */
251
+ debug_infos: Array<DebugInfo>;
252
+ }
253
+
243
254
  /**
244
255
  * Maps a file ID to its metadata for debugging purposes.
245
256
  */
@@ -257,6 +268,34 @@ export type DebugFileMap = Record<
257
268
  }
258
269
  >;
259
270
 
271
+ /**
272
+ * Type representing a note in use in the contract.
273
+ */
274
+ export type ContractNote = {
275
+ /**
276
+ * Note identifier
277
+ */
278
+ id: Fr;
279
+ /**
280
+ * Type of the note (e.g., 'TransparentNote')
281
+ */
282
+ typ: string;
283
+ };
284
+
285
+ /**
286
+ * Type representing a field layout in the storage of a contract.
287
+ */
288
+ export type FieldLayout = {
289
+ /**
290
+ * Slot in which the field is stored.
291
+ */
292
+ slot: Fr;
293
+ /**
294
+ * Type being stored at the slot (e.g., 'Map<AztecAddress, PublicMutable<U128>>')
295
+ */
296
+ typ: string;
297
+ };
298
+
260
299
  /**
261
300
  * Defines artifact of a contract.
262
301
  */
@@ -282,6 +321,14 @@ export interface ContractArtifact {
282
321
  structs: Record<string, AbiType[]>;
283
322
  globals: Record<string, AbiValue[]>;
284
323
  };
324
+ /**
325
+ * Storage layout
326
+ */
327
+ storageLayout: Record<string, FieldLayout>;
328
+ /**
329
+ * The notes used in the contract.
330
+ */
331
+ notes: Record<string, ContractNote>;
285
332
 
286
333
  /**
287
334
  * The map of file ID to the source code and path of the file.
@@ -355,10 +402,13 @@ export function getFunctionDebugMetadata(
355
402
  functionArtifact: FunctionArtifact,
356
403
  ): FunctionDebugMetadata | undefined {
357
404
  if (functionArtifact.debugSymbols && contractArtifact.fileMap) {
358
- const debugSymbols = JSON.parse(
405
+ const programDebugSymbols = JSON.parse(
359
406
  inflate(Buffer.from(functionArtifact.debugSymbols, 'base64'), { to: 'string', raw: true }),
360
407
  );
361
- return { debugSymbols, files: contractArtifact.fileMap };
408
+ // TODO(https://github.com/AztecProtocol/aztec-packages/issues/5813)
409
+ // We only support handling debug info for the contract function entry point.
410
+ // So for now we simply index into the first debug info.
411
+ return { debugSymbols: programDebugSymbols.debug_infos[0], files: contractArtifact.fileMap };
362
412
  }
363
413
  return undefined;
364
414
  }
@@ -1,20 +1,19 @@
1
1
  import { AztecAddress } from '../aztec-address/index.js';
2
2
  import { type Fr } from '../fields/index.js';
3
- import { type ABIParameter, type ABIVariable, type AbiType, type FunctionArtifact } from './abi.js';
3
+ import { type ABIParameter, type ABIVariable, type AbiType, type FunctionAbi } from './abi.js';
4
4
  import { isAztecAddressStruct } from './utils.js';
5
5
 
6
6
  /**
7
7
  * The type of our decoded ABI.
8
8
  */
9
9
  export type DecodedReturn = bigint | boolean | AztecAddress | DecodedReturn[] | { [key: string]: DecodedReturn };
10
- export type ProcessReturnValues = (DecodedReturn | undefined)[] | undefined;
11
10
 
12
11
  /**
13
12
  * Decodes return values from a function call.
14
13
  * Missing support for integer and string.
15
14
  */
16
15
  class ReturnValuesDecoder {
17
- constructor(private artifact: FunctionArtifact, private flattened: Fr[]) {}
16
+ constructor(private artifact: FunctionAbi, private flattened: Fr[]) {}
18
17
 
19
18
  /**
20
19
  * Decodes a single return value from field to the given type.
@@ -97,7 +96,7 @@ class ReturnValuesDecoder {
97
96
  * @param returnValues - The decoded return values.
98
97
  * @returns
99
98
  */
100
- export function decodeReturnValues(abi: FunctionArtifact, returnValues: Fr[]) {
99
+ export function decodeReturnValues(abi: FunctionAbi, returnValues: Fr[]) {
101
100
  return new ReturnValuesDecoder(abi, returnValues.slice()).decode();
102
101
  }
103
102
 
@@ -21,10 +21,10 @@ export class FunctionSelector extends Selector {
21
21
  * Checks if this function selector is equal to another.
22
22
  * @returns True if the function selectors are equal.
23
23
  */
24
- equals(fn: { name: string; parameters: ABIParameter[] }): boolean;
25
- equals(otherName: string, otherParams: ABIParameter[]): boolean;
26
- equals(other: FunctionSelector): boolean;
27
- equals(
24
+ override equals(fn: { name: string; parameters: ABIParameter[] }): boolean;
25
+ override equals(otherName: string, otherParams: ABIParameter[]): boolean;
26
+ override equals(other: FunctionSelector): boolean;
27
+ override equals(
28
28
  other: FunctionSelector | string | { name: string; parameters: ABIParameter[] },
29
29
  otherParams?: ABIParameter[],
30
30
  ): boolean {
@@ -23,13 +23,13 @@ export class AztecAddress extends Fr {
23
23
  return `AztecAddress<${this.toString()}>`;
24
24
  }
25
25
 
26
- static ZERO = new AztecAddress(Buffer.alloc(32));
26
+ static override ZERO = new AztecAddress(Buffer.alloc(32));
27
27
 
28
- static zero(): AztecAddress {
28
+ static override zero(): AztecAddress {
29
29
  return AztecAddress.ZERO;
30
30
  }
31
31
 
32
- static fromBuffer(buffer: Buffer | BufferReader) {
32
+ static override fromBuffer(buffer: Buffer | BufferReader) {
33
33
  return fromBuffer(buffer, AztecAddress);
34
34
  }
35
35
 
@@ -46,16 +46,16 @@ export class AztecAddress extends Fr {
46
46
  return AztecAddress.fromField(new Fr(value));
47
47
  }
48
48
 
49
- static fromString(buf: string) {
49
+ static override fromString(buf: string) {
50
50
  const buffer = Buffer.from(buf.replace(/^0x/i, ''), 'hex');
51
51
  return new AztecAddress(buffer);
52
52
  }
53
53
 
54
- static random() {
54
+ static override random() {
55
55
  return new AztecAddress(super.random().toBuffer());
56
56
  }
57
57
 
58
- toJSON() {
58
+ override toJSON() {
59
59
  return {
60
60
  type: 'AztecAddress',
61
61
  value: this.toString(),
@@ -4,3 +4,13 @@
4
4
  * can be used to handle cases where a process or task is terminated before completion.
5
5
  */
6
6
  export class InterruptError extends Error {}
7
+
8
+ /**
9
+ * An error thrown when an action times out.
10
+ */
11
+ export class TimeoutError extends Error {}
12
+
13
+ /**
14
+ * Represents an error thrown when an operation is aborted.
15
+ */
16
+ export class AbortedError extends Error {}
@@ -1,3 +1,4 @@
1
+ import { TimeoutError } from '../error/index.js';
1
2
  import { createDebugLogger } from '../log/index.js';
2
3
 
3
4
  /**
@@ -23,13 +24,17 @@ export class MemoryFifo<T> {
23
24
  }
24
25
 
25
26
  /**
26
- * Returns next item within the queue, or blocks until and item has been put into the queue.
27
- * If given a timeout, the promise will reject if no item is received after `timeout` seconds.
27
+ * Returns next item within the queue, or blocks until an item has been put into the queue.
28
+ *
29
+ * If given a timeout, the promise will reject if no item is received after `timeoutSec` seconds.
30
+ * If the timeout is undefined (default), this call will block until an item is available or the queue is closed.
31
+ * If the timeout is 0 and there are no items available then the queue will immediately reject with a TimeoutError.
32
+ *
28
33
  * If the queue is flushing, `null` is returned.
29
- * @param timeout - The timeout in seconds.
34
+ * @param timeoutSec - The timeout in seconds.
30
35
  * @returns A result promise.
31
36
  */
32
- public get(timeout?: number): Promise<T | null> {
37
+ public get(timeoutSec?: number): Promise<T | null> {
33
38
  if (this.items.length) {
34
39
  return Promise.resolve(this.items.shift()!);
35
40
  }
@@ -38,18 +43,24 @@ export class MemoryFifo<T> {
38
43
  return Promise.resolve(null);
39
44
  }
40
45
 
46
+ // if the caller doesn't want to wait for an item to be available
47
+ // immediately reject with a Timeout error
48
+ if (timeoutSec === 0) {
49
+ return Promise.reject(new TimeoutError('Timeout getting item from queue.'));
50
+ }
51
+
41
52
  return new Promise<T | null>((resolve, reject) => {
42
53
  this.waiting.push(resolve);
43
54
 
44
- if (timeout) {
55
+ if (timeoutSec) {
45
56
  setTimeout(() => {
46
57
  const index = this.waiting.findIndex(r => r === resolve);
47
58
  if (index > -1) {
48
59
  this.waiting.splice(index, 1);
49
- const err = new Error('Timeout getting item from queue.');
60
+ const err = new TimeoutError('Timeout getting item from queue.');
50
61
  reject(err);
51
62
  }
52
- }, timeout * 1000);
63
+ }, timeoutSec * 1000);
53
64
  }
54
65
  });
55
66
  }
package/src/index.ts CHANGED
@@ -6,7 +6,7 @@ export * as bigintBuffer from './bigint-buffer/index.js';
6
6
  export * as collection from './collection/index.js';
7
7
  export * as committable from './committable/index.js';
8
8
  export * as crypto from './crypto/index.js';
9
- export * as errors from './errors/index.js';
9
+ export * as errors from './error/index.js';
10
10
  export * as ethAddress from './eth-address/index.js';
11
11
  export * as fields from './fields/index.js';
12
12
  export * as fifo from './fifo/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './running-promise.js';
2
+ export * from './utils.js';
@@ -0,0 +1,47 @@
1
+ import { InterruptibleSleep } from '../sleep/index.js';
2
+
3
+ /**
4
+ * RunningPromise is a utility class that helps manage the execution of an asynchronous function
5
+ * at a specified polling interval. It allows starting, stopping, and checking the status of the
6
+ * internally managed promise. The class also supports interrupting the polling process when stopped.
7
+ */
8
+ export class RunningPromise {
9
+ private running = false;
10
+ private runningPromise = Promise.resolve();
11
+ private interruptibleSleep = new InterruptibleSleep();
12
+
13
+ constructor(private fn: () => Promise<void>, private pollingIntervalMS = 10000) {}
14
+
15
+ /**
16
+ * Starts the running promise.
17
+ */
18
+ public start() {
19
+ this.running = true;
20
+
21
+ const poll = async () => {
22
+ while (this.running) {
23
+ await this.fn();
24
+ await this.interruptibleSleep.sleep(this.pollingIntervalMS);
25
+ }
26
+ };
27
+ this.runningPromise = poll();
28
+ }
29
+
30
+ /**
31
+ * Stops the running promise, resolves any pending interruptible sleep,
32
+ * and waits for the currently executing function to complete.
33
+ */
34
+ async stop(): Promise<void> {
35
+ this.running = false;
36
+ this.interruptibleSleep.interrupt();
37
+ await this.runningPromise;
38
+ }
39
+
40
+ /**
41
+ * Checks if the running promise is currently active.
42
+ * @returns True if the promise is running.
43
+ */
44
+ public isRunning() {
45
+ return this.running;
46
+ }
47
+ }
@@ -0,0 +1,29 @@
1
+ export type PromiseWithResolvers<T> = {
2
+ promise: Promise<T>;
3
+ resolve: (value: T) => void;
4
+ reject: (reason?: any) => void;
5
+ };
6
+
7
+ /**
8
+ * A polyfill for the Promise.withResolvers proposed API.
9
+ * @see https://github.com/tc39/proposal-promise-with-resolvers
10
+ * @returns A promise with resolvers.
11
+ */
12
+ export function promiseWithResolvers<T>(): PromiseWithResolvers<T> {
13
+ // use ! operator to avoid TS error
14
+ let resolve!: (value: T) => void;
15
+ let reject!: (reason?: any) => void;
16
+
17
+ // the ES spec guarantees that the promise executor is called synchronously
18
+ // so the resolve and reject functions will be defined
19
+ const promise = new Promise<T>((res, rej) => {
20
+ resolve = res;
21
+ reject = rej;
22
+ });
23
+
24
+ return {
25
+ promise,
26
+ resolve,
27
+ reject,
28
+ };
29
+ }
@@ -1,60 +1 @@
1
- /**
2
- * RunningPromise is a utility class that helps manage the execution of an asynchronous function
3
- * at a specified polling interval. It allows starting, stopping, and checking the status of the
4
- * internally managed promise. The class also supports interrupting the polling process when stopped.
5
- */
6
- export class RunningPromise {
7
- private running = false;
8
- private runningPromise = Promise.resolve();
9
- private interruptPromise = Promise.resolve();
10
- private interruptResolve = () => {};
11
- constructor(private fn: () => Promise<void>, private pollingInterval = 10000) {}
12
-
13
- /**
14
- * Starts the running promise.
15
- */
16
- public start() {
17
- this.running = true;
18
- this.interruptPromise = new Promise(resolve => (this.interruptResolve = resolve));
19
-
20
- const poll = async () => {
21
- while (this.running) {
22
- await this.fn();
23
- await this.interruptibleSleep(this.pollingInterval);
24
- }
25
- };
26
- this.runningPromise = poll();
27
- }
28
-
29
- /**
30
- * Stops the running promise, resolves any pending interruptible sleep,
31
- * and waits for the currently executing function to complete.
32
- */
33
- async stop(): Promise<void> {
34
- this.running = false;
35
- this.interruptResolve();
36
- await this.runningPromise;
37
- }
38
-
39
- /**
40
- * A sleep function that can be interrupted before the specified time.
41
- * The sleep duration is determined by 'timeInMs', and it can be terminated early if the 'interruptPromise' is resolved.
42
- * @param timeInMs - The time in milliseconds.
43
- */
44
- private async interruptibleSleep(timeInMs: number) {
45
- let timeout!: NodeJS.Timeout;
46
- const sleepPromise = new Promise(resolve => {
47
- timeout = setTimeout(resolve, timeInMs);
48
- });
49
- await Promise.race([sleepPromise, this.interruptPromise]);
50
- clearTimeout(timeout);
51
- }
52
-
53
- /**
54
- * Checks if the running promise is currently active.
55
- * @returns True if the promise is running.
56
- */
57
- public isRunning() {
58
- return this.running;
59
- }
60
- }
1
+ export * from '../promise/running-promise.js';
@@ -1,4 +1,4 @@
1
- import { InterruptError } from '../errors/index.js';
1
+ import { InterruptError } from '../error/index.js';
2
2
 
3
3
  /**
4
4
  * InterruptibleSleep is a utility class that allows you to create an interruptible sleep function.
@@ -66,7 +66,7 @@ export function updateInlineTestData(targetFileFromRepoRoot: string, itemName: s
66
66
  const logger = createConsoleLogger('aztec:testing:test_data');
67
67
  const targetFile = getPathToFile(targetFileFromRepoRoot);
68
68
  const contents = readFileSync(targetFile, 'utf8').toString();
69
- const regex = new RegExp(`let ${itemName} = .*;`, 'g');
69
+ const regex = new RegExp(`let ${itemName} = [\\s\\S]*?;`, 'g');
70
70
  if (!regex.exec(contents)) {
71
71
  throw new Error(`Test data marker for ${itemName} not found in ${targetFile}`);
72
72
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;CAAG"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Represents an error thrown when an operation is interrupted unexpectedly.
3
- * This custom error class extends the built-in Error class in JavaScript and
4
- * can be used to handle cases where a process or task is terminated before completion.
5
- */
6
- export class InterruptError extends Error {
7
- }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLEtBQUs7Q0FBRyJ9