@aztec/foundation 0.0.1-commit.343b43af6 → 0.0.1-commit.350e0a4d

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 (268) hide show
  1. package/dest/bigint-buffer/index.d.ts +1 -1
  2. package/dest/bigint-buffer/index.d.ts.map +1 -1
  3. package/dest/bigint-buffer/index.js +6 -1
  4. package/dest/branded-types/block_number.d.ts +3 -3
  5. package/dest/branded-types/block_number.d.ts.map +1 -1
  6. package/dest/branded-types/block_number.js +15 -4
  7. package/dest/branded-types/buffer32_hash.d.ts +27 -0
  8. package/dest/branded-types/buffer32_hash.d.ts.map +1 -0
  9. package/dest/branded-types/buffer32_hash.js +12 -0
  10. package/dest/branded-types/checkpoint_number.d.ts +9 -3
  11. package/dest/branded-types/checkpoint_number.d.ts.map +1 -1
  12. package/dest/branded-types/checkpoint_number.js +11 -0
  13. package/dest/branded-types/epoch.d.ts +2 -2
  14. package/dest/branded-types/epoch.d.ts.map +1 -1
  15. package/dest/branded-types/index.d.ts +2 -1
  16. package/dest/branded-types/index.d.ts.map +1 -1
  17. package/dest/branded-types/index.js +1 -0
  18. package/dest/branded-types/index_within_checkpoint.d.ts +2 -2
  19. package/dest/branded-types/index_within_checkpoint.d.ts.map +1 -1
  20. package/dest/branded-types/slot.d.ts +5 -2
  21. package/dest/branded-types/slot.d.ts.map +1 -1
  22. package/dest/branded-types/slot.js +3 -0
  23. package/dest/buffer/buffer16.d.ts +3 -1
  24. package/dest/buffer/buffer16.d.ts.map +1 -1
  25. package/dest/buffer/buffer32.d.ts +28 -61
  26. package/dest/buffer/buffer32.d.ts.map +1 -1
  27. package/dest/buffer/buffer32.js +29 -63
  28. package/dest/buffer/index.d.ts +2 -1
  29. package/dest/buffer/index.d.ts.map +1 -1
  30. package/dest/buffer/index.js +1 -0
  31. package/dest/buffer/utils.d.ts +3 -0
  32. package/dest/buffer/utils.d.ts.map +1 -0
  33. package/dest/buffer/utils.js +7 -0
  34. package/dest/collection/array.d.ts +11 -1
  35. package/dest/collection/array.d.ts.map +1 -1
  36. package/dest/collection/array.js +33 -0
  37. package/dest/collection/index.d.ts +3 -1
  38. package/dest/collection/index.d.ts.map +1 -1
  39. package/dest/collection/index.js +2 -0
  40. package/dest/collection/lru_map.d.ts +41 -0
  41. package/dest/collection/lru_map.d.ts.map +1 -0
  42. package/dest/collection/lru_map.js +119 -0
  43. package/dest/collection/lru_set.d.ts +35 -0
  44. package/dest/collection/lru_set.d.ts.map +1 -0
  45. package/dest/collection/lru_set.js +95 -0
  46. package/dest/committable/committable.js +1 -1
  47. package/dest/config/env_var.d.ts +2 -2
  48. package/dest/config/env_var.d.ts.map +1 -1
  49. package/dest/config/index.d.ts +67 -37
  50. package/dest/config/index.d.ts.map +1 -1
  51. package/dest/config/index.js +72 -71
  52. package/dest/config/network_config.d.ts +11 -49
  53. package/dest/config/network_config.d.ts.map +1 -1
  54. package/dest/config/network_config.js +1 -0
  55. package/dest/config/network_name.d.ts +2 -2
  56. package/dest/config/network_name.d.ts.map +1 -1
  57. package/dest/config/network_name.js +1 -3
  58. package/dest/config/secret_value.d.ts +2 -2
  59. package/dest/config/secret_value.d.ts.map +1 -1
  60. package/dest/crypto/aes128/index.d.ts +2 -1
  61. package/dest/crypto/aes128/index.d.ts.map +1 -1
  62. package/dest/crypto/aes128/index.js +11 -2
  63. package/dest/crypto/bls/bn254_keystore.d.ts +10 -177
  64. package/dest/crypto/bls/bn254_keystore.d.ts.map +1 -1
  65. package/dest/crypto/bls/bn254_keystore.js +22 -34
  66. package/dest/crypto/keys/index.d.ts +3 -2
  67. package/dest/crypto/keys/index.d.ts.map +1 -1
  68. package/dest/crypto/keys/index.js +30 -6
  69. package/dest/crypto/poseidon/index.d.ts +1 -1
  70. package/dest/crypto/poseidon/index.d.ts.map +1 -1
  71. package/dest/crypto/poseidon/index.js +40 -33
  72. package/dest/crypto/schnorr/index.d.ts +8 -7
  73. package/dest/crypto/schnorr/index.d.ts.map +1 -1
  74. package/dest/crypto/schnorr/index.js +6 -6
  75. package/dest/crypto/schnorr/signature.d.ts +9 -29
  76. package/dest/crypto/schnorr/signature.d.ts.map +1 -1
  77. package/dest/crypto/schnorr/signature.js +20 -36
  78. package/dest/curves/bls12/field.d.ts +3 -3
  79. package/dest/curves/bls12/field.d.ts.map +1 -1
  80. package/dest/curves/bls12/field.js +0 -5
  81. package/dest/curves/bls12/point.d.ts +2 -2
  82. package/dest/curves/bls12/point.d.ts.map +1 -1
  83. package/dest/curves/bn254/field.d.ts +23 -19
  84. package/dest/curves/bn254/field.d.ts.map +1 -1
  85. package/dest/curves/bn254/field.js +23 -17
  86. package/dest/curves/grumpkin/point.d.ts +14 -28
  87. package/dest/curves/grumpkin/point.d.ts.map +1 -1
  88. package/dest/curves/grumpkin/point.js +29 -43
  89. package/dest/eth-address/index.d.ts +2 -2
  90. package/dest/eth-address/index.d.ts.map +1 -1
  91. package/dest/eth-address/index.js +0 -3
  92. package/dest/eth-signature/eth_signature.d.ts +2 -2
  93. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  94. package/dest/fifo/fifo_frame_reader.d.ts +41 -0
  95. package/dest/fifo/fifo_frame_reader.d.ts.map +1 -0
  96. package/dest/fifo/fifo_frame_reader.js +91 -0
  97. package/dest/fifo/index.d.ts +2 -0
  98. package/dest/fifo/index.d.ts.map +1 -0
  99. package/dest/fifo/index.js +1 -0
  100. package/dest/fifo_set/fifo_set.d.ts +15 -0
  101. package/dest/fifo_set/fifo_set.d.ts.map +1 -0
  102. package/dest/fifo_set/fifo_set.js +39 -0
  103. package/dest/fifo_set/index.d.ts +2 -0
  104. package/dest/fifo_set/index.d.ts.map +1 -0
  105. package/dest/fifo_set/index.js +1 -0
  106. package/dest/json-rpc/client/fetch.d.ts +1 -1
  107. package/dest/json-rpc/client/fetch.d.ts.map +1 -1
  108. package/dest/json-rpc/client/fetch.js +4 -3
  109. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +1 -1
  110. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  111. package/dest/json-rpc/client/safe_json_rpc_client.js +2 -2
  112. package/dest/json-rpc/client/undici.d.ts +1 -1
  113. package/dest/json-rpc/client/undici.d.ts.map +1 -1
  114. package/dest/json-rpc/client/undici.js +5 -3
  115. package/dest/json-rpc/fixtures/test_state.d.ts +4 -8
  116. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  117. package/dest/json-rpc/fixtures/test_state.js +57 -17
  118. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +8 -3
  119. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
  120. package/dest/json-rpc/server/safe_json_rpc_server.js +27 -13
  121. package/dest/log/pino-logger.d.ts +1 -1
  122. package/dest/log/pino-logger.d.ts.map +1 -1
  123. package/dest/log/pino-logger.js +17 -2
  124. package/dest/noir/noir_package_config.d.ts +19 -104
  125. package/dest/noir/noir_package_config.d.ts.map +1 -1
  126. package/dest/noir/noir_package_config.js +1 -1
  127. package/dest/promise/running-promise.d.ts +5 -4
  128. package/dest/promise/running-promise.d.ts.map +1 -1
  129. package/dest/promise/running-promise.js +7 -3
  130. package/dest/queue/batch_queue.d.ts +1 -1
  131. package/dest/queue/batch_queue.d.ts.map +1 -1
  132. package/dest/queue/batch_queue.js +1 -0
  133. package/dest/retry/index.d.ts +31 -3
  134. package/dest/retry/index.d.ts.map +1 -1
  135. package/dest/retry/index.js +44 -2
  136. package/dest/schemas/api.d.ts +12 -10
  137. package/dest/schemas/api.d.ts.map +1 -1
  138. package/dest/schemas/api.js +7 -1
  139. package/dest/schemas/parse.d.ts +4 -4
  140. package/dest/schemas/parse.d.ts.map +1 -1
  141. package/dest/schemas/parse.js +6 -5
  142. package/dest/schemas/schemas.d.ts +15 -15
  143. package/dest/schemas/types.d.ts +3 -3
  144. package/dest/schemas/types.d.ts.map +1 -1
  145. package/dest/schemas/utils.d.ts +7 -11
  146. package/dest/schemas/utils.d.ts.map +1 -1
  147. package/dest/schemas/utils.js +2 -18
  148. package/dest/serialize/buffer_sink.d.ts +134 -0
  149. package/dest/serialize/buffer_sink.d.ts.map +1 -0
  150. package/dest/serialize/buffer_sink.js +297 -0
  151. package/dest/serialize/index.d.ts +2 -1
  152. package/dest/serialize/index.d.ts.map +1 -1
  153. package/dest/serialize/index.js +1 -0
  154. package/dest/string/index.js +1 -1
  155. package/dest/testing/files/index.d.ts +2 -3
  156. package/dest/testing/files/index.d.ts.map +1 -1
  157. package/dest/testing/files/index.js +1 -2
  158. package/dest/timer/index.d.ts +2 -2
  159. package/dest/timer/index.d.ts.map +1 -1
  160. package/dest/timer/index.js +1 -1
  161. package/dest/timer/timeout.d.ts +3 -1
  162. package/dest/timer/timeout.d.ts.map +1 -1
  163. package/dest/timer/timeout.js +26 -0
  164. package/dest/transport/dispatch/create_dispatch_proxy.d.ts +11 -2
  165. package/dest/transport/dispatch/create_dispatch_proxy.d.ts.map +1 -1
  166. package/dest/transport/index.d.ts +1 -2
  167. package/dest/transport/index.d.ts.map +1 -1
  168. package/dest/transport/index.js +0 -1
  169. package/dest/trees/balanced_merkle_tree_root.d.ts +2 -3
  170. package/dest/trees/balanced_merkle_tree_root.d.ts.map +1 -1
  171. package/dest/trees/balanced_merkle_tree_root.js +2 -3
  172. package/dest/trees/hasher.d.ts +3 -2
  173. package/dest/trees/hasher.d.ts.map +1 -1
  174. package/dest/trees/hasher.js +5 -5
  175. package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
  176. package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
  177. package/dest/trees/indexed_merkle_tree_calculator.js +5 -1
  178. package/dest/trees/membership_witness.d.ts +2 -6
  179. package/dest/trees/membership_witness.d.ts.map +1 -1
  180. package/dest/trees/membership_witness.js +0 -9
  181. package/dest/trees/merkle_tree_calculator.d.ts +4 -2
  182. package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
  183. package/dest/trees/merkle_tree_calculator.js +1 -5
  184. package/dest/trees/sibling_path.d.ts +5 -4
  185. package/dest/trees/sibling_path.d.ts.map +1 -1
  186. package/dest/trees/sibling_path.js +10 -8
  187. package/dest/trees/unbalanced_merkle_tree_root.d.ts +2 -3
  188. package/dest/trees/unbalanced_merkle_tree_root.d.ts.map +1 -1
  189. package/dest/trees/unbalanced_merkle_tree_root.js +2 -3
  190. package/dest/types/index.d.ts +23 -1
  191. package/dest/types/index.d.ts.map +1 -1
  192. package/dest/types/index.js +15 -0
  193. package/package.json +6 -4
  194. package/src/bigint-buffer/index.ts +6 -1
  195. package/src/branded-types/block_number.ts +20 -2
  196. package/src/branded-types/buffer32_hash.ts +38 -0
  197. package/src/branded-types/checkpoint_number.ts +16 -1
  198. package/src/branded-types/epoch.ts +1 -1
  199. package/src/branded-types/index.ts +1 -0
  200. package/src/branded-types/index_within_checkpoint.ts +1 -1
  201. package/src/branded-types/slot.ts +6 -1
  202. package/src/buffer/buffer16.ts +3 -0
  203. package/src/buffer/buffer32.ts +39 -68
  204. package/src/buffer/index.ts +1 -0
  205. package/src/buffer/utils.ts +8 -0
  206. package/src/collection/array.ts +34 -0
  207. package/src/collection/index.ts +2 -0
  208. package/src/collection/lru_map.ts +143 -0
  209. package/src/collection/lru_set.ts +115 -0
  210. package/src/committable/committable.ts +1 -1
  211. package/src/config/env_var.ts +51 -23
  212. package/src/config/index.ts +143 -122
  213. package/src/config/network_config.ts +1 -0
  214. package/src/config/network_name.ts +2 -5
  215. package/src/config/secret_value.ts +1 -1
  216. package/src/crypto/aes128/index.ts +11 -2
  217. package/src/crypto/bls/bn254_keystore.ts +33 -43
  218. package/src/crypto/keys/index.ts +20 -4
  219. package/src/crypto/poseidon/index.ts +42 -34
  220. package/src/crypto/schnorr/index.ts +9 -8
  221. package/src/crypto/schnorr/signature.ts +17 -46
  222. package/src/curves/bls12/field.ts +0 -7
  223. package/src/curves/bn254/field.ts +35 -34
  224. package/src/curves/grumpkin/point.ts +23 -40
  225. package/src/eth-address/index.ts +0 -4
  226. package/src/fifo/fifo_frame_reader.ts +113 -0
  227. package/src/fifo/index.ts +1 -0
  228. package/src/fifo_set/fifo_set.ts +52 -0
  229. package/src/fifo_set/index.ts +1 -0
  230. package/src/json-rpc/client/fetch.ts +4 -3
  231. package/src/json-rpc/client/safe_json_rpc_client.ts +2 -2
  232. package/src/json-rpc/client/undici.ts +5 -3
  233. package/src/json-rpc/fixtures/test_state.ts +10 -10
  234. package/src/json-rpc/server/safe_json_rpc_server.ts +31 -13
  235. package/src/log/pino-logger.ts +19 -2
  236. package/src/noir/noir_package_config.ts +32 -20
  237. package/src/promise/running-promise.ts +8 -5
  238. package/src/queue/batch_queue.ts +1 -0
  239. package/src/retry/index.ts +66 -4
  240. package/src/schemas/api.ts +25 -25
  241. package/src/schemas/parse.ts +9 -6
  242. package/src/schemas/schemas.ts +4 -4
  243. package/src/schemas/types.ts +2 -2
  244. package/src/schemas/utils.ts +4 -38
  245. package/src/serialize/buffer_sink.ts +350 -0
  246. package/src/serialize/index.ts +1 -0
  247. package/src/string/index.ts +1 -1
  248. package/src/testing/files/index.ts +1 -2
  249. package/src/timer/index.ts +1 -1
  250. package/src/timer/timeout.ts +31 -0
  251. package/src/transport/dispatch/create_dispatch_proxy.ts +11 -1
  252. package/src/transport/index.ts +0 -1
  253. package/src/trees/balanced_merkle_tree_root.ts +2 -5
  254. package/src/trees/hasher.ts +6 -3
  255. package/src/trees/indexed_merkle_tree_calculator.ts +5 -1
  256. package/src/trees/membership_witness.ts +0 -8
  257. package/src/trees/merkle_tree_calculator.ts +4 -10
  258. package/src/trees/sibling_path.ts +11 -6
  259. package/src/trees/unbalanced_merkle_tree_root.ts +2 -5
  260. package/src/types/index.ts +47 -0
  261. package/dest/crypto/serialize.d.ts +0 -51
  262. package/dest/crypto/serialize.d.ts.map +0 -1
  263. package/dest/crypto/serialize.js +0 -68
  264. package/dest/transport/dispatch/create_dispatch_fn.d.ts +0 -25
  265. package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +0 -1
  266. package/dest/transport/dispatch/create_dispatch_fn.js +0 -17
  267. package/src/crypto/serialize.ts +0 -85
  268. package/src/transport/dispatch/create_dispatch_fn.ts +0 -35
