@aztec/foundation 0.65.1 → 0.66.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.
- package/dest/async-pool/index.d.ts +3 -0
- package/dest/async-pool/index.d.ts.map +1 -0
- package/dest/async-pool/index.js +50 -0
- package/dest/collection/array.d.ts +14 -0
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +23 -1
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/index.d.ts +1 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +2 -2
- package/dest/crypto/random/randomness_singleton.js +2 -2
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +2 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +2 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/log/index.d.ts +1 -1
- package/dest/log/index.d.ts.map +1 -1
- package/dest/log/index.js +2 -2
- package/dest/log/log-filters.d.ts +7 -0
- package/dest/log/log-filters.d.ts.map +1 -0
- package/dest/log/log-filters.js +43 -0
- package/dest/log/log-levels.d.ts +3 -0
- package/dest/log/log-levels.d.ts.map +1 -0
- package/dest/log/log-levels.js +2 -0
- package/dest/log/pino-logger.d.ts +39 -0
- package/dest/log/pino-logger.d.ts.map +1 -0
- package/dest/log/pino-logger.js +146 -0
- package/dest/queue/base_memory_queue.d.ts +1 -1
- package/dest/queue/base_memory_queue.d.ts.map +1 -1
- package/dest/queue/bounded_serial_queue.d.ts +1 -1
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
- package/dest/queue/fifo_memory_queue.d.ts +1 -1
- package/dest/queue/fifo_memory_queue.d.ts.map +1 -1
- package/dest/retry/index.d.ts +1 -1
- package/dest/retry/index.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
- package/package.json +6 -2
- package/src/async-pool/index.ts +50 -0
- package/src/collection/array.ts +24 -0
- package/src/config/env_var.ts +25 -3
- package/src/config/index.ts +1 -1
- package/src/crypto/random/randomness_singleton.ts +1 -1
- package/src/json-rpc/client/safe_json_rpc_client.ts +1 -1
- package/src/log/index.ts +1 -1
- package/src/log/log-filters.ts +49 -0
- package/src/log/log-levels.ts +3 -0
- package/src/log/pino-logger.ts +196 -0
- package/src/queue/fifo_memory_queue.ts +1 -1
- package/dest/log/logger.d.ts +0 -57
- package/dest/log/logger.d.ts.map +0 -1
- package/dest/log/logger.js +0 -139
- package/src/log/logger.ts +0 -179
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { createColors } from 'colorette';
|
|
2
|
+
import isNode from 'detect-node';
|
|
3
|
+
import { pino, symbols } from 'pino';
|
|
4
|
+
import pretty from 'pino-pretty';
|
|
5
|
+
import { inspect } from 'util';
|
|
6
|
+
import { compactArray } from '../collection/array.js';
|
|
7
|
+
import { getLogLevelFromFilters, parseEnv } from './log-filters.js';
|
|
8
|
+
// TODO(palla/log): Rename to createLogger
|
|
9
|
+
export function createDebugLogger(module) {
|
|
10
|
+
// TODO(palla/log): Rename all module names to remove the aztec prefix
|
|
11
|
+
const pinoLogger = logger.child({ module: module.replace(/^aztec:/, '') }, { level: getLogLevelFromFilters(logFilters, module) });
|
|
12
|
+
// We check manually for isLevelEnabled to avoid calling processLogData unnecessarily.
|
|
13
|
+
// Note that isLevelEnabled is missing from the browser version of pino.
|
|
14
|
+
const logFn = (level, msg, data) => isLevelEnabled(pinoLogger, level) && pinoLogger[level](processLogData(data ?? {}), msg);
|
|
15
|
+
return {
|
|
16
|
+
silent: () => { },
|
|
17
|
+
// TODO(palla/log): Should we move err to data instead of the text message?
|
|
18
|
+
/** Log as fatal. Use when an error has brought down the system. */
|
|
19
|
+
fatal: (msg, err, data) => logFn('fatal', formatErr(msg, err), data),
|
|
20
|
+
/** Log as error. Use for errors in general. */
|
|
21
|
+
error: (msg, err, data) => logFn('error', formatErr(msg, err), data),
|
|
22
|
+
/** Log as warn. Use for when we stray from the happy path. */
|
|
23
|
+
warn: (msg, data) => logFn('warn', msg, data),
|
|
24
|
+
/** Log as info. Use for providing an operator with info on what the system is doing. */
|
|
25
|
+
info: (msg, data) => logFn('info', msg, data),
|
|
26
|
+
/** Log as verbose. Use for when we need additional insight on what a subsystem is doing. */
|
|
27
|
+
verbose: (msg, data) => logFn('verbose', msg, data),
|
|
28
|
+
/** Log as debug. Use for when we need debugging info to troubleshoot an issue on a specific component. */
|
|
29
|
+
debug: (msg, data) => logFn('debug', msg, data),
|
|
30
|
+
/** Log as trace. Use for when we want to denial-of-service any recipient of the logs. */
|
|
31
|
+
trace: (msg, data) => logFn('trace', msg, data),
|
|
32
|
+
level: pinoLogger.level,
|
|
33
|
+
isLevelEnabled: (level) => isLevelEnabled(pinoLogger, level),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const logDataHandlers = [];
|
|
37
|
+
export function addLogDataHandler(handler) {
|
|
38
|
+
logDataHandlers.push(handler);
|
|
39
|
+
}
|
|
40
|
+
function processLogData(data) {
|
|
41
|
+
return logDataHandlers.reduce((accum, handler) => handler(accum), data);
|
|
42
|
+
}
|
|
43
|
+
// Patch isLevelEnabled missing from pino/browser.
|
|
44
|
+
function isLevelEnabled(logger, level) {
|
|
45
|
+
return typeof logger.isLevelEnabled === 'function'
|
|
46
|
+
? logger.isLevelEnabled(level)
|
|
47
|
+
: logger.levels.values[level] >= logger.levels.values[logger.level];
|
|
48
|
+
}
|
|
49
|
+
// Load log levels from environment variables.
|
|
50
|
+
const defaultLogLevel = process.env.NODE_ENV === 'test' ? 'silent' : 'info';
|
|
51
|
+
const [logLevel, logFilters] = parseEnv(process.env.LOG_LEVEL, defaultLogLevel);
|
|
52
|
+
// Transport options for pretty logging to stderr via pino-pretty.
|
|
53
|
+
const useColor = true;
|
|
54
|
+
const { bold, reset } = createColors({ useColor });
|
|
55
|
+
const pinoPrettyOpts = {
|
|
56
|
+
destination: 2,
|
|
57
|
+
sync: true,
|
|
58
|
+
colorize: useColor,
|
|
59
|
+
ignore: 'module,pid,hostname,trace_id,span_id,trace_flags',
|
|
60
|
+
messageFormat: `${bold('{module}')} ${reset('{msg}')}`,
|
|
61
|
+
customLevels: 'fatal:60,error:50,warn:40,info:30,verbose:25,debug:20,trace:10',
|
|
62
|
+
customColors: 'fatal:bgRed,error:red,warn:yellow,info:green,verbose:magenta,debug:blue,trace:gray',
|
|
63
|
+
minimumLevel: 'trace',
|
|
64
|
+
};
|
|
65
|
+
const prettyTransport = {
|
|
66
|
+
target: 'pino-pretty',
|
|
67
|
+
options: pinoPrettyOpts,
|
|
68
|
+
};
|
|
69
|
+
// Transport for vanilla stdio logging as JSON.
|
|
70
|
+
const stdioTransport = {
|
|
71
|
+
target: 'pino/file',
|
|
72
|
+
options: { destination: 2 },
|
|
73
|
+
};
|
|
74
|
+
// Define custom logging levels for pino.
|
|
75
|
+
const customLevels = { verbose: 25 };
|
|
76
|
+
const pinoOpts = { customLevels, useOnlyCustomLevels: false, level: logLevel };
|
|
77
|
+
export const levels = {
|
|
78
|
+
labels: { ...pino.levels.labels, ...Object.fromEntries(Object.entries(customLevels).map(e => e.reverse())) },
|
|
79
|
+
values: { ...pino.levels.values, ...customLevels },
|
|
80
|
+
};
|
|
81
|
+
// Transport for OpenTelemetry logging. While defining this here is an abstraction leakage since this
|
|
82
|
+
// should live in the telemetry-client, it is necessary to ensure that the logger is initialized with
|
|
83
|
+
// the correct transport. Tweaking transports of a live pino instance is tricky, and creating a new instance
|
|
84
|
+
// would mean that all child loggers created before the telemetry-client is initialized would not have
|
|
85
|
+
// this transport configured. Note that the target is defined as the export in the telemetry-client,
|
|
86
|
+
// since pino will load this transport separately on a worker thread, to minimize disruption to the main loop.
|
|
87
|
+
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT;
|
|
88
|
+
const otelOpts = { levels };
|
|
89
|
+
const otelTransport = {
|
|
90
|
+
target: '@aztec/telemetry-client/otel-pino-stream',
|
|
91
|
+
options: otelOpts,
|
|
92
|
+
};
|
|
93
|
+
function makeLogger() {
|
|
94
|
+
if (!isNode) {
|
|
95
|
+
// We are on the browser
|
|
96
|
+
return pino({ ...pinoOpts, browser: { asObject: false } });
|
|
97
|
+
}
|
|
98
|
+
else if (process.env.JEST_WORKER_ID) {
|
|
99
|
+
// We are on jest, so we need sync logging. We stream to stderr with pretty.
|
|
100
|
+
return pino(pinoOpts, pretty(pinoPrettyOpts));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// Regular nodejs with transports on worker thread, using pino-pretty for console logging if LOG_JSON
|
|
104
|
+
// is not set, and an optional OTLP transport if the OTLP endpoint is provided.
|
|
105
|
+
const targets = compactArray([
|
|
106
|
+
['1', 'true', 'TRUE'].includes(process.env.LOG_JSON ?? '') ? stdioTransport : prettyTransport,
|
|
107
|
+
otlpEndpoint ? otelTransport : undefined,
|
|
108
|
+
]);
|
|
109
|
+
return pino(pinoOpts, pino.transport({ targets }));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const logger = makeLogger();
|
|
113
|
+
// Log the logger configuration.
|
|
114
|
+
logger.verbose({
|
|
115
|
+
module: 'logger',
|
|
116
|
+
...logFilters.reduce((accum, [module, level]) => ({ ...accum, [`log.${module}`]: level }), {}),
|
|
117
|
+
}, isNode
|
|
118
|
+
? `Logger initialized with level ${logLevel}` + (otlpEndpoint ? ` with OTLP exporter to ${otlpEndpoint}` : '')
|
|
119
|
+
: `Browser console logger initialized with level ${logLevel}`);
|
|
120
|
+
/**
|
|
121
|
+
* Registers an additional destination to the pino logger.
|
|
122
|
+
* Use only when working with destinations, not worker transports.
|
|
123
|
+
*/
|
|
124
|
+
export function registerLoggingStream(stream) {
|
|
125
|
+
logger.verbose({ module: 'logger' }, `Registering additional logging stream`);
|
|
126
|
+
const original = logger[symbols.streamSym];
|
|
127
|
+
const destination = original
|
|
128
|
+
? pino.multistream([
|
|
129
|
+
// Set streams to lowest logging level, and control actual logging from the parent logger
|
|
130
|
+
// otherwise streams default to info and refuse to log anything below that.
|
|
131
|
+
{ level: 'trace', stream: original },
|
|
132
|
+
{ level: 'trace', stream },
|
|
133
|
+
], { levels: levels.values })
|
|
134
|
+
: stream;
|
|
135
|
+
logger[symbols.streamSym] = destination;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Concatenates a log message and an exception.
|
|
139
|
+
* @param msg - Log message
|
|
140
|
+
* @param err - Error to log
|
|
141
|
+
* @returns A string with both the log message and the error message.
|
|
142
|
+
*/
|
|
143
|
+
function formatErr(msg, err) {
|
|
144
|
+
return err ? `${msg}: ${inspect(err)}` : msg;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluby1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nL3Bpbm8tbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJcEUsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFjO0lBQzlDLHNFQUFzRTtJQUN0RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUM3QixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUN6QyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FDdEQsQ0FBQztJQUVGLHNGQUFzRjtJQUN0Rix3RUFBd0U7SUFDeEUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFlLEVBQUUsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQzdELGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFMUYsT0FBTztRQUNMLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1FBQ2hCLDJFQUEy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
|
|
@@ -2,7 +2,7 @@ export declare abstract class BaseMemoryQueue<T> {
|
|
|
2
2
|
private log;
|
|
3
3
|
private waiting;
|
|
4
4
|
private flushing;
|
|
5
|
-
constructor(log?: import("../log/logger.js").Logger);
|
|
5
|
+
constructor(log?: import("../log/pino-logger.js").Logger);
|
|
6
6
|
protected abstract get items(): {
|
|
7
7
|
length: number;
|
|
8
8
|
get(): T | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_memory_queue.d.ts","sourceRoot":"","sources":["../../src/queue/base_memory_queue.ts"],"names":[],"mappings":"AAGA,8BAAsB,eAAe,CAAC,CAAC;IAIzB,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;gBAEL,GAAG,
|
|
1
|
+
{"version":3,"file":"base_memory_queue.d.ts","sourceRoot":"","sources":["../../src/queue/base_memory_queue.ts"],"names":[],"mappings":"AAGA,8BAAsB,eAAe,CAAC,CAAC;IAIzB,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;gBAEL,GAAG,yCAAoD;IAE3E,SAAS,CAAC,QAAQ,KAAK,KAAK,IAAI;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;QACrB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QACnB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB,CAAC;IAEF;;;;;OAKG;IACI,MAAM;IAIb;;;OAGG;IACI,YAAY,IAAI,CAAC,GAAG,SAAS;IAIpC;;;;;;;;;;OAUG;IACI,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA+BlD;;;;OAIG;IACI,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAa5B;;;;OAIG;IACI,GAAG;IAKV;;;;OAIG;IACI,MAAM;IAMb;;;;;;;;OAQG;IACU,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CAazD"}
|
|
@@ -6,7 +6,7 @@ export declare class BoundedSerialQueue {
|
|
|
6
6
|
private log;
|
|
7
7
|
private readonly queue;
|
|
8
8
|
private semaphore;
|
|
9
|
-
constructor(maxQueueSize: number, log?: import("../log/logger.js").Logger);
|
|
9
|
+
constructor(maxQueueSize: number, log?: import("../log/pino-logger.js").Logger);
|
|
10
10
|
/**
|
|
11
11
|
* Initializes the underlying SerialQueue instance, allowing items to be processed from the queue.
|
|
12
12
|
* The start method should be called before using the BoundedSerialQueue to ensure proper functionality.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounded_serial_queue.d.ts","sourceRoot":"","sources":["../../src/queue/bounded_serial_queue.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,kBAAkB;IAIK,OAAO,CAAC,GAAG;IAH7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,SAAS,CAAY;gBAEjB,YAAY,EAAE,MAAM,EAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"bounded_serial_queue.d.ts","sourceRoot":"","sources":["../../src/queue/bounded_serial_queue.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,kBAAkB;IAIK,OAAO,CAAC,GAAG;IAH7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,SAAS,CAAY;gBAEjB,YAAY,EAAE,MAAM,EAAU,GAAG,yCAA6D;IAI1G;;;OAGG;IACI,KAAK;IAIZ;;;;;OAKG;IACI,MAAM;IAIb;;;;;OAKG;IACI,MAAM;IAIb;;;;;;;OAOG;IACI,GAAG;IAIV;;;;;OAKG;IACU,GAAG,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAexD;;;;OAIG;IACU,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWtD;;OAEG;IACU,SAAS;CAGvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fifo_memory_queue.d.ts","sourceRoot":"","sources":["../../src/queue/fifo_memory_queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fifo_memory_queue.d.ts","sourceRoot":"","sources":["../../src/queue/fifo_memory_queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;GAIG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,SAAS,CAAsB;gBAE3B,GAAG,CAAC,EAAE,WAAW;IAI7B,cAAuB,KAAK,iBAE3B;CACF;AAED,cAAM,SAAS,CAAC,CAAC;IACf,OAAO,CAAC,KAAK,CAAW;IAEjB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAIlB,GAAG,IAAI,CAAC,GAAG,SAAS;IAI3B,IAAW,MAAM,IAAI,MAAM,CAE1B;IAEM,KAAK;CAGb"}
|
package/dest/retry/index.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export declare function makeBackoff(retries: number[]): Generator<number, void,
|
|
|
28
28
|
* @returns A Promise that resolves with the successful result of the provided function, or rejects if backoff generator ends.
|
|
29
29
|
* @throws If `NoRetryError` is thrown by the `fn`, it is rethrown.
|
|
30
30
|
*/
|
|
31
|
-
export declare function retry<Result>(fn: () => Promise<Result>, name?: string, backoff?: Generator<number, void, unknown>, log?: import("../log/logger.js").Logger, failSilently?: boolean): Promise<Result>;
|
|
31
|
+
export declare function retry<Result>(fn: () => Promise<Result>, name?: string, backoff?: Generator<number, void, unknown>, log?: import("../log/pino-logger.js").Logger, failSilently?: boolean): Promise<Result>;
|
|
32
32
|
/**
|
|
33
33
|
* Retry an asynchronous function until it returns a truthy value or the specified timeout is exceeded.
|
|
34
34
|
* The function is retried periodically with a fixed interval between attempts. The operation can be named for better error messages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/retry/index.ts"],"names":[],"mappings":"AAIA,wEAAwE;AACxE,qBAAa,YAAa,SAAQ,KAAK;CAAG;AAE1C;;;;;;;GAOG;AACH,wBAAiB,gBAAgB,qCAMhC;AAED;;;;GAIG;AACH,wBAAiB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,oCAI7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAChC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACzB,IAAI,SAAc,EAClB,OAAO,mCAAqB,EAC5B,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/retry/index.ts"],"names":[],"mappings":"AAIA,wEAAwE;AACxE,qBAAa,YAAa,SAAQ,KAAK;CAAG;AAE1C;;;;;;;GAOG;AACH,wBAAiB,gBAAgB,qCAMhC;AAED;;;;GAIG;AACH,wBAAiB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,oCAI7C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,MAAM,EAChC,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACzB,IAAI,SAAc,EAClB,OAAO,mCAAqB,EAC5B,GAAG,yCAA8C,EACjD,YAAY,UAAQ,mBAoBrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,SAAK,EAAE,OAAO,SAAI,EAAE,QAAQ,SAAI,oCAczG"}
|
|
@@ -21,5 +21,5 @@ export interface DispatchMsg {
|
|
|
21
21
|
* @param log - Optional logging function for debugging purposes.
|
|
22
22
|
* @returns A dispatch function that accepts a DispatchMsg object and calls the target's method with provided arguments.
|
|
23
23
|
*/
|
|
24
|
-
export declare function createDispatchFn(targetFn: () => any, log?: import("../../log/logger.js").Logger): ({ fn, args }: DispatchMsg) => Promise<any>;
|
|
24
|
+
export declare function createDispatchFn(targetFn: () => any, log?: import("../../log/pino-logger.js").Logger): ({ fn, args }: DispatchMsg) => Promise<any>;
|
|
25
25
|
//# sourceMappingURL=create_dispatch_fn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_dispatch_fn.d.ts","sourceRoot":"","sources":["../../../src/transport/dispatch/create_dispatch_fn.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"create_dispatch_fn.d.ts","sourceRoot":"","sources":["../../../src/transport/dispatch/create_dispatch_fn.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,GAAG,4CAAiD,kBAC5E,WAAW,kBAKxC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.66.0",
|
|
4
4
|
"packageManager": "yarn@3.4.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dest/index.js",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"./prettier": "./.prettierrc.json",
|
|
12
12
|
"./abi": "./dest/abi/index.js",
|
|
13
13
|
"./async-map": "./dest/async-map/index.js",
|
|
14
|
+
"./async-pool": "./dest/async-pool/index.js",
|
|
14
15
|
"./aztec-address": "./dest/aztec-address/index.js",
|
|
15
16
|
"./collection": "./dest/collection/index.js",
|
|
16
17
|
"./config": "./dest/config/index.js",
|
|
@@ -98,10 +99,11 @@
|
|
|
98
99
|
]
|
|
99
100
|
},
|
|
100
101
|
"dependencies": {
|
|
101
|
-
"@aztec/bb.js": "0.
|
|
102
|
+
"@aztec/bb.js": "0.66.0",
|
|
102
103
|
"@koa/cors": "^5.0.0",
|
|
103
104
|
"@noble/curves": "^1.2.0",
|
|
104
105
|
"bn.js": "^5.2.1",
|
|
106
|
+
"colorette": "^2.0.20",
|
|
105
107
|
"debug": "^4.3.4",
|
|
106
108
|
"detect-node": "^2.1.0",
|
|
107
109
|
"elliptic": "^6.5.4",
|
|
@@ -116,6 +118,8 @@
|
|
|
116
118
|
"lodash.clonedeepwith": "^4.5.0",
|
|
117
119
|
"memdown": "^6.1.1",
|
|
118
120
|
"pako": "^2.1.0",
|
|
121
|
+
"pino": "^9.5.0",
|
|
122
|
+
"pino-pretty": "^13.0.0",
|
|
119
123
|
"sha3": "^2.1.4",
|
|
120
124
|
"zod": "^3.23.8"
|
|
121
125
|
},
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Adapted from https://github.com/rxaviers/async-pool/blob/1.x/lib/es6.js
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2017 Rafael Xavier de Souza http://rafael.xavier.blog.br
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person
|
|
7
|
+
* obtaining a copy of this software and associated documentation
|
|
8
|
+
* files (the "Software"), to deal in the Software without
|
|
9
|
+
* restriction, including without limitation the rights to use,
|
|
10
|
+
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the
|
|
12
|
+
* Software is furnished to do so, subject to the following
|
|
13
|
+
* conditions:
|
|
14
|
+
*
|
|
15
|
+
* The above copyright notice and this permission notice shall be
|
|
16
|
+
* included in all copies or substantial portions of the Software.
|
|
17
|
+
*
|
|
18
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
19
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
20
|
+
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
21
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
22
|
+
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
23
|
+
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
24
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
25
|
+
* OTHER DEALINGS IN THE SOFTWARE.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** Executes the given async function over the iterable, up to a determined number of promises in parallel. */
|
|
29
|
+
export function asyncPool<T, R>(poolLimit: number, iterable: T[], iteratorFn: (item: T, iterable: T[]) => Promise<R>) {
|
|
30
|
+
let i = 0;
|
|
31
|
+
const ret: Promise<R>[] = [];
|
|
32
|
+
const executing: Set<Promise<R>> = new Set();
|
|
33
|
+
const enqueue = (): Promise<any> => {
|
|
34
|
+
if (i === iterable.length) {
|
|
35
|
+
return Promise.resolve();
|
|
36
|
+
}
|
|
37
|
+
const item = iterable[i++];
|
|
38
|
+
const p = Promise.resolve().then(() => iteratorFn(item, iterable));
|
|
39
|
+
ret.push(p);
|
|
40
|
+
executing.add(p);
|
|
41
|
+
const clean = () => executing.delete(p);
|
|
42
|
+
p.then(clean).catch(clean);
|
|
43
|
+
let r: Promise<any> = Promise.resolve();
|
|
44
|
+
if (executing.size >= poolLimit) {
|
|
45
|
+
r = Promise.race(executing);
|
|
46
|
+
}
|
|
47
|
+
return r.then(() => enqueue());
|
|
48
|
+
};
|
|
49
|
+
return enqueue().then(() => Promise.all(ret));
|
|
50
|
+
}
|
package/src/collection/array.ts
CHANGED
|
@@ -75,6 +75,20 @@ export function times<T>(n: number, fn: (i: number) => T): T[] {
|
|
|
75
75
|
return [...Array(n).keys()].map(i => fn(i));
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Executes the given async function n times and returns the results in an array. Awaits each execution before starting the next one.
|
|
80
|
+
* @param n - How many times to repeat.
|
|
81
|
+
* @param fn - Mapper from index to value.
|
|
82
|
+
* @returns The array with the result from all executions.
|
|
83
|
+
*/
|
|
84
|
+
export async function timesAsync<T>(n: number, fn: (i: number) => Promise<T>): Promise<T[]> {
|
|
85
|
+
const results: T[] = [];
|
|
86
|
+
for (let i = 0; i < n; i++) {
|
|
87
|
+
results.push(await fn(i));
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
|
|
78
92
|
/**
|
|
79
93
|
* Returns the serialized size of all non-empty items in an array.
|
|
80
94
|
* @param arr - Array
|
|
@@ -121,3 +135,13 @@ export function areArraysEqual<T>(a: T[], b: T[], eq: (a: T, b: T) => boolean =
|
|
|
121
135
|
}
|
|
122
136
|
return true;
|
|
123
137
|
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Returns the element of the array that has the maximum value of the given function.
|
|
141
|
+
* In case of a tie, returns the first element with the maximum value.
|
|
142
|
+
* @param arr - The array.
|
|
143
|
+
* @param fn - The function to get the value to compare.
|
|
144
|
+
*/
|
|
145
|
+
export function maxBy<T>(arr: T[], fn: (x: T) => number): T | undefined {
|
|
146
|
+
return arr.reduce((max, x) => (fn(x) > fn(max) ? x : max), arr[0]);
|
|
147
|
+
}
|
package/src/config/env_var.ts
CHANGED
|
@@ -8,6 +8,7 @@ export type EnvVar =
|
|
|
8
8
|
| 'ARCHIVER_POLLING_INTERVAL_MS'
|
|
9
9
|
| 'ARCHIVER_URL'
|
|
10
10
|
| 'ARCHIVER_VIEM_POLLING_INTERVAL_MS'
|
|
11
|
+
| 'ARCHIVER_BATCH_SIZE'
|
|
11
12
|
| 'ASSUME_PROVEN_THROUGH_BLOCK_NUMBER'
|
|
12
13
|
| 'AZTEC_NODE_URL'
|
|
13
14
|
| 'AZTEC_PORT'
|
|
@@ -91,28 +92,38 @@ export type EnvVar =
|
|
|
91
92
|
| 'P2P_TCP_LISTEN_ADDR'
|
|
92
93
|
| 'P2P_TCP_ANNOUNCE_ADDR'
|
|
93
94
|
| 'P2P_TX_POOL_KEEP_PROVEN_FOR'
|
|
95
|
+
| 'P2P_ATTESTATION_POOL_KEEP_FOR'
|
|
94
96
|
| 'P2P_TX_PROTOCOL'
|
|
95
97
|
| 'P2P_UDP_ANNOUNCE_ADDR'
|
|
96
98
|
| 'P2P_UDP_LISTEN_ADDR'
|
|
97
99
|
| 'PEER_ID_PRIVATE_KEY'
|
|
98
100
|
| 'PROOF_VERIFIER_L1_START_BLOCK'
|
|
99
101
|
| 'PROOF_VERIFIER_POLL_INTERVAL_MS'
|
|
100
|
-
| 'PROVER_AGENT_CONCURRENCY'
|
|
101
102
|
| 'PROVER_AGENT_ENABLED'
|
|
103
|
+
| 'PROVER_AGENT_CONCURRENCY'
|
|
104
|
+
| 'PROVER_AGENT_COUNT'
|
|
105
|
+
| 'PROVER_AGENT_PROOF_TYPES'
|
|
102
106
|
| 'PROVER_AGENT_POLL_INTERVAL_MS'
|
|
107
|
+
| 'PROVER_BROKER_HOST'
|
|
108
|
+
| 'PROVER_BROKER_ENABLED'
|
|
109
|
+
| 'PROVER_BROKER_JOB_TIMEOUT_MS'
|
|
110
|
+
| 'PROVER_BROKER_POLL_INTERVAL_MS'
|
|
111
|
+
| 'PROVER_BROKER_JOB_MAX_RETRIES'
|
|
112
|
+
| 'PROVER_BROKER_DATA_DIRECTORY'
|
|
103
113
|
| 'PROVER_COORDINATION_NODE_URL'
|
|
104
114
|
| 'PROVER_DISABLED'
|
|
105
115
|
| 'PROVER_ID'
|
|
106
116
|
| 'PROVER_JOB_POLL_INTERVAL_MS'
|
|
107
117
|
| 'PROVER_JOB_TIMEOUT_MS'
|
|
108
|
-
| 'PROVER_JOB_SOURCE_URL'
|
|
109
118
|
| 'PROVER_NODE_POLLING_INTERVAL_MS'
|
|
110
119
|
| 'PROVER_NODE_MAX_PENDING_JOBS'
|
|
120
|
+
| 'PROVER_NODE_MAX_PARALLEL_BLOCKS_PER_EPOCH'
|
|
111
121
|
| 'PROVER_PUBLISH_RETRY_INTERVAL_MS'
|
|
112
122
|
| 'PROVER_PUBLISHER_PRIVATE_KEY'
|
|
113
123
|
| 'PROVER_REAL_PROOFS'
|
|
114
124
|
| 'PROVER_REQUIRED_CONFIRMATIONS'
|
|
115
125
|
| 'PROVER_TEST_DELAY_MS'
|
|
126
|
+
| 'PROVER_CACHE_DIR'
|
|
116
127
|
| 'PXE_BLOCK_POLLING_INTERVAL_MS'
|
|
117
128
|
| 'PXE_L2_STARTING_BLOCK'
|
|
118
129
|
| 'PXE_PROVER_ENABLED'
|
|
@@ -135,6 +146,7 @@ export type EnvVar =
|
|
|
135
146
|
| 'SEQ_REQUIRED_CONFIRMATIONS'
|
|
136
147
|
| 'SEQ_TX_POLLING_INTERVAL_MS'
|
|
137
148
|
| 'SEQ_ENFORCE_TIME_TABLE'
|
|
149
|
+
| 'STAKING_ASSET_CONTRACT_ADDRESS'
|
|
138
150
|
| 'REWARD_DISTRIBUTOR_CONTRACT_ADDRESS'
|
|
139
151
|
| 'TELEMETRY'
|
|
140
152
|
| 'TEST_ACCOUNTS'
|
|
@@ -160,4 +172,14 @@ export type EnvVar =
|
|
|
160
172
|
| 'AZTEC_SLOT_DURATION'
|
|
161
173
|
| 'AZTEC_EPOCH_DURATION'
|
|
162
174
|
| 'AZTEC_TARGET_COMMITTEE_SIZE'
|
|
163
|
-
| 'AZTEC_EPOCH_PROOF_CLAIM_WINDOW_IN_L2_SLOTS'
|
|
175
|
+
| 'AZTEC_EPOCH_PROOF_CLAIM_WINDOW_IN_L2_SLOTS'
|
|
176
|
+
| 'L1_GAS_LIMIT_BUFFER_PERCENTAGE'
|
|
177
|
+
| 'L1_GAS_LIMIT_BUFFER_FIXED'
|
|
178
|
+
| 'L1_GAS_PRICE_MIN'
|
|
179
|
+
| 'L1_GAS_PRICE_MAX'
|
|
180
|
+
| 'L1_PRIORITY_FEE_BUMP_PERCENTAGE'
|
|
181
|
+
| 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE'
|
|
182
|
+
| 'L1_TX_MONITOR_MAX_ATTEMPTS'
|
|
183
|
+
| 'L1_TX_MONITOR_CHECK_INTERVAL_MS'
|
|
184
|
+
| 'L1_TX_MONITOR_STALL_TIME_MS'
|
|
185
|
+
| 'L1_TX_MONITOR_TX_TIMEOUT_MS';
|
package/src/config/index.ts
CHANGED
|
@@ -46,7 +46,7 @@ export function getConfigFromMappings<T>(configMappings: ConfigMappingsType<T>):
|
|
|
46
46
|
* @param keysToFilter - The keys to filter out
|
|
47
47
|
* @returns The filtered config mappings
|
|
48
48
|
*/
|
|
49
|
-
export function
|
|
49
|
+
export function omitConfigMappings<T, K extends keyof T>(
|
|
50
50
|
configMappings: ConfigMappingsType<T>,
|
|
51
51
|
keysToFilter: K[],
|
|
52
52
|
): ConfigMappingsType<Omit<T, K>> {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { format } from 'util';
|
|
2
2
|
|
|
3
|
-
import { createDebugLogger } from '../../log/logger.js';
|
|
3
|
+
import { createDebugLogger } from '../../log/pino-logger.js';
|
|
4
4
|
import { type ApiSchema, type ApiSchemaFor, schemaHasMethod } from '../../schemas/api.js';
|
|
5
5
|
import { defaultFetch } from './fetch.js';
|
|
6
6
|
|
package/src/log/index.ts
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type LogLevel, LogLevels } from './log-levels.js';
|
|
2
|
+
|
|
3
|
+
export type LogFilters = [string, LogLevel][];
|
|
4
|
+
|
|
5
|
+
export function getLogLevelFromFilters(filters: LogFilters, module: string): LogLevel | undefined {
|
|
6
|
+
for (const [filterModule, level] of filters) {
|
|
7
|
+
if (module.startsWith(filterModule)) {
|
|
8
|
+
return level as LogLevel;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function assertLogLevel(level: string): asserts level is LogLevel {
|
|
15
|
+
if (!LogLevels.includes(level as LogLevel)) {
|
|
16
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function parseEnv(env: string | undefined, defaultLevel: LogLevel): [LogLevel, LogFilters] {
|
|
21
|
+
if (!env) {
|
|
22
|
+
return [defaultLevel, []];
|
|
23
|
+
}
|
|
24
|
+
const [level] = env.split(';', 1);
|
|
25
|
+
assertLogLevel(level);
|
|
26
|
+
return [level, parseFilters(env.slice(level.length + 1))];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function parseFilters(definition: string | undefined): LogFilters {
|
|
30
|
+
if (!definition) {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const statements = definition.split(';');
|
|
35
|
+
const filters: LogFilters = [];
|
|
36
|
+
for (const statement of statements) {
|
|
37
|
+
const [level] = statement.split(':', 1);
|
|
38
|
+
const modules = statement.slice(level.length + 1);
|
|
39
|
+
if (!modules || !level) {
|
|
40
|
+
throw new Error(`Invalid log filter statement: ${statement}`);
|
|
41
|
+
}
|
|
42
|
+
const sanitizedLevel = level.trim().toLowerCase();
|
|
43
|
+
assertLogLevel(sanitizedLevel);
|
|
44
|
+
for (const module of modules.split(',')) {
|
|
45
|
+
filters.push([module.trim().toLowerCase(), sanitizedLevel as LogLevel | 'silent']);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return filters.reverse();
|
|
49
|
+
}
|