@lodestar/beacon-node 1.50.0-dev.c04a499311 → 1.50.0-dev.c24762bc60

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 (228) hide show
  1. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/index.js +13 -0
  3. package/lib/api/impl/beacon/index.js.map +1 -1
  4. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/state/index.js +28 -6
  6. package/lib/api/impl/beacon/state/index.js.map +1 -1
  7. package/lib/api/impl/debug/index.d.ts.map +1 -1
  8. package/lib/api/impl/debug/index.js +26 -18
  9. package/lib/api/impl/debug/index.js.map +1 -1
  10. package/lib/api/impl/validator/index.d.ts.map +1 -1
  11. package/lib/api/impl/validator/index.js +32 -0
  12. package/lib/api/impl/validator/index.js.map +1 -1
  13. package/lib/chain/archiveStore/archiveStore.d.ts +5 -0
  14. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  15. package/lib/chain/archiveStore/archiveStore.js +13 -23
  16. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  17. package/lib/chain/archiveStore/utils/pruneHistory.d.ts +1 -1
  18. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
  19. package/lib/chain/archiveStore/utils/pruneHistory.js +2 -1
  20. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  21. package/lib/chain/beaconProposerCache.d.ts +6 -0
  22. package/lib/chain/beaconProposerCache.d.ts.map +1 -1
  23. package/lib/chain/beaconProposerCache.js +16 -0
  24. package/lib/chain/beaconProposerCache.js.map +1 -1
  25. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  26. package/lib/chain/blocks/importBlock.js +14 -8
  27. package/lib/chain/blocks/importBlock.js.map +1 -1
  28. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  29. package/lib/chain/blocks/verifyBlock.js +6 -6
  30. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  31. package/lib/chain/chain.d.ts +5 -1
  32. package/lib/chain/chain.d.ts.map +1 -1
  33. package/lib/chain/chain.js +73 -20
  34. package/lib/chain/chain.js.map +1 -1
  35. package/lib/chain/interface.d.ts +3 -0
  36. package/lib/chain/interface.d.ts.map +1 -1
  37. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -2
  38. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  39. package/lib/chain/opPools/aggregatedAttestationPool.js +30 -8
  40. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  41. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  42. package/lib/chain/opPools/opPool.js +1 -23
  43. package/lib/chain/opPools/opPool.js.map +1 -1
  44. package/lib/chain/opPools/proposerPreferencesPool.d.ts +8 -4
  45. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -1
  46. package/lib/chain/opPools/proposerPreferencesPool.js +27 -12
  47. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -1
  48. package/lib/chain/opPools/utils.d.ts +11 -0
  49. package/lib/chain/opPools/utils.d.ts.map +1 -1
  50. package/lib/chain/opPools/utils.js +22 -0
  51. package/lib/chain/opPools/utils.js.map +1 -1
  52. package/lib/chain/options.d.ts +1 -0
  53. package/lib/chain/options.d.ts.map +1 -1
  54. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  55. package/lib/chain/prepareNextSlot.js +11 -3
  56. package/lib/chain/prepareNextSlot.js.map +1 -1
  57. package/lib/chain/produceBlock/produceBlockBody.d.ts +8 -0
  58. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  59. package/lib/chain/produceBlock/produceBlockBody.js +40 -28
  60. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  61. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -0
  62. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  63. package/lib/chain/seenCache/seenGossipBlockInput.js +21 -0
  64. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  65. package/lib/chain/shufflingCache.d.ts +18 -8
  66. package/lib/chain/shufflingCache.d.ts.map +1 -1
  67. package/lib/chain/shufflingCache.js +72 -18
  68. package/lib/chain/shufflingCache.js.map +1 -1
  69. package/lib/db/beacon.d.ts +4 -1
  70. package/lib/db/beacon.d.ts.map +1 -1
  71. package/lib/db/beacon.js +6 -1
  72. package/lib/db/beacon.js.map +1 -1
  73. package/lib/db/buckets.d.ts +3 -1
  74. package/lib/db/buckets.d.ts.map +1 -1
  75. package/lib/db/buckets.js +2 -0
  76. package/lib/db/buckets.js.map +1 -1
  77. package/lib/db/interface.d.ts +4 -1
  78. package/lib/db/interface.d.ts.map +1 -1
  79. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  80. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  81. package/lib/db/repositories/earliestAvailableSlot.d.ts +11 -0
  82. package/lib/db/repositories/earliestAvailableSlot.d.ts.map +1 -0
  83. package/lib/db/repositories/earliestAvailableSlot.js +19 -0
  84. package/lib/db/repositories/earliestAvailableSlot.js.map +1 -0
  85. package/lib/db/repositories/index.d.ts +1 -0
  86. package/lib/db/repositories/index.d.ts.map +1 -1
  87. package/lib/db/repositories/index.js +1 -0
  88. package/lib/db/repositories/index.js.map +1 -1
  89. package/lib/db/repositories/proposerPreferences.d.ts +14 -0
  90. package/lib/db/repositories/proposerPreferences.d.ts.map +1 -0
  91. package/lib/db/repositories/proposerPreferences.js +21 -0
  92. package/lib/db/repositories/proposerPreferences.js.map +1 -0
  93. package/lib/execution/engine/blobVersionedHashes.d.ts +9 -0
  94. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -0
  95. package/lib/execution/engine/blobVersionedHashes.js +74 -0
  96. package/lib/execution/engine/blobVersionedHashes.js.map +1 -0
  97. package/lib/execution/engine/http.d.ts +45 -13
  98. package/lib/execution/engine/http.d.ts.map +1 -1
  99. package/lib/execution/engine/http.js +236 -198
  100. package/lib/execution/engine/http.js.map +1 -1
  101. package/lib/execution/engine/index.d.ts +3 -2
  102. package/lib/execution/engine/index.d.ts.map +1 -1
  103. package/lib/execution/engine/index.js +33 -8
  104. package/lib/execution/engine/index.js.map +1 -1
  105. package/lib/execution/engine/interface.d.ts +1 -1
  106. package/lib/execution/engine/interface.d.ts.map +1 -1
  107. package/lib/execution/engine/jsonRpcTransport.d.ts +25 -0
  108. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -0
  109. package/lib/execution/engine/jsonRpcTransport.js +158 -0
  110. package/lib/execution/engine/jsonRpcTransport.js.map +1 -0
  111. package/lib/execution/engine/restHttpClient.d.ts +71 -0
  112. package/lib/execution/engine/restHttpClient.d.ts.map +1 -0
  113. package/lib/execution/engine/restHttpClient.js +201 -0
  114. package/lib/execution/engine/restHttpClient.js.map +1 -0
  115. package/lib/execution/engine/restTransport.d.ts +46 -0
  116. package/lib/execution/engine/restTransport.d.ts.map +1 -0
  117. package/lib/execution/engine/restTransport.js +399 -0
  118. package/lib/execution/engine/restTransport.js.map +1 -0
  119. package/lib/execution/engine/sszTypes.d.ts +1261 -0
  120. package/lib/execution/engine/sszTypes.d.ts.map +1 -0
  121. package/lib/execution/engine/sszTypes.js +216 -0
  122. package/lib/execution/engine/sszTypes.js.map +1 -0
  123. package/lib/execution/engine/transport.d.ts +39 -0
  124. package/lib/execution/engine/transport.d.ts.map +1 -0
  125. package/lib/execution/engine/transport.js +2 -0
  126. package/lib/execution/engine/transport.js.map +1 -0
  127. package/lib/execution/engine/types.d.ts +2 -0
  128. package/lib/execution/engine/types.d.ts.map +1 -1
  129. package/lib/execution/engine/types.js +24 -57
  130. package/lib/execution/engine/types.js.map +1 -1
  131. package/lib/execution/engine/utils.d.ts.map +1 -1
  132. package/lib/execution/engine/utils.js +9 -2
  133. package/lib/execution/engine/utils.js.map +1 -1
  134. package/lib/metrics/metrics/lodestar.d.ts +10 -0
  135. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  136. package/lib/metrics/metrics/lodestar.js +22 -0
  137. package/lib/metrics/metrics/lodestar.js.map +1 -1
  138. package/lib/network/core/events.d.ts +5 -1
  139. package/lib/network/core/events.d.ts.map +1 -1
  140. package/lib/network/core/events.js +8 -0
  141. package/lib/network/core/events.js.map +1 -1
  142. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  143. package/lib/network/processor/gossipHandlers.js +60 -64
  144. package/lib/network/processor/gossipHandlers.js.map +1 -1
  145. package/lib/node/nodejs.d.ts +3 -1
  146. package/lib/node/nodejs.d.ts.map +1 -1
  147. package/lib/node/nodejs.js +2 -1
  148. package/lib/node/nodejs.js.map +1 -1
  149. package/lib/node/options.d.ts +3 -2
  150. package/lib/node/options.d.ts.map +1 -1
  151. package/lib/node/options.js +2 -2
  152. package/lib/node/options.js.map +1 -1
  153. package/lib/sync/range/batch.d.ts +5 -5
  154. package/lib/sync/range/batch.d.ts.map +1 -1
  155. package/lib/sync/range/batch.js +11 -17
  156. package/lib/sync/range/batch.js.map +1 -1
  157. package/lib/sync/range/chain.d.ts +4 -4
  158. package/lib/sync/range/chain.d.ts.map +1 -1
  159. package/lib/sync/range/chain.js +9 -5
  160. package/lib/sync/range/chain.js.map +1 -1
  161. package/lib/sync/range/range.d.ts.map +1 -1
  162. package/lib/sync/range/range.js +25 -11
  163. package/lib/sync/range/range.js.map +1 -1
  164. package/lib/sync/unknownBlock.d.ts +5 -2
  165. package/lib/sync/unknownBlock.d.ts.map +1 -1
  166. package/lib/sync/unknownBlock.js +44 -20
  167. package/lib/sync/unknownBlock.js.map +1 -1
  168. package/lib/sync/utils/downloadByRange.d.ts +38 -14
  169. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  170. package/lib/sync/utils/downloadByRange.js +84 -39
  171. package/lib/sync/utils/downloadByRange.js.map +1 -1
  172. package/lib/util/asyncIterableToEvents.d.ts +10 -2
  173. package/lib/util/asyncIterableToEvents.d.ts.map +1 -1
  174. package/lib/util/asyncIterableToEvents.js +29 -3
  175. package/lib/util/asyncIterableToEvents.js.map +1 -1
  176. package/lib/util/metadata.d.ts.map +1 -1
  177. package/lib/util/metadata.js +2 -1
  178. package/lib/util/metadata.js.map +1 -1
  179. package/package.json +17 -16
  180. package/src/api/impl/beacon/index.ts +15 -0
  181. package/src/api/impl/beacon/state/index.ts +43 -6
  182. package/src/api/impl/debug/index.ts +28 -19
  183. package/src/api/impl/validator/index.ts +45 -0
  184. package/src/chain/archiveStore/archiveStore.ts +18 -24
  185. package/src/chain/archiveStore/utils/pruneHistory.ts +4 -1
  186. package/src/chain/beaconProposerCache.ts +19 -1
  187. package/src/chain/blocks/importBlock.ts +17 -7
  188. package/src/chain/blocks/verifyBlock.ts +7 -6
  189. package/src/chain/chain.ts +97 -19
  190. package/src/chain/interface.ts +3 -0
  191. package/src/chain/opPools/aggregatedAttestationPool.ts +34 -10
  192. package/src/chain/opPools/opPool.ts +1 -31
  193. package/src/chain/opPools/proposerPreferencesPool.ts +34 -11
  194. package/src/chain/opPools/utils.ts +31 -0
  195. package/src/chain/options.ts +1 -1
  196. package/src/chain/prepareNextSlot.ts +15 -3
  197. package/src/chain/produceBlock/produceBlockBody.ts +68 -34
  198. package/src/chain/seenCache/seenGossipBlockInput.ts +23 -0
  199. package/src/chain/shufflingCache.ts +84 -22
  200. package/src/db/beacon.ts +6 -0
  201. package/src/db/buckets.ts +2 -0
  202. package/src/db/interface.ts +4 -0
  203. package/src/db/repositories/earliestAvailableSlot.ts +19 -0
  204. package/src/db/repositories/index.ts +1 -0
  205. package/src/db/repositories/proposerPreferences.ts +23 -0
  206. package/src/execution/engine/blobVersionedHashes.ts +72 -0
  207. package/src/execution/engine/http.ts +304 -271
  208. package/src/execution/engine/index.ts +41 -7
  209. package/src/execution/engine/interface.ts +1 -1
  210. package/src/execution/engine/jsonRpcTransport.ts +247 -0
  211. package/src/execution/engine/restHttpClient.ts +269 -0
  212. package/src/execution/engine/restTransport.ts +544 -0
  213. package/src/execution/engine/sszTypes.ts +354 -0
  214. package/src/execution/engine/transport.ts +61 -0
  215. package/src/execution/engine/types.ts +34 -74
  216. package/src/execution/engine/utils.ts +12 -2
  217. package/src/metrics/metrics/lodestar.ts +23 -0
  218. package/src/network/core/events.ts +16 -1
  219. package/src/network/processor/gossipHandlers.ts +91 -77
  220. package/src/node/nodejs.ts +4 -0
  221. package/src/node/options.ts +10 -1
  222. package/src/sync/range/batch.ts +14 -19
  223. package/src/sync/range/chain.ts +12 -7
  224. package/src/sync/range/range.ts +26 -12
  225. package/src/sync/unknownBlock.ts +57 -21
  226. package/src/sync/utils/downloadByRange.ts +123 -58
  227. package/src/util/asyncIterableToEvents.ts +44 -5
  228. package/src/util/metadata.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAA6B,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAmC,cAAc,EAAC,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,8BAA8B,EAAC,CAAC;AAEtF,MAAM,MAAM,mBAAmB,GAC3B,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,uBAAuB,CAAC,GAC3C,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,uBAAuB,CAAC,GAC1C;IAAC,IAAI,EAAE,UAAU,CAAA;CAAC,CAAC;AACvB,eAAO,MAAM,0BAA0B,EAAE,mBAAoD,CAAC;AAE9F,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAGlB;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAWlB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAclB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAA6B,uBAAuB,EAAC,MAAM,WAAW,CAAC;AAG9E,OAAO,EAAmC,cAAc,EAAC,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,cAAc,EAAC,CAAC;AACtG,YAAY,EAAC,aAAa,EAAC,CAAC;AAE5B,MAAM,MAAM,mBAAmB,GAC3B,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,uBAAuB,CAAC,GAC3C,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,uBAAuB,CAAC,GAC1C;IAAC,IAAI,EAAE,UAAU,CAAA;CAAC,CAAC;AACvB,eAAO,MAAM,0BAA0B,EAAE,mBAAoD,CAAC;AAE9F,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAGlB;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAsClB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,sBAAsB,GAC9B,gBAAgB,CAclB"}