@@ -1,17 +1,19 @@
1
1
  export type EnvVar =
2
2
  | 'REGISTRY_CONTRACT_ADDRESS'
3
3
  | 'FEE_ASSET_HANDLER_CONTRACT_ADDRESS'
4
- | 'SLASH_FACTORY_CONTRACT_ADDRESS'
5
4
  | 'ACVM_BINARY_PATH'
6
5
  | 'ACVM_WORKING_DIRECTORY'
7
6
  | 'API_KEY'
8
7
  | 'API_PREFIX'
9
- | 'ARCHIVER_MAX_LOGS'
10
8
  | 'ARCHIVER_POLLING_INTERVAL_MS'
9
+ | 'ARCHIVER_SKIP_HISTORICAL_LOGS_CHECK'
11
10
  | 'ARCHIVER_URL'
12
11
  | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS'
13
12
  | 'ARCHIVER_BATCH_SIZE'
13
+ | 'ARCHIVER_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE'
14
+ | 'ARCHIVER_SKIP_ORPHAN_PROPOSED_BLOCK_PRUNING'
14
15
  | 'AZTEC_ADMIN_PORT'
16
+ | 'AZTEC_NODE_DEBUG'
15
17
  | 'AZTEC_ADMIN_API_KEY_HASH'
16
18
  | 'AZTEC_DISABLE_ADMIN_API_KEY'
17
19
  | 'AZTEC_RESET_ADMIN_API_KEY'
@@ -23,6 +25,9 @@ export type EnvVar =
23
25
  | 'BB_WORKING_DIRECTORY'
24
26
  | 'BB_NUM_IVC_VERIFIERS'
25
27
  | 'BB_IVC_CONCURRENCY'
28
+ | 'BB_CHONK_VERIFY_MAX_BATCH'
29
+ | 'BB_CHONK_VERIFY_BATCH_CONCURRENCY'
30
+ | 'BB_DEBUG_OUTPUT_DIR'
26
31
  | 'BOOTSTRAP_NODES'
27
32
  | 'BLOB_ARCHIVE_API_URL'
28
33
  | 'BLOB_FILE_STORE_URLS'
@@ -72,6 +77,8 @@ export type EnvVar =
72
77
  | 'DEBUG'
73
78
  | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY'
74
79
  | 'ENABLE_PROVER_NODE'
80
+ | 'USE_AUTOMINE_SEQUENCER'
81
+ | 'AUTOMINE_ENABLE_PROVE_EPOCH'
75
82
  | 'ETHEREUM_HOSTS'
76
83
  | 'ETHEREUM_DEBUG_HOSTS'
77
84
  | 'ETHEREUM_ALLOW_NO_DEBUG_HOSTS'
@@ -81,6 +88,7 @@ export type EnvVar =
81
88
  | 'KEY_STORE_DIRECTORY'
82
89
  | 'L1_CHAIN_ID'
83
90
  | 'L1_CONSENSUS_HOST_URLS'
91
+ | 'ETHEREUM_HTTP_TIMEOUT_MS'
84
92
  | 'L1_CONSENSUS_HOST_API_KEYS'
85
93
  | 'L1_CONSENSUS_HOST_API_KEY_HEADERS'
86
94
  | 'L1_TX_FAILED_STORE'
@@ -91,14 +99,16 @@ export type EnvVar =
91
99
  | 'MNEMONIC'
92
100
  | 'NETWORK'
93
101
  | 'NETWORK_CONFIG_LOCATION'
94
- | 'NO_PXE'
102
+ | 'ALLOW_OVERRIDING_NETWORK_CONFIG'
95
103
  | 'USE_GCLOUD_LOGGING'
96
104
  | 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT'
97
105
  | 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'
