@mikeatlast/ponder 0.16.1-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/CHANGELOG.md +3415 -0
  2. package/README.md +186 -0
  3. package/dist/esm/bin/commands/codegen.js +46 -0
  4. package/dist/esm/bin/commands/codegen.js.map +1 -0
  5. package/dist/esm/bin/commands/createViews.js +196 -0
  6. package/dist/esm/bin/commands/createViews.js.map +1 -0
  7. package/dist/esm/bin/commands/dev.js +430 -0
  8. package/dist/esm/bin/commands/dev.js.map +1 -0
  9. package/dist/esm/bin/commands/list.js +148 -0
  10. package/dist/esm/bin/commands/list.js.map +1 -0
  11. package/dist/esm/bin/commands/prune.js +223 -0
  12. package/dist/esm/bin/commands/prune.js.map +1 -0
  13. package/dist/esm/bin/commands/serve.js +198 -0
  14. package/dist/esm/bin/commands/serve.js.map +1 -0
  15. package/dist/esm/bin/commands/start.js +253 -0
  16. package/dist/esm/bin/commands/start.js.map +1 -0
  17. package/dist/esm/bin/isolatedController.js +200 -0
  18. package/dist/esm/bin/isolatedController.js.map +1 -0
  19. package/dist/esm/bin/isolatedWorker.js +146 -0
  20. package/dist/esm/bin/isolatedWorker.js.map +1 -0
  21. package/dist/esm/bin/ponder.js +137 -0
  22. package/dist/esm/bin/ponder.js.map +1 -0
  23. package/dist/esm/bin/utils/codegen.js +25 -0
  24. package/dist/esm/bin/utils/codegen.js.map +1 -0
  25. package/dist/esm/bin/utils/exit.js +100 -0
  26. package/dist/esm/bin/utils/exit.js.map +1 -0
  27. package/dist/esm/build/config.js +745 -0
  28. package/dist/esm/build/config.js.map +1 -0
  29. package/dist/esm/build/factory.js +82 -0
  30. package/dist/esm/build/factory.js.map +1 -0
  31. package/dist/esm/build/index.js +567 -0
  32. package/dist/esm/build/index.js.map +1 -0
  33. package/dist/esm/build/plugin.js +53 -0
  34. package/dist/esm/build/plugin.js.map +1 -0
  35. package/dist/esm/build/pre.js +83 -0
  36. package/dist/esm/build/pre.js.map +1 -0
  37. package/dist/esm/build/schema.js +202 -0
  38. package/dist/esm/build/schema.js.map +1 -0
  39. package/dist/esm/build/stacktrace.js +137 -0
  40. package/dist/esm/build/stacktrace.js.map +1 -0
  41. package/dist/esm/client/index.js +441 -0
  42. package/dist/esm/client/index.js.map +1 -0
  43. package/dist/esm/config/address.js +2 -0
  44. package/dist/esm/config/address.js.map +1 -0
  45. package/dist/esm/config/eventFilter.js +2 -0
  46. package/dist/esm/config/eventFilter.js.map +1 -0
  47. package/dist/esm/config/index.js +2 -0
  48. package/dist/esm/config/index.js.map +1 -0
  49. package/dist/esm/config/utilityTypes.js +2 -0
  50. package/dist/esm/config/utilityTypes.js.map +1 -0
  51. package/dist/esm/database/actions.js +445 -0
  52. package/dist/esm/database/actions.js.map +1 -0
  53. package/dist/esm/database/index.js +604 -0
  54. package/dist/esm/database/index.js.map +1 -0
  55. package/dist/esm/database/queryBuilder.js +314 -0
  56. package/dist/esm/database/queryBuilder.js.map +1 -0
  57. package/dist/esm/drizzle/bigint.js +38 -0
  58. package/dist/esm/drizzle/bigint.js.map +1 -0
  59. package/dist/esm/drizzle/bytes.js +47 -0
  60. package/dist/esm/drizzle/bytes.js.map +1 -0
  61. package/dist/esm/drizzle/hex.js +40 -0
  62. package/dist/esm/drizzle/hex.js.map +1 -0
  63. package/dist/esm/drizzle/index.js +28 -0
  64. package/dist/esm/drizzle/index.js.map +1 -0
  65. package/dist/esm/drizzle/json.js +123 -0
  66. package/dist/esm/drizzle/json.js.map +1 -0
  67. package/dist/esm/drizzle/kit/index.js +927 -0
  68. package/dist/esm/drizzle/kit/index.js.map +1 -0
  69. package/dist/esm/drizzle/onchain.js +184 -0
  70. package/dist/esm/drizzle/onchain.js.map +1 -0
  71. package/dist/esm/drizzle/text.js +61 -0
  72. package/dist/esm/drizzle/text.js.map +1 -0
  73. package/dist/esm/graphql/graphiql.html.js +59 -0
  74. package/dist/esm/graphql/graphiql.html.js.map +1 -0
  75. package/dist/esm/graphql/index.js +934 -0
  76. package/dist/esm/graphql/index.js.map +1 -0
  77. package/dist/esm/graphql/json.js +42 -0
  78. package/dist/esm/graphql/json.js.map +1 -0
  79. package/dist/esm/graphql/middleware.js +83 -0
  80. package/dist/esm/graphql/middleware.js.map +1 -0
  81. package/dist/esm/index.js +9 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/indexing/addStackTrace.js +54 -0
  84. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  85. package/dist/esm/indexing/client.js +675 -0
  86. package/dist/esm/indexing/client.js.map +1 -0
  87. package/dist/esm/indexing/index.js +663 -0
  88. package/dist/esm/indexing/index.js.map +1 -0
  89. package/dist/esm/indexing/profile.js +584 -0
  90. package/dist/esm/indexing/profile.js.map +1 -0
  91. package/dist/esm/indexing-store/cache.js +666 -0
  92. package/dist/esm/indexing-store/cache.js.map +1 -0
  93. package/dist/esm/indexing-store/index.js +461 -0
  94. package/dist/esm/indexing-store/index.js.map +1 -0
  95. package/dist/esm/indexing-store/profile.js +428 -0
  96. package/dist/esm/indexing-store/profile.js.map +1 -0
  97. package/dist/esm/indexing-store/utils.js +111 -0
  98. package/dist/esm/indexing-store/utils.js.map +1 -0
  99. package/dist/esm/internal/common.js +2 -0
  100. package/dist/esm/internal/common.js.map +1 -0
  101. package/dist/esm/internal/errors.js +300 -0
  102. package/dist/esm/internal/errors.js.map +1 -0
  103. package/dist/esm/internal/logger.js +178 -0
  104. package/dist/esm/internal/logger.js.map +1 -0
  105. package/dist/esm/internal/metrics.js +1049 -0
  106. package/dist/esm/internal/metrics.js.map +1 -0
  107. package/dist/esm/internal/options.js +73 -0
  108. package/dist/esm/internal/options.js.map +1 -0
  109. package/dist/esm/internal/shutdown.js +24 -0
  110. package/dist/esm/internal/shutdown.js.map +1 -0
  111. package/dist/esm/internal/telemetry.js +200 -0
  112. package/dist/esm/internal/telemetry.js.map +1 -0
  113. package/dist/esm/internal/types.js +2 -0
  114. package/dist/esm/internal/types.js.map +1 -0
  115. package/dist/esm/rpc/actions.js +988 -0
  116. package/dist/esm/rpc/actions.js.map +1 -0
  117. package/dist/esm/rpc/http.js +130 -0
  118. package/dist/esm/rpc/http.js.map +1 -0
  119. package/dist/esm/rpc/index.js +749 -0
  120. package/dist/esm/rpc/index.js.map +1 -0
  121. package/dist/esm/runtime/events.js +664 -0
  122. package/dist/esm/runtime/events.js.map +1 -0
  123. package/dist/esm/runtime/filter.js +476 -0
  124. package/dist/esm/runtime/filter.js.map +1 -0
  125. package/dist/esm/runtime/fragments.js +478 -0
  126. package/dist/esm/runtime/fragments.js.map +1 -0
  127. package/dist/esm/runtime/historical.js +954 -0
  128. package/dist/esm/runtime/historical.js.map +1 -0
  129. package/dist/esm/runtime/index.js +316 -0
  130. package/dist/esm/runtime/index.js.map +1 -0
  131. package/dist/esm/runtime/init.js +12 -0
  132. package/dist/esm/runtime/init.js.map +1 -0
  133. package/dist/esm/runtime/isolated.js +464 -0
  134. package/dist/esm/runtime/isolated.js.map +1 -0
  135. package/dist/esm/runtime/multichain.js +511 -0
  136. package/dist/esm/runtime/multichain.js.map +1 -0
  137. package/dist/esm/runtime/omnichain.js +546 -0
  138. package/dist/esm/runtime/omnichain.js.map +1 -0
  139. package/dist/esm/runtime/realtime.js +722 -0
  140. package/dist/esm/runtime/realtime.js.map +1 -0
  141. package/dist/esm/server/error.js +56 -0
  142. package/dist/esm/server/error.js.map +1 -0
  143. package/dist/esm/server/index.js +121 -0
  144. package/dist/esm/server/index.js.map +1 -0
  145. package/dist/esm/sync-historical/index.js +703 -0
  146. package/dist/esm/sync-historical/index.js.map +1 -0
  147. package/dist/esm/sync-realtime/bloom.js +76 -0
  148. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  149. package/dist/esm/sync-realtime/index.js +918 -0
  150. package/dist/esm/sync-realtime/index.js.map +1 -0
  151. package/dist/esm/sync-store/encode.js +105 -0
  152. package/dist/esm/sync-store/encode.js.map +1 -0
  153. package/dist/esm/sync-store/index.js +885 -0
  154. package/dist/esm/sync-store/index.js.map +1 -0
  155. package/dist/esm/sync-store/migrations.js +1595 -0
  156. package/dist/esm/sync-store/migrations.js.map +1 -0
  157. package/dist/esm/sync-store/schema.js +181 -0
  158. package/dist/esm/sync-store/schema.js.map +1 -0
  159. package/dist/esm/types/db.js +2 -0
  160. package/dist/esm/types/db.js.map +1 -0
  161. package/dist/esm/types/eth.js +2 -0
  162. package/dist/esm/types/eth.js.map +1 -0
  163. package/dist/esm/types/utils.js +2 -0
  164. package/dist/esm/types/utils.js.map +1 -0
  165. package/dist/esm/types/virtual.js +2 -0
  166. package/dist/esm/types/virtual.js.map +1 -0
  167. package/dist/esm/ui/app.js +157 -0
  168. package/dist/esm/ui/app.js.map +1 -0
  169. package/dist/esm/ui/index.js +29 -0
  170. package/dist/esm/ui/index.js.map +1 -0
  171. package/dist/esm/ui/patch.js +140 -0
  172. package/dist/esm/ui/patch.js.map +1 -0
  173. package/dist/esm/utils/abi.js +55 -0
  174. package/dist/esm/utils/abi.js.map +1 -0
  175. package/dist/esm/utils/bigint.js +37 -0
  176. package/dist/esm/utils/bigint.js.map +1 -0
  177. package/dist/esm/utils/chains.js +21 -0
  178. package/dist/esm/utils/chains.js.map +1 -0
  179. package/dist/esm/utils/checkpoint.js +139 -0
  180. package/dist/esm/utils/checkpoint.js.map +1 -0
  181. package/dist/esm/utils/chunk.js +8 -0
  182. package/dist/esm/utils/chunk.js.map +1 -0
  183. package/dist/esm/utils/copy.js +129 -0
  184. package/dist/esm/utils/copy.js.map +1 -0
  185. package/dist/esm/utils/date.js +27 -0
  186. package/dist/esm/utils/date.js.map +1 -0
  187. package/dist/esm/utils/debug.js +2 -0
  188. package/dist/esm/utils/debug.js.map +1 -0
  189. package/dist/esm/utils/decodeAbiParameters.js +290 -0
  190. package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
  191. package/dist/esm/utils/decodeEventLog.js +75 -0
  192. package/dist/esm/utils/decodeEventLog.js.map +1 -0
  193. package/dist/esm/utils/dedupe.js +29 -0
  194. package/dist/esm/utils/dedupe.js.map +1 -0
  195. package/dist/esm/utils/duplicates.js +19 -0
  196. package/dist/esm/utils/duplicates.js.map +1 -0
  197. package/dist/esm/utils/estimate.js +6 -0
  198. package/dist/esm/utils/estimate.js.map +1 -0
  199. package/dist/esm/utils/finality.js +38 -0
  200. package/dist/esm/utils/finality.js.map +1 -0
  201. package/dist/esm/utils/format.js +20 -0
  202. package/dist/esm/utils/format.js.map +1 -0
  203. package/dist/esm/utils/generators.js +121 -0
  204. package/dist/esm/utils/generators.js.map +1 -0
  205. package/dist/esm/utils/hash.js +11 -0
  206. package/dist/esm/utils/hash.js.map +1 -0
  207. package/dist/esm/utils/interval.js +171 -0
  208. package/dist/esm/utils/interval.js.map +1 -0
  209. package/dist/esm/utils/lowercase.js +7 -0
  210. package/dist/esm/utils/lowercase.js.map +1 -0
  211. package/dist/esm/utils/mutex.js +26 -0
  212. package/dist/esm/utils/mutex.js.map +1 -0
  213. package/dist/esm/utils/never.js +4 -0
  214. package/dist/esm/utils/never.js.map +1 -0
  215. package/dist/esm/utils/offset.js +101 -0
  216. package/dist/esm/utils/offset.js.map +1 -0
  217. package/dist/esm/utils/order.js +18 -0
  218. package/dist/esm/utils/order.js.map +1 -0
  219. package/dist/esm/utils/partition.js +46 -0
  220. package/dist/esm/utils/partition.js.map +1 -0
  221. package/dist/esm/utils/pg.js +175 -0
  222. package/dist/esm/utils/pg.js.map +1 -0
  223. package/dist/esm/utils/pglite.js +80 -0
  224. package/dist/esm/utils/pglite.js.map +1 -0
  225. package/dist/esm/utils/port.js +30 -0
  226. package/dist/esm/utils/port.js.map +1 -0
  227. package/dist/esm/utils/print.js +23 -0
  228. package/dist/esm/utils/print.js.map +1 -0
  229. package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
  230. package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
  231. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  232. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  233. package/dist/esm/utils/queue.js +150 -0
  234. package/dist/esm/utils/queue.js.map +1 -0
  235. package/dist/esm/utils/range.js +8 -0
  236. package/dist/esm/utils/range.js.map +1 -0
  237. package/dist/esm/utils/result.js +10 -0
  238. package/dist/esm/utils/result.js.map +1 -0
  239. package/dist/esm/utils/sql-parse.js +1326 -0
  240. package/dist/esm/utils/sql-parse.js.map +1 -0
  241. package/dist/esm/utils/timer.js +9 -0
  242. package/dist/esm/utils/timer.js.map +1 -0
  243. package/dist/esm/utils/truncate.js +15 -0
  244. package/dist/esm/utils/truncate.js.map +1 -0
  245. package/dist/esm/utils/wait.js +10 -0
  246. package/dist/esm/utils/wait.js.map +1 -0
  247. package/dist/esm/utils/zipper.js +67 -0
  248. package/dist/esm/utils/zipper.js.map +1 -0
  249. package/dist/types/bin/commands/codegen.d.ts +5 -0
  250. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  251. package/dist/types/bin/commands/createViews.d.ts +8 -0
  252. package/dist/types/bin/commands/createViews.d.ts.map +1 -0
  253. package/dist/types/bin/commands/dev.d.ts +5 -0
  254. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  255. package/dist/types/bin/commands/list.d.ts +5 -0
  256. package/dist/types/bin/commands/list.d.ts.map +1 -0
  257. package/dist/types/bin/commands/prune.d.ts +5 -0
  258. package/dist/types/bin/commands/prune.d.ts.map +1 -0
  259. package/dist/types/bin/commands/serve.d.ts +5 -0
  260. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  261. package/dist/types/bin/commands/start.d.ts +19 -0
  262. package/dist/types/bin/commands/start.d.ts.map +1 -0
  263. package/dist/types/bin/isolatedController.d.ts +13 -0
  264. package/dist/types/bin/isolatedController.d.ts.map +1 -0
  265. package/dist/types/bin/isolatedWorker.d.ts +9 -0
  266. package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
  267. package/dist/types/bin/ponder.d.ts +37 -0
  268. package/dist/types/bin/ponder.d.ts.map +1 -0
  269. package/dist/types/bin/utils/codegen.d.ts +6 -0
  270. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  271. package/dist/types/bin/utils/exit.d.ts +10 -0
  272. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  273. package/dist/types/build/config.d.ts +97 -0
  274. package/dist/types/build/config.d.ts.map +1 -0
  275. package/dist/types/build/factory.d.ts +15 -0
  276. package/dist/types/build/factory.d.ts.map +1 -0
  277. package/dist/types/build/index.d.ts +84 -0
  278. package/dist/types/build/index.d.ts.map +1 -0
  279. package/dist/types/build/plugin.d.ts +4 -0
  280. package/dist/types/build/plugin.d.ts.map +1 -0
  281. package/dist/types/build/pre.d.ts +29 -0
  282. package/dist/types/build/pre.d.ts.map +1 -0
  283. package/dist/types/build/schema.d.ts +20 -0
  284. package/dist/types/build/schema.d.ts.map +1 -0
  285. package/dist/types/build/stacktrace.d.ts +13 -0
  286. package/dist/types/build/stacktrace.d.ts.map +1 -0
  287. package/dist/types/client/index.d.ts +27 -0
  288. package/dist/types/client/index.d.ts.map +1 -0
  289. package/dist/types/config/address.d.ts +34 -0
  290. package/dist/types/config/address.d.ts.map +1 -0
  291. package/dist/types/config/eventFilter.d.ts +18 -0
  292. package/dist/types/config/eventFilter.d.ts.map +1 -0
  293. package/dist/types/config/index.d.ts +144 -0
  294. package/dist/types/config/index.d.ts.map +1 -0
  295. package/dist/types/config/utilityTypes.d.ts +43 -0
  296. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  297. package/dist/types/database/actions.d.ts +99 -0
  298. package/dist/types/database/actions.d.ts.map +1 -0
  299. package/dist/types/database/index.d.ts +493 -0
  300. package/dist/types/database/index.d.ts.map +1 -0
  301. package/dist/types/database/queryBuilder.d.ts +65 -0
  302. package/dist/types/database/queryBuilder.d.ts.map +1 -0
  303. package/dist/types/drizzle/bigint.d.ts +25 -0
  304. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  305. package/dist/types/drizzle/bytes.d.ts +31 -0
  306. package/dist/types/drizzle/bytes.d.ts.map +1 -0
  307. package/dist/types/drizzle/hex.d.ts +25 -0
  308. package/dist/types/drizzle/hex.d.ts.map +1 -0
  309. package/dist/types/drizzle/index.d.ts +6 -0
  310. package/dist/types/drizzle/index.d.ts.map +1 -0
  311. package/dist/types/drizzle/json.d.ts +51 -0
  312. package/dist/types/drizzle/json.d.ts.map +1 -0
  313. package/dist/types/drizzle/kit/index.d.ts +187 -0
  314. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  315. package/dist/types/drizzle/onchain.d.ts +298 -0
  316. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  317. package/dist/types/drizzle/text.d.ts +29 -0
  318. package/dist/types/drizzle/text.d.ts.map +1 -0
  319. package/dist/types/graphql/graphiql.html.d.ts +2 -0
  320. package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
  321. package/dist/types/graphql/index.d.ts +12 -0
  322. package/dist/types/graphql/index.d.ts.map +1 -0
  323. package/dist/types/graphql/json.d.ts +3 -0
  324. package/dist/types/graphql/json.d.ts.map +1 -0
  325. package/dist/types/graphql/middleware.d.ts +29 -0
  326. package/dist/types/graphql/middleware.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +23 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  330. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  331. package/dist/types/indexing/client.d.ts +154 -0
  332. package/dist/types/indexing/client.d.ts.map +1 -0
  333. package/dist/types/indexing/index.d.ts +72 -0
  334. package/dist/types/indexing/index.d.ts.map +1 -0
  335. package/dist/types/indexing/profile.d.ts +16 -0
  336. package/dist/types/indexing/profile.d.ts.map +1 -0
  337. package/dist/types/indexing-store/cache.d.ts +115 -0
  338. package/dist/types/indexing-store/cache.d.ts.map +1 -0
  339. package/dist/types/indexing-store/index.d.ts +24 -0
  340. package/dist/types/indexing-store/index.d.ts.map +1 -0
  341. package/dist/types/indexing-store/profile.d.ts +7 -0
  342. package/dist/types/indexing-store/profile.d.ts.map +1 -0
  343. package/dist/types/indexing-store/utils.d.ts +19 -0
  344. package/dist/types/indexing-store/utils.d.ts.map +1 -0
  345. package/dist/types/internal/common.d.ts +15 -0
  346. package/dist/types/internal/common.d.ts.map +1 -0
  347. package/dist/types/internal/errors.d.ts +101 -0
  348. package/dist/types/internal/errors.d.ts.map +1 -0
  349. package/dist/types/internal/logger.d.ts +37 -0
  350. package/dist/types/internal/logger.d.ts.map +1 -0
  351. package/dist/types/internal/metrics.d.ts +120 -0
  352. package/dist/types/internal/metrics.d.ts.map +1 -0
  353. package/dist/types/internal/options.d.ts +62 -0
  354. package/dist/types/internal/options.d.ts.map +1 -0
  355. package/dist/types/internal/shutdown.d.ts +8 -0
  356. package/dist/types/internal/shutdown.d.ts.map +1 -0
  357. package/dist/types/internal/telemetry.d.ts +43 -0
  358. package/dist/types/internal/telemetry.d.ts.map +1 -0
  359. package/dist/types/internal/types.d.ts +443 -0
  360. package/dist/types/internal/types.d.ts.map +1 -0
  361. package/dist/types/rpc/actions.d.ts +360 -0
  362. package/dist/types/rpc/actions.d.ts.map +1 -0
  363. package/dist/types/rpc/http.d.ts +17 -0
  364. package/dist/types/rpc/http.d.ts.map +1 -0
  365. package/dist/types/rpc/index.d.ts +43 -0
  366. package/dist/types/rpc/index.d.ts.map +1 -0
  367. package/dist/types/runtime/events.d.ts +40 -0
  368. package/dist/types/runtime/events.d.ts.map +1 -0
  369. package/dist/types/runtime/filter.d.ts +96 -0
  370. package/dist/types/runtime/filter.d.ts.map +1 -0
  371. package/dist/types/runtime/fragments.d.ts +30 -0
  372. package/dist/types/runtime/fragments.d.ts.map +1 -0
  373. package/dist/types/runtime/historical.d.ts +123 -0
  374. package/dist/types/runtime/historical.d.ts.map +1 -0
  375. package/dist/types/runtime/index.d.ts +89 -0
  376. package/dist/types/runtime/index.d.ts.map +1 -0
  377. package/dist/types/runtime/init.d.ts +28 -0
  378. package/dist/types/runtime/init.d.ts.map +1 -0
  379. package/dist/types/runtime/isolated.d.ts +14 -0
  380. package/dist/types/runtime/isolated.d.ts.map +1 -0
  381. package/dist/types/runtime/multichain.d.ts +13 -0
  382. package/dist/types/runtime/multichain.d.ts.map +1 -0
  383. package/dist/types/runtime/omnichain.d.ts +23 -0
  384. package/dist/types/runtime/omnichain.d.ts.map +1 -0
  385. package/dist/types/runtime/realtime.d.ts +93 -0
  386. package/dist/types/runtime/realtime.d.ts.map +1 -0
  387. package/dist/types/server/error.d.ts +5 -0
  388. package/dist/types/server/error.d.ts.map +1 -0
  389. package/dist/types/server/index.d.ts +13 -0
  390. package/dist/types/server/index.d.ts.map +1 -0
  391. package/dist/types/sync-historical/index.d.ts +36 -0
  392. package/dist/types/sync-historical/index.d.ts.map +1 -0
  393. package/dist/types/sync-realtime/bloom.d.ts +18 -0
  394. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  395. package/dist/types/sync-realtime/index.d.ts +48 -0
  396. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  397. package/dist/types/sync-store/encode.d.ts +25 -0
  398. package/dist/types/sync-store/encode.d.ts.map +1 -0
  399. package/dist/types/sync-store/index.d.ts +135 -0
  400. package/dist/types/sync-store/index.d.ts.map +1 -0
  401. package/dist/types/sync-store/migrations.d.ts +8 -0
  402. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  403. package/dist/types/sync-store/schema.d.ts +1828 -0
  404. package/dist/types/sync-store/schema.d.ts.map +1 -0
  405. package/dist/types/types/db.d.ts +213 -0
  406. package/dist/types/types/db.d.ts.map +1 -0
  407. package/dist/types/types/eth.d.ts +196 -0
  408. package/dist/types/types/eth.d.ts.map +1 -0
  409. package/dist/types/types/utils.d.ts +38 -0
  410. package/dist/types/types/utils.d.ts.map +1 -0
  411. package/dist/types/types/virtual.d.ts +99 -0
  412. package/dist/types/types/virtual.d.ts.map +1 -0
  413. package/dist/types/ui/app.d.ts +22 -0
  414. package/dist/types/ui/app.d.ts.map +1 -0
  415. package/dist/types/ui/index.d.ts +5 -0
  416. package/dist/types/ui/index.d.ts.map +1 -0
  417. package/dist/types/ui/patch.d.ts +7 -0
  418. package/dist/types/ui/patch.d.ts.map +1 -0
  419. package/dist/types/utils/abi.d.ts +23 -0
  420. package/dist/types/utils/abi.d.ts.map +1 -0
  421. package/dist/types/utils/bigint.d.ts +15 -0
  422. package/dist/types/utils/bigint.d.ts.map +1 -0
  423. package/dist/types/utils/chains.d.ts +42 -0
  424. package/dist/types/utils/chains.d.ts.map +1 -0
  425. package/dist/types/utils/checkpoint.d.ts +52 -0
  426. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  427. package/dist/types/utils/chunk.d.ts +2 -0
  428. package/dist/types/utils/chunk.d.ts.map +1 -0
  429. package/dist/types/utils/copy.d.ts +16 -0
  430. package/dist/types/utils/copy.d.ts.map +1 -0
  431. package/dist/types/utils/date.d.ts +7 -0
  432. package/dist/types/utils/date.d.ts.map +1 -0
  433. package/dist/types/utils/debug.d.ts +105 -0
  434. package/dist/types/utils/debug.d.ts.map +1 -0
  435. package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
  436. package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
  437. package/dist/types/utils/decodeEventLog.d.ts +12 -0
  438. package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
  439. package/dist/types/utils/dedupe.d.ts +20 -0
  440. package/dist/types/utils/dedupe.d.ts.map +1 -0
  441. package/dist/types/utils/duplicates.d.ts +7 -0
  442. package/dist/types/utils/duplicates.d.ts.map +1 -0
  443. package/dist/types/utils/estimate.d.ts +11 -0
  444. package/dist/types/utils/estimate.d.ts.map +1 -0
  445. package/dist/types/utils/finality.d.ts +12 -0
  446. package/dist/types/utils/finality.d.ts.map +1 -0
  447. package/dist/types/utils/format.d.ts +3 -0
  448. package/dist/types/utils/format.d.ts.map +1 -0
  449. package/dist/types/utils/generators.d.ts +42 -0
  450. package/dist/types/utils/generators.d.ts.map +1 -0
  451. package/dist/types/utils/hash.d.ts +11 -0
  452. package/dist/types/utils/hash.d.ts.map +1 -0
  453. package/dist/types/utils/interval.d.ts +53 -0
  454. package/dist/types/utils/interval.d.ts.map +1 -0
  455. package/dist/types/utils/lowercase.d.ts +5 -0
  456. package/dist/types/utils/lowercase.d.ts.map +1 -0
  457. package/dist/types/utils/mutex.d.ts +5 -0
  458. package/dist/types/utils/mutex.d.ts.map +1 -0
  459. package/dist/types/utils/never.d.ts +2 -0
  460. package/dist/types/utils/never.d.ts.map +1 -0
  461. package/dist/types/utils/offset.d.ts +8 -0
  462. package/dist/types/utils/offset.d.ts.map +1 -0
  463. package/dist/types/utils/order.d.ts +2 -0
  464. package/dist/types/utils/order.d.ts.map +1 -0
  465. package/dist/types/utils/partition.d.ts +22 -0
  466. package/dist/types/utils/partition.d.ts.map +1 -0
  467. package/dist/types/utils/pg.d.ts +8 -0
  468. package/dist/types/utils/pg.d.ts.map +1 -0
  469. package/dist/types/utils/pglite.d.ts +25 -0
  470. package/dist/types/utils/pglite.d.ts.map +1 -0
  471. package/dist/types/utils/port.d.ts +5 -0
  472. package/dist/types/utils/port.d.ts.map +1 -0
  473. package/dist/types/utils/print.d.ts +2 -0
  474. package/dist/types/utils/print.d.ts.map +1 -0
  475. package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
  476. package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
  477. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  478. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  479. package/dist/types/utils/queue.d.ts +33 -0
  480. package/dist/types/utils/queue.d.ts.map +1 -0
  481. package/dist/types/utils/range.d.ts +8 -0
  482. package/dist/types/utils/range.d.ts.map +1 -0
  483. package/dist/types/utils/result.d.ts +17 -0
  484. package/dist/types/utils/result.d.ts.map +1 -0
  485. package/dist/types/utils/sql-parse.d.ts +21 -0
  486. package/dist/types/utils/sql-parse.d.ts.map +1 -0
  487. package/dist/types/utils/timer.d.ts +6 -0
  488. package/dist/types/utils/timer.d.ts.map +1 -0
  489. package/dist/types/utils/truncate.d.ts +9 -0
  490. package/dist/types/utils/truncate.d.ts.map +1 -0
  491. package/dist/types/utils/wait.d.ts +6 -0
  492. package/dist/types/utils/wait.d.ts.map +1 -0
  493. package/dist/types/utils/zipper.d.ts +36 -0
  494. package/dist/types/utils/zipper.d.ts.map +1 -0
  495. package/package.json +114 -0
  496. package/src/bin/commands/codegen.ts +56 -0
  497. package/src/bin/commands/createViews.ts +318 -0
  498. package/src/bin/commands/dev.ts +490 -0
  499. package/src/bin/commands/list.ts +208 -0
  500. package/src/bin/commands/prune.ts +322 -0
  501. package/src/bin/commands/serve.ts +236 -0
  502. package/src/bin/commands/start.ts +319 -0
  503. package/src/bin/isolatedController.ts +300 -0
  504. package/src/bin/isolatedWorker.ts +192 -0
  505. package/src/bin/ponder.ts +208 -0
  506. package/src/bin/utils/codegen.ts +32 -0
  507. package/src/bin/utils/exit.ts +112 -0
  508. package/src/build/config.ts +1141 -0
  509. package/src/build/factory.ts +147 -0
  510. package/src/build/index.ts +790 -0
  511. package/src/build/plugin.ts +58 -0
  512. package/src/build/pre.ts +114 -0
  513. package/src/build/schema.ts +358 -0
  514. package/src/build/stacktrace.ts +137 -0
  515. package/src/client/index.ts +551 -0
  516. package/src/config/address.ts +45 -0
  517. package/src/config/eventFilter.ts +33 -0
  518. package/src/config/index.ts +240 -0
  519. package/src/config/utilityTypes.ts +152 -0
  520. package/src/database/actions.ts +873 -0
  521. package/src/database/index.ts +1029 -0
  522. package/src/database/queryBuilder.ts +537 -0
  523. package/src/drizzle/bigint.ts +57 -0
  524. package/src/drizzle/bytes.ts +68 -0
  525. package/src/drizzle/hex.ts +58 -0
  526. package/src/drizzle/index.ts +40 -0
  527. package/src/drizzle/json.ts +159 -0
  528. package/src/drizzle/kit/index.ts +1348 -0
  529. package/src/drizzle/onchain.ts +476 -0
  530. package/src/drizzle/text.ts +77 -0
  531. package/src/graphql/graphiql.html.ts +59 -0
  532. package/src/graphql/index.ts +1351 -0
  533. package/src/graphql/json.ts +62 -0
  534. package/src/graphql/middleware.ts +115 -0
  535. package/src/index.ts +139 -0
  536. package/src/indexing/addStackTrace.ts +69 -0
  537. package/src/indexing/client.ts +1184 -0
  538. package/src/indexing/index.ts +976 -0
  539. package/src/indexing/profile.ts +771 -0
  540. package/src/indexing-store/cache.ts +1057 -0
  541. package/src/indexing-store/index.ts +628 -0
  542. package/src/indexing-store/profile.ts +557 -0
  543. package/src/indexing-store/utils.ts +162 -0
  544. package/src/internal/common.ts +15 -0
  545. package/src/internal/errors.ts +228 -0
  546. package/src/internal/logger.ts +252 -0
  547. package/src/internal/metrics.ts +1030 -0
  548. package/src/internal/options.ts +130 -0
  549. package/src/internal/shutdown.ts +32 -0
  550. package/src/internal/telemetry.ts +303 -0
  551. package/src/internal/types.ts +611 -0
  552. package/src/rpc/actions.ts +1344 -0
  553. package/src/rpc/http.ts +164 -0
  554. package/src/rpc/index.ts +959 -0
  555. package/src/runtime/events.ts +875 -0
  556. package/src/runtime/filter.ts +705 -0
  557. package/src/runtime/fragments.ts +674 -0
  558. package/src/runtime/historical.ts +1522 -0
  559. package/src/runtime/index.ts +569 -0
  560. package/src/runtime/init.ts +49 -0
  561. package/src/runtime/isolated.ts +775 -0
  562. package/src/runtime/multichain.ts +860 -0
  563. package/src/runtime/omnichain.ts +920 -0
  564. package/src/runtime/realtime.ts +1164 -0
  565. package/src/server/error.ts +68 -0
  566. package/src/server/index.ts +173 -0
  567. package/src/sync-historical/index.ts +1065 -0
  568. package/src/sync-realtime/bloom.ts +102 -0
  569. package/src/sync-realtime/index.ts +1304 -0
  570. package/src/sync-store/encode.ts +153 -0
  571. package/src/sync-store/index.ts +1633 -0
  572. package/src/sync-store/migrations.ts +1801 -0
  573. package/src/sync-store/schema.ts +248 -0
  574. package/src/types/db.ts +292 -0
  575. package/src/types/eth.ts +216 -0
  576. package/src/types/utils.ts +47 -0
  577. package/src/types/virtual.ts +244 -0
  578. package/src/types.d.ts +38 -0
  579. package/src/ui/app.ts +207 -0
  580. package/src/ui/index.ts +37 -0
  581. package/src/ui/patch.ts +204 -0
  582. package/src/utils/abi.ts +103 -0
  583. package/src/utils/bigint.ts +41 -0
  584. package/src/utils/chains.ts +22 -0
  585. package/src/utils/checkpoint.ts +203 -0
  586. package/src/utils/chunk.ts +7 -0
  587. package/src/utils/copy.ts +151 -0
  588. package/src/utils/date.ts +26 -0
  589. package/src/utils/debug.ts +110 -0
  590. package/src/utils/decodeAbiParameters.ts +428 -0
  591. package/src/utils/decodeEventLog.ts +100 -0
  592. package/src/utils/dedupe.ts +32 -0
  593. package/src/utils/duplicates.ts +19 -0
  594. package/src/utils/estimate.ts +27 -0
  595. package/src/utils/finality.ts +40 -0
  596. package/src/utils/format.ts +22 -0
  597. package/src/utils/generators.ts +157 -0
  598. package/src/utils/hash.ts +22 -0
  599. package/src/utils/interval.ts +212 -0
  600. package/src/utils/lowercase.ts +6 -0
  601. package/src/utils/mutex.ts +33 -0
  602. package/src/utils/never.ts +3 -0
  603. package/src/utils/offset.ts +133 -0
  604. package/src/utils/order.ts +16 -0
  605. package/src/utils/partition.ts +53 -0
  606. package/src/utils/pg.ts +230 -0
  607. package/src/utils/pglite.ts +97 -0
  608. package/src/utils/port.ts +34 -0
  609. package/src/utils/print.ts +31 -0
  610. package/src/utils/promiseAllSettledWithThrow.ts +27 -0
  611. package/src/utils/promiseWithResolvers.ts +20 -0
  612. package/src/utils/queue.ts +258 -0
  613. package/src/utils/range.ts +8 -0
  614. package/src/utils/result.ts +26 -0
  615. package/src/utils/sql-parse.ts +1477 -0
  616. package/src/utils/timer.ts +8 -0
  617. package/src/utils/truncate.ts +15 -0
  618. package/src/utils/wait.ts +8 -0
  619. package/src/utils/zipper.ts +80 -0