@@ -1,26 +1,51 @@
1
- import { fromHex, toPrintableUrl } from "@lodestar/utils";
1
+ import { LodestarError, fromHex, toPrintableUrl } from "@lodestar/utils";
2
+ import { getLodestarClientVersion } from "../../util/metadata.js";
2
3
  import { ExecutionEngineDisabled } from "./disabled.js";
3
- import { ExecutionEngineHttp, defaultExecutionEngineHttpOpts, } from "./http.js";
4
+ import { ExecutionEngineHttp, defaultExecutionEngineHttpOpts, engineApiModes, } from "./http.js";
4
5
  import { JsonRpcHttpClient } from "./jsonRpcHttpClient.js";
6
+ import { JsonRpcEngineTransport } from "./jsonRpcTransport.js";
5
7
  import { ExecutionEngineMockBackend } from "./mock.js";
8
+ import { EngineRestHttpClient } from "./restHttpClient.js";
9
+ import { RestEngineTransport, formatClientVersionHeader } from "./restTransport.js";
6
10
  import { ExecutionEngineMockJsonRpcClient } from "./utils.js";
7
- export { ExecutionEngineHttp, ExecutionEngineDisabled, defaultExecutionEngineHttpOpts };
11
+ export { ExecutionEngineHttp, ExecutionEngineDisabled, defaultExecutionEngineHttpOpts, engineApiModes };
8
12
  export const defaultExecutionEngineOpts = defaultExecutionEngineHttpOpts;