98
106
  | 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT'
99
107
  | 'OTEL_COLLECT_INTERVAL_MS'
108
+ | 'OTEL_BSP_MAX_QUEUE_SIZE'
100
109
  | 'OTEL_EXCLUDE_METRICS'
101
110
  | 'OTEL_INCLUDE_METRICS'
111
+ | 'OTEL_MIN_TRACE_DURATION_MS'
102
112
  | 'OTEL_EXPORT_TIMEOUT_MS'
103
113
  | 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT'
104
114
  | 'PUBLIC_OTEL_INCLUDE_METRICS'
@@ -109,7 +119,6 @@ export type EnvVar =
109
119
  | 'P2P_BATCH_TX_REQUESTER_TX_BATCH_SIZE'
110
120
  | 'P2P_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD'
111
121
  | 'P2P_BLOCK_CHECK_INTERVAL_MS'
112
- | 'P2P_SLOT_CHECK_INTERVAL_MS'
113
122
  | 'P2P_BLOCK_REQUEST_BATCH_SIZE'
114
123
  | 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK'
115
124
  | 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS'
@@ -128,10 +137,14 @@ export type EnvVar =
128
137
  | 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT'
129
138
  | 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT'
130
139
  | 'P2P_L2_QUEUE_SIZE'
140
+ | 'P2P_MAX_GOSSIP_CLOCK_DISPARITY_MS'
131
141
  | 'P2P_MAX_PEERS'
142
+ | 'P2P_PEER_BAN_DURATION_SECONDS'
132
143
  | 'P2P_PEER_CHECK_INTERVAL_MS'
144
+ | 'P2P_PEER_FAILED_BAN_TIME_MS'
133
145
  | 'P2P_PEER_PENALTY_VALUES'
134
146
  | 'P2P_QUERY_FOR_IP'
147
+ | 'P2P_PUBLIC_IP_SERVICES'
135
148
  | 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS'
136
149
  | 'P2P_REQRESP_DIAL_TIMEOUT_MS'
137
150
  | 'P2P_REQRESP_OVERALL_REQUEST_TIMEOUT_MS'
@@ -153,7 +166,10 @@ export type EnvVar =
153
166
  | 'P2P_DROP_TX_CHANCE'
154
167
  | 'P2P_TX_POOL_DELETE_TXS_AFTER_REORG'
155
168
  | 'P2P_MIN_TX_POOL_AGE_MS'
169
+ | 'P2P_MISSING_TX_COLLECTION_DEADLINE_SLOTS'
156
170
  | 'P2P_RPC_PRICE_BUMP_PERCENTAGE'
171
+ | 'P2P_KEEP_FINALIZED_TXS_FOR_SLOTS'
172
+ | 'P2P_TX_VALIDATION_CACHE_SIZE'
157
173
  | 'DEBUG_P2P_INSTRUMENT_MESSAGES'
158
174
  | 'PEER_ID_PRIVATE_KEY'
159
175
  | 'PEER_ID_PRIVATE_KEY_PATH'
@@ -175,6 +191,7 @@ export type EnvVar =
175
191
  | 'PROVER_FAILED_PROOF_STORE'
176
192
  | 'PROVER_NODE_FAILED_EPOCH_STORE'
177
193
  | 'PROVER_NODE_DISABLE_PROOF_PUBLISH'
194
+ | 'PROVER_NODE_PROOF_SUBMISSION_TARGET_ADDRESS'
178
195
  | 'PROVER_ID'
179
196
  | 'PROVER_NODE_POLLING_INTERVAL_MS'
180
197
  | 'PROVER_NODE_MAX_PENDING_JOBS'
@@ -193,6 +210,7 @@ export type EnvVar =
193
210
  | 'PROVER_TEST_DELAY_MS'
194
211
  | 'PROVER_TEST_DELAY_TYPE'
195
212
  | 'PROVER_TEST_VERIFICATION_DELAY_MS'
213
+ | 'PXE_AUTO_SYNC'
196
214
  | 'PXE_L2_BLOCK_BATCH_SIZE'
197
215
  | 'PXE_PROVER_ENABLED'
198
216
  | 'PXE_SYNC_CHAIN_TIP'
@@ -200,9 +218,11 @@ export type EnvVar =
200
218
  | 'RPC_MAX_BODY_SIZE'
201
219
  | 'RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT'
202
220
  | 'RPC_SIMULATE_PUBLIC_MAX_DEBUG_LOG_MEMORY_READS'
221
+ | 'OFFENSE_COLLECTION_ENABLED'
203
222
  | 'SENTINEL_ENABLED'
204
223
  | 'SENTINEL_HISTORY_LENGTH_IN_EPOCHS'
205
- | 'SENTINEL_HISTORIC_PROVEN_PERFORMANCE_LENGTH_IN_EPOCHS'
224
+ | 'SENTINEL_HISTORIC_EPOCH_PERFORMANCE_LENGTH_IN_EPOCHS'
225
+ | 'SENTINEL_EPOCH_END_BUFFER_SLOTS'
206
226
  | 'SEQ_MAX_TX_PER_BLOCK'
207
227
  | 'SEQ_MAX_TX_PER_CHECKPOINT'
208
228
  | 'SEQ_MIN_TX_PER_BLOCK'
@@ -210,36 +230,45 @@ export type EnvVar =
210
230
  | 'SEQ_MAX_DA_BLOCK_GAS'
211
231
  | 'SEQ_MAX_L2_BLOCK_GAS'
212
232
  | 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER'
233
+ | 'SEQ_PER_BLOCK_DA_ALLOCATION_MULTIPLIER'
234
+ | 'SEQ_REDISTRIBUTE_CHECKPOINT_BUDGET'
213
235
  | 'SEQ_PUBLISHER_PRIVATE_KEY'
214
236
  | 'SEQ_PUBLISHER_PRIVATE_KEYS'
215
237
  | 'SEQ_PUBLISHER_ADDRESSES'
216
238
  | 'SEQ_PUBLISHER_ALLOW_INVALID_STATES'
217
239
  | 'SEQ_PUBLISHER_FORWARDER_ADDRESS'
240
+ | 'SEQ_PUBLISHER_PREVIOUS_L1_BLOCK_WAIT_TIMEOUT_MS'
241
+ | 'SEQ_PUBLISHER_PREVIOUS_L1_BLOCK_WAIT_POLL_INTERVAL_MS'
242
+ | 'PUBLISHER_FUNDING_THRESHOLD'
243
+ | 'PUBLISHER_FUNDING_AMOUNT'
218
244
  | 'SEQ_POLLING_INTERVAL_MS'
219
- | 'SEQ_ENFORCE_TIME_TABLE'
220
245
  | 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT'
221
246
  | 'SEQ_ATTESTATION_PROPAGATION_TIME'
247
+ | 'SEQ_CHECKPOINT_PROPOSAL_PREPARE_TIME'
248
+ | 'CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS'
249
+ | 'SEQ_MIN_BLOCK_DURATION'
222
250
  | 'SEQ_BLOCK_DURATION_MS'
251
+ | 'SEQ_LAST_BLOCK_DURATION_MS'
223
252
  | 'SEQ_EXPECTED_BLOCK_PROPOSALS_PER_SLOT'
224
253
  | 'SEQ_BUILD_CHECKPOINT_IF_EMPTY'
225
254
  | 'SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_COMMITTEE_MEMBER'
226
255
  | 'SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_NON_COMMITTEE_MEMBER'
227
256
  | 'SEQ_SKIP_CHECKPOINT_PUBLISH_PERCENT'
228
- | 'SLASH_MIN_PENALTY_PERCENTAGE'
229
- | 'SLASH_MAX_PENALTY_PERCENTAGE'
230
257
  | 'SLASH_VALIDATORS_ALWAYS'
231
258
  | 'SLASH_VALIDATORS_NEVER'
232
- | 'SLASH_PRUNE_PENALTY'
233
259
  | 'SLASH_DATA_WITHHOLDING_PENALTY'
260
+ | 'SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS'
234
261
  | 'SLASH_INACTIVITY_PENALTY'
235
262
  | 'SLASH_INACTIVITY_TARGET_PERCENTAGE'
236
263
  | 'SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD'
237
264
  | 'SLASH_INVALID_BLOCK_PENALTY'
265
+ | 'SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY'
238
266
  | 'SLASH_DUPLICATE_PROPOSAL_PENALTY'
239
267
  | 'SLASH_DUPLICATE_ATTESTATION_PENALTY'
240
268
  | 'SLASH_OVERRIDE_PAYLOAD'
241
269
  | 'SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY'
242
- | 'SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY'
270
+ | 'SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY'
271
+ | 'SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY'
243
272
  | 'SLASH_UNKNOWN_PENALTY'
244
273
  | 'SLASH_GRACE_PERIOD_L2_SLOTS'
245
274
  | 'SLASH_OFFENSE_EXPIRATION_ROUNDS'
@@ -253,25 +282,16 @@ export type EnvVar =
253
282
  | 'SPONSORED_FPC'
254
283
  | 'PREFUND_ADDRESSES'
255
284
  | 'TX_COLLECTION_FAST_NODES_TIMEOUT_BEFORE_REQ_RESP_MS'
256
- | 'TX_COLLECTION_SLOW_NODES_INTERVAL_MS'
257
- | 'TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS'
258
- | 'TX_COLLECTION_SLOW_REQ_RESP_TIMEOUT_MS'
259
- | 'TX_COLLECTION_RECONCILE_INTERVAL_MS'
260
- | 'TX_COLLECTION_DISABLE_SLOW_DURING_FAST_REQUESTS'
261
285
  | 'TX_COLLECTION_FAST_NODE_INTERVAL_MS'
262
286
  | 'TX_COLLECTION_FAST_MAX_PARALLEL_REQUESTS_PER_NODE'
263
287
  | 'TX_COLLECTION_NODE_RPC_MAX_BATCH_SIZE'
264
288
  | 'TX_COLLECTION_NODE_RPC_URLS'
265
289
  | 'TX_COLLECTION_MISSING_TXS_COLLECTOR_TYPE'
266
290
  | 'TX_COLLECTION_FILE_STORE_URLS'
267
- | 'TX_COLLECTION_FILE_STORE_SLOW_DELAY_MS'
268
291
  | 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS'
269
292
  | 'TX_COLLECTION_FILE_STORE_FAST_WORKER_COUNT'
270
- | 'TX_COLLECTION_FILE_STORE_SLOW_WORKER_COUNT'
271
293
  | 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS'
272
- | 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_BASE_MS'
273
294
  | 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS'
274
- | 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_MAX_MS'
275
295
  | 'TX_FILE_STORE_URL'
276
296
  | 'TX_FILE_STORE_UPLOAD_CONCURRENCY'
277
297
  | 'TX_FILE_STORE_MAX_QUEUE_SIZE'
@@ -287,7 +307,6 @@ export type EnvVar =
287
307
  | 'VALIDATOR_MAX_TX_PER_CHECKPOINT'
288
308
  | 'VALIDATOR_PRIVATE_KEYS'
289
309
  | 'VALIDATOR_PRIVATE_KEY'
290
- | 'VALIDATOR_REEXECUTE'
291
310
  | 'VALIDATOR_ADDRESSES'
292
311
  | 'ROLLUP_VERSION'
293
312
  | 'WS_BLOCK_CHECK_INTERVAL_MS'
@@ -320,11 +339,16 @@ export type EnvVar =
320
339
  | 'AZTEC_SLASH_AMOUNT_SMALL'
321
340
  | 'AZTEC_SLASH_AMOUNT_MEDIUM'
322
341
  | 'AZTEC_SLASH_AMOUNT_LARGE'
323
- | 'AZTEC_SLASHER_FLAVOR'
342
+ | 'AZTEC_SLASHER_ENABLED'
324
343
  | 'AZTEC_GOVERNANCE_PROPOSER_QUORUM'
325
344
  | 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE'
326
345
  | 'AZTEC_GOVERNANCE_VOTING_DURATION'
327
346
  | 'AZTEC_EXIT_DELAY_SECONDS'
347
+ | 'AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE'
348
+ | 'AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE'
349
+ | 'AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN'
350
+ | 'AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT'
351
+ | 'AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE'
328
352
  | 'L1_GAS_LIMIT_BUFFER_PERCENTAGE'
329
353
  | 'L1_GAS_PRICE_MAX'
330
354
  | 'L1_FEE_PER_GAS_GWEI_MAX'
@@ -349,19 +373,23 @@ export type EnvVar =
349
373
  | 'K8S_POD_NAME'
350
374
  | 'K8S_POD_UID'
351
375
  | 'K8S_NAMESPACE_NAME'
352
- | 'ENABLE_VERSION_CHECK'
353
- | 'VALIDATOR_REEXECUTE_DEADLINE_MS'
376
+ | 'ENABLE_AUTO_SHUTDOWN'
354
377
  | 'WEB3_SIGNER_URL'
355
378
  | 'SKIP_ARCHIVER_INITIAL_SYNC'
356
379
  | 'BLOB_ALLOW_EMPTY_SOURCES'
380
+ | 'BLOB_PREFER_FILESTORES'
381
+ | 'BLOB_FILE_STORE_TIMEOUT_MS'
357
382
  | 'FISHERMAN_MODE'
358
383
  | 'MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS'
384
+ | 'MAX_BLOCKS_PER_CHECKPOINT'
359
385
  | 'LEGACY_BLS_CLI'
360
386
  | 'DEBUG_FORCE_TX_PROOF_VERIFICATION'
387
+ | 'VALIDATOR_ALLOW_EPHEMERAL_SIGNING_PROTECTION'
361
388
  | 'VALIDATOR_HA_SIGNING_ENABLED'