@@ -0,0 +1,1049 @@
1
+ import { parentPort } from "node:worker_threads";
2
+ import { promiseWithResolvers, } from '../utils/promiseWithResolvers.js';
3
+ import { truncate } from '../utils/truncate.js';
4
+ import { getTableName, isTable } from "drizzle-orm";
5
+ import prometheus from "prom-client";
6
+ const sometimesIODurationMs = [
7
+ 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100, 500, 1000, 5000,
8
+ 10000, 50000, 100000,
9
+ ];
10
+ const alwaysIODurationMs = [
11
+ 1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000,
12
+ ];
13
+ const httpRequestSizeBytes = [
14
+ 10, 100, 1000, 5000, 10000, 50000, 100000, 500000, 1000000, 5000000,
15
+ 10000000,
16
+ ];
17
+ const GET_METRICS_REQ = "prom-client:getMetricsReq";
18
+ const GET_METRICS_RES = "prom-client:getMetricsRes";
19
+ export class MetricsService {
20
+ constructor() {
21
+ Object.defineProperty(this, "registry", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "start_timestamp", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ Object.defineProperty(this, "progressMetadata", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "hasError", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: void 0
44
+ });
45
+ Object.defineProperty(this, "port", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ Object.defineProperty(this, "rps", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: void 0
56
+ });
57
+ Object.defineProperty(this, "ponder_version_info", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: void 0
62
+ });
63
+ Object.defineProperty(this, "ponder_settings_info", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: void 0
68
+ });
69
+ Object.defineProperty(this, "ponder_historical_concurrency_group_duration", {
70
+ enumerable: true,
71
+ configurable: true,
72
+ writable: true,
73
+ value: void 0
74
+ });
75
+ Object.defineProperty(this, "ponder_historical_extract_duration", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: void 0
80
+ });
81
+ Object.defineProperty(this, "ponder_historical_transform_duration", {
82
+ enumerable: true,
83
+ configurable: true,
84
+ writable: true,
85
+ value: void 0
86
+ });
87
+ Object.defineProperty(this, "ponder_historical_start_timestamp_seconds", {
88
+ enumerable: true,
89
+ configurable: true,
90
+ writable: true,
91
+ value: void 0
92
+ });
93
+ Object.defineProperty(this, "ponder_historical_end_timestamp_seconds", {
94
+ enumerable: true,
95
+ configurable: true,
96
+ writable: true,
97
+ value: void 0
98
+ });
99
+ Object.defineProperty(this, "ponder_historical_total_indexing_seconds", {
100
+ enumerable: true,
101
+ configurable: true,
102
+ writable: true,
103
+ value: void 0
104
+ });
105
+ Object.defineProperty(this, "ponder_historical_cached_indexing_seconds", {
106
+ enumerable: true,
107
+ configurable: true,
108
+ writable: true,
109
+ value: void 0
110
+ });
111
+ Object.defineProperty(this, "ponder_historical_completed_indexing_seconds", {
112
+ enumerable: true,
113
+ configurable: true,
114
+ writable: true,
115
+ value: void 0
116
+ });
117
+ Object.defineProperty(this, "ponder_indexing_timestamp", {
118
+ enumerable: true,
119
+ configurable: true,
120
+ writable: true,
121
+ value: void 0
122
+ });
123
+ Object.defineProperty(this, "ponder_indexing_completed_events", {
124
+ enumerable: true,
125
+ configurable: true,
126
+ writable: true,
127
+ value: void 0
128
+ });
129
+ Object.defineProperty(this, "ponder_indexing_function_duration", {
130
+ enumerable: true,
131
+ configurable: true,
132
+ writable: true,
133
+ value: void 0
134
+ });
135
+ Object.defineProperty(this, "ponder_indexing_cache_requests_total", {
136
+ enumerable: true,
137
+ configurable: true,
138
+ writable: true,
139
+ value: void 0
140
+ });
141
+ Object.defineProperty(this, "ponder_indexing_cache_query_duration", {
142
+ enumerable: true,
143
+ configurable: true,
144
+ writable: true,
145
+ value: void 0
146
+ });
147
+ Object.defineProperty(this, "ponder_indexing_rpc_action_duration", {
148
+ enumerable: true,
149
+ configurable: true,
150
+ writable: true,
151
+ value: void 0
152
+ });
153
+ Object.defineProperty(this, "ponder_indexing_rpc_prefetch_total", {
154
+ enumerable: true,
155
+ configurable: true,
156
+ writable: true,
157
+ value: void 0
158
+ });
159
+ Object.defineProperty(this, "ponder_indexing_rpc_requests_total", {
160
+ enumerable: true,
161
+ configurable: true,
162
+ writable: true,
163
+ value: void 0
164
+ });
165
+ Object.defineProperty(this, "ponder_indexing_store_queries_total", {
166
+ enumerable: true,
167
+ configurable: true,
168
+ writable: true,
169
+ value: void 0
170
+ });
171
+ Object.defineProperty(this, "ponder_indexing_store_raw_sql_duration", {
172
+ enumerable: true,
173
+ configurable: true,
174
+ writable: true,
175
+ value: void 0
176
+ });
177
+ Object.defineProperty(this, "ponder_sync_block", {
178
+ enumerable: true,
179
+ configurable: true,
180
+ writable: true,
181
+ value: void 0
182
+ });
183
+ Object.defineProperty(this, "ponder_sync_block_timestamp", {
184
+ enumerable: true,
185
+ configurable: true,
186
+ writable: true,
187
+ value: void 0
188
+ });
189
+ Object.defineProperty(this, "ponder_sync_is_realtime", {
190
+ enumerable: true,
191
+ configurable: true,
192
+ writable: true,
193
+ value: void 0
194
+ });
195
+ Object.defineProperty(this, "ponder_sync_is_complete", {
196
+ enumerable: true,
197
+ configurable: true,
198
+ writable: true,
199
+ value: void 0
200
+ });
201
+ Object.defineProperty(this, "ponder_historical_total_blocks", {
202
+ enumerable: true,
203
+ configurable: true,
204
+ writable: true,
205
+ value: void 0
206
+ });
207
+ Object.defineProperty(this, "ponder_historical_cached_blocks", {
208
+ enumerable: true,
209
+ configurable: true,
210
+ writable: true,
211
+ value: void 0
212
+ });
213
+ Object.defineProperty(this, "ponder_historical_completed_blocks", {
214
+ enumerable: true,
215
+ configurable: true,
216
+ writable: true,
217
+ value: void 0
218
+ });
219
+ Object.defineProperty(this, "ponder_realtime_reorg_total", {
220
+ enumerable: true,
221
+ configurable: true,
222
+ writable: true,
223
+ value: void 0
224
+ });
225
+ Object.defineProperty(this, "ponder_realtime_latency", {
226
+ enumerable: true,
227
+ configurable: true,
228
+ writable: true,
229
+ value: void 0
230
+ });
231
+ Object.defineProperty(this, "ponder_realtime_block_arrival_latency", {
232
+ enumerable: true,
233
+ configurable: true,
234
+ writable: true,
235
+ value: void 0
236
+ });
237
+ Object.defineProperty(this, "ponder_database_method_duration", {
238
+ enumerable: true,
239
+ configurable: true,
240
+ writable: true,
241
+ value: void 0
242
+ });
243
+ Object.defineProperty(this, "ponder_database_method_error_total", {
244
+ enumerable: true,
245
+ configurable: true,
246
+ writable: true,
247
+ value: void 0
248
+ });
249
+ Object.defineProperty(this, "ponder_http_server_active_requests", {
250
+ enumerable: true,
251
+ configurable: true,
252
+ writable: true,
253
+ value: void 0
254
+ });
255
+ Object.defineProperty(this, "ponder_http_server_request_duration_ms", {
256
+ enumerable: true,
257
+ configurable: true,
258
+ writable: true,
259
+ value: void 0
260
+ });
261
+ Object.defineProperty(this, "ponder_http_server_request_size_bytes", {
262
+ enumerable: true,
263
+ configurable: true,
264
+ writable: true,
265
+ value: void 0
266
+ });
267
+ Object.defineProperty(this, "ponder_http_server_response_size_bytes", {
268
+ enumerable: true,
269
+ configurable: true,
270
+ writable: true,
271
+ value: void 0
272
+ });
273
+ Object.defineProperty(this, "ponder_rpc_request_duration", {
274
+ enumerable: true,
275
+ configurable: true,
276
+ writable: true,
277
+ value: void 0
278
+ });
279
+ Object.defineProperty(this, "ponder_rpc_request_error_total", {
280
+ enumerable: true,
281
+ configurable: true,
282
+ writable: true,
283
+ value: void 0
284
+ });
285
+ Object.defineProperty(this, "ponder_postgres_query_total", {
286
+ enumerable: true,
287
+ configurable: true,
288
+ writable: true,
289
+ value: void 0
290
+ });
291
+ Object.defineProperty(this, "ponder_postgres_query_queue_size", {
292
+ enumerable: true,
293
+ configurable: true,
294
+ writable: true,
295
+ value: null
296
+ });
297
+ Object.defineProperty(this, "ponder_postgres_pool_connections", {
298
+ enumerable: true,
299
+ configurable: true,
300
+ writable: true,
301
+ value: null
302
+ });
303
+ this.registry = new prometheus.Registry();
304
+ this.start_timestamp = Date.now();
305
+ this.progressMetadata = {
306
+ general: {
307
+ batches: [{ elapsedSeconds: 0, completedSeconds: 0 }],
308
+ previousTimestamp: Date.now(),
309
+ previousCompletedSeconds: 0,
310
+ rate: 0,
311
+ },
312
+ };
313
+ this.port = undefined;
314
+ this.hasError = false;
315
+ this.rps = {};
316
+ this.ponder_version_info = new prometheus.Gauge({
317
+ name: "ponder_version_info",
318
+ help: "Ponder version information",
319
+ labelNames: ["version", "major", "minor", "patch"],
320
+ registers: [this.registry],
321
+ aggregator: "first",
322
+ });
323
+ this.ponder_settings_info = new prometheus.Gauge({
324
+ name: "ponder_settings_info",
325
+ help: "Ponder settings information",
326
+ labelNames: ["ordering", "database", "command"],
327
+ registers: [this.registry],
328
+ aggregator: "first",
329
+ });
330
+ this.ponder_historical_concurrency_group_duration = new prometheus.Gauge({
331
+ name: "ponder_historical_concurrency_group_duration",
332
+ help: "Duration of historical concurrency groups",
333
+ labelNames: ["group"],
334
+ registers: [this.registry],
335
+ aggregator: "sum",
336
+ });
337
+ this.ponder_historical_extract_duration = new prometheus.Gauge({
338
+ name: "ponder_historical_extract_duration",
339
+ help: "Duration of historical extract phase",
340
+ labelNames: ["step"],
341
+ registers: [this.registry],
342
+ aggregator: "sum",
343
+ });
344
+ this.ponder_historical_transform_duration = new prometheus.Gauge({
345
+ name: "ponder_historical_transform_duration",
346
+ help: "Duration of historical transform phase",
347
+ labelNames: ["step"],
348
+ registers: [this.registry],
349
+ aggregator: "sum",
350
+ });
351
+ this.ponder_historical_start_timestamp_seconds = new prometheus.Gauge({
352
+ name: "ponder_historical_start_timestamp_seconds",
353
+ help: "Timestamp at which historical indexing started",
354
+ labelNames: ["chain"],
355
+ registers: [this.registry],
356
+ aggregator: "min",
357
+ });
358
+ this.ponder_historical_end_timestamp_seconds = new prometheus.Gauge({
359
+ name: "ponder_historical_end_timestamp_seconds",
360
+ help: "Timestamp at which historical indexing ended",
361
+ labelNames: ["chain"],
362
+ registers: [this.registry],
363
+ aggregator: "max",
364
+ });
365
+ this.ponder_historical_total_indexing_seconds = new prometheus.Gauge({
366
+ name: "ponder_historical_total_indexing_seconds",
367
+ help: "Total number of seconds that are required",
368
+ labelNames: ["chain"],
369
+ registers: [this.registry],
370
+ aggregator: "sum",
371
+ });
372
+ this.ponder_historical_cached_indexing_seconds = new prometheus.Gauge({
373
+ name: "ponder_historical_cached_indexing_seconds",
374
+ help: "Number of seconds that have been cached",
375
+ labelNames: ["chain"],
376
+ registers: [this.registry],
377
+ aggregator: "sum",
378
+ });
379
+ this.ponder_historical_completed_indexing_seconds = new prometheus.Gauge({
380
+ name: "ponder_historical_completed_indexing_seconds",
381
+ help: "Number of seconds that have been completed",
382
+ labelNames: ["chain"],
383
+ registers: [this.registry],
384
+ aggregator: "sum",
385
+ });
386
+ this.ponder_indexing_completed_events = new prometheus.Gauge({
387
+ name: "ponder_indexing_completed_events",
388
+ help: "Number of events that have been processed",
389
+ labelNames: ["chain", "event"],
390
+ registers: [this.registry],
391
+ aggregator: "sum",
392
+ });
393
+ this.ponder_indexing_timestamp = new prometheus.Gauge({
394
+ name: "ponder_indexing_timestamp",
395
+ help: "Timestamp through which all events have been completed",
396
+ labelNames: ["chain"],
397
+ registers: [this.registry],
398
+ aggregator: "first",
399
+ });
400
+ this.ponder_indexing_function_duration = new prometheus.Histogram({
401
+ name: "ponder_indexing_function_duration",
402
+ help: "Duration of indexing function execution",
403
+ labelNames: ["chain", "event"],
404
+ buckets: sometimesIODurationMs,
405
+ registers: [this.registry],
406
+ aggregator: "sum",
407
+ });
408
+ this.ponder_indexing_cache_query_duration = new prometheus.Histogram({
409
+ name: "ponder_indexing_cache_query_duration",
410
+ help: "Duration of cache operations",
411
+ labelNames: ["table", "method"],
412
+ buckets: alwaysIODurationMs,
413
+ registers: [this.registry],
414
+ aggregator: "sum",
415
+ });
416
+ this.ponder_indexing_rpc_action_duration = new prometheus.Histogram({
417
+ name: "ponder_indexing_rpc_action_duration",
418
+ help: "Duration of RPC actions",
419
+ labelNames: ["action"],
420
+ buckets: sometimesIODurationMs,
421
+ registers: [this.registry],
422
+ aggregator: "sum",
423
+ });
424
+ this.ponder_indexing_rpc_prefetch_total = new prometheus.Counter({
425
+ name: "ponder_indexing_rpc_prefetch_total",
426
+ help: "Number of RPC prefetches",
427
+ labelNames: ["chain", "method", "type"],
428
+ registers: [this.registry],
429
+ aggregator: "sum",
430
+ });
431
+ this.ponder_indexing_rpc_requests_total = new prometheus.Counter({
432
+ name: "ponder_indexing_rpc_requests_total",
433
+ help: "Number of RPC requests",
434
+ labelNames: ["chain", "method", "type"],
435
+ registers: [this.registry],
436
+ aggregator: "sum",
437
+ });
438
+ this.ponder_indexing_cache_requests_total = new prometheus.Counter({
439
+ name: "ponder_indexing_cache_requests_total",
440
+ help: "Number of cache accesses",
441
+ labelNames: ["table", "type"],
442
+ registers: [this.registry],
443
+ aggregator: "sum",
444
+ });
445
+ this.ponder_indexing_store_queries_total = new prometheus.Counter({
446
+ name: "ponder_indexing_store_queries_total",
447
+ help: "Number of indexing store operations",
448
+ labelNames: ["table", "method"],
449
+ registers: [this.registry],
450
+ aggregator: "sum",
451
+ });
452
+ this.ponder_indexing_store_raw_sql_duration = new prometheus.Histogram({
453
+ name: "ponder_indexing_store_raw_sql_duration",
454
+ help: "Duration of raw SQL store operations",
455
+ buckets: alwaysIODurationMs,
456
+ registers: [this.registry],
457
+ aggregator: "sum",
458
+ });
459
+ this.ponder_sync_block = new prometheus.Gauge({
460
+ name: "ponder_sync_block",
461
+ help: "Closest-to-tip synced block number",
462
+ labelNames: ["chain"],
463
+ registers: [this.registry],
464
+ aggregator: "max",
465
+ });
466
+ this.ponder_sync_block_timestamp = new prometheus.Gauge({
467
+ name: "ponder_sync_block_timestamp",
468
+ help: "Closest-to-tip synced block timestamp",
469
+ labelNames: ["chain"],
470
+ registers: [this.registry],
471
+ aggregator: "max",
472
+ });
473
+ this.ponder_sync_is_realtime = new prometheus.Gauge({
474
+ name: "ponder_sync_is_realtime",
475
+ help: "Boolean (0 or 1) indicating if the sync is realtime mode",
476
+ labelNames: ["chain"],
477
+ registers: [this.registry],
478
+ aggregator: "max",
479
+ });
480
+ this.ponder_sync_is_complete = new prometheus.Gauge({
481
+ name: "ponder_sync_is_complete",
482
+ help: "Boolean (0 or 1) indicating if the sync has synced all blocks",
483
+ labelNames: ["chain"],
484
+ registers: [this.registry],
485
+ aggregator: "max",
486
+ });
487
+ this.ponder_historical_total_blocks = new prometheus.Gauge({
488
+ name: "ponder_historical_total_blocks",
489
+ help: "Number of blocks required for the historical sync",
490
+ labelNames: ["chain"],
491
+ registers: [this.registry],
492
+ aggregator: "max",
493
+ });
494
+ this.ponder_historical_cached_blocks = new prometheus.Gauge({
495
+ name: "ponder_historical_cached_blocks",
496
+ help: "Number of blocks that were found in the cache for the historical sync",
497
+ labelNames: ["chain"],
498
+ registers: [this.registry],
499
+ aggregator: "max",
500
+ });
501
+ this.ponder_historical_completed_blocks = new prometheus.Gauge({
502
+ name: "ponder_historical_completed_blocks",
503
+ help: "Number of blocks that have been processed for the historical sync",
504
+ labelNames: ["chain", "source", "type"],
505
+ registers: [this.registry],
506
+ aggregator: "max",
507
+ });
508
+ this.ponder_realtime_reorg_total = new prometheus.Counter({
509
+ name: "ponder_realtime_reorg_total",
510
+ help: "Count of how many re-orgs have occurred",
511
+ labelNames: ["chain"],
512
+ registers: [this.registry],
513
+ aggregator: "sum",
514
+ });
515
+ this.ponder_realtime_latency = new prometheus.Histogram({
516
+ name: "ponder_realtime_latency",
517
+ help: "Time elapsed between receiving a block and fully processing it",
518
+ labelNames: ["chain"],
519
+ buckets: [
520
+ 1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000,
521
+ 1000000,
522
+ ],
523
+ registers: [this.registry],
524
+ aggregator: "sum",
525
+ });
526
+ this.ponder_realtime_block_arrival_latency = new prometheus.Histogram({
527
+ name: "ponder_realtime_block_arrival_latency",
528
+ help: "Time elapsed between mining a block and being received by the realtime sync",
529
+ labelNames: ["chain"],
530
+ buckets: [
531
+ 1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000, 500000,
532
+ 1000000,
533
+ ],
534
+ registers: [this.registry],
535
+ aggregator: "sum",
536
+ });
537
+ this.ponder_database_method_duration = new prometheus.Histogram({
538
+ name: "ponder_database_method_duration",
539
+ help: "Duration of database operations",
540
+ labelNames: ["service", "method"],
541
+ buckets: alwaysIODurationMs,
542
+ registers: [this.registry],
543
+ aggregator: "sum",
544
+ });
545
+ this.ponder_database_method_error_total = new prometheus.Counter({
546
+ name: "ponder_database_method_error_total",
547
+ help: "Total number of errors encountered during database operations",
548
+ labelNames: ["service", "method"],
549
+ registers: [this.registry],
550
+ aggregator: "sum",
551
+ });
552
+ this.ponder_http_server_active_requests = new prometheus.Gauge({
553
+ name: "ponder_http_server_active_requests",
554
+ help: "Number of active HTTP server requests",
555
+ labelNames: ["method", "path"],
556
+ registers: [this.registry],
557
+ aggregator: "sum",
558
+ });
559
+ this.ponder_http_server_request_duration_ms = new prometheus.Histogram({
560
+ name: "ponder_http_server_request_duration_ms",
561
+ help: "Duration of HTTP responses served the server",
562
+ labelNames: ["method", "path", "status"],
563
+ buckets: alwaysIODurationMs,
564
+ registers: [this.registry],
565
+ aggregator: "sum",
566
+ });
567
+ this.ponder_http_server_request_size_bytes = new prometheus.Histogram({
568
+ name: "ponder_http_server_request_size_bytes",
569
+ help: "Size of HTTP requests received by the server",
570
+ labelNames: ["method", "path", "status"],
571
+ buckets: httpRequestSizeBytes,
572
+ registers: [this.registry],
573
+ aggregator: "sum",
574
+ });
575
+ this.ponder_http_server_response_size_bytes = new prometheus.Histogram({
576
+ name: "ponder_http_server_response_size_bytes",
577
+ help: "Size of HTTP responses served the server",
578
+ labelNames: ["method", "path", "status"],
579
+ buckets: httpRequestSizeBytes,
580
+ registers: [this.registry],
581
+ aggregator: "sum",
582
+ });
583
+ this.ponder_rpc_request_duration = new prometheus.Histogram({
584
+ name: "ponder_rpc_request_duration",
585
+ help: "Duration of successful RPC requests",
586
+ labelNames: ["chain", "method"],
587
+ buckets: alwaysIODurationMs,
588
+ registers: [this.registry],
589
+ aggregator: "sum",
590
+ });
591
+ this.ponder_rpc_request_error_total = new prometheus.Counter({
592
+ name: "ponder_rpc_request_error_total",
593
+ help: "Total count of failed RPC requests",
594
+ labelNames: ["chain", "method"],
595
+ registers: [this.registry],
596
+ aggregator: "sum",
597
+ });
598
+ this.ponder_postgres_query_total = new prometheus.Counter({
599
+ name: "ponder_postgres_query_total",
600
+ help: "Total number of queries submitted to the database",
601
+ labelNames: ["pool"],
602
+ registers: [this.registry],
603
+ aggregator: "sum",
604
+ });
605
+ if (!("bun" in process.versions))
606
+ prometheus.collectDefaultMetrics({
607
+ register: this.registry,
608
+ eventLoopMonitoringPrecision: 1,
609
+ gcDurationBuckets: [
610
+ 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10,
611
+ ],
612
+ });
613
+ }
614
+ /**
615
+ * Get string representation for all metrics.
616
+ * @returns Metrics encoded using Prometheus v0.0.4 format.
617
+ */
618
+ getMetrics() {
619
+ return this.registry.metrics();
620
+ }
621
+ async getRegistry() {
622
+ return this.registry;
623
+ }
624
+ initializeIndexingMetrics({ indexingBuild, schemaBuild, }) {
625
+ const tables = Object.values(schemaBuild.schema).filter(isTable);
626
+ for (const { name: eventName } of indexingBuild.indexingFunctions) {
627
+ this.ponder_indexing_completed_events.inc({ event: eventName }, 0);
628
+ }
629
+ for (const table of tables) {
630
+ for (const type of ["complete", "hit", "miss", "prefetch"]) {
631
+ this.ponder_indexing_cache_requests_total.inc({ table: getTableName(table), type }, 0);
632
+ }
633
+ for (const method of ["find", "insert", "update", "delete"]) {
634
+ this.ponder_indexing_store_queries_total.inc({ table: getTableName(table), method }, 0);
635
+ }
636
+ }
637
+ }
638
+ resetIndexingMetrics() {
639
+ this.start_timestamp = Date.now();
640
+ this.rps = {};
641
+ this.progressMetadata = {
642
+ general: {
643
+ batches: [{ elapsedSeconds: 0, completedSeconds: 0 }],
644
+ previousTimestamp: Date.now(),
645
+ previousCompletedSeconds: 0,
646
+ rate: 0,
647
+ },
648
+ };
649
+ this.hasError = false;
650
+ this.ponder_settings_info.reset();
651
+ this.ponder_historical_start_timestamp_seconds.reset();
652
+ this.ponder_historical_end_timestamp_seconds.reset();
653
+ this.ponder_historical_total_indexing_seconds.reset();
654
+ this.ponder_historical_cached_indexing_seconds.reset();
655
+ this.ponder_historical_completed_indexing_seconds.reset();
656
+ this.ponder_indexing_completed_events.reset();
657
+ this.ponder_indexing_timestamp.reset();
658
+ this.ponder_indexing_function_duration.reset();
659
+ this.ponder_sync_block.reset();
660
+ this.ponder_sync_is_realtime.reset();
661
+ this.ponder_sync_is_complete.reset();
662
+ this.ponder_historical_total_blocks.reset();
663
+ this.ponder_historical_cached_blocks.reset();
664
+ this.ponder_historical_completed_blocks.reset();
665
+ this.ponder_realtime_reorg_total.reset();
666
+ this.ponder_rpc_request_duration.reset();
667
+ this.ponder_rpc_request_error_total.reset();
668
+ // Note: These are used by both indexing and API services.
669
+ this.ponder_database_method_duration.reset();
670
+ this.ponder_database_method_error_total.reset();
671
+ this.ponder_postgres_pool_connections?.reset();
672
+ this.ponder_postgres_query_queue_size?.reset();
673
+ this.ponder_postgres_query_total?.reset();
674
+ }
675
+ resetApiMetrics() {
676
+ this.port = undefined;
677
+ // TODO: Create a separate metric for API build errors,
678
+ // or stop using metrics for the TUI error message.
679
+ this.hasError = false;
680
+ this.ponder_http_server_active_requests.reset();
681
+ this.ponder_http_server_request_duration_ms.reset();
682
+ this.ponder_http_server_request_size_bytes.reset();
683
+ this.ponder_http_server_response_size_bytes.reset();
684
+ }
685
+ }
686
+ export class AggregateMetricsService extends MetricsService {
687
+ constructor(mainThreadMetrics, workers) {
688
+ super();
689
+ Object.defineProperty(this, "workers", {
690
+ enumerable: true,
691
+ configurable: true,
692
+ writable: true,
693
+ value: void 0
694
+ });
695
+ Object.defineProperty(this, "requests", {
696
+ enumerable: true,
697
+ configurable: true,
698
+ writable: true,
699
+ value: void 0
700
+ });
701
+ Object.defineProperty(this, "requestId", {
702
+ enumerable: true,
703
+ configurable: true,
704
+ writable: true,
705
+ value: void 0
706
+ });
707
+ Object.defineProperty(this, "mainThreadMetrics", {
708
+ enumerable: true,
709
+ configurable: true,
710
+ writable: true,
711
+ value: void 0
712
+ });
713
+ this.mainThreadMetrics = mainThreadMetrics;
714
+ this.workers = workers;
715
+ this.requests = new Map();
716
+ this.requestId = 0;
717
+ for (const worker of workers) {
718
+ worker.on("message", (message) => {
719
+ if (message.type === GET_METRICS_RES) {
720
+ const request = this.requests.get(message.requestId);
721
+ if (request === undefined)
722
+ return;
723
+ if (message.error) {
724
+ request.pwr.reject(new Error(message.error));
725
+ return;
726
+ }
727
+ request.responses.push(message.metrics);
728
+ request.workerIds.push(worker.threadId);
729
+ request.pending--;
730
+ if (request.pending === 0) {
731
+ request.pwr.resolve();
732
+ }
733
+ }
734
+ });
735
+ }
736
+ }
737
+ async getMetrics() {
738
+ const requestId = this.requestId++;
739
+ const pwr = promiseWithResolvers();
740
+ this.requests.set(requestId, {
741
+ responses: [],
742
+ workerIds: [],
743
+ pending: this.workers.length,
744
+ pwr,
745
+ });
746
+ for (const worker of this.workers) {
747
+ worker.postMessage({
748
+ type: GET_METRICS_REQ,
749
+ requestId,
750
+ });
751
+ }
752
+ await pwr.promise;
753
+ const request = this.requests.get(requestId);
754
+ this.requests.delete(requestId);
755
+ // Sort response by worker id for consistent metrics
756
+ const responseIndexSort = new Array(this.workers.length)
757
+ .fill(0)
758
+ .map((_, index) => index)
759
+ .sort((a, b) => request.workerIds[a] - request.workerIds[b]);
760
+ return prometheus.AggregatorRegistry.aggregate([
761
+ ...responseIndexSort.map((index) => request.responses[index]),
762
+ await this.registry.getMetricsAsJSON(),
763
+ await this.mainThreadMetrics.registry.getMetricsAsJSON(),
764
+ ]).metrics();
765
+ }
766
+ async getRegistry() {
767
+ const requestId = this.requestId++;
768
+ const pwr = promiseWithResolvers();
769
+ this.requests.set(requestId, {
770
+ responses: [],
771
+ workerIds: [],
772
+ pending: this.workers.length,
773
+ pwr,
774
+ });
775
+ for (const worker of this.workers) {
776
+ worker.postMessage({
777
+ type: GET_METRICS_REQ,
778
+ requestId,
779
+ });
780
+ }
781
+ await pwr.promise;
782
+ const request = this.requests.get(requestId);
783
+ this.requests.delete(requestId);
784
+ // Sort response by worker id for consistent metrics
785
+ const responseIndexSort = new Array(this.workers.length)
786
+ .fill(0)
787
+ .map((_, index) => index)
788
+ .sort((a, b) => request.workerIds[a] - request.workerIds[b]);
789
+ return prometheus.AggregatorRegistry.aggregate([
790
+ ...responseIndexSort.map((index) => request.responses[index]),
791
+ await this.registry.getMetricsAsJSON(),
792
+ await this.mainThreadMetrics.registry.getMetricsAsJSON(),
793
+ ]);
794
+ }
795
+ }
796
+ export class IsolatedMetricsService extends MetricsService {
797
+ constructor() {
798
+ super();
799
+ if (parentPort) {
800
+ parentPort.on("message", (message) => {
801
+ if (message.type === GET_METRICS_REQ) {
802
+ this.registry
803
+ .getMetricsAsJSON()
804
+ .then((metrics) => {
805
+ parentPort.postMessage({
806
+ type: GET_METRICS_RES,
807
+ requestId: message.requestId,
808
+ metrics,
809
+ });
810
+ })
811
+ .catch((error) => {
812
+ parentPort.postMessage({
813
+ type: GET_METRICS_RES,
814
+ requestId: message.requestId,
815
+ error: error.message,
816
+ });
817
+ });
818
+ }
819
+ });
820
+ }
821
+ }
822
+ }
823
+ const extractMetric = (metric, chain) => {
824
+ return metric.values.find((m) => m.labels.chain === chain)?.value;
825
+ };
826
+ export async function getSyncProgress(metrics) {
827
+ const totalBlocksMetric = await metrics.ponder_historical_total_blocks.get();
828
+ const cachedBlocksMetric = await metrics.ponder_historical_cached_blocks.get();
829
+ const completedBlocksMetric = await metrics.ponder_historical_completed_blocks.get();
830
+ const syncBlockMetric = await metrics.ponder_sync_block.get();
831
+ const syncIsRealtimeMetrics = await metrics.ponder_sync_is_realtime.get();
832
+ const syncIsCompleteMetrics = await metrics.ponder_sync_is_complete.get();
833
+ const requestCount = {};
834
+ const rpcRequestMetrics = await metrics.ponder_rpc_request_duration.get();
835
+ for (const m of rpcRequestMetrics.values) {
836
+ const chain = m.labels.chain;
837
+ if (m.metricName === "ponder_rpc_request_duration_count") {
838
+ if (requestCount[chain] === undefined) {
839
+ requestCount[chain] = 0;
840
+ }
841
+ requestCount[m.labels.chain] += m.value;
842
+ }
843
+ }
844
+ for (const [chainName, count] of Object.entries(requestCount)) {
845
+ if (metrics.rps[chainName] === undefined) {
846
+ metrics.rps[chainName] = [{ count, timestamp: Date.now() }];
847
+ }
848
+ else {
849
+ metrics.rps[chainName].push({ count, timestamp: Date.now() });
850
+ }
851
+ if (metrics.rps[chainName].length > 100) {
852
+ metrics.rps[chainName].shift();
853
+ }
854
+ }
855
+ return totalBlocksMetric.values.map(({ value, labels }) => {
856
+ const chain = labels.chain;
857
+ const totalBlocks = value;
858
+ const cachedBlocks = extractMetric(cachedBlocksMetric, chain) ?? 0;
859
+ const completedBlocks = extractMetric(completedBlocksMetric, chain) ?? 0;
860
+ const syncBlock = extractMetric(syncBlockMetric, chain);
861
+ const isRealtime = extractMetric(syncIsRealtimeMetrics, chain);
862
+ const isComplete = extractMetric(syncIsCompleteMetrics, chain);
863
+ const progress = totalBlocks === 0 ? 1 : (completedBlocks + cachedBlocks) / totalBlocks;
864
+ const _length = metrics.rps[labels.chain].length;
865
+ const _firstRps = metrics.rps[labels.chain][0];
866
+ const _lastRps = metrics.rps[labels.chain][_length - 1];
867
+ const requests = _lastRps.count - (_length > 1 ? _firstRps.count : 0);
868
+ const seconds = _length === 1 ? 0.1 : (_lastRps.timestamp - _firstRps.timestamp) / 1000;
869
+ return {
870
+ chainName: chain,
871
+ block: syncBlock,
872
+ progress,
873
+ status: isComplete ? "complete" : isRealtime ? "live" : "backfill",
874
+ rps: requests / seconds,
875
+ };
876
+ });
877
+ }
878
+ export async function getIndexingProgress(metrics) {
879
+ const indexingCompletedEventsMetric = (await metrics.ponder_indexing_completed_events.get()).values;
880
+ const indexingFunctionDurationMetric = (await metrics.ponder_indexing_function_duration.get()).values;
881
+ const indexingDurationSum = {};
882
+ const indexingDurationCount = {};
883
+ for (const m of indexingFunctionDurationMetric) {
884
+ if (m.metricName === "ponder_indexing_function_duration_sum")
885
+ indexingDurationSum[m.labels.event] = m.value;
886
+ if (m.metricName === "ponder_indexing_function_duration_count")
887
+ indexingDurationCount[m.labels.event] = m.value;
888
+ }
889
+ const events = indexingCompletedEventsMetric.map((m) => {
890
+ const count = m.value;
891
+ const durationSum = indexingDurationSum[m.labels.event] ?? 0;
892
+ const durationCount = indexingDurationCount[m.labels.event] ?? 0;
893
+ const averageDuration = durationCount === 0 ? 0 : durationSum / durationCount;
894
+ const eventName = truncate(m.labels.event);
895
+ return { eventName, count, averageDuration };
896
+ });
897
+ return {
898
+ hasError: metrics.hasError,
899
+ events,
900
+ };
901
+ }
902
+ export async function getAppProgress(metrics) {
903
+ // Note: `getRegistry` must be used because this function is used with "experimental_isolated" ordering.
904
+ const registry = await metrics.getRegistry();
905
+ const totalSecondsMetric = await registry
906
+ .getSingleMetric("ponder_historical_total_indexing_seconds")
907
+ .get();
908
+ const cachedSecondsMetric = await registry
909
+ .getSingleMetric("ponder_historical_cached_indexing_seconds")
910
+ .get();
911
+ const completedSecondsMetric = await registry
912
+ .getSingleMetric("ponder_historical_completed_indexing_seconds")
913
+ .get();
914
+ const timestampMetric = await registry
915
+ .getSingleMetric("ponder_indexing_timestamp")
916
+ .get();
917
+ const settingsMetric = await registry
918
+ .getSingleMetric("ponder_settings_info")
919
+ .get();
920
+ const ordering = settingsMetric?.values[0]
921
+ ?.labels.ordering;
922
+ switch (ordering) {
923
+ case undefined:
924
+ return {
925
+ mode: "backfill",
926
+ progress: undefined,
927
+ eta: undefined,
928
+ };
929
+ case "omnichain": {
930
+ const totalSeconds = totalSecondsMetric?.values
931
+ .map(({ value }) => value)
932
+ .reduce((prev, curr) => prev + curr, 0);
933
+ const cachedSeconds = cachedSecondsMetric?.values
934
+ .map(({ value }) => value)
935
+ .reduce((prev, curr) => prev + curr, 0);
936
+ const completedSeconds = completedSecondsMetric?.values
937
+ .map(({ value }) => value)
938
+ .reduce((prev, curr) => prev + curr, 0);
939
+ const timestamp = timestampMetric?.values
940
+ .map(({ value }) => value)
941
+ .reduce((prev, curr) => Math.max(prev, curr), 0);
942
+ const progress = timestamp === 0
943
+ ? 0
944
+ : totalSeconds === 0
945
+ ? 1
946
+ : (completedSeconds + cachedSeconds) / totalSeconds;
947
+ return {
948
+ mode: progress === 1 ? "live" : "backfill",
949
+ progress: progress,
950
+ eta: calculateEta(metrics.progressMetadata.general, totalSeconds, cachedSeconds, completedSeconds),
951
+ };
952
+ }
953
+ case "multichain":
954
+ case "experimental_isolated": {
955
+ const perChainAppProgress = [];
956
+ for (const chainName of totalSecondsMetric?.values.map(({ labels }) => labels.chain) ?? []) {
957
+ const totalSeconds = extractMetric(totalSecondsMetric, chainName);
958
+ const cachedSeconds = extractMetric(cachedSecondsMetric, chainName);
959
+ const completedSeconds = extractMetric(completedSecondsMetric, chainName);
960
+ const timestamp = extractMetric(timestampMetric, chainName);
961
+ if (totalSeconds === undefined ||
962
+ cachedSeconds === undefined ||
963
+ completedSeconds === undefined ||
964
+ timestamp === undefined) {
965
+ continue;
966
+ }
967
+ const progress = timestamp === 0
968
+ ? 0
969
+ : totalSeconds === 0
970
+ ? 1
971
+ : (completedSeconds + cachedSeconds) / totalSeconds;
972
+ if (!metrics.progressMetadata[chainName]) {
973
+ metrics.progressMetadata[chainName] = {
974
+ batches: [{ elapsedSeconds: 0, completedSeconds: 0 }],
975
+ previousTimestamp: Date.now(),
976
+ previousCompletedSeconds: 0,
977
+ rate: 0,
978
+ };
979
+ }
980
+ const eta = calculateEta(metrics.progressMetadata[chainName], totalSeconds, cachedSeconds, completedSeconds);
981
+ perChainAppProgress.push({
982
+ mode: progress === 1 ? "live" : "backfill",
983
+ progress,
984
+ eta,
985
+ });
986
+ }
987
+ return perChainAppProgress.reduce((prev, curr) => ({
988
+ mode: curr.mode === "backfill" ? curr.mode : prev.mode,
989
+ progress: prev.progress === undefined || curr.progress === undefined
990
+ ? undefined
991
+ : Math.min(prev.progress, curr.progress),
992
+ eta: curr.progress === 1
993
+ ? prev.eta
994
+ : prev.eta === undefined || curr.eta === undefined
995
+ ? undefined
996
+ : Math.max(prev.eta, curr.eta),
997
+ }), {
998
+ mode: "live",
999
+ progress: 1,
1000
+ eta: 0,
1001
+ });
1002
+ }
1003
+ }
1004
+ }
1005
+ function calculateEta(progressMetadata, totalSeconds, cachedSeconds, completedSeconds) {
1006
+ const remainingSeconds = Math.max(totalSeconds - (completedSeconds + cachedSeconds), 0);
1007
+ let eta = undefined;
1008
+ if (completedSeconds > 0) {
1009
+ const currentTimestamp = Date.now();
1010
+ progressMetadata.batches.at(-1).elapsedSeconds =
1011
+ Math.max(currentTimestamp - progressMetadata.previousTimestamp, 0) /
1012
+ 1000;
1013
+ progressMetadata.batches.at(-1).completedSeconds = Math.max(completedSeconds - progressMetadata.previousCompletedSeconds, 0);
1014
+ if (currentTimestamp - progressMetadata.previousTimestamp > 5000 &&
1015
+ progressMetadata.batches.at(-1).completedSeconds > 0) {
1016
+ progressMetadata.batches.push({
1017
+ elapsedSeconds: 0,
1018
+ completedSeconds: 0,
1019
+ });
1020
+ if (progressMetadata.batches.length > 10) {
1021
+ progressMetadata.batches.shift();
1022
+ }
1023
+ progressMetadata.previousCompletedSeconds = completedSeconds;
1024
+ progressMetadata.previousTimestamp = currentTimestamp;
1025
+ const averages = [];
1026
+ let count = 0;
1027
+ // Note: Calculate ETA only after at least 3 batches were collected for stable eta.
1028
+ if (progressMetadata.batches.length >= 3) {
1029
+ for (let i = 0; i < progressMetadata.batches.length - 1; ++i) {
1030
+ const batch = progressMetadata.batches[i];
1031
+ if (batch.completedSeconds === 0)
1032
+ continue;
1033
+ const multiplier = 1 / 1.5 ** (9 - i);
1034
+ averages.push((multiplier * batch.elapsedSeconds) / batch.completedSeconds);
1035
+ count += multiplier;
1036
+ }
1037
+ progressMetadata.rate =
1038
+ count === 0
1039
+ ? 0
1040
+ : averages.reduce((prev, curr) => prev + curr, 0) / count;
1041
+ }
1042
+ }
1043
+ if (progressMetadata.batches.length >= 3) {
1044
+ eta = progressMetadata.rate * remainingSeconds;
1045
+ }
1046
+ }
1047
+ return eta;
1048
+ }
1049
+ //# sourceMappingURL=metrics.js.map