9
13
  export function getExecutionEngineFromBackend(backend, modules) {
10
14
  const rpc = new ExecutionEngineMockJsonRpcClient(backend);
11
- return new ExecutionEngineHttp(rpc, modules);
15
+ return new ExecutionEngineHttp({ jsonRpc: new JsonRpcEngineTransport(rpc) }, modules);
12
16
  }
13
17
  export function getExecutionEngineHttp(opts, modules) {
18
+ const jwtSecret = opts.jwtSecretHex ? fromHex(opts.jwtSecretHex) : undefined;
19
+ const metrics = modules.metrics?.executionEnginerHttpClient;
20
+ const engineApi = opts.engineApi ?? "auto";
21
+ if (engineApi === "ssz" && opts.urls.length !== 1) {
22
+ throw new LodestarError({ code: "ENGINE_REST_REQUIRES_SINGLE_URL", count: opts.urls.length });
23
+ }
24
+ if (engineApi === "auto" && opts.urls.length > 1) {
25
+ modules.logger.debug("Using JSON-RPC for multiple execution URLs", { count: opts.urls.length });
26
+ }
14
27
  const rpc = new JsonRpcHttpClient(opts.urls, {
15
28
  ...opts,
16
29
  signal: modules.signal,
17
- metrics: modules.metrics?.executionEnginerHttpClient,
18
- jwtSecret: opts.jwtSecretHex ? fromHex(opts.jwtSecretHex) : undefined,
30
+ metrics,
31
+ jwtSecret,
19
32
  jwtId: opts.jwtId,
20
33
  jwtVersion: opts.jwtVersion,
21
34
  });
22
- modules.logger.info("Execution client", { urls: opts.urls.map(toPrintableUrl).toString() });
23
- return new ExecutionEngineHttp(rpc, modules, opts);
35
+ const rest = engineApi === "json-rpc" || opts.urls.length !== 1
36
+ ? undefined
37
+ : new RestEngineTransport(new EngineRestHttpClient(opts.urls, {
38
+ signal: modules.signal,
39
+ timeout: opts.timeout,
40
+ retries: opts.retries,
41
+ retryDelay: opts.retryDelay,
42
+ jwtSecret,
43
+ jwtId: opts.jwtId,
44
+ clientVersion: formatClientVersionHeader(getLodestarClientVersion(opts)),
45
+ metrics,
46
+ }));
47
+ modules.logger.info("Execution client", { urls: opts.urls.map(toPrintableUrl).toString(), engineApi });
48
+ return new ExecutionEngineHttp({ jsonRpc: new JsonRpcEngineTransport(rpc), rest }, modules, opts);
24
49
  }
25
50
  export function initializeExecutionEngine(opts, modules) {
26
51
  switch (opts.mode) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/execution/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,mBAAmB,EAGnB,8BAA8B,GAC/B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,0BAA0B,EAA0B,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAC,gCAAgC,EAAiB,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAE,8BAA8B,EAAC,CAAC;AAMtF,MAAM,CAAC,MAAM,0BAA0B,GAAwB,8BAA8B,CAAC;AAE9F,MAAM,UAAU,6BAA6B,CAC3C,OAAuB,EACvB,OAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAA6B,EAC7B,OAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE;QAC3C,GAAG,IAAI;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,0BAA0B;QACpD,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,CAAC;IAC1F,OAAO,IAAI,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAyB,EACzB,OAA+B;IAE/B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,IAAI,uBAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM;YACT,OAAO,6BAA6B,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtF,KAAK,MAAM;YACT,OAAO,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/C;YACE,OAAO,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/execution/engine/index.ts"],"names":[],"mappings":"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"}
@@ -114,7 +114,7 @@ export interface IExecutionEngine {
114
114
  executionRequests?: ExecutionRequests;
115
115
  shouldOverrideBuilder?: boolean;
116
116
  }>;
117
- /** Amsterdam: payload bodies including the block access list (null if the EL no longer has it) */
117
+ /** Amsterdam: includes the block access list; REST returns null for bodies outside the Amsterdam era. */
118
118
  getPayloadBodiesByHashV2(blockHash: DATA[]): Promise<(ExecutionPayloadBodyV2 | null)[]>;
119
119
  getBlobs(fork: ForkPostFulu, versionedHashes: VersionedHashes, buffers?: Uint8Array[]): Promise<BlobAndProofV2[] | null>;
120
120
  getBlobs(fork: ForkPreFulu, versionedHashes: VersionedHashes, buffers?: Uint8Array[]): Promise<(BlobAndProof | null)[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/interface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ForkName } from "@lodestar/params";
2
+ import { ExecutionPayload, ExecutionRequests, Root, RootHex } from "@lodestar/types";
3
+ import { BlobAndProof } from "@lodestar/types/deneb";
4
+ import { BlobAndProofV2 } from "@lodestar/types/fulu";
5
+ import { ClientVersion, PayloadAttributes, PayloadId, VersionedHashes } from "./interface.js";
6
+ import { IJsonRpcHttpClient, JsonRpcHttpClientEventEmitter } from "./jsonRpcHttpClient.js";
7
+ import { ForkchoiceUpdatedResult, GetPayloadResult, IEngineTransport, PayloadStatusResult } from "./transport.js";
8
+ import { ExecutionPayloadBodyV2 } from "./types.js";
9
+ /**
10
+ * Legacy `engine_*` JSON-RPC methods
11
+ * https://github.com/ethereum/execution-apis/tree/main/src/engine
12
+ */
13
+ export declare class JsonRpcEngineTransport implements IEngineTransport {
14
+ private readonly rpc;
15
+ constructor(rpc: IJsonRpcHttpClient);
16
+ get emitter(): JsonRpcHttpClientEventEmitter;
17
+ newPayload(fork: ForkName, executionPayload: ExecutionPayload, versionedHashes?: VersionedHashes, parentBeaconBlockRoot?: Root, executionRequests?: ExecutionRequests): Promise<PayloadStatusResult>;
18
+ forkchoiceUpdated(fork: ForkName, headBlockHash: RootHex, safeBlockHash: RootHex, finalizedBlockHash: RootHex, payloadAttributes?: PayloadAttributes): Promise<ForkchoiceUpdatedResult>;
19
+ getPayload(fork: ForkName, payloadId: PayloadId): Promise<GetPayloadResult>;
20
+ getPayloadBodiesByHashV2(blockHashes: RootHex[]): Promise<(ExecutionPayloadBodyV2 | null)[]>;
21
+ getBlobsV1(versionedHashes: VersionedHashes): Promise<(BlobAndProof | null)[]>;
22
+ getBlobsV2(versionedHashes: VersionedHashes, buffers?: Uint8Array[]): Promise<BlobAndProofV2[] | null>;
23
+ getClientVersion(clientVersion: ClientVersion): Promise<ClientVersion[]>;
24
+ }
25
+ //# sourceMappingURL=jsonRpcTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonRpcTransport.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/jsonRpcTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAa,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAC,kBAAkB,EAAE,6BAA6B,EAAU,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAC,uBAAuB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAChH,OAAO,EAIL,sBAAsB,EAYvB,MAAM,YAAY,CAAC;AAmBpB;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAhC,YAA6B,GAAG,EAAE,kBAAkB,EAAI;IAExD,IAAI,OAAO,IAAI,6BAA6B,CAE3C;IAEK,UAAU,CACd,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,gBAAgB,EAClC,eAAe,CAAC,EAAE,eAAe,EACjC,qBAAqB,CAAC,EAAE,IAAI,EAC5B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,mBAAmB,CAAC,CA6C9B;IAEK,iBAAiB,CACrB,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,EACtB,kBAAkB,EAAE,OAAO,EAC3B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAoBlC;IAEK,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BhF;IAEK,wBAAwB,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,CAAC,CAQjG;IAEK,UAAU,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAenF;IAEK,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAsC3G;IAEK,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAY7E;CACF"}
@@ -0,0 +1,158 @@
1
+ import { ForkName, ForkSeq } from "@lodestar/params";
2
+ import { strip0xPrefix } from "@lodestar/utils";
3
+ import { ClientCode } from "./interface.js";
4
+ import { BLOB_AND_PROOF_V2_RPC_BYTES, assertReqSizeLimit, deserializeBlobAndProofs, deserializeBlobAndProofsV2, deserializeBlobAndProofsV2IntoBytes, deserializeExecutionPayloadBodyV2, parseExecutionPayload, serializeBeaconBlockRoot, serializeExecutionPayload, serializeExecutionRequests, serializePayloadAttributes, serializeVersionedHashes, } from "./types.js";
5
+ import { bytesToData } from "./utils.js";
6
+ /**
7
+ * Maximum number of version hashes that can be sent in a getBlobs request
8
+ * Clients must support at least 128 versionedHashes, so we avoid sending more
9
+ * https://github.com/ethereum/execution-apis/blob/main/src/engine/cancun.md#specification-3
10
+ */
11
+ const MAX_VERSIONED_HASHES = 128;
12
+ // Define static options once to prevent extra allocations
13
+ const notifyNewPayloadOpts = { routeId: "notifyNewPayload" };
14
+ const forkchoiceUpdatedOpts = { routeId: "forkchoiceUpdated" };
15
+ const getPayloadOpts = { routeId: "getPayload" };
16
+ const getPayloadBodiesByHashOpts = { routeId: "getPayloadBodiesByHash" };
17
+ const getBlobsV1Opts = { routeId: "getBlobsV1" };
18
+ const getBlobsV2Opts = { routeId: "getBlobsV2" };
19
+ const getClientVersionOpts = { routeId: "getClientVersion" };
20
+ /**
21
+ * Legacy `engine_*` JSON-RPC methods
22
+ * https://github.com/ethereum/execution-apis/tree/main/src/engine
23
+ */
24
+ export class JsonRpcEngineTransport {
25
+ rpc;
26
+ constructor(rpc) {
27
+ this.rpc = rpc;
28
+ }
29
+ get emitter() {
30
+ return this.rpc.emitter;
31
+ }
32
+ async newPayload(fork, executionPayload, versionedHashes, parentBeaconBlockRoot, executionRequests) {
33
+ const serializedExecutionPayload = serializeExecutionPayload(fork, executionPayload);
34
+ if (ForkSeq[fork] >= ForkSeq.deneb) {
35
+ if (versionedHashes === undefined) {
36
+ throw Error(`versionedHashes required in notifyNewPayload for fork=${fork}`);
37
+ }
38
+ if (parentBeaconBlockRoot === undefined) {
39
+ throw Error(`parentBlockRoot required in notifyNewPayload for fork=${fork}`);
40
+ }
41
+ const serializedVersionedHashes = serializeVersionedHashes(versionedHashes);
42
+ const serializedParentBeaconBlockRoot = serializeBeaconBlockRoot(parentBeaconBlockRoot);
43
+ if (ForkSeq[fork] >= ForkSeq.electra) {
44
+ if (executionRequests === undefined) {
45
+ throw Error(`executionRequests required in notifyNewPayload for fork=${fork}`);
46
+ }
47
+ const method = ForkSeq[fork] >= ForkSeq.gloas ? "engine_newPayloadV5" : "engine_newPayloadV4";
48
+ return this.rpc.fetchWithRetries({
49
+ method,
50
+ params: [
51
+ serializedExecutionPayload,
52
+ serializedVersionedHashes,
53
+ serializedParentBeaconBlockRoot,
54
+ serializeExecutionRequests(fork, executionRequests),
55
+ ],
56
+ }, notifyNewPayloadOpts);
57
+ }
58
+ const method = "engine_newPayloadV3";
59
+ return this.rpc.fetchWithRetries({ method, params: [serializedExecutionPayload, serializedVersionedHashes, serializedParentBeaconBlockRoot] }, notifyNewPayloadOpts);
60
+ }
61
+ const method = ForkSeq[fork] >= ForkSeq.capella ? "engine_newPayloadV2" : "engine_newPayloadV1";
62
+ return this.rpc.fetchWithRetries({ method, params: [serializedExecutionPayload] }, notifyNewPayloadOpts);
63
+ }
64
+ async forkchoiceUpdated(fork, headBlockHash, safeBlockHash, finalizedBlockHash, payloadAttributes) {
65
+ const method = ForkSeq[fork] >= ForkSeq.gloas
66
+ ? "engine_forkchoiceUpdatedV4"
67
+ : ForkSeq[fork] >= ForkSeq.deneb
68
+ ? "engine_forkchoiceUpdatedV3"
69
+ : ForkSeq[fork] >= ForkSeq.capella
70
+ ? "engine_forkchoiceUpdatedV2"
71
+ : "engine_forkchoiceUpdatedV1";
72
+ const payloadAttributesRpc = payloadAttributes ? serializePayloadAttributes(payloadAttributes) : undefined;
73
+ // If we are just fcUing and not asking execution for payload, retry is not required
74
+ // and we can move on, as the next fcU will be issued soon on the new slot
75
+ const fcUReqOpts = payloadAttributes !== undefined ? forkchoiceUpdatedOpts : { ...forkchoiceUpdatedOpts, retries: 0 };
76
+ const { payloadStatus, payloadId } = await this.rpc.fetchWithRetries({ method, params: [{ headBlockHash, safeBlockHash, finalizedBlockHash }, payloadAttributesRpc] }, fcUReqOpts);
77
+ return { payloadStatus, payloadId: payloadId && payloadId !== "0x" ? payloadId : null };
78
+ }
79
+ async getPayload(fork, payloadId) {
80
+ let method;
81
+ switch (fork) {
82
+ case ForkName.phase0:
83
+ case ForkName.altair:
84
+ case ForkName.bellatrix:
85
+ method = "engine_getPayloadV1";
86
+ break;
87
+ case ForkName.capella:
88
+ method = "engine_getPayloadV2";
89
+ break;
90
+ case ForkName.deneb:
91
+ method = "engine_getPayloadV3";
92
+ break;
93
+ case ForkName.electra:
94
+ method = "engine_getPayloadV4";
95
+ break;
96
+ case ForkName.fulu:
97
+ method = "engine_getPayloadV5";
98
+ break;
99
+ default:
100
+ method = "engine_getPayloadV6";
101
+ break;
102
+ }
103
+ const payloadResponse = await this.rpc.fetchWithRetries({ method, params: [payloadId] }, getPayloadOpts);
104
+ return parseExecutionPayload(fork, payloadResponse);
105
+ }
106
+ async getPayloadBodiesByHashV2(blockHashes) {
107
+ const method = "engine_getPayloadBodiesByHashV2";
108
+ assertReqSizeLimit(blockHashes.length, 32);
109
+ const response = await this.rpc.fetchWithRetries({ method, params: [blockHashes] }, getPayloadBodiesByHashOpts);
110
+ return response.map(deserializeExecutionPayloadBodyV2);
111
+ }
112
+ async getBlobsV1(versionedHashes) {
113
+ assertReqSizeLimit(versionedHashes.length, MAX_VERSIONED_HASHES);
114
+ const versionedHashesHex = versionedHashes.map(bytesToData);
115
+ const response = await this.rpc.fetchWithRetries({ method: "engine_getBlobsV1", params: [versionedHashesHex] }, getBlobsV1Opts);
116
+ if (response.length !== versionedHashesHex.length) {
117
+ throw Error(`Invalid engine_getBlobsV1 response length=${response.length} versionedHashes=${versionedHashesHex.length}`);
118
+ }
119
+ return response.map(deserializeBlobAndProofs);
120
+ }
121
+ async getBlobsV2(versionedHashes, buffers) {
122
+ assertReqSizeLimit(versionedHashes.length, MAX_VERSIONED_HASHES);
123
+ const versionedHashesHex = versionedHashes.map(bytesToData);
124
+ if (buffers) {
125
+ // Callers preallocate one buffer per max blobs of the epoch, only the first entries are used
126
+ if (buffers.length < versionedHashesHex.length) {
127
+ throw Error(`Not enough buffers length=${buffers.length} versionedHashes=${versionedHashesHex.length}`);
128
+ }
129
+ for (const [i, buffer] of buffers.entries()) {
130
+ if (buffer.length !== BLOB_AND_PROOF_V2_RPC_BYTES) {
131
+ throw Error(`Invalid buffer[${i}] length=${buffer.length} expected=${BLOB_AND_PROOF_V2_RPC_BYTES}`);
132
+ }
133
+ }
134
+ }
135
+ const response = await this.rpc.fetchWithRetries({ method: "engine_getBlobsV2", params: [versionedHashesHex] }, getBlobsV2Opts);
136
+ // engine_getBlobsV2 does not return partial responses. It returns null if any blob is not found
137
+ if (response == null) {
138
+ return null;
139
+ }
140
+ if (response.length !== versionedHashesHex.length) {
141
+ throw Error(`Invalid engine_getBlobsV2 response length=${response.length} versionedHashes=${versionedHashesHex.length}`);
142
+ }
143
+ if (buffers) {
144
+ // getBlobsV2() is designed to called once per slot so we expect to have buffers
145
+ return response.map((data, i) => deserializeBlobAndProofsV2IntoBytes(data, buffers[i]));
146
+ }
147
+ return response.map(deserializeBlobAndProofsV2);
148
+ }
149
+ async getClientVersion(clientVersion) {
150
+ const method = "engine_getClientVersionV1";
151
+ const response = await this.rpc.fetchWithRetries({ method, params: [{ ...clientVersion, commit: `0x${clientVersion.commit}` }] }, getClientVersionOpts);
152
+ return response.map((cv) => {
153
+ const code = cv.code in ClientCode ? ClientCode[cv.code] : ClientCode.XX;
154
+ return { code, name: cv.name, version: cv.version, commit: strip0xPrefix(cv.commit) };
155
+ });
156
+ }
157
+ }
158
+ //# sourceMappingURL=jsonRpcTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonRpcTransport.js","sourceRoot":"","sources":["../../../src/execution/engine/jsonRpcTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { LodestarError } from "@lodestar/utils";
2
+ import { JsonRpcHttpClientEventEmitter, JsonRpcHttpClientMetrics, ReqOpts } from "./jsonRpcHttpClient.js";
3
+ import { ExecutionForkName } from "./sszTypes.js";
4
+ export declare const ENGINE_REST_BASE_PATH = "/engine/v1";
5
+ export declare const EXECUTION_VERSION_HEADER = "Eth-Execution-Version";
6
+ export declare const CLIENT_VERSION_HEADER = "X-Engine-Client-Version";
7
+ export declare const MEDIA_TYPE_SSZ = "application/octet-stream";
8
+ export declare const MEDIA_TYPE_JSON = "application/json";
9
+ export type EngineRestRequest = {
10
+ method: "GET" | "POST";
11
+ /** Path relative to the `/engine/v1` base path */
12
+ path: string;
13
+ query?: Record<string, string | number>;
14
+ /** Sets the `Eth-Execution-Version` header on fork-scoped endpoints */
15
+ executionFork?: ExecutionForkName;
16
+ /** SSZ encoded request body */
17
+ body?: Uint8Array;
18
+ responseType: "ssz" | "json";
19
+ };
20
+ export type EngineRestResponse = {
21
+ status: number;
22
+ /** Empty on `204 No Content` */
23
+ body: Uint8Array;
24
+ };
25
+ /** Non-2xx response, `type` and `detail` are taken from the problem+json body when present */
26
+ export declare class EngineRestError extends Error {
27
+ readonly status: number;
28
+ readonly type: string | null;
29
+ readonly detail: string | null;
30
+ constructor(status: number, type: string | null, detail: string | null, routeId: string);
31
+ }
32
+ export declare class EngineRestResponseError extends LodestarError<{
33
+ code: "ENGINE_REST_INVALID_RESPONSE";
34
+ routeId: string;
35
+ reason: string;
36
+ }> {
37
+ constructor(routeId: string, reason: string);
38
+ }
39
+ export type EngineRestHttpClientOpts = {
40
+ signal?: AbortSignal;
41
+ timeout?: number;
42
+ retries?: number;
43
+ retryDelay?: number;
44
+ /** HS256 secret, a fresh token is generated for every request as ELs check `iat` freshness */
45
+ jwtSecret?: Uint8Array;
46
+ /** Included as `id` claim if `jwtSecret` is provided */
47
+ jwtId?: string;
48
+ /** Value of the `X-Engine-Client-Version` header, the `clv` JWT claim is removed in the REST API */
49
+ clientVersion?: string;
50
+ metrics?: JsonRpcHttpClientMetrics | null;
51
+ };
52
+ /**
53
+ * HTTP/1.1 client for the REST engine API. Only transport concerns live here, encoding of
54
+ * request and response bodies is up to the caller.
55
+ */
56
+ export declare class EngineRestHttpClient {
57
+ private readonly urls;
58
+ private readonly opts;
59
+ readonly emitter: JsonRpcHttpClientEventEmitter;
60
+ private readonly metrics;
61
+ constructor(urls: string[], opts?: EngineRestHttpClientOpts);
62
+ /** Perform request with retries, emitting response and error events consumed by the engine state tracking */
63
+ request(req: EngineRestRequest, opts?: ReqOpts): Promise<EngineRestResponse>;
64
+ /** Perform request with retries without emitting events, used to probe support for the REST API */
65
+ requestWithRetries(req: EngineRestRequest, opts?: ReqOpts): Promise<EngineRestResponse>;
66
+ private requestAnyUrl;
67
+ private requestOneUrl;
68
+ }
69
+ /** Client errors are deterministic apart from timeouts and rate limits, transport failures and server errors are retried */
70
+ export declare function isRetryableEngineRestError(e: Error): boolean;
71
+ //# sourceMappingURL=restHttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restHttpClient.d.ts","sourceRoot":"","sources":["../../../src/execution/engine/restHttpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ import { ErrorAborted, FetchError, LodestarError, TimeoutError, fetch, isValidHttpUrl, retry } from "@lodestar/utils";
2
+ import { JsonRpcHttpClientEvent, JsonRpcHttpClientEventEmitter, } from "./jsonRpcHttpClient.js";
3
+ import { encodeJwtToken } from "./jwt.js";
4
+ export const ENGINE_REST_BASE_PATH = "/engine/v1";
5
+ export const EXECUTION_VERSION_HEADER = "Eth-Execution-Version";
6
+ export const CLIENT_VERSION_HEADER = "X-Engine-Client-Version";
7
+ export const MEDIA_TYPE_SSZ = "application/octet-stream";
8
+ export const MEDIA_TYPE_JSON = "application/json";
9
+ const REQUEST_TIMEOUT = 30 * 1000;
10
+ /** Limits the amount of error detail printed with REST errors */
11
+ const MAX_ERROR_DETAIL_LENGTH = 500;
12
+ /** Non-2xx response, `type` and `detail` are taken from the problem+json body when present */
13
+ export class EngineRestError extends Error {
14
+ status;
15
+ type;
16
+ detail;
17
+ constructor(status, type, detail, routeId) {
18
+ super(`Engine REST error: status=${status} type=${type ?? "unknown"}${detail ? ` detail=${detail}` : ""}, ${routeId}`);
19
+ this.status = status;
20
+ this.type = type;
21
+ this.detail = detail;
22
+ }
23
+ }
24
+ export class EngineRestResponseError extends LodestarError {
25
+ constructor(routeId, reason) {
26
+ super({ code: "ENGINE_REST_INVALID_RESPONSE", routeId, reason }, `Invalid engine REST response: ${reason}, ${routeId}`);
27
+ }
28
+ }
29
+ /**
30
+ * HTTP/1.1 client for the REST engine API. Only transport concerns live here, encoding of
31
+ * request and response bodies is up to the caller.
32
+ */
33
+ export class EngineRestHttpClient {
34
+ urls;
35
+ opts;
36
+ emitter = new JsonRpcHttpClientEventEmitter();
37
+ metrics;
38
+ constructor(urls, opts = {}) {
39
+ this.urls = urls;
40
+ this.opts = opts;
41
+ if (urls.length === 0) {
42
+ throw Error("No urls provided to EngineRestHttpClient");
43
+ }
44
+ for (const [i, url] of urls.entries()) {
45
+ if (!isValidHttpUrl(url)) {
46
+ throw Error(`EngineRestHttpClient.urls[${i}] must be a valid URL: ${url}`);
47
+ }
48
+ }
49
+ this.metrics = opts.metrics ?? null;
50
+ }
51
+ /** Perform request with retries, emitting response and error events consumed by the engine state tracking */
52
+ async request(req, opts) {
53
+ try {
54
+ const response = await this.requestWithRetries(req, opts);
55
+ this.emitter.emit(JsonRpcHttpClientEvent.RESPONSE, { payload: req, response });
56
+ return response;
57
+ }
58
+ catch (error) {
59
+ this.emitter.emit(JsonRpcHttpClientEvent.ERROR, { payload: req, error: error });
60
+ throw error;
61
+ }
62
+ }
63
+ /** Perform request with retries without emitting events, used to probe support for the REST API */
64
+ async requestWithRetries(req, opts) {
65
+ const routeId = opts?.routeId ?? "unknown";
66
+ return retry(() => this.requestAnyUrl(req, opts), {
67
+ retries: opts?.retries ?? this.opts.retries ?? 0,
68
+ retryDelay: opts?.retryDelay ?? this.opts.retryDelay,
69
+ shouldRetry: opts?.shouldRetry ?? isRetryableEngineRestError,
70
+ signal: this.opts.signal,
71
+ onRetry: () => {
72
+ this.metrics?.retryCount.inc({ routeId });
73
+ },
74
+ });
75
+ }
76
+ async requestAnyUrl(req, opts) {
77
+ const routeId = opts?.routeId ?? "unknown";
78
+ let lastError = null;
79
+ for (let i = 0; i < this.urls.length; i++) {
80
+ if (i > 0) {
81
+ this.metrics?.requestUsedFallbackUrl.inc({ routeId });
82
+ }
83
+ try {
84
+ return await this.requestOneUrl(this.urls[i], req, opts);
85
+ }
86
+ catch (e) {
87
+ if (!isRetryableEngineRestError(e)) {
88
+ throw e;
89
+ }
90
+ lastError = e;
91
+ }
92
+ }
93
+ throw lastError ?? Error("Unknown error");
94
+ }
95
+ async requestOneUrl(baseUrl, req, opts) {
96
+ const controller = new AbortController();
97
+ const timeout = setTimeout(() => controller.abort(), opts?.timeout ?? this.opts.timeout ?? REQUEST_TIMEOUT);
98
+ // Not AbortSignal.any(), Node retains every composite until the long-lived parent signal aborts
99
+ const onParentSignalAbort = () => controller.abort();
100
+ this.opts.signal?.addEventListener("abort", onParentSignalAbort, { once: true });
101
+ if (this.opts.signal?.aborted) {
102
+ controller.abort();
103
+ }
104
+ const routeId = opts?.routeId ?? "unknown";
105
+ const timer = this.metrics?.requestTime.startTimer({ routeId });
106
+ this.metrics?.activeRequests.inc({ routeId }, 1);
107
+ try {
108
+ const url = new URL(`${ENGINE_REST_BASE_PATH}${req.path}`, baseUrl);
109
+ for (const [key, value] of Object.entries(req.query ?? {})) {
110
+ url.searchParams.set(key, String(value));
111
+ }
112
+ const headers = {
113
+ Accept: req.responseType === "ssz" ? MEDIA_TYPE_SSZ : MEDIA_TYPE_JSON,
114
+ };
115
+ if (req.body !== undefined) {
116
+ headers["Content-Type"] = MEDIA_TYPE_SSZ;
117
+ }
118
+ if (req.executionFork !== undefined) {
119
+ headers[EXECUTION_VERSION_HEADER] = req.executionFork;
120
+ }
121
+ if (this.opts.clientVersion !== undefined) {
122
+ headers[CLIENT_VERSION_HEADER] = this.opts.clientVersion;
123
+ }
124
+ if (this.opts.jwtSecret) {
125
+ const jwtClaim = { iat: Math.floor(Date.now() / 1000), id: this.opts.jwtId };
126
+ headers.Authorization = `Bearer ${encodeJwtToken(jwtClaim, this.opts.jwtSecret)}`;
127
+ }
128
+ this.metrics?.requestBytes.inc({ routeId }, req.body?.length ?? 0);
129
+ const res = await fetch(url, {
130
+ method: req.method,
131
+ body: req.body,
132
+ headers,
133
+ signal: controller.signal,
134
+ });
135
+ const streamTimer = this.metrics?.streamTime.startTimer({ routeId });
136
+ let body;
137
+ try {
138
+ body = new Uint8Array(await res.arrayBuffer());
139
+ }
140
+ catch (e) {
141
+ throw new FetchError(url, e);
142
+ }
143
+ finally {
144
+ streamTimer?.();
145
+ }
146
+ this.metrics?.responseBytes.inc({ routeId }, body.length);
147
+ if (!res.ok) {
148
+ const { type, detail } = parseProblemBody(body);
149
+ throw new EngineRestError(res.status, type, detail, routeId);
150
+ }
151
+ if (res.status !== 200 && res.status !== 204) {
152
+ throw new EngineRestResponseError(routeId, `Unexpected status ${res.status}`);
153
+ }
154
+ const contentType = res.headers.get("content-type")?.split(";", 1)[0].trim().toLowerCase();
155
+ const expectedContentType = req.responseType === "ssz" ? MEDIA_TYPE_SSZ : MEDIA_TYPE_JSON;
156
+ if (res.status !== 204 && contentType !== expectedContentType) {
157
+ throw new EngineRestResponseError(routeId, `Unexpected content type ${contentType}`);
158
+ }
159
+ return { status: res.status, body };
160
+ }
161
+ catch (e) {
162
+ this.metrics?.requestErrors.inc({ routeId });
163
+ if (controller.signal.aborted) {
164
+ if (this.opts.signal?.aborted) {
165
+ throw new ErrorAborted("request");
166
+ }
167
+ throw new TimeoutError("request");
168
+ }
169
+ throw e;
170
+ }
171
+ finally {
172
+ timer?.();
173
+ this.metrics?.activeRequests.dec({ routeId }, 1);
174
+ clearTimeout(timeout);
175
+ this.opts.signal?.removeEventListener("abort", onParentSignalAbort);
176
+ }
177
+ }
178
+ }
179
+ /** Client errors are deterministic apart from timeouts and rate limits, transport failures and server errors are retried */
180
+ export function isRetryableEngineRestError(e) {
181
+ return ((e instanceof EngineRestError && (e.status >= 500 || e.status === 408 || e.status === 429)) ||
182
+ e instanceof TimeoutError ||
183
+ (e instanceof FetchError && e.type !== "input" && e.type !== "aborted"));
184
+ }
185
+ function parseProblemBody(body) {
186
+ const text = new TextDecoder().decode(body);
187
+ try {
188
+ const problem = JSON.parse(text);
189
+ if (typeof problem === "object" && problem !== null) {
190
+ return {
191
+ type: "type" in problem && typeof problem.type === "string" ? problem.type : null,
192
+ detail: ("detail" in problem && typeof problem.detail === "string" ? problem.detail : text).slice(0, MAX_ERROR_DETAIL_LENGTH) || null,
193
+ };
194
+ }
195
+ }
196
+ catch {
197
+ // Legacy endpoints and proxies may return plain text instead of a problem document.
198
+ }
199
+ return { type: null, detail: text.slice(0, MAX_ERROR_DETAIL_LENGTH) || null };
200
+ }
201
+ //# sourceMappingURL=restHttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restHttpClient.js","sourceRoot":"","sources":["../../../src/execution/engine/restHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACpH,OAAO,EACL,sBAAsB,EACtB,6BAA6B,GAG9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAW,cAAc,EAAC,MAAM,UAAU,CAAC;AAGlD,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,0BAA0B,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAElD,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AAClC,iEAAiE;AACjE,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAoBpC,8FAA8F;AAC9F,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B,MAAM;IACN,IAAI;IACJ,MAAM;IAHjB,YACW,MAAc,EACd,IAAmB,EACnB,MAAqB,EAC9B,OAAe;QAEf,KAAK,CACH,6BAA6B,MAAM,SAAS,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,EAAE,CAChH,CAAC;sBAPO,MAAM;oBACN,IAAI;sBACJ,MAAM;IAMjB,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAI3C;IACA,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CACH,EAAC,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,MAAM,EAAC,EACvD,iCAAiC,MAAM,KAAK,OAAO,EAAE,CACtD,CAAC;IACJ,CAAC;CACF;AAgBD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAKZ,IAAI;IACJ,IAAI;IALd,OAAO,GAAG,IAAI,6BAA6B,EAAE,CAAC;IACtC,OAAO,CAAkC;IAE1D,YACmB,IAAc,EACd,IAAI,GAA6B,EAAE;oBADnC,IAAI;oBACJ,IAAI;QAErB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,CAAC,6BAA6B,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,6GAA6G;IAC7G,KAAK,CAAC,OAAO,CAAC,GAAsB,EAAE,IAAc;QAClD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;YAC7E,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAc,EAAC,CAAC,CAAC;YACvF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,mGAAmG;IACnG,KAAK,CAAC,kBAAkB,CAAC,GAAsB,EAAE,IAAc;QAC7D,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;QAC3C,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;YAChD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC;YAChD,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;YACpD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,0BAA0B;YAC5D,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAsB,EAAE,IAAc;QAChE,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;QAC3C,IAAI,SAAS,GAAiB,IAAI,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,0BAA0B,CAAC,CAAU,CAAC,EAAE,CAAC;oBAC5C,MAAM,CAAC,CAAC;gBACV,CAAC;gBACD,SAAS,GAAG,CAAU,CAAC;YACzB,CAAC;QACH,CAAC;QACD,MAAM,SAAS,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,GAAsB,EAAE,IAAc;QACjF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;QAE5G,gGAAgG;QAChG,MAAM,mBAAmB,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,EAAE,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,qBAAqB,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YACpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,OAAO,GAA2B;gBACtC,MAAM,EAAE,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe;aACtE,CAAC;YACF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;YAC3C,CAAC;YACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,CAAC,wBAAwB,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3D,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAa,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC;gBACrF,OAAO,CAAC,aAAa,GAAG,UAAU,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpF,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;YAEjE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAA4B;gBACtC,OAAO;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;YACnE,IAAI,IAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;oBAAS,CAAC;gBACT,WAAW,EAAE,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAExD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7C,MAAM,IAAI,uBAAuB,CAAC,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3F,MAAM,mBAAmB,GAAG,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1F,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;gBAC9D,MAAM,IAAI,uBAAuB,CAAC,OAAO,EAAE,2BAA2B,WAAW,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,OAAO,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC;YAC3C,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC9B,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,EAAC,OAAO,EAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF;AAED,4HAA4H;AAC5H,MAAM,UAAU,0BAA0B,CAAC,CAAQ;IACjD,OAAO,CACL,CAAC,CAAC,YAAY,eAAe,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;QAC3F,CAAC,YAAY,YAAY;QACzB,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAgB;IACxC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,MAAM,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACjF,MAAM,EACJ,CAAC,QAAQ,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CACvF,CAAC,EACD,uBAAuB,CACxB,IAAI,IAAI;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oFAAoF;IACtF,CAAC;IACD,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,IAAI,IAAI,EAAC,CAAC;AAC9E,CAAC"}