362
389
  | 'VALIDATOR_HA_NODE_ID'
363
390
  | 'VALIDATOR_HA_POLLING_INTERVAL_MS'
364
391
  | 'VALIDATOR_HA_SIGNING_TIMEOUT_MS'
392
+ | 'VALIDATOR_SIGNER_CALL_TIMEOUT_MS'
365
393
  | 'VALIDATOR_HA_MAX_STUCK_DUTIES_AGE_MS'
366
394
  | 'VALIDATOR_HA_OLD_DUTIES_MAX_AGE_H'
367
395
  | 'VALIDATOR_HA_DATABASE_URL'
@@ -10,14 +10,14 @@ export type { EnvVar, NetworkNames };
10
10
  export type { NetworkConfig, NetworkConfigMap } from './network_config.js';
11
11
  export { NetworkConfigMapSchema, NetworkConfigSchema } from './network_config.js';
12
12
 
13
- export interface ConfigMapping {
13
+ export interface ConfigMapping<T> {
14
14
  env?: EnvVar;
15
- parseEnv?: (val: string) => any;
16
- defaultValue?: any;
15
+ /** Parse an env-var string into `T`. Throws on invalid input. */
16
+ parseEnv?: (val: string) => T;
17
+ defaultValue?: T;
17
18
  printDefault?: (val: any) => string;
18
19
  description: string;
19
20
  isBoolean?: boolean;
20
- nested?: Record<string, ConfigMapping>;
21
21
  fallback?: EnvVar[];
22
22
  /**
23
23
  * List of deprecated env vars that are still supported but will log a warning.
@@ -30,7 +30,9 @@ export function isBooleanConfigValue<T>(obj: T, key: keyof T): boolean {
30
30
  return typeof obj[key] === 'boolean';
31
31
  }
32
32
 
33
- export type ConfigMappingsType<T> = Record<keyof T, ConfigMapping>;
33
+ export type ConfigMappingsType<T> = {
34
+ [K in keyof T]-?: ConfigMapping<Required<T>[K]>;
35
+ };
34
36
 
35
37
  /**
36
38
  * Shared utility function to get a value from environment variables with fallback support.
@@ -66,8 +68,8 @@ export function getValueFromEnvWithFallback<T>(
66
68
  }
67
69
  }
68
70
 
69
- // Parse the value if needed
70
- if (value !== undefined) {
71
+ // Parse the value if needed. Empty strings are treated as "not set".
72
+ if (value !== undefined && value !== '') {
71
73
  return parseFunc ? parseFunc(value) : (value as unknown as T);
72
74
  }
73
75
 
@@ -79,22 +81,20 @@ export function getConfigFromMappings<T>(configMappings: ConfigMappingsType<T>):
79
81
  const config = {} as T;
80
82
 
81
83
  for (const key in configMappings) {
82
- const { env, parseEnv, defaultValue, nested, fallback, deprecatedFallback } = configMappings[key];
83
- if (nested) {
84
- (config as any)[key] = getConfigFromMappings(nested);
85
- } else {
86
- // Use the shared utility function
84
+ const { env, parseEnv, defaultValue, fallback, deprecatedFallback } = configMappings[key];
85
+ try {
87
86
  (config as any)[key] = getValueFromEnvWithFallback(env, parseEnv, defaultValue, fallback);
87
+ } catch (e: any) {
88
+ throw new Error(`Failed to parse config '${key}' (env: ${env ?? 'none'}): ${e.message}`);
89
+ }
88
90
 
89
- // Check for deprecated env vars and warn if logger is set
90
- if (deprecatedFallback?.length) {
91
- const userLog = createConsoleLogger('[DEPRECATED]');
92
- for (const { env: deprecatedEnv, message } of deprecatedFallback) {
93
- if (process.env[deprecatedEnv]) {
94
- const warningMessage =
95
- message ?? `Environment variable ${deprecatedEnv} is deprecated. Please use ${env} instead.`;
96
- userLog(warningMessage, { deprecatedEnvVar: deprecatedEnv, newEnvVar: env });
97
- }
91
+ if (deprecatedFallback?.length) {
92
+ const userLog = createConsoleLogger('[DEPRECATED]');
93
+ for (const { env: deprecatedEnv, message } of deprecatedFallback) {
94
+ if (process.env[deprecatedEnv]) {
95
+ const warningMessage =
96
+ message ?? `Environment variable ${deprecatedEnv} is deprecated. Please use ${env} instead.`;
97
+ userLog(warningMessage, { deprecatedEnvVar: deprecatedEnv, newEnvVar: env });
98
98
  }
99
99
  }
100
100
  }
@@ -119,29 +119,37 @@ export function omitConfigMappings<T, K extends keyof T>(
119
119
  }
120
120
 
121
121
  /**
122
- * Generates parseEnv and default values for a numerical config value.
123
- * @param defaultVal - The default numerical value to use if the environment variable is not set or is invalid
124
- * @returns Object with parseEnv and default values for a numerical config value
122
+ * Generates parseEnv and default values for an integer config value.
123
+ *
124
+ * The default is used only when the environment variable is unset or empty. A set-but-invalid
125
+ * value (non-numeric, fractional, or outside the safe-integer range) throws rather than silently
126
+ * falling back to the default.
127
+ * @param defaultVal - The default value to use when the environment variable is unset
128
+ * @returns Object with parseEnv and default values for an integer config value
125
129
  */
126
- export function numberConfigHelper(defaultVal: number): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
130
+ export function numberConfigHelper(defaultVal: number): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
127
131
  return {
128
- parseEnv: (val: string) => safeParseNumber(val, defaultVal),
132
+ parseEnv: (val: string) => parseSafeInteger(val),
129
133
  defaultValue: defaultVal,
130
134
  };
131
135
  }
132
136
 
133
137
  /**
134
- * Generates parseEnv and default values for a numerical config value.
135
- * @param defaultVal - The default numerical value to use if the environment variable is not set or is invalid
136
- * @returns Object with parseEnv and default values for a numerical config value
138
+ * Generates parseEnv and default values for a floating-point config value.
139
+ *
140
+ * The default is used only when the environment variable is unset or empty. A set-but-invalid
141
+ * value (not a finite number) throws rather than silently falling back to the default.
142
+ * @param defaultVal - The default value to use when the environment variable is unset
143
+ * @param validationFn - Optional extra validation applied to the parsed value; should throw on invalid input
144
+ * @returns Object with parseEnv and default values for a floating-point config value
137
145
  */
138
146
  export function floatConfigHelper(
139
147
  defaultVal: number,
140
148
  validationFn?: (val: number) => void,
141
- ): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
149
+ ): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
142
150
  return {
143
151
  parseEnv: (val: string): number => {
144
- const parsed = safeParseFloat(val, defaultVal);
152
+ const parsed = parseFiniteNumber(val);
145
153
  validationFn?.(parsed);
146
154
  return parsed;
147
155
  },
@@ -150,12 +158,17 @@ export function floatConfigHelper(
150
158
  }
151
159
 
152
160
  /**
153
- * Parses an environment variable to a 0-1 percentage value
161
+ * Generates parseEnv and default values for a 0-1 percentage config value.
162
+ *
163
+ * The default is used only when the environment variable is unset or empty. A set-but-invalid
164
+ * value (not a finite number, or outside the 0-1 range) throws rather than silently falling back
165
+ * to the default.
166
+ * @param defaultVal - The default value to use when the environment variable is unset
154
167
  */
155
- export function percentageConfigHelper(defaultVal: number): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
168
+ export function percentageConfigHelper(defaultVal: number): Pick<ConfigMapping<number>, 'parseEnv' | 'defaultValue'> {
156
169
  return {
157
170
  parseEnv: (val: string): number => {
158
- const parsed = safeParseFloat(val, defaultVal);
171
+ const parsed = parseFiniteNumber(val);
159
172
  if (parsed < 0 || parsed > 1) {
160
173
  throw new TypeError(`Invalid percentage value: ${parsed} should be between 0 and 1`);
161
174
  }
@@ -171,12 +184,13 @@ export function percentageConfigHelper(defaultVal: number): Pick<ConfigMapping,
171
184
  * @param defaultVal - The default numerical value to use if the environment variable is not set or is invalid
172
185
  * @returns Object with parseEnv and default values for a numerical config value
173
186
  */
174
- export function bigintConfigHelper(defaultVal?: bigint): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
187
+ export function bigintConfigHelper(defaultVal: bigint): Pick<ConfigMapping<bigint>, 'parseEnv' | 'defaultValue'>;
188
+ export function bigintConfigHelper(): Pick<ConfigMapping<bigint | undefined>, 'parseEnv' | 'defaultValue'>;
189
+ export function bigintConfigHelper(
190
+ defaultVal?: bigint,
191
+ ): Pick<ConfigMapping<bigint | undefined>, 'parseEnv' | 'defaultValue'> {
175
192
  return {
176
193
  parseEnv: (val: string) => {
177
- if (val === '') {
178
- return defaultVal;
179
- }
180
194
  // Handle scientific notation (e.g. "1e+23", "2E23") which BigInt() doesn't accept directly.
181
195
  // We parse it losslessly using bigint arithmetic instead of going through float64.
182
196
  if (/[eE]/.test(val)) {
@@ -200,32 +214,31 @@ export function bigintConfigHelper(defaultVal?: bigint): Pick<ConfigMapping, 'pa
200
214
 
201
215
  /**
202
216
  * Generates parseEnv for an optional numerical config value.
217
+ * Empty strings are already handled by getValueFromEnvWithFallback.
203
218
  */
204
- export function optionalNumberConfigHelper(): Pick<ConfigMapping, 'parseEnv'> {
219
+ export function optionalNumberConfigHelper(): Pick<ConfigMapping<number>, 'parseEnv'> {
205
220
  return {
206
- parseEnv: (val: string | undefined) => {
207
- if (val !== undefined && val.length > 0) {
208
- const parsedValue = parseInt(val);
209
- return Number.isSafeInteger(parsedValue) ? parsedValue : undefined;
210
- }
211
- return undefined;
212
- },
221
+ parseEnv: (val: string) => parseSafeInteger(val),
213
222
  };
214
223
  }
215
224
 
216
225
  /** Generates parseEnv for an enum-like config value. */
226
+ export function enumConfigHelper<T extends string>(
227
+ values: T[],
228
+ defaultValue: NoInfer<T>,
229
+ ): Pick<ConfigMapping<T>, 'parseEnv' | 'defaultValue'>;
230
+ export function enumConfigHelper<T extends string>(
231
+ values: T[],
232
+ ): Pick<ConfigMapping<T | undefined>, 'parseEnv' | 'defaultValue'>;
217
233
  export function enumConfigHelper<T extends string>(
218
234
  values: T[],
219
235
  defaultValue?: NoInfer<T>,
220
- ): Pick<ConfigMapping, 'parseEnv' | 'defaultValue'> {
236
+ ): Pick<ConfigMapping<T | undefined>, 'parseEnv' | 'defaultValue'> {
221
237
  return {
222
238
  parseEnv: (val: string) => {
223
- const sanitizedVal = (val ?? '').trim().toLowerCase();
224
- if (values.includes(sanitizedVal as T)) {
225
- return sanitizedVal as T;
226
- }
227
- if (!val && defaultValue) {
228
- return defaultValue;
239
+ const sanitizedVal = val.trim().toLowerCase();
240
+ if (values.some(v => v.toLowerCase() === sanitizedVal)) {
241
+ return values.find(v => v.toLowerCase() === sanitizedVal)!;
229
242
  }
230
243
  throw new Error(`Invalid config value '${val}' (must be one of ${values.join(', ')})`);
231
244
  },
@@ -240,7 +253,9 @@ export function enumConfigHelper<T extends string>(
240
253
  */
241
254
  export function booleanConfigHelper(
242
255
  defaultVal = false,
243
- ): Required<Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & { parseVal: (val: string) => boolean }> {
256
+ ): Required<
257
+ Pick<ConfigMapping<boolean>, 'parseEnv' | 'defaultValue' | 'isBoolean'> & { parseVal: (val: string) => boolean }
258
+ > {
244
259
  const parse = (val: string | boolean) => (typeof val === 'boolean' ? val : parseBooleanEnv(val));
245
260
  return {
246
261
  parseEnv: parse,
@@ -250,116 +265,122 @@ export function booleanConfigHelper(
250
265
  };
251
266
  }
252
267
 
253
- export function secretValueConfigHelper<T>(parse: (val: string | undefined) => T): Required<
254
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
255
- parseVal: (val: string) => SecretValue<T>;
256
- }
257
- > {
268
+ export function secretValueConfigHelper<T>(parse: (val: string | undefined) => T): Pick<
269
+ ConfigMapping<SecretValue<T>>,
270
+ 'parseEnv' | 'defaultValue'
271
+ > & {
272
+ parseVal: (val: string) => SecretValue<T>;
273
+ } {
258
274
  const wrap = (val: string) => new SecretValue(parse(val));
259
275
  return {
260
276
  parseEnv: wrap,
261
277
  parseVal: wrap,
262
278
  defaultValue: new SecretValue(parse(undefined)),
263
- isBoolean: true,
264
279
  };
265
280
  }
266
281
 
267
282
  export { parseBooleanEnv } from './parse-env.js';
268
283
 
269
- export function secretStringConfigHelper(): Required<
270
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
271
- parseVal: (val: string) => SecretValue<string | undefined>;
272
- }
273
- >;
274
- export function secretStringConfigHelper(defaultValue: string): Required<
275
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
276
- parseVal: (val: string) => SecretValue<string>;
277
- }
278
- >;
279
- export function secretStringConfigHelper(defaultValue?: string): Required<
280
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
281
- parseVal: (val: string) => SecretValue<string | typeof defaultValue>;
282
- }
283
- > {
284
+ export function secretStringConfigHelper(): {
285
+ parseEnv: (val: string) => SecretValue<string>;
286
+ parseVal: (val: string) => SecretValue<string>;
287
+ defaultValue: undefined;
288
+ };
289
+ export function secretStringConfigHelper(defaultValue: string): {
290
+ parseEnv: (val: string) => SecretValue<string>;
291
+ parseVal: (val: string) => SecretValue<string>;
292
+ defaultValue: SecretValue<string>;
293
+ };
294
+ export function secretStringConfigHelper(defaultValue?: string): {
295
+ parseEnv: (val: string) => SecretValue<string>;
296
+ parseVal: (val: string) => SecretValue<string>;
297
+ defaultValue: SecretValue<string> | undefined;
298
+ } {
284
299
  const parse = (val: string) => new SecretValue(val);
285
300
  return {
286
301
  parseEnv: parse,
287
302
  parseVal: parse,
288
303
  defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
289
- isBoolean: true,
290
304
  };
291
305
  }
292
306
 
293
- export function secretFrConfigHelper(): Required<
294
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
295
- parseVal: (val: string) => SecretValue<Fr | undefined>;
296
- }
297
- >;
298
- export function secretFrConfigHelper(defaultValue: Fr): Required<
299
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
300
- parseVal: (val: string) => SecretValue<Fr>;
301
- }
302
- >;
303
- export function secretFrConfigHelper(defaultValue?: Fr): Required<
304
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
305
- parseVal: (val: string) => SecretValue<Fr | typeof defaultValue>;
306
- }
307
- > {
307
+ export function secretFrConfigHelper(): {
308
+ parseEnv: (val: string) => SecretValue<Fr>;
309
+ parseVal: (val: string) => SecretValue<Fr>;
310
+ defaultValue: undefined;
311
+ };
312
+ export function secretFrConfigHelper(defaultValue: Fr): {
313
+ parseEnv: (val: string) => SecretValue<Fr>;
314
+ parseVal: (val: string) => SecretValue<Fr>;
315
+ defaultValue: SecretValue<Fr>;
316
+ };
317
+ export function secretFrConfigHelper(defaultValue?: Fr): {
318
+ parseEnv: (val: string) => SecretValue<Fr>;
319
+ parseVal: (val: string) => SecretValue<Fr>;
320
+ defaultValue: SecretValue<Fr> | undefined;
321
+ } {
308
322
  const parse = (val: string) => new SecretValue(Fr.fromHexString(val));
309
323
  return {
310
324
  parseEnv: parse,
311
325
  parseVal: parse,
312
326
  defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
313
- isBoolean: true,
314
327
  };
315
328
  }
316
329
 
317
- export function secretFqConfigHelper(defaultValue: Fq): Required<
318
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
319
- parseVal: (val: string) => SecretValue<Fq>;
320
- }
321
- >;
322
- export function secretFqConfigHelper(): Required<
323
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
324
- parseVal: (val: string) => SecretValue<Fq | undefined>;
325
- }
326
- >;
327
- export function secretFqConfigHelper(defaultValue?: Fq): Required<
328
- Pick<ConfigMapping, 'parseEnv' | 'defaultValue' | 'isBoolean'> & {
329
- parseVal: (val: string) => SecretValue<Fq | typeof defaultValue>;
330
- }
331
- > {
330
+ export function secretFqConfigHelper(): {
331
+ parseEnv: (val: string) => SecretValue<Fq>;
332
+ parseVal: (val: string) => SecretValue<Fq>;
333
+ defaultValue: undefined;
334
+ };
335
+ export function secretFqConfigHelper(defaultValue: Fq): {
336
+ parseEnv: (val: string) => SecretValue<Fq>;
337
+ parseVal: (val: string) => SecretValue<Fq>;
338
+ defaultValue: SecretValue<Fq>;
339
+ };
340
+ export function secretFqConfigHelper(defaultValue?: Fq): {
341
+ parseEnv: (val: string) => SecretValue<Fq>;
342
+ parseVal: (val: string) => SecretValue<Fq>;
343
+ defaultValue: SecretValue<Fq> | undefined;
344
+ } {
332
345
  const parse = (val: string) => new SecretValue(Fq.fromHexString(val));
333
346
  return {
334
347
  parseEnv: parse,
335
348
  parseVal: parse,
336
- defaultValue: typeof defaultValue !== 'undefined' ? new SecretValue(defaultValue) : undefined,
337
- isBoolean: true,
349
+ defaultValue: defaultValue !== undefined ? new SecretValue(defaultValue) : undefined,
338
350
  };
339
351
  }
340
352
 
341
353
  /**
342
- * Safely parses a number from a string.
343
- * If the value is not a number or is not a safe integer, the default value is returned.
354
+ * Parses a string into a safe integer, throwing if the value is numeric but not an integer.
355
+ *
356
+ * Unlike `parseInt`, this does not silently truncate decimals: `'0.8'` throws rather than
357
+ * becoming `0`. A fractional value indicates the caller intended a non-integer where only
358
+ * integers are supported (use `floatConfigHelper`/`percentageConfigHelper` for those).
344
359
  * @param value - The string value to parse
345
- * @param defaultValue - The default value to return
346
- * @returns Either parsed value or default value
360
+ * @returns The parsed integer value
347
361
  */
348
- function safeParseNumber(value: string, defaultValue: number): number {
349
- const parsedValue = parseInt(value, 10);
350
- return Number.isSafeInteger(parsedValue) ? parsedValue : defaultValue;
362
+ function parseSafeInteger(value: string): number {
363
+ const parsedValue = parseFloat(value);
364
+ if (!Number.isSafeInteger(parsedValue)) {
365
+ throw new Error(`Invalid integer config value '${value}'; expected a whole number`);
366
+ }
367
+ return parsedValue;
351
368
  }
352
369
 
353
370
  /**
354
- * Safely parses a floating point number from a string.
355
- * If the value is not a number, the default value is returned.
371
+ * Parses a string into a finite floating-point number, throwing if the value is not a finite number.
372
+ *
373
+ * Invalid input (e.g. `'abc'`, or an overflow to `Infinity`) throws rather than being silently
374
+ * swallowed, so a misconfigured value fails loudly instead of falling back to the config default.
356
375
  * @param value - The string value to parse
357
- * @param defaultValue - The default value to return
358
- * @returns Either parsed value or default value
376
+ * @returns The parsed number
359
377
  */
360
- function safeParseFloat(value: string, defaultValue: number): number {
378
+ function parseFiniteNumber(value: string): number {
361
379
  const parsedValue = parseFloat(value);
362
- return Number.isNaN(parsedValue) ? defaultValue : parsedValue;
380
+ if (!Number.isFinite(parsedValue)) {
381
+ throw new Error(`Invalid number config value '${value}'`);
382
+ }
383
+ return parsedValue;
363
384
  }
364
385
 
365
386
  /**