tapimo 0.14.0 → 0.15.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 (1160) hide show
  1. package/README.md +7 -4
  2. package/dist/ApiKey.js +1 -1
  3. package/dist/ApiKey.js.map +1 -1
  4. package/dist/ApiKeys.d.ts +95 -14
  5. package/dist/ApiKeys.d.ts.map +1 -1
  6. package/dist/ApiKeys.js +360 -49
  7. package/dist/ApiKeys.js.map +1 -1
  8. package/dist/App.d.ts +12466 -10374
  9. package/dist/App.d.ts.map +1 -1
  10. package/dist/App.js +300 -22
  11. package/dist/App.js.map +1 -1
  12. package/dist/Assets.d.ts.map +1 -1
  13. package/dist/Assets.js +2 -1
  14. package/dist/Assets.js.map +1 -1
  15. package/dist/Handler.d.ts +0 -1
  16. package/dist/Handler.d.ts.map +1 -1
  17. package/dist/Handler.js +0 -1
  18. package/dist/Handler.js.map +1 -1
  19. package/dist/Scope.d.ts +13 -5
  20. package/dist/Scope.d.ts.map +1 -1
  21. package/dist/Scope.js +16 -5
  22. package/dist/Scope.js.map +1 -1
  23. package/dist/Webhooks.js +1 -1
  24. package/dist/Webhooks.js.map +1 -1
  25. package/dist/admin/App.d.ts +3057 -546
  26. package/dist/admin/App.d.ts.map +1 -1
  27. package/dist/admin/App.js +26 -5
  28. package/dist/admin/App.js.map +1 -1
  29. package/dist/admin/apps/api-keys.d.ts +179 -27
  30. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  31. package/dist/admin/apps/api-keys.js +95 -43
  32. package/dist/admin/apps/api-keys.js.map +1 -1
  33. package/dist/admin/apps/earn-vaults.d.ts +1398 -0
  34. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  35. package/dist/admin/apps/earn-vaults.js +463 -7
  36. package/dist/admin/apps/earn-vaults.js.map +1 -1
  37. package/dist/admin/apps/organizations.d.ts +267 -15
  38. package/dist/admin/apps/organizations.d.ts.map +1 -1
  39. package/dist/admin/apps/organizations.js +241 -25
  40. package/dist/admin/apps/organizations.js.map +1 -1
  41. package/dist/admin/apps/routes-support.d.ts +95 -0
  42. package/dist/admin/apps/routes-support.d.ts.map +1 -0
  43. package/dist/admin/apps/routes-support.js +151 -0
  44. package/dist/admin/apps/routes-support.js.map +1 -0
  45. package/dist/admin/apps/routes.d.ts +2764 -0
  46. package/dist/admin/apps/routes.d.ts.map +1 -0
  47. package/dist/admin/apps/routes.js +728 -0
  48. package/dist/admin/apps/routes.js.map +1 -0
  49. package/dist/admin/apps/subsidies.d.ts +501 -0
  50. package/dist/admin/apps/subsidies.d.ts.map +1 -0
  51. package/dist/admin/apps/subsidies.js +384 -0
  52. package/dist/admin/apps/subsidies.js.map +1 -0
  53. package/dist/admin/apps/verified-tokens.d.ts +166 -160
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +27 -7
  56. package/dist/admin/apps/verified-tokens.js.map +1 -1
  57. package/dist/admin/ui.generated.d.ts +1 -1
  58. package/dist/admin/ui.generated.d.ts.map +1 -1
  59. package/dist/admin/ui.generated.js +201 -149
  60. package/dist/admin/ui.generated.js.map +1 -1
  61. package/dist/analytics/Analytics.d.ts +5 -2
  62. package/dist/analytics/Analytics.d.ts.map +1 -1
  63. package/dist/analytics/Analytics.js +31 -1
  64. package/dist/analytics/Analytics.js.map +1 -1
  65. package/dist/analytics/tables/requestEvents.d.ts +2 -1
  66. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  67. package/dist/analytics/tables/requestEvents.js +10 -1
  68. package/dist/analytics/tables/requestEvents.js.map +1 -1
  69. package/dist/analytics/tables/routesLifecycleIntervals.d.ts +72 -0
  70. package/dist/analytics/tables/routesLifecycleIntervals.d.ts.map +1 -0
  71. package/dist/analytics/tables/routesLifecycleIntervals.js +56 -0
  72. package/dist/analytics/tables/routesLifecycleIntervals.js.map +1 -0
  73. package/dist/apps/Zones.d.ts +21 -12526
  74. package/dist/apps/Zones.d.ts.map +1 -1
  75. package/dist/apps/Zones.js +37 -5
  76. package/dist/apps/Zones.js.map +1 -1
  77. package/dist/apps/data/App.d.ts +3971 -2595
  78. package/dist/apps/data/App.d.ts.map +1 -1
  79. package/dist/apps/data/App.js +76 -21
  80. package/dist/apps/data/App.js.map +1 -1
  81. package/dist/apps/data/routes/activities.d.ts +629 -299
  82. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  83. package/dist/apps/data/routes/activities.js +495 -190
  84. package/dist/apps/data/routes/activities.js.map +1 -1
  85. package/dist/apps/data/routes/addresses.d.ts +72 -0
  86. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  87. package/dist/apps/data/routes/blocks.d.ts +116 -116
  88. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  89. package/dist/apps/data/routes/coingecko.js +47 -21
  90. package/dist/apps/data/routes/coingecko.js.map +1 -1
  91. package/dist/apps/data/routes/earn.d.ts +1450 -337
  92. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  93. package/dist/apps/data/routes/earn.js +1226 -144
  94. package/dist/apps/data/routes/earn.js.map +1 -1
  95. package/dist/apps/data/routes/fee-amm.d.ts +113 -108
  96. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  97. package/dist/apps/data/routes/fee-amm.js +41 -21
  98. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  99. package/dist/apps/data/routes/indexer.d.ts +142 -17
  100. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  101. package/dist/apps/data/routes/indexer.js +83 -27
  102. package/dist/apps/data/routes/indexer.js.map +1 -1
  103. package/dist/apps/data/routes/receipts.d.ts +235 -235
  104. package/dist/apps/data/routes/rpc.d.ts +507 -33
  105. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  106. package/dist/apps/data/routes/rpc.js +309 -165
  107. package/dist/apps/data/routes/rpc.js.map +1 -1
  108. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  109. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  110. package/dist/apps/data/routes/tokenlist.js +68 -11
  111. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  112. package/dist/apps/data/routes/tokens.d.ts +2 -0
  113. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  114. package/dist/apps/data/routes/tokens.js +26 -14
  115. package/dist/apps/data/routes/tokens.js.map +1 -1
  116. package/dist/apps/data/routes/transfers.d.ts +93 -77
  117. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  118. package/dist/apps/data/routes/transfers.js +9 -7
  119. package/dist/apps/data/routes/transfers.js.map +1 -1
  120. package/dist/apps/data/routes/valuation.d.ts +32 -32
  121. package/dist/apps/data/routes/verified-tokens.d.ts +88 -88
  122. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  123. package/dist/apps/data/routes/verified-tokens.js +64 -20
  124. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  125. package/dist/apps/data/routes/webhooks.d.ts +614 -177
  126. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  127. package/dist/apps/data/routes/webhooks.js +308 -205
  128. package/dist/apps/data/routes/webhooks.js.map +1 -1
  129. package/dist/apps/data/routes/zones.d.ts +31 -31
  130. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  131. package/dist/apps/data/routes/zones.js +20 -12
  132. package/dist/apps/data/routes/zones.js.map +1 -1
  133. package/dist/apps/docs/reference.js +2 -2
  134. package/dist/apps/docs/reference.js.map +1 -1
  135. package/dist/apps/index.d.ts +1 -1
  136. package/dist/apps/index.d.ts.map +1 -1
  137. package/dist/apps/index.js +1 -1
  138. package/dist/apps/index.js.map +1 -1
  139. package/dist/apps/management/App.d.ts +3780 -3402
  140. package/dist/apps/management/App.d.ts.map +1 -1
  141. package/dist/apps/management/App.js +5 -14
  142. package/dist/apps/management/App.js.map +1 -1
  143. package/dist/apps/management/Billing.d.ts +48 -7
  144. package/dist/apps/management/Billing.d.ts.map +1 -1
  145. package/dist/apps/management/Billing.js +204 -25
  146. package/dist/apps/management/Billing.js.map +1 -1
  147. package/dist/apps/management/routes/api-keys.d.ts +317 -215
  148. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  149. package/dist/apps/management/routes/api-keys.js +43 -15
  150. package/dist/apps/management/routes/api-keys.js.map +1 -1
  151. package/dist/apps/management/routes/billing.d.ts +290 -4
  152. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  153. package/dist/apps/management/routes/billing.js +274 -49
  154. package/dist/apps/management/routes/billing.js.map +1 -1
  155. package/dist/apps/management/routes/faucet.d.ts +6 -6
  156. package/dist/apps/management/routes/faucet.js +1 -1
  157. package/dist/apps/management/routes/faucet.js.map +1 -1
  158. package/dist/apps/management/routes/invitations.d.ts +213 -138
  159. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  160. package/dist/apps/management/routes/invitations.js +117 -13
  161. package/dist/apps/management/routes/invitations.js.map +1 -1
  162. package/dist/apps/management/routes/invite-links.d.ts +166 -166
  163. package/dist/apps/management/routes/me.d.ts.map +1 -1
  164. package/dist/apps/management/routes/me.js +6 -2
  165. package/dist/apps/management/routes/me.js.map +1 -1
  166. package/dist/apps/management/routes/members.d.ts +30 -30
  167. package/dist/apps/management/routes/orgs.d.ts +103 -87
  168. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  169. package/dist/apps/management/routes/orgs.js +52 -12
  170. package/dist/apps/management/routes/orgs.js.map +1 -1
  171. package/dist/apps/management/routes/projects.d.ts +125 -125
  172. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  173. package/dist/apps/management/routes/projects.js +6 -1
  174. package/dist/apps/management/routes/projects.js.map +1 -1
  175. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  176. package/dist/apps/management/routes/scopes.js +4 -1
  177. package/dist/apps/management/routes/scopes.js.map +1 -1
  178. package/dist/apps/management/routes/usage.d.ts +24 -24
  179. package/dist/apps/management/routes/usage.js +21 -4
  180. package/dist/apps/management/routes/usage.js.map +1 -1
  181. package/dist/apps/management/routes/verified-token-requests.d.ts +95 -95
  182. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  183. package/dist/apps/management/routes/verified-token-requests.js +7 -9
  184. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  185. package/dist/apps/management/routes/webhooks.d.ts +682 -616
  186. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  187. package/dist/apps/management/routes/webhooks.js +58 -12
  188. package/dist/apps/management/routes/webhooks.js.map +1 -1
  189. package/dist/apps/mcp.d.ts +1 -1
  190. package/dist/apps/mcp.d.ts.map +1 -1
  191. package/dist/apps/mcp.js +23 -10
  192. package/dist/apps/mcp.js.map +1 -1
  193. package/dist/apps/mpp/App.d.ts +44 -44
  194. package/dist/apps/mpp/App.d.ts.map +1 -1
  195. package/dist/apps/mpp/App.js +35 -7
  196. package/dist/apps/mpp/App.js.map +1 -1
  197. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  198. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  199. package/dist/apps/mpp/internal/Adapter.js +30 -1
  200. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  201. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  202. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  203. package/dist/apps/mpp/internal/Policy.js +24 -6
  204. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  205. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  206. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  207. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  208. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  209. package/dist/apps/relay/App.d.ts +2 -0
  210. package/dist/apps/relay/App.d.ts.map +1 -1
  211. package/dist/apps/relay/App.js +134 -75
  212. package/dist/apps/relay/App.js.map +1 -1
  213. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  214. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  215. package/dist/apps/relay/Sponsorships.js +209 -28
  216. package/dist/apps/relay/Sponsorships.js.map +1 -1
  217. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  218. package/dist/apps/routes/Access.d.ts.map +1 -0
  219. package/dist/apps/{funding → routes}/Access.js +4 -4
  220. package/dist/apps/routes/Access.js.map +1 -0
  221. package/dist/apps/{funding → routes}/App.d.ts +418 -124
  222. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  223. package/dist/apps/{funding → routes}/App.js +16 -16
  224. package/dist/apps/routes/App.js.map +1 -0
  225. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  226. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  227. package/dist/apps/routes/Inventory.js.map +1 -0
  228. package/dist/apps/routes/index.d.ts +2 -0
  229. package/dist/apps/routes/index.d.ts.map +1 -0
  230. package/dist/apps/routes/index.js +2 -0
  231. package/dist/apps/routes/index.js.map +1 -0
  232. package/dist/apps/{funding → routes}/routes/chains.d.ts +32 -32
  233. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  234. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  235. package/dist/apps/routes/routes/chains.js.map +1 -0
  236. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +107 -43
  237. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  238. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +497 -222
  239. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  240. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  241. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  242. package/dist/apps/routes/routes/providers.js +57 -0
  243. package/dist/apps/routes/routes/providers.js.map +1 -0
  244. package/dist/apps/{funding → routes}/routes/quotes.d.ts +106 -103
  245. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  246. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  247. package/dist/apps/routes/routes/quotes.js.map +1 -0
  248. package/dist/apps/{funding → routes}/routes/transfers.d.ts +733 -428
  249. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  250. package/dist/apps/routes/routes/transfers.js +1140 -0
  251. package/dist/apps/routes/routes/transfers.js.map +1 -0
  252. package/dist/cli/Cli.d.ts +30 -0
  253. package/dist/cli/Cli.d.ts.map +1 -1
  254. package/dist/cli/commands/admin.d.ts +36 -0
  255. package/dist/cli/commands/admin.d.ts.map +1 -1
  256. package/dist/cli/commands/admin.js +273 -0
  257. package/dist/cli/commands/admin.js.map +1 -1
  258. package/dist/cloudflare.d.ts +16 -14
  259. package/dist/cloudflare.d.ts.map +1 -1
  260. package/dist/cloudflare.js +26 -21
  261. package/dist/cloudflare.js.map +1 -1
  262. package/dist/db/Db.d.ts +63 -21
  263. package/dist/db/Db.d.ts.map +1 -1
  264. package/dist/db/Db.js +1035 -15
  265. package/dist/db/Db.js.map +1 -1
  266. package/dist/db/Schema.d.ts +780 -133
  267. package/dist/db/Schema.d.ts.map +1 -1
  268. package/dist/db/Schema.js +575 -162
  269. package/dist/db/Schema.js.map +1 -1
  270. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  271. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  272. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  273. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  274. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  275. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  276. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  277. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  278. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  279. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  280. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  281. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  282. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  283. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  284. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  285. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  286. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  287. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  288. package/dist/db/tables/apiKeyRevocations.js +98 -0
  289. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  290. package/dist/db/tables/authAccounts.d.ts +47 -0
  291. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  292. package/dist/db/tables/authAccounts.js +72 -0
  293. package/dist/db/tables/authAccounts.js.map +1 -0
  294. package/dist/db/tables/authSessions.d.ts +12 -0
  295. package/dist/db/tables/authSessions.d.ts.map +1 -0
  296. package/dist/db/tables/authSessions.js +2 -0
  297. package/dist/db/tables/authSessions.js.map +1 -0
  298. package/dist/db/tables/authVerifications.d.ts +12 -0
  299. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  300. package/dist/db/tables/authVerifications.js +2 -0
  301. package/dist/db/tables/authVerifications.js.map +1 -0
  302. package/dist/db/tables/invitations.d.ts +17 -1
  303. package/dist/db/tables/invitations.d.ts.map +1 -1
  304. package/dist/db/tables/invitations.js +123 -43
  305. package/dist/db/tables/invitations.js.map +1 -1
  306. package/dist/db/tables/memberships.d.ts +8 -0
  307. package/dist/db/tables/memberships.d.ts.map +1 -1
  308. package/dist/db/tables/memberships.js +51 -2
  309. package/dist/db/tables/memberships.js.map +1 -1
  310. package/dist/db/tables/organizations.d.ts +32 -10
  311. package/dist/db/tables/organizations.d.ts.map +1 -1
  312. package/dist/db/tables/organizations.js +110 -49
  313. package/dist/db/tables/organizations.js.map +1 -1
  314. package/dist/db/tables/projects.d.ts +2 -0
  315. package/dist/db/tables/projects.d.ts.map +1 -1
  316. package/dist/db/tables/projects.js +12 -3
  317. package/dist/db/tables/projects.js.map +1 -1
  318. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  319. package/dist/db/tables/requestUsage.js.map +1 -1
  320. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  321. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  322. package/dist/db/tables/rewardAccounts.js +88 -0
  323. package/dist/db/tables/rewardAccounts.js.map +1 -0
  324. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  325. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  326. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  327. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  328. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  329. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  330. package/dist/db/tables/rewardCampaigns.js +392 -0
  331. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  332. package/dist/db/tables/rewardCredits.d.ts +53 -0
  333. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  334. package/dist/db/tables/rewardCredits.js +63 -0
  335. package/dist/db/tables/rewardCredits.js.map +1 -0
  336. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  337. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  338. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  339. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  340. package/dist/db/tables/rewardRuns.d.ts +188 -0
  341. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  342. package/dist/db/tables/rewardRuns.js +278 -0
  343. package/dist/db/tables/rewardRuns.js.map +1 -0
  344. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  345. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  346. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  347. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  348. package/dist/db/tables/routesCatalog.d.ts +58 -0
  349. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  350. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  351. package/dist/db/tables/routesCatalog.js.map +1 -0
  352. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  353. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  354. package/dist/db/tables/routesDepositAddresses.js +587 -0
  355. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  356. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  357. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  358. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  359. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  360. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  361. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  362. package/dist/db/tables/routesDeposits.js +576 -0
  363. package/dist/db/tables/routesDeposits.js.map +1 -0
  364. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  365. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  366. package/dist/db/tables/routesIdempotency.js +330 -0
  367. package/dist/db/tables/routesIdempotency.js.map +1 -0
  368. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  369. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  370. package/dist/db/tables/routesSubsidies.js +45 -0
  371. package/dist/db/tables/routesSubsidies.js.map +1 -0
  372. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  373. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  374. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  375. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  376. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  377. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  378. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  379. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  380. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  381. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  382. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  383. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  384. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  385. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  386. package/dist/db/tables/{fundingTransferTransactions.js → routesTransferTransactions.js} +31 -13
  387. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  388. package/dist/db/tables/routesTransfers.d.ts +319 -0
  389. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  390. package/dist/db/tables/routesTransfers.js +372 -0
  391. package/dist/db/tables/routesTransfers.js.map +1 -0
  392. package/dist/db/tables/sponsoredTransactions.d.ts +75 -20
  393. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  394. package/dist/db/tables/sponsoredTransactions.js +124 -54
  395. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  396. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  397. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  398. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  399. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  400. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  401. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  402. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  403. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  404. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  405. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  406. package/dist/db/tables/stripeCustomers.js +13 -0
  407. package/dist/db/tables/stripeCustomers.js.map +1 -1
  408. package/dist/db/tables/users.d.ts +17 -1
  409. package/dist/db/tables/users.d.ts.map +1 -1
  410. package/dist/db/tables/users.js +47 -2
  411. package/dist/db/tables/users.js.map +1 -1
  412. package/dist/db/tables/verifiedTokenRequests.d.ts +21 -4
  413. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
  414. package/dist/db/tables/verifiedTokenRequests.js +65 -44
  415. package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
  416. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  417. package/dist/db/tables/webhookQueueEvents.js +5 -1
  418. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  419. package/dist/db/tables/webhookSubscriptions.d.ts +19 -11
  420. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  421. package/dist/db/tables/webhookSubscriptions.js +45 -13
  422. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  423. package/dist/handlers/internal/executionError.d.ts +2 -2
  424. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  425. package/dist/handlers/internal/executionError.js +1 -2
  426. package/dist/handlers/internal/executionError.js.map +1 -1
  427. package/dist/handlers/internal/multisig.d.ts +4 -232
  428. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  429. package/dist/handlers/internal/multisig.js +11 -537
  430. package/dist/handlers/internal/multisig.js.map +1 -1
  431. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  432. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  433. package/dist/handlers/internal/sponsorship.js +13 -9
  434. package/dist/handlers/internal/sponsorship.js.map +1 -1
  435. package/dist/handlers/relay.d.ts +9 -12
  436. package/dist/handlers/relay.d.ts.map +1 -1
  437. package/dist/handlers/relay.js +81 -85
  438. package/dist/handlers/relay.js.map +1 -1
  439. package/dist/index.d.ts +0 -17
  440. package/dist/index.d.ts.map +1 -1
  441. package/dist/index.js +0 -17
  442. package/dist/index.js.map +1 -1
  443. package/dist/internal/AssetResponse.d.ts +12 -0
  444. package/dist/internal/AssetResponse.d.ts.map +1 -0
  445. package/dist/internal/AssetResponse.js +21 -0
  446. package/dist/internal/AssetResponse.js.map +1 -0
  447. package/dist/internal/Auth.d.ts +64 -12
  448. package/dist/internal/Auth.d.ts.map +1 -1
  449. package/dist/internal/Auth.js +631 -180
  450. package/dist/internal/Auth.js.map +1 -1
  451. package/dist/internal/BetterAuth.d.ts +1488 -0
  452. package/dist/internal/BetterAuth.d.ts.map +1 -0
  453. package/dist/internal/BetterAuth.js +253 -0
  454. package/dist/internal/BetterAuth.js.map +1 -0
  455. package/dist/internal/Cache.d.ts +2 -0
  456. package/dist/internal/Cache.d.ts.map +1 -1
  457. package/dist/internal/Cache.js +2 -0
  458. package/dist/internal/Cache.js.map +1 -1
  459. package/dist/internal/EarnRates.d.ts +26 -3
  460. package/dist/internal/EarnRates.d.ts.map +1 -1
  461. package/dist/internal/EarnRates.js +84 -19
  462. package/dist/internal/EarnRates.js.map +1 -1
  463. package/dist/internal/EarnSharePrices.d.ts +120 -0
  464. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  465. package/dist/internal/EarnSharePrices.js +179 -0
  466. package/dist/internal/EarnSharePrices.js.map +1 -0
  467. package/dist/internal/EarnVaults.d.ts +4 -0
  468. package/dist/internal/EarnVaults.d.ts.map +1 -1
  469. package/dist/internal/EarnVaults.js +27 -10
  470. package/dist/internal/EarnVaults.js.map +1 -1
  471. package/dist/internal/Email.d.ts +37 -0
  472. package/dist/internal/Email.d.ts.map +1 -0
  473. package/dist/internal/Email.js +16 -0
  474. package/dist/internal/Email.js.map +1 -0
  475. package/dist/internal/Log.d.ts +32 -28
  476. package/dist/internal/Log.d.ts.map +1 -1
  477. package/dist/internal/Log.js +18 -11
  478. package/dist/internal/Log.js.map +1 -1
  479. package/dist/internal/MetricSink.d.ts +3 -0
  480. package/dist/internal/MetricSink.d.ts.map +1 -1
  481. package/dist/internal/MetricSink.js +67 -8
  482. package/dist/internal/MetricSink.js.map +1 -1
  483. package/dist/internal/Mpp.d.ts.map +1 -1
  484. package/dist/internal/Mpp.js +20 -25
  485. package/dist/internal/Mpp.js.map +1 -1
  486. package/dist/internal/OpenApi.d.ts +26 -3
  487. package/dist/internal/OpenApi.d.ts.map +1 -1
  488. package/dist/internal/OpenApi.js +25 -10
  489. package/dist/internal/OpenApi.js.map +1 -1
  490. package/dist/internal/Provider.d.ts +1 -1
  491. package/dist/internal/Provider.d.ts.map +1 -1
  492. package/dist/internal/RateLimit.d.ts.map +1 -1
  493. package/dist/internal/RateLimit.js +13 -1
  494. package/dist/internal/RateLimit.js.map +1 -1
  495. package/dist/internal/Store.d.ts +16 -0
  496. package/dist/internal/Store.d.ts.map +1 -1
  497. package/dist/internal/Store.js +59 -8
  498. package/dist/internal/Store.js.map +1 -1
  499. package/dist/internal/Tidx.d.ts +9 -2
  500. package/dist/internal/Tidx.d.ts.map +1 -1
  501. package/dist/internal/Tidx.js +78 -11
  502. package/dist/internal/Tidx.js.map +1 -1
  503. package/dist/internal/Timing.d.ts +26 -0
  504. package/dist/internal/Timing.d.ts.map +1 -1
  505. package/dist/internal/Timing.js +63 -5
  506. package/dist/internal/Timing.js.map +1 -1
  507. package/dist/internal/VercelOidc.d.ts +94 -0
  508. package/dist/internal/VercelOidc.d.ts.map +1 -0
  509. package/dist/internal/VercelOidc.js +128 -0
  510. package/dist/internal/VercelOidc.js.map +1 -0
  511. package/dist/internal/VerifiedTokens.d.ts +2 -8
  512. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  513. package/dist/internal/VerifiedTokens.js +24 -24
  514. package/dist/internal/VerifiedTokens.js.map +1 -1
  515. package/dist/internal/Viem.d.ts +30 -2067
  516. package/dist/internal/Viem.d.ts.map +1 -1
  517. package/dist/internal/Viem.js +167 -17
  518. package/dist/internal/Viem.js.map +1 -1
  519. package/dist/internal/Webhooks.d.ts +12 -4
  520. package/dist/internal/Webhooks.d.ts.map +1 -1
  521. package/dist/internal/Webhooks.js +9 -3
  522. package/dist/internal/Webhooks.js.map +1 -1
  523. package/dist/internal/ZoneRpc.d.ts +7 -0
  524. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  525. package/dist/internal/ZoneRpc.js +49 -0
  526. package/dist/internal/ZoneRpc.js.map +1 -0
  527. package/dist/internal/index.d.ts +3 -1
  528. package/dist/internal/index.d.ts.map +1 -1
  529. package/dist/internal/index.js +3 -1
  530. package/dist/internal/index.js.map +1 -1
  531. package/dist/internal/rewards/Audit.d.ts +88 -0
  532. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  533. package/dist/internal/rewards/Audit.js +134 -0
  534. package/dist/internal/rewards/Audit.js.map +1 -0
  535. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  536. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  537. package/dist/internal/rewards/Campaigns.js +531 -0
  538. package/dist/internal/rewards/Campaigns.js.map +1 -0
  539. package/dist/internal/rewards/Credits.d.ts +76 -0
  540. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  541. package/dist/internal/rewards/Credits.js +95 -0
  542. package/dist/internal/rewards/Credits.js.map +1 -0
  543. package/dist/internal/rewards/Events.d.ts +100 -0
  544. package/dist/internal/rewards/Events.d.ts.map +1 -0
  545. package/dist/internal/rewards/Events.js +340 -0
  546. package/dist/internal/rewards/Events.js.map +1 -0
  547. package/dist/internal/rewards/Projection.d.ts +237 -0
  548. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  549. package/dist/internal/rewards/Projection.js +616 -0
  550. package/dist/internal/rewards/Projection.js.map +1 -0
  551. package/dist/internal/rewards/Rates.d.ts +44 -0
  552. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  553. package/dist/internal/rewards/Rates.js +60 -0
  554. package/dist/internal/rewards/Rates.js.map +1 -0
  555. package/dist/internal/rewards/Read.d.ts +158 -0
  556. package/dist/internal/rewards/Read.d.ts.map +1 -0
  557. package/dist/internal/rewards/Read.js +292 -0
  558. package/dist/internal/rewards/Read.js.map +1 -0
  559. package/dist/internal/rewards/Runner.d.ts +164 -0
  560. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  561. package/dist/internal/rewards/Runner.js +1778 -0
  562. package/dist/internal/rewards/Runner.js.map +1 -0
  563. package/dist/internal/rewards/Signer.d.ts +224 -0
  564. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  565. package/dist/internal/rewards/Signer.js +135 -0
  566. package/dist/internal/rewards/Signer.js.map +1 -0
  567. package/dist/internal/rewards/index.d.ts +15 -0
  568. package/dist/internal/rewards/index.d.ts.map +1 -0
  569. package/dist/internal/rewards/index.js +15 -0
  570. package/dist/internal/rewards/index.js.map +1 -0
  571. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  572. package/dist/internal/routes/Action.d.ts.map +1 -0
  573. package/dist/internal/{funding → routes}/Action.js +17 -9
  574. package/dist/internal/routes/Action.js.map +1 -0
  575. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  576. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  577. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  578. package/dist/internal/routes/Catalog.js.map +1 -0
  579. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  580. package/dist/internal/routes/Chain.d.ts.map +1 -0
  581. package/dist/internal/{funding → routes}/Chain.js +3 -3
  582. package/dist/internal/routes/Chain.js.map +1 -0
  583. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  584. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  585. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  586. package/dist/internal/routes/Deposit.js.map +1 -0
  587. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  588. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  589. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  590. package/dist/internal/routes/DepositAddress.js.map +1 -0
  591. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  592. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  593. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -4
  594. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  595. package/dist/internal/routes/Economics.d.ts +25 -0
  596. package/dist/internal/routes/Economics.d.ts.map +1 -0
  597. package/dist/internal/routes/Economics.js +28 -0
  598. package/dist/internal/routes/Economics.js.map +1 -0
  599. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  600. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  601. package/dist/internal/{funding → routes}/Evidence.js +7 -7
  602. package/dist/internal/routes/Evidence.js.map +1 -0
  603. package/dist/internal/routes/Observability.d.ts +154 -0
  604. package/dist/internal/routes/Observability.d.ts.map +1 -0
  605. package/dist/internal/routes/Observability.js +389 -0
  606. package/dist/internal/routes/Observability.js.map +1 -0
  607. package/dist/internal/{funding → routes}/Provider.d.ts +311 -105
  608. package/dist/internal/routes/Provider.d.ts.map +1 -0
  609. package/dist/internal/{funding → routes}/Provider.js +229 -98
  610. package/dist/internal/routes/Provider.js.map +1 -0
  611. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  612. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  613. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  614. package/dist/internal/routes/Reconciliation.js.map +1 -0
  615. package/dist/internal/routes/Route.d.ts +21 -0
  616. package/dist/internal/routes/Route.d.ts.map +1 -0
  617. package/dist/internal/{funding → routes}/Route.js +1 -1
  618. package/dist/internal/routes/Route.js.map +1 -0
  619. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  620. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  621. package/dist/internal/{funding → routes}/SourceObservation.js +8 -8
  622. package/dist/internal/routes/SourceObservation.js.map +1 -0
  623. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  624. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  625. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  626. package/dist/internal/routes/Subsidy.js.map +1 -0
  627. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  628. package/dist/internal/routes/Token.d.ts.map +1 -0
  629. package/dist/internal/{funding → routes}/Token.js +3 -3
  630. package/dist/internal/routes/Token.js.map +1 -0
  631. package/dist/internal/{funding → routes}/Transfer.d.ts +241 -46
  632. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  633. package/dist/internal/routes/Transfer.js +728 -0
  634. package/dist/internal/routes/Transfer.js.map +1 -0
  635. package/dist/internal/{funding → routes}/TransferReconciliation.d.ts +13 -10
  636. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  637. package/dist/internal/routes/TransferReconciliation.js +422 -0
  638. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  639. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  640. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  641. package/dist/internal/routes/TransferSubsidy.js +256 -0
  642. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  643. package/dist/internal/{funding → routes}/TransferWebhook.d.ts +5 -5
  644. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  645. package/dist/internal/{funding → routes}/TransferWebhook.js +3 -3
  646. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  647. package/dist/internal/{funding → routes}/index.d.ts +2 -0
  648. package/dist/internal/routes/index.d.ts.map +1 -0
  649. package/dist/internal/{funding → routes}/index.js +2 -0
  650. package/dist/internal/routes/index.js.map +1 -0
  651. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  652. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  653. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  654. package/dist/internal/routes/providers/across.js.map +1 -0
  655. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  656. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  657. package/dist/internal/{funding → routes}/providers/relay.js +194 -110
  658. package/dist/internal/routes/providers/relay.js.map +1 -0
  659. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  660. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  661. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  662. package/dist/internal/routes/providers/rhino.js.map +1 -0
  663. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  664. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  665. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  666. package/dist/internal/routes/providers/squid.js.map +1 -0
  667. package/dist/internal/{funding → routes}/providers/stargate.d.ts +46 -18
  668. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  669. package/dist/internal/routes/providers/stargate.js +898 -0
  670. package/dist/internal/routes/providers/stargate.js.map +1 -0
  671. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  672. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  673. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  674. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  675. package/dist/internal/webhookDestinations/slack.js +12 -12
  676. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  677. package/dist/providers/index.d.ts +12 -12
  678. package/dist/providers/index.d.ts.map +1 -1
  679. package/dist/providers/index.js +12 -12
  680. package/dist/providers/index.js.map +1 -1
  681. package/dist/server.d.ts +19 -0
  682. package/dist/server.d.ts.map +1 -0
  683. package/dist/server.js +19 -0
  684. package/dist/server.js.map +1 -0
  685. package/package.json +15 -4
  686. package/src/ApiKey.ts +1 -1
  687. package/src/ApiKeys.test.ts +1033 -3
  688. package/src/ApiKeys.ts +489 -48
  689. package/src/App.test-d.ts +1 -1
  690. package/src/App.test.ts +216 -25
  691. package/src/App.ts +334 -31
  692. package/src/Assets.test.ts +2 -2
  693. package/src/Assets.ts +3 -1
  694. package/src/Auth.test-d.ts +1 -1
  695. package/src/Client.test-d.ts +539 -110
  696. package/src/Handler.ts +0 -1
  697. package/src/OpenApi.contract.test.ts +195 -0
  698. package/src/Scope.ts +17 -5
  699. package/src/Webhooks.ts +1 -1
  700. package/src/admin/App.test.ts +30 -2
  701. package/src/admin/App.ts +42 -6
  702. package/src/admin/apps/api-keys.test.ts +267 -5
  703. package/src/admin/apps/api-keys.ts +100 -50
  704. package/src/admin/apps/earn-vaults.test.ts +158 -0
  705. package/src/admin/apps/earn-vaults.ts +679 -6
  706. package/src/admin/apps/organizations.test.ts +306 -17
  707. package/src/admin/apps/organizations.ts +299 -24
  708. package/src/admin/apps/routes-support.test.ts +200 -0
  709. package/src/admin/apps/routes-support.ts +201 -0
  710. package/src/admin/apps/routes.test.ts +450 -0
  711. package/src/admin/apps/routes.ts +896 -0
  712. package/src/admin/apps/scopes.test.ts +15 -5
  713. package/src/admin/apps/subsidies.test.ts +306 -0
  714. package/src/admin/apps/subsidies.ts +457 -0
  715. package/src/admin/apps/verified-tokens.test.ts +40 -3
  716. package/src/admin/apps/verified-tokens.ts +33 -7
  717. package/src/admin/ui/plugin.ts +1 -2
  718. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  719. package/src/admin/ui/src/lib/config.ts +11 -2
  720. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  721. package/src/admin/ui/src/lib/organizations.test.ts +83 -50
  722. package/src/admin/ui/src/lib/organizations.ts +106 -25
  723. package/src/admin/ui/src/lib/query-client.ts +1 -1
  724. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  725. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  726. package/src/admin/ui/src/lib/routes.ts +304 -0
  727. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  728. package/src/admin/ui/src/lib/verified-tokens.ts +24 -9
  729. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  730. package/src/admin/ui/src/routes/__root.tsx +13 -2
  731. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  732. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  733. package/src/admin/ui/src/routes/organizations.tsx +34 -4
  734. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +239 -23
  735. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  736. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  737. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  738. package/src/admin/ui/src/routes/verified-tokens.tsx +64 -20
  739. package/src/admin/ui.generated.ts +202 -188
  740. package/src/analytics/Analytics.test.ts +108 -18
  741. package/src/analytics/Analytics.ts +38 -6
  742. package/src/analytics/tables/requestEvents.test.ts +100 -0
  743. package/src/analytics/tables/requestEvents.ts +10 -1
  744. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  745. package/src/apps/Zones.test.ts +15 -0
  746. package/src/apps/Zones.ts +52 -5
  747. package/src/apps/composition.test.ts +68 -60
  748. package/src/apps/data/App.test.ts +180 -2
  749. package/src/apps/data/App.ts +88 -28
  750. package/src/apps/data/routes/activities.test.ts +419 -7
  751. package/src/apps/data/routes/activities.ts +683 -216
  752. package/src/apps/data/routes/balances.test.ts +2 -2
  753. package/src/apps/data/routes/blocks.test.ts +46 -1
  754. package/src/apps/data/routes/coingecko.test.ts +419 -1
  755. package/src/apps/data/routes/coingecko.ts +309 -253
  756. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  757. package/src/apps/data/routes/earn.test.ts +1294 -17
  758. package/src/apps/data/routes/earn.ts +1838 -321
  759. package/src/apps/data/routes/exchanges.test.ts +12 -15
  760. package/src/apps/data/routes/fee-amm.test.ts +243 -0
  761. package/src/apps/data/routes/fee-amm.ts +201 -162
  762. package/src/apps/data/routes/indexer.test.ts +389 -0
  763. package/src/apps/data/routes/indexer.ts +165 -69
  764. package/src/apps/data/routes/receipts.test.ts +1 -1
  765. package/src/apps/data/routes/rpc.test.ts +384 -8
  766. package/src/apps/data/routes/rpc.ts +452 -227
  767. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  768. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  769. package/src/apps/data/routes/tokenlist.ts +173 -88
  770. package/src/apps/data/routes/tokens.test.ts +93 -3
  771. package/src/apps/data/routes/tokens.ts +39 -23
  772. package/src/apps/data/routes/transactions.test.ts +1 -1
  773. package/src/apps/data/routes/transfers.test.ts +56 -24
  774. package/src/apps/data/routes/transfers.ts +19 -8
  775. package/src/apps/data/routes/valuation.test.ts +1 -1
  776. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  777. package/src/apps/data/routes/verified-tokens.ts +99 -29
  778. package/src/apps/data/routes/webhooks.scan.test.ts +29 -0
  779. package/src/apps/data/routes/webhooks.test.ts +651 -83
  780. package/src/apps/data/routes/webhooks.ts +1113 -868
  781. package/src/apps/data/routes/zones.test.ts +148 -71
  782. package/src/apps/data/routes/zones.ts +71 -55
  783. package/src/apps/docs/reference.ts +2 -2
  784. package/src/apps/index.ts +1 -1
  785. package/src/apps/management/App.ts +9 -51
  786. package/src/apps/management/Billing.test.ts +375 -14
  787. package/src/apps/management/Billing.ts +265 -29
  788. package/src/apps/management/routes/api-keys.test.ts +269 -7
  789. package/src/apps/management/routes/api-keys.ts +61 -20
  790. package/src/apps/management/routes/billing.test.ts +477 -15
  791. package/src/apps/management/routes/billing.ts +377 -50
  792. package/src/apps/management/routes/faucet.test.ts +1 -1
  793. package/src/apps/management/routes/faucet.ts +1 -1
  794. package/src/apps/management/routes/invitations.test.ts +270 -3
  795. package/src/apps/management/routes/invitations.ts +185 -15
  796. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  797. package/src/apps/management/routes/me.test.ts +246 -5
  798. package/src/apps/management/routes/me.ts +7 -2
  799. package/src/apps/management/routes/members.test.ts +108 -0
  800. package/src/apps/management/routes/orgs.test.ts +191 -3
  801. package/src/apps/management/routes/orgs.ts +58 -11
  802. package/src/apps/management/routes/projects.test.ts +33 -3
  803. package/src/apps/management/routes/projects.ts +6 -1
  804. package/src/apps/management/routes/scopes.test.ts +30 -2
  805. package/src/apps/management/routes/scopes.ts +4 -1
  806. package/src/apps/management/routes/usage.test.ts +32 -0
  807. package/src/apps/management/routes/usage.ts +22 -4
  808. package/src/apps/management/routes/verified-token-requests.test.ts +16 -2
  809. package/src/apps/management/routes/verified-token-requests.ts +7 -10
  810. package/src/apps/management/routes/webhooks.test.ts +49 -26
  811. package/src/apps/management/routes/webhooks.ts +78 -22
  812. package/src/apps/mcp.test.ts +113 -30
  813. package/src/apps/mcp.ts +22 -10
  814. package/src/apps/mpp/App.ts +37 -7
  815. package/src/apps/mpp/Mpp.test.ts +49 -8
  816. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  817. package/src/apps/mpp/internal/Adapter.ts +34 -0
  818. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  819. package/src/apps/mpp/internal/Policy.ts +49 -7
  820. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  821. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  822. package/src/apps/relay/App.test.ts +839 -64
  823. package/src/apps/relay/App.ts +148 -81
  824. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  825. package/src/apps/relay/Sponsorships.test.ts +67 -4
  826. package/src/apps/relay/Sponsorships.ts +233 -32
  827. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  828. package/src/apps/{funding → routes}/Access.ts +6 -6
  829. package/src/apps/routes/App.test.ts +165 -0
  830. package/src/apps/routes/App.ts +96 -0
  831. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  832. package/src/apps/routes/index.ts +1 -0
  833. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  834. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  835. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1358 -458
  836. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +566 -246
  837. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  838. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  839. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  840. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  841. package/src/apps/{funding → routes}/routes/transfers.test.ts +1100 -353
  842. package/src/apps/routes/routes/transfers.ts +1332 -0
  843. package/src/cli/Cli.test.ts +1 -1
  844. package/src/cli/commands/admin.test.ts +748 -1
  845. package/src/cli/commands/admin.ts +278 -0
  846. package/src/cloudflare.ts +52 -47
  847. package/src/db/Db.test.ts +245 -2
  848. package/src/db/Db.ts +1485 -34
  849. package/src/db/Schema.ts +729 -228
  850. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  851. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  852. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  853. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  854. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  855. package/src/db/tables/apiKeyRevocations.ts +121 -0
  856. package/src/db/tables/authAccounts.ts +105 -0
  857. package/src/db/tables/authSessions.ts +13 -0
  858. package/src/db/tables/authVerifications.ts +13 -0
  859. package/src/db/tables/invitations.ts +142 -45
  860. package/src/db/tables/memberships.ts +79 -3
  861. package/src/db/tables/organizations.test.ts +690 -13
  862. package/src/db/tables/organizations.ts +139 -55
  863. package/src/db/tables/projects.test.ts +16 -0
  864. package/src/db/tables/projects.ts +13 -3
  865. package/src/db/tables/requestUsage.ts +4 -1
  866. package/src/db/tables/rewardAccounts.ts +178 -0
  867. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  868. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  869. package/src/db/tables/rewardCampaigns.ts +647 -0
  870. package/src/db/tables/rewardCredits.ts +110 -0
  871. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  872. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  873. package/src/db/tables/rewardRuns.ts +514 -0
  874. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  875. package/src/db/tables/routesCatalog.test.ts +185 -0
  876. package/src/db/tables/routesCatalog.ts +163 -0
  877. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  878. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  879. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  880. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  881. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +388 -46
  882. package/src/db/tables/routesDeposits.ts +1062 -0
  883. package/src/db/tables/routesIdempotency.test.ts +796 -0
  884. package/src/db/tables/routesIdempotency.ts +496 -0
  885. package/src/db/tables/routesSubsidies.test.ts +120 -0
  886. package/src/db/tables/routesSubsidies.ts +71 -0
  887. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  888. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  889. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  890. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  891. package/src/db/tables/{fundingTransferTransactions.ts → routesTransferTransactions.ts} +63 -18
  892. package/src/db/tables/routesTransfers.test.ts +338 -0
  893. package/src/db/tables/routesTransfers.ts +662 -0
  894. package/src/db/tables/sponsoredTransactions.test.ts +269 -45
  895. package/src/db/tables/sponsoredTransactions.ts +225 -65
  896. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  897. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  898. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  899. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  900. package/src/db/tables/stripeCustomers.test.ts +85 -0
  901. package/src/db/tables/stripeCustomers.ts +24 -0
  902. package/src/db/tables/users.test.ts +129 -0
  903. package/src/db/tables/users.ts +49 -3
  904. package/src/db/tables/verifiedTokenRequests.test.ts +39 -20
  905. package/src/db/tables/verifiedTokenRequests.ts +80 -44
  906. package/src/db/tables/webhookQueueEvents.ts +8 -1
  907. package/src/db/tables/webhookSubscriptions.ts +95 -20
  908. package/src/handlers/internal/executionError.ts +3 -4
  909. package/src/handlers/internal/multisig.ts +13 -816
  910. package/src/handlers/internal/sponsorship.ts +26 -10
  911. package/src/handlers/relay.test-d.ts +9 -1
  912. package/src/handlers/relay.test.ts +823 -3
  913. package/src/handlers/relay.ts +127 -107
  914. package/src/index.test-d.ts +7 -0
  915. package/src/index.ts +0 -17
  916. package/src/internal/AssetResponse.ts +26 -0
  917. package/src/internal/Auth.test.ts +1656 -9
  918. package/src/internal/Auth.ts +880 -244
  919. package/src/internal/BetterAuth.test.ts +242 -0
  920. package/src/internal/BetterAuth.ts +349 -0
  921. package/src/internal/Cache.ts +2 -0
  922. package/src/internal/EarnRates.test.ts +17 -0
  923. package/src/internal/EarnRates.ts +124 -31
  924. package/src/internal/EarnSharePrices.test.ts +182 -0
  925. package/src/internal/EarnSharePrices.ts +313 -0
  926. package/src/internal/EarnVaults.test.ts +21 -0
  927. package/src/internal/EarnVaults.ts +33 -11
  928. package/src/internal/Email.ts +54 -0
  929. package/src/internal/Idempotency.test.ts +2 -2
  930. package/src/internal/Log.test-d.ts +8 -7
  931. package/src/internal/Log.test.ts +114 -16
  932. package/src/internal/Log.ts +53 -40
  933. package/src/internal/MetricSink.test.ts +313 -26
  934. package/src/internal/MetricSink.ts +73 -8
  935. package/src/internal/Mpp.test.ts +31 -0
  936. package/src/internal/Mpp.ts +21 -24
  937. package/src/internal/OpenApi.ts +45 -12
  938. package/src/internal/Provider.test.ts +1 -1
  939. package/src/internal/Provider.ts +1 -1
  940. package/src/internal/RateLimit.test.ts +21 -3
  941. package/src/internal/RateLimit.ts +12 -1
  942. package/src/internal/Store.test-d.ts +1 -1
  943. package/src/internal/Store.test.ts +151 -8
  944. package/src/internal/Store.ts +76 -9
  945. package/src/internal/Tidx.test.ts +59 -8
  946. package/src/internal/Tidx.ts +86 -14
  947. package/src/internal/Timing.test.ts +77 -0
  948. package/src/internal/Timing.ts +83 -6
  949. package/src/internal/VercelOidc.test.ts +188 -0
  950. package/src/internal/VercelOidc.ts +193 -0
  951. package/src/internal/VerifiedTokens.test.ts +60 -6
  952. package/src/internal/VerifiedTokens.ts +21 -24
  953. package/src/internal/Viem.batch.test.ts +80 -0
  954. package/src/internal/Viem.test.ts +201 -2
  955. package/src/internal/Viem.ts +221 -25
  956. package/src/internal/Webhooks.test.ts +85 -6
  957. package/src/internal/Webhooks.ts +22 -4
  958. package/src/internal/ZoneRpc.ts +50 -0
  959. package/src/internal/exchange/Provider.test.ts +2 -2
  960. package/src/internal/index.test.ts +3 -1
  961. package/src/internal/index.ts +3 -1
  962. package/src/internal/rewards/Audit.ts +231 -0
  963. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  964. package/src/internal/rewards/Campaigns.ts +1205 -0
  965. package/src/internal/rewards/Credits.ts +165 -0
  966. package/src/internal/rewards/Events.local.test.ts +113 -0
  967. package/src/internal/rewards/Events.test.ts +152 -0
  968. package/src/internal/rewards/Events.ts +468 -0
  969. package/src/internal/rewards/Projection.test.ts +681 -0
  970. package/src/internal/rewards/Projection.ts +987 -0
  971. package/src/internal/rewards/Rates.test.ts +171 -0
  972. package/src/internal/rewards/Rates.ts +110 -0
  973. package/src/internal/rewards/Read.test.ts +501 -0
  974. package/src/internal/rewards/Read.ts +476 -0
  975. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  976. package/src/internal/rewards/Runner.states.test.ts +188 -0
  977. package/src/internal/rewards/Runner.test.ts +90 -0
  978. package/src/internal/rewards/Runner.ts +2229 -0
  979. package/src/internal/rewards/Signer.test.ts +79 -0
  980. package/src/internal/rewards/Signer.ts +180 -0
  981. package/src/internal/rewards/index.ts +14 -0
  982. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  983. package/src/internal/{funding → routes}/Action.ts +35 -8
  984. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  985. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  986. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  987. package/src/internal/{funding → routes}/Chain.ts +11 -11
  988. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  989. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  990. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  991. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  992. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  993. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -9
  994. package/src/internal/routes/Economics.test.ts +42 -0
  995. package/src/internal/routes/Economics.ts +47 -0
  996. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  997. package/src/internal/{funding → routes}/Evidence.ts +9 -9
  998. package/src/internal/routes/Observability.test.ts +636 -0
  999. package/src/internal/routes/Observability.ts +668 -0
  1000. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  1001. package/src/internal/{funding → routes}/Provider.ts +489 -186
  1002. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  1003. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  1004. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  1005. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  1006. package/src/internal/{funding → routes}/Route.ts +7 -7
  1007. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  1008. package/src/internal/{funding → routes}/SourceObservation.ts +13 -13
  1009. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  1010. package/src/internal/routes/Subsidy.test.ts +169 -0
  1011. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  1012. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  1013. package/src/internal/{funding → routes}/Token.ts +5 -5
  1014. package/src/internal/routes/Transfer.test.ts +1199 -0
  1015. package/src/internal/routes/Transfer.ts +1206 -0
  1016. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  1017. package/src/internal/routes/TransferReconciliation.ts +527 -0
  1018. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1019. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1020. package/src/internal/{funding → routes}/TransferWebhook.test.ts +13 -13
  1021. package/src/internal/{funding → routes}/TransferWebhook.ts +7 -7
  1022. package/src/internal/{funding → routes}/index.test.ts +5 -3
  1023. package/src/internal/{funding → routes}/index.ts +2 -0
  1024. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1025. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1026. package/src/internal/{funding → routes}/providers/relay.test.ts +224 -32
  1027. package/src/internal/{funding → routes}/providers/relay.ts +228 -121
  1028. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1029. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1030. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1031. package/src/internal/routes/providers/stargate.ts +1276 -0
  1032. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1033. package/src/internal/webhookDestinations/slack.ts +10 -10
  1034. package/src/providers/index.ts +13 -13
  1035. package/src/server.ts +18 -0
  1036. package/dist/apps/funding/Access.d.ts.map +0 -1
  1037. package/dist/apps/funding/Access.js.map +0 -1
  1038. package/dist/apps/funding/App.js.map +0 -1
  1039. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1040. package/dist/apps/funding/Inventory.js.map +0 -1
  1041. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1042. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1043. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1044. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1045. package/dist/apps/funding/index.d.ts +0 -2
  1046. package/dist/apps/funding/index.d.ts.map +0 -1
  1047. package/dist/apps/funding/index.js +0 -2
  1048. package/dist/apps/funding/index.js.map +0 -1
  1049. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1050. package/dist/apps/funding/routes/chains.js.map +0 -1
  1051. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1052. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1053. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1054. package/dist/apps/funding/routes/providers.js +0 -57
  1055. package/dist/apps/funding/routes/providers.js.map +0 -1
  1056. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1057. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1058. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1059. package/dist/apps/funding/routes/transfers.js +0 -828
  1060. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1061. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1062. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1063. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1064. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1065. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1066. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1067. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1068. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1069. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1070. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1071. package/dist/db/tables/fundingDeposits.js +0 -295
  1072. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1073. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1074. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1075. package/dist/db/tables/fundingIdempotency.js +0 -103
  1076. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1077. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1078. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1079. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -53
  1080. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1081. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1082. package/dist/db/tables/fundingTransfers.d.ts +0 -99
  1083. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1084. package/dist/db/tables/fundingTransfers.js +0 -110
  1085. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1086. package/dist/internal/funding/Action.d.ts.map +0 -1
  1087. package/dist/internal/funding/Action.js.map +0 -1
  1088. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1089. package/dist/internal/funding/Catalog.js.map +0 -1
  1090. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1091. package/dist/internal/funding/Chain.js.map +0 -1
  1092. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1093. package/dist/internal/funding/Deposit.js.map +0 -1
  1094. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1095. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1096. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1097. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1098. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1099. package/dist/internal/funding/Evidence.js.map +0 -1
  1100. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1101. package/dist/internal/funding/Provider.js.map +0 -1
  1102. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1103. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1104. package/dist/internal/funding/Route.d.ts +0 -21
  1105. package/dist/internal/funding/Route.d.ts.map +0 -1
  1106. package/dist/internal/funding/Route.js.map +0 -1
  1107. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1108. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1109. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1110. package/dist/internal/funding/Subsidy.js.map +0 -1
  1111. package/dist/internal/funding/Token.d.ts.map +0 -1
  1112. package/dist/internal/funding/Token.js.map +0 -1
  1113. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1114. package/dist/internal/funding/Transfer.js +0 -462
  1115. package/dist/internal/funding/Transfer.js.map +0 -1
  1116. package/dist/internal/funding/TransferReconciliation.d.ts.map +0 -1
  1117. package/dist/internal/funding/TransferReconciliation.js +0 -192
  1118. package/dist/internal/funding/TransferReconciliation.js.map +0 -1
  1119. package/dist/internal/funding/TransferWebhook.d.ts.map +0 -1
  1120. package/dist/internal/funding/TransferWebhook.js.map +0 -1
  1121. package/dist/internal/funding/index.d.ts.map +0 -1
  1122. package/dist/internal/funding/index.js.map +0 -1
  1123. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1124. package/dist/internal/funding/providers/across.js.map +0 -1
  1125. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1126. package/dist/internal/funding/providers/relay.js.map +0 -1
  1127. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1128. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1129. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1130. package/dist/internal/funding/providers/squid.js.map +0 -1
  1131. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1132. package/dist/internal/funding/providers/stargate.js +0 -579
  1133. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1134. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1135. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1136. package/src/apps/funding/App.test.ts +0 -78
  1137. package/src/apps/funding/App.ts +0 -88
  1138. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1139. package/src/apps/funding/index.ts +0 -1
  1140. package/src/apps/funding/routes/transfers.ts +0 -987
  1141. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1142. package/src/db/tables/fundingCatalog.ts +0 -163
  1143. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1144. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1145. package/src/db/tables/fundingDeposits.ts +0 -572
  1146. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1147. package/src/db/tables/fundingIdempotency.ts +0 -180
  1148. package/src/db/tables/fundingTransferTransactions.test.ts +0 -112
  1149. package/src/db/tables/fundingTransfers.test.ts +0 -115
  1150. package/src/db/tables/fundingTransfers.ts +0 -189
  1151. package/src/handlers/internal/multisig.test.ts +0 -818
  1152. package/src/internal/funding/Subsidy.test.ts +0 -75
  1153. package/src/internal/funding/Transfer.test.ts +0 -524
  1154. package/src/internal/funding/Transfer.ts +0 -762
  1155. package/src/internal/funding/TransferReconciliation.test.ts +0 -147
  1156. package/src/internal/funding/TransferReconciliation.ts +0 -264
  1157. package/src/internal/funding/providers/stargate.test.ts +0 -328
  1158. package/src/internal/funding/providers/stargate.ts +0 -856
  1159. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1160. /package/src/internal/{funding → routes}/Route.test.ts +0 -0
@@ -0,0 +1,987 @@
1
+ import { getAddress, keccak256, stringToHex, zeroAddress, type Address, type Hex } from 'viem'
2
+
3
+ import type * as Campaigns from './Campaigns.js'
4
+
5
+ const rateScale = 10_000n
6
+ const secondsPerYear = 365n * 24n * 60n * 60n
7
+ const sharePriceScale = 10n ** 18n
8
+
9
+ /** Current mutable projection for one registered recipient. */
10
+ export type Account = {
11
+ /** Arithmetic remainder carried across reward intervals. */
12
+ accrualRemainder: bigint
13
+ /** Principal permanently allocated against campaign caps. */
14
+ allocatedPrincipalAssets: bigint
15
+ /** Cumulative EarnShare entitlement. */
16
+ cumulativeEntitlement: bigint
17
+ /** Cumulative EarnShare already paid. */
18
+ cumulativePaid: bigint
19
+ /** Current delivery deferral. */
20
+ deferral?: string | undefined
21
+ /** Eligibility registration version consumed by this projection. */
22
+ eligibilityRegisteredAt?: string | undefined
23
+ /** Surviving qualified deposit lots. */
24
+ lots: Campaigns.DepositLot[]
25
+ /** Base-asset reward not yet converted into EarnShare. */
26
+ pendingRewardAssets: bigint
27
+ /** Current attributable public EarnShare balance. */
28
+ publicEarnShares: bigint
29
+ /** Current qualified EarnShare balance. */
30
+ qualifiedEarnShares: bigint
31
+ /** Registered recipient. */
32
+ recipient: Address
33
+ /** Monotonic eligibility registration order. */
34
+ registrationOrder: bigint
35
+ }
36
+
37
+ /** One canonically ordered public deposit or EarnShare transfer. */
38
+ export type Event =
39
+ | {
40
+ /** Deposited base assets. */
41
+ assets: bigint
42
+ /** Canonical event position. */
43
+ cursor: Campaigns.EventCursor
44
+ /** EarnShare minted by the deposit. */
45
+ earnShares: bigint
46
+ /** Deposit event kind. */
47
+ kind: 'deposit'
48
+ /** Deposit receiver. */
49
+ recipient: Address
50
+ /** Block timestamp. */
51
+ timestamp: number
52
+ }
53
+ | {
54
+ /** Transferred EarnShare. */
55
+ amount: bigint
56
+ /** Canonical event position. */
57
+ cursor: Campaigns.EventCursor
58
+ /** Sender, or zero address for mint. */
59
+ from: Address
60
+ /** Transfer event kind. */
61
+ kind: 'transfer'
62
+ /** Block timestamp. */
63
+ timestamp: number
64
+ /** Recipient, or zero address for burn. */
65
+ to: Address
66
+ }
67
+
68
+ /** Returns a deterministic checksum for a run's complete closing account state. */
69
+ export function checksum(accounts: readonly Account[]): Hex {
70
+ return keccak256(
71
+ stringToHex(
72
+ JSON.stringify(
73
+ [...accounts].sort(compareAccounts).map((account) => ({
74
+ accrualRemainder: account.accrualRemainder.toString(),
75
+ allocatedPrincipalAssets: account.allocatedPrincipalAssets.toString(),
76
+ cumulativeEntitlement: account.cumulativeEntitlement.toString(),
77
+ cumulativePaid: account.cumulativePaid.toString(),
78
+ deferral: account.deferral ?? null,
79
+ eligibilityRegisteredAt: account.eligibilityRegisteredAt ?? null,
80
+ lots: account.lots,
81
+ pendingRewardAssets: account.pendingRewardAssets.toString(),
82
+ publicEarnShares: account.publicEarnShares.toString(),
83
+ qualifiedEarnShares: account.qualifiedEarnShares.toString(),
84
+ recipient: account.recipient.toLowerCase(),
85
+ registrationOrder: account.registrationOrder.toString(),
86
+ })),
87
+ ),
88
+ ),
89
+ )
90
+ }
91
+
92
+ /** Restores one calculation projection from a durable run snapshot. */
93
+ export function fromSnapshot(snapshot: Campaigns.AccountSnapshot): Account {
94
+ return {
95
+ accrualRemainder: BigInt(snapshot.accrualRemainder),
96
+ allocatedPrincipalAssets: BigInt(snapshot.allocatedPrincipalAssets),
97
+ cumulativeEntitlement: BigInt(snapshot.cumulativeEntitlement),
98
+ cumulativePaid: BigInt(snapshot.cumulativePaid),
99
+ ...(snapshot.deferral ? { deferral: snapshot.deferral } : {}),
100
+ ...(snapshot.eligibilityRegisteredAt
101
+ ? { eligibilityRegisteredAt: snapshot.eligibilityRegisteredAt }
102
+ : {}),
103
+ lots: [],
104
+ pendingRewardAssets: BigInt(snapshot.pendingRewardAssets),
105
+ publicEarnShares: BigInt(snapshot.publicEarnShares),
106
+ qualifiedEarnShares: BigInt(snapshot.qualifiedEarnShares),
107
+ recipient: getAddress(snapshot.recipient),
108
+ registrationOrder: BigInt(snapshot.registrationOrder),
109
+ }
110
+ }
111
+
112
+ /** Serializes one calculation projection for crash-safe run recovery. */
113
+ export function snapshot(account: Account): Campaigns.AccountSnapshot {
114
+ return {
115
+ accrualRemainder: account.accrualRemainder.toString(),
116
+ allocatedPrincipalAssets: account.allocatedPrincipalAssets.toString(),
117
+ cumulativeEntitlement: account.cumulativeEntitlement.toString(),
118
+ cumulativePaid: account.cumulativePaid.toString(),
119
+ deferral: account.deferral ?? null,
120
+ eligibilityRegisteredAt: account.eligibilityRegisteredAt ?? null,
121
+ lots: [],
122
+ pendingRewardAssets: account.pendingRewardAssets.toString(),
123
+ publicEarnShares: account.publicEarnShares.toString(),
124
+ qualifiedEarnShares: account.qualifiedEarnShares.toString(),
125
+ recipient: account.recipient,
126
+ registrationOrder: account.registrationOrder.toString(),
127
+ }
128
+ }
129
+
130
+ /** Applies ordered public events and campaign cap allocation to registered accounts. */
131
+ export function apply(options: apply.Options): apply.Result {
132
+ const result = applyEvents(options, send)
133
+ return {
134
+ ...result,
135
+ accounts: result.accounts.map((account) => ({ ...account, lots: [] })),
136
+ }
137
+ }
138
+
139
+ function applyEvents(options: apply.Options, sendAccount: typeof send): apply.Result {
140
+ const accounts = new Map(
141
+ options.accounts.map((account) => [account.recipient.toLowerCase(), clone(account)]),
142
+ )
143
+ const eligible = new Map(
144
+ options.eligible.map((entry) => [entry.recipient.toLowerCase(), entry.registrationOrder]),
145
+ )
146
+ const excluded = new Set(options.excluded.map((address) => address.toLowerCase()))
147
+ for (const [recipient] of eligible) account(accounts, eligible, excluded, getAddress(recipient))
148
+ let allocated = [...accounts.values()].reduce(
149
+ (sum, account) => sum + account.allocatedPrincipalAssets,
150
+ 0n,
151
+ )
152
+ const events = [...options.events].sort(compareEvents)
153
+ for (const event of events) {
154
+ if (event.kind === 'transfer') {
155
+ if (sameAddress(event.from, event.to)) continue
156
+ if (event.from.toLowerCase() !== zeroAddress) {
157
+ const sender = accounts.get(event.from.toLowerCase())
158
+ if (sender) sendAccount(sender, event.amount)
159
+ }
160
+ if (event.to.toLowerCase() !== zeroAddress) {
161
+ const recipient = account(accounts, eligible, excluded, event.to)
162
+ if (recipient) recipient.publicEarnShares += event.amount
163
+ }
164
+ continue
165
+ }
166
+ const recipient = account(accounts, eligible, excluded, event.recipient)
167
+ if (!recipient || event.assets === 0n || event.earnShares === 0n) continue
168
+ const userRemaining = maximum(
169
+ options.perUserPrincipalCapAssets - recipient.allocatedPrincipalAssets,
170
+ 0n,
171
+ )
172
+ const campaignRemaining = maximum(options.totalPrincipalCapAssets - allocated, 0n)
173
+ const allocatedAssets = minimum(event.assets, userRemaining, campaignRemaining)
174
+ if (allocatedAssets === 0n) continue
175
+ const qualifiedShares = (event.earnShares * allocatedAssets) / event.assets
176
+ if (qualifiedShares === 0n) continue
177
+ recipient.allocatedPrincipalAssets += allocatedAssets
178
+ recipient.qualifiedEarnShares += qualifiedShares
179
+ recipient.lots.push({
180
+ allocatedPrincipalAssets: allocatedAssets.toString(),
181
+ depositedAssets: event.assets.toString(),
182
+ depositedEarnShares: event.earnShares.toString(),
183
+ event: event.cursor,
184
+ remainingEarnShares: qualifiedShares.toString(),
185
+ })
186
+ allocated += allocatedAssets
187
+ }
188
+ return {
189
+ accounts: [...accounts.values()].sort(compareAccounts),
190
+ allocatedPrincipalAssets: allocated,
191
+ }
192
+ }
193
+
194
+ /** Reconstructs surviving pre-campaign deposit lots before permanently allocating campaign caps. */
195
+ export function bootstrap(options: bootstrap.Options): apply.Result {
196
+ const unlimited = (1n << 256n) - 1n
197
+ const replayed = applyEvents(
198
+ {
199
+ accounts: [],
200
+ eligible: options.eligible,
201
+ events: options.events,
202
+ excluded: options.excluded,
203
+ perUserPrincipalCapAssets: unlimited,
204
+ totalPrincipalCapAssets: unlimited,
205
+ },
206
+ sendLots,
207
+ )
208
+ return allocateBootstrap(replayed.accounts, options)
209
+ }
210
+
211
+ function allocateBootstrap(
212
+ replayed: readonly Account[],
213
+ options: Omit<bootstrap.Options, 'events'>,
214
+ ): apply.Result {
215
+ const accounts = replayed.map((source) => ({
216
+ ...clone(source),
217
+ allocatedPrincipalAssets: 0n,
218
+ lots: [] as Campaigns.DepositLot[],
219
+ qualifiedEarnShares: 0n,
220
+ }))
221
+ const byRecipient = new Map(accounts.map((entry) => [entry.recipient.toLowerCase(), entry]))
222
+ let allocated = 0n
223
+ const lots = replayed
224
+ .flatMap((entry) => entry.lots.map((lot) => ({ lot, recipient: entry.recipient })))
225
+ .sort((left, right) => {
226
+ if (options.principalAllocationOrder === 'registration') {
227
+ const order =
228
+ byRecipient.get(left.recipient.toLowerCase())!.registrationOrder -
229
+ byRecipient.get(right.recipient.toLowerCase())!.registrationOrder
230
+ if (order !== 0n) return order < 0n ? -1 : 1
231
+ }
232
+ return compareCursors(left.lot.event, right.lot.event)
233
+ })
234
+ for (const { lot, recipient } of lots) {
235
+ const account = byRecipient.get(recipient.toLowerCase())!
236
+ const remainingEarnShares = BigInt(lot.remainingEarnShares)
237
+ const depositedEarnShares = BigInt(lot.depositedEarnShares)
238
+ const survivingPrincipalAssets =
239
+ depositedEarnShares === 0n
240
+ ? 0n
241
+ : (BigInt(lot.depositedAssets) * remainingEarnShares) / depositedEarnShares
242
+ const userRemaining = maximum(
243
+ options.perUserPrincipalCapAssets - account.allocatedPrincipalAssets,
244
+ 0n,
245
+ )
246
+ const campaignRemaining = maximum(options.totalPrincipalCapAssets - allocated, 0n)
247
+ const allocatedPrincipalAssets = minimum(
248
+ survivingPrincipalAssets,
249
+ userRemaining,
250
+ campaignRemaining,
251
+ )
252
+ if (allocatedPrincipalAssets === 0n || survivingPrincipalAssets === 0n) continue
253
+ const qualifiedEarnShares =
254
+ (remainingEarnShares * allocatedPrincipalAssets) / survivingPrincipalAssets
255
+ if (qualifiedEarnShares === 0n) continue
256
+ account.allocatedPrincipalAssets += allocatedPrincipalAssets
257
+ account.qualifiedEarnShares += qualifiedEarnShares
258
+ allocated += allocatedPrincipalAssets
259
+ }
260
+ return { accounts: accounts.sort(compareAccounts), allocatedPrincipalAssets: allocated }
261
+ }
262
+
263
+ /** Reconciles registration history pagewise and checkpoints replay state without retaining events. */
264
+ export async function reconcilePages(
265
+ options: reconcilePages.Options,
266
+ ): Promise<reconcileRegistrations.Result> {
267
+ const current = new Map(
268
+ options.accounts.map((account) => [account.recipient.toLowerCase(), account]),
269
+ )
270
+ const pending = new Map(
271
+ options.eligible
272
+ .filter((entry) => {
273
+ const account = current.get(entry.recipient.toLowerCase())
274
+ return account?.eligibilityRegisteredAt !== entry.registeredAt
275
+ })
276
+ .map((entry) => [entry.recipient.toLowerCase(), entry]),
277
+ )
278
+ if (pending.size === 0) return { accounts: options.accounts, reconciled: false }
279
+ const replay = new Map(
280
+ [...pending].filter(([recipient]) => {
281
+ const account = current.get(recipient)
282
+ return (
283
+ !account ||
284
+ (account.allocatedPrincipalAssets === 0n &&
285
+ account.lots.length === 0 &&
286
+ account.qualifiedEarnShares === 0n)
287
+ )
288
+ }),
289
+ )
290
+ const retained = options.accounts.filter(
291
+ (account) => !replay.has(account.recipient.toLowerCase()),
292
+ )
293
+ const retainedAllocated = retained.reduce(
294
+ (sum, account) => sum + account.allocatedPrincipalAssets,
295
+ 0n,
296
+ )
297
+ let replayed = options.checkpoint
298
+ ? options.checkpoint.accounts.map(fromSnapshot)
299
+ : apply({
300
+ accounts: [],
301
+ eligible: [...replay.values()].map((entry) => ({
302
+ recipient: entry.recipient,
303
+ registrationOrder: entry.registrationOrder,
304
+ })),
305
+ events: [],
306
+ excluded: options.excluded,
307
+ perUserPrincipalCapAssets: 0n,
308
+ totalPrincipalCapAssets: 0n,
309
+ }).accounts
310
+ const depositedEarnShares = new Map<string, bigint>(
311
+ Object.entries(options.checkpoint?.depositedEarnShares ?? {}).map(([recipient, value]) => [
312
+ recipient,
313
+ BigInt(value),
314
+ ]),
315
+ )
316
+ let replayedThrough = options.checkpoint?.replayedThrough
317
+ if (!options.checkpoint || options.checkpoint.pass === 'survival')
318
+ for await (const page of options.pages('survival', options.checkpoint?.cursor)) {
319
+ const { events } = page
320
+ const accounts = new Map(replayed.map((entry) => [entry.recipient.toLowerCase(), entry]))
321
+ const eligible = new Map(
322
+ [...replay].map(([recipient, entry]) => [recipient, entry.registrationOrder]),
323
+ )
324
+ const excluded = new Set(options.excluded.map((address) => address.toLowerCase()))
325
+ for (const event of [...events].sort(compareEvents)) {
326
+ if (event.kind === 'deposit') {
327
+ const recipient = account(accounts, eligible, excluded, event.recipient)
328
+ if (!recipient || event.assets === 0n || event.earnShares === 0n) continue
329
+ const key = recipient.recipient.toLowerCase()
330
+ depositedEarnShares.set(key, (depositedEarnShares.get(key) ?? 0n) + event.earnShares)
331
+ recipient.qualifiedEarnShares += event.earnShares
332
+ continue
333
+ }
334
+ if (sameAddress(event.from, event.to)) continue
335
+ if (event.from.toLowerCase() !== zeroAddress) {
336
+ const sender = accounts.get(event.from.toLowerCase())
337
+ if (sender) send(sender, event.amount)
338
+ }
339
+ if (event.to.toLowerCase() !== zeroAddress) {
340
+ const recipient = account(accounts, eligible, excluded, event.to)
341
+ if (recipient) recipient.publicEarnShares += event.amount
342
+ }
343
+ }
344
+ replayed = [...accounts.values()].sort(compareAccounts)
345
+ const cursor = events.at(-1)?.cursor
346
+ if (cursor) {
347
+ replayedThrough = cursor
348
+ await options.checkpointState?.({
349
+ accounts: replayed.map(snapshot),
350
+ cursor,
351
+ depositedEarnShares: Object.fromEntries(
352
+ [...depositedEarnShares].map(([recipient, value]) => [recipient, value.toString()]),
353
+ ),
354
+ pass: 'survival',
355
+ replayedThrough,
356
+ })
357
+ }
358
+ }
359
+ let initialized =
360
+ options.checkpoint?.pass === 'allocation'
361
+ ? options.checkpoint.accounts.map(fromSnapshot)
362
+ : replayed.map((entry) => ({
363
+ ...entry,
364
+ allocatedPrincipalAssets: 0n,
365
+ lots: [],
366
+ qualifiedEarnShares: 0n,
367
+ }))
368
+ const consumedEarnShares = new Map<string, bigint>(
369
+ options.checkpoint?.pass === 'allocation'
370
+ ? Object.entries(options.checkpoint.consumedEarnShares ?? {}).map(([recipient, value]) => [
371
+ recipient,
372
+ BigInt(value),
373
+ ])
374
+ : replayed.map((entry) => [
375
+ entry.recipient.toLowerCase(),
376
+ (depositedEarnShares.get(entry.recipient.toLowerCase()) ?? 0n) -
377
+ entry.qualifiedEarnShares,
378
+ ]),
379
+ )
380
+ let allocated =
381
+ retainedAllocated + initialized.reduce((sum, entry) => sum + entry.allocatedPrincipalAssets, 0n)
382
+ for await (const page of options.pages(
383
+ 'allocation',
384
+ options.checkpoint?.pass === 'allocation' ? options.checkpoint.cursor : undefined,
385
+ )) {
386
+ const { events } = page
387
+ const accounts = new Map(initialized.map((entry) => [entry.recipient.toLowerCase(), entry]))
388
+ for (const event of events) {
389
+ if (event.kind !== 'deposit') continue
390
+ const recipient = accounts.get(event.recipient.toLowerCase())
391
+ if (!recipient || event.assets === 0n || event.earnShares === 0n) continue
392
+ const key = recipient.recipient.toLowerCase()
393
+ const consumed = minimum(consumedEarnShares.get(key) ?? 0n, event.earnShares)
394
+ consumedEarnShares.set(key, (consumedEarnShares.get(key) ?? 0n) - consumed)
395
+ const remainingEarnShares = event.earnShares - consumed
396
+ const survivingPrincipalAssets = (event.assets * remainingEarnShares) / event.earnShares
397
+ const allocatedPrincipalAssets = minimum(
398
+ survivingPrincipalAssets,
399
+ maximum(options.perUserPrincipalCapAssets - recipient.allocatedPrincipalAssets, 0n),
400
+ maximum(options.totalPrincipalCapAssets - allocated, 0n),
401
+ )
402
+ if (allocatedPrincipalAssets === 0n || survivingPrincipalAssets === 0n) continue
403
+ const qualifiedEarnShares =
404
+ (remainingEarnShares * allocatedPrincipalAssets) / survivingPrincipalAssets
405
+ if (qualifiedEarnShares === 0n) continue
406
+ recipient.allocatedPrincipalAssets += allocatedPrincipalAssets
407
+ recipient.qualifiedEarnShares += qualifiedEarnShares
408
+ allocated += allocatedPrincipalAssets
409
+ }
410
+ initialized = [...accounts.values()].sort(compareAccounts)
411
+ const cursor = events.at(-1)?.cursor
412
+ if (cursor || page.allocationRecipient)
413
+ await options.checkpointState?.({
414
+ ...(page.allocationRecipient ? { allocationRecipient: page.allocationRecipient } : {}),
415
+ accounts: initialized.map(snapshot),
416
+ consumedEarnShares: Object.fromEntries(
417
+ [...consumedEarnShares].map(([recipient, value]) => [recipient, value.toString()]),
418
+ ),
419
+ ...(cursor ? { cursor } : {}),
420
+ depositedEarnShares: Object.fromEntries(
421
+ [...depositedEarnShares].map(([recipient, value]) => [recipient, value.toString()]),
422
+ ),
423
+ pass: 'allocation',
424
+ ...(replayedThrough ? { replayedThrough } : {}),
425
+ })
426
+ }
427
+ return {
428
+ accounts: [
429
+ ...retained.map((account) => {
430
+ const entry = pending.get(account.recipient.toLowerCase())
431
+ return entry ? { ...account, eligibilityRegisteredAt: entry.registeredAt } : account
432
+ }),
433
+ ...initialized.map((account) => {
434
+ const entry = pending.get(account.recipient.toLowerCase())!
435
+ const previous = current.get(account.recipient.toLowerCase())
436
+ return {
437
+ ...account,
438
+ accrualRemainder: previous?.accrualRemainder ?? 0n,
439
+ cumulativeEntitlement: previous?.cumulativeEntitlement ?? 0n,
440
+ cumulativePaid: previous?.cumulativePaid ?? 0n,
441
+ ...(previous?.deferral ? { deferral: previous.deferral } : {}),
442
+ eligibilityRegisteredAt: entry.registeredAt,
443
+ pendingRewardAssets: previous?.pendingRewardAssets ?? 0n,
444
+ }
445
+ }),
446
+ ].sort(compareAccounts),
447
+ reconciled: true,
448
+ }
449
+ }
450
+
451
+ export declare namespace reconcilePages {
452
+ /** One historical page with optional registration traversal progress. */
453
+ type Page = {
454
+ /** Registration-order recipient represented by this page. */
455
+ allocationRecipient?: Address | undefined
456
+ /** Historical events applied by this page. */
457
+ events: readonly Event[]
458
+ }
459
+
460
+ /** Serializable historical replay state. */
461
+ type Checkpoint = {
462
+ /** Recipient whose registration-ordered deposit page was last applied. */
463
+ allocationRecipient?: Address | undefined
464
+ /** Replayed account projections before campaign cap allocation. */
465
+ accounts: readonly Campaigns.AccountSnapshot[]
466
+ /** Remaining FIFO-consumed shares while allocating surviving deposits. */
467
+ consumedEarnShares?: Readonly<Record<string, string>> | undefined
468
+ /** Final event included in this pass. */
469
+ cursor?: Campaigns.EventCursor | undefined
470
+ /** Gross deposited shares keyed by normalized recipient. */
471
+ depositedEarnShares: Readonly<Record<string, string>>
472
+ /** Historical reducer pass. */
473
+ pass: 'allocation' | 'survival'
474
+ /** Final canonical event applied by the survival pass. */
475
+ replayedThrough?: Campaigns.EventCursor | undefined
476
+ }
477
+
478
+ /** Inputs for registration reconciliation over canonical event pages. */
479
+ type Options = Omit<reconcileRegistrations.Options, 'events'> & {
480
+ /** Previously persisted replay state. */
481
+ checkpoint?: Checkpoint | undefined
482
+ /** Persists replay state after one complete canonical page. */
483
+ checkpointState?: ((state: Checkpoint) => Promise<void> | void) | undefined
484
+ /** Recreates historical pages in the ordering required by each pass. */
485
+ pages: (pass: Checkpoint['pass'], after?: Campaigns.EventCursor) => AsyncIterable<Page>
486
+ }
487
+ }
488
+
489
+ /** Rebuilds deposit-derived state for new or refreshed eligibility registrations. */
490
+ export function reconcileRegistrations(
491
+ options: reconcileRegistrations.Options,
492
+ ): reconcileRegistrations.Result {
493
+ const accounts = new Map(
494
+ options.accounts.map((account) => [account.recipient.toLowerCase(), account]),
495
+ )
496
+ const pending = new Map(
497
+ options.eligible
498
+ .filter((entry) => {
499
+ const account = accounts.get(entry.recipient.toLowerCase())
500
+ return account?.eligibilityRegisteredAt !== entry.registeredAt
501
+ })
502
+ .map((entry) => [entry.recipient.toLowerCase(), entry]),
503
+ )
504
+ if (pending.size === 0) return { accounts: options.accounts, reconciled: false }
505
+ // Principal allocation is permanent. Refresh only zero-state accounts so replays cannot reorder cap already committed to healthy accounts.
506
+ const replay = new Map(
507
+ [...pending].filter(([recipient]) => {
508
+ const account = accounts.get(recipient)
509
+ return (
510
+ !account ||
511
+ (account.allocatedPrincipalAssets === 0n &&
512
+ account.lots.length === 0 &&
513
+ account.qualifiedEarnShares === 0n)
514
+ )
515
+ }),
516
+ )
517
+ const retained = options.accounts.filter(
518
+ (account) => !replay.has(account.recipient.toLowerCase()),
519
+ )
520
+ const remainingCap =
521
+ options.totalPrincipalCapAssets -
522
+ retained.reduce((sum, account) => sum + account.allocatedPrincipalAssets, 0n)
523
+ const initialized = bootstrap({
524
+ eligible: [...replay.values()].map((entry) => ({
525
+ recipient: entry.recipient,
526
+ registrationOrder: entry.registrationOrder,
527
+ })),
528
+ events: options.events,
529
+ excluded: options.excluded,
530
+ perUserPrincipalCapAssets: options.perUserPrincipalCapAssets,
531
+ principalAllocationOrder: options.principalAllocationOrder,
532
+ totalPrincipalCapAssets: remainingCap,
533
+ })
534
+ return {
535
+ accounts: [
536
+ ...retained.map((account) => {
537
+ const entry = pending.get(account.recipient.toLowerCase())
538
+ return entry ? { ...account, eligibilityRegisteredAt: entry.registeredAt } : account
539
+ }),
540
+ ...initialized.accounts.map((account) => {
541
+ const entry = pending.get(account.recipient.toLowerCase())!
542
+ const previous = accounts.get(account.recipient.toLowerCase())
543
+ return {
544
+ ...account,
545
+ accrualRemainder: previous?.accrualRemainder ?? 0n,
546
+ cumulativeEntitlement: previous?.cumulativeEntitlement ?? 0n,
547
+ cumulativePaid: previous?.cumulativePaid ?? 0n,
548
+ ...(previous?.deferral ? { deferral: previous.deferral } : {}),
549
+ eligibilityRegisteredAt: entry.registeredAt,
550
+ pendingRewardAssets: previous?.pendingRewardAssets ?? 0n,
551
+ }
552
+ }),
553
+ ].sort(compareAccounts),
554
+ reconciled: true,
555
+ }
556
+ }
557
+
558
+ export declare namespace reconcileRegistrations {
559
+ /** Inputs for registration-driven historical reconciliation. */
560
+ type Options = Omit<bootstrap.Options, 'eligible'> & {
561
+ /** Current delivered account projections. */
562
+ accounts: readonly Account[]
563
+ /** Eligibility registrations and their current durable versions. */
564
+ eligible: readonly {
565
+ /** Eligible reward recipient. */
566
+ recipient: Address
567
+ /** Monotonic eligibility registration order. */
568
+ registrationOrder: bigint
569
+ /** Registration version returned by the eligibility API. */
570
+ registeredAt: string
571
+ }[]
572
+ }
573
+
574
+ /** Reconciled accounts and whether any registration required replay. */
575
+ type Result = {
576
+ /** Current accounts with refreshed deposit-derived state. */
577
+ accounts: readonly Account[]
578
+ /** Whether at least one registration required reconciliation. */
579
+ reconciled: boolean
580
+ }
581
+ }
582
+
583
+ export declare namespace bootstrap {
584
+ /** Historical replay and cap-allocation input. */
585
+ type Options = Omit<apply.Options, 'accounts'> & {
586
+ /** Deposit order by default; registration order preserves late-registration cap priority. */
587
+ principalAllocationOrder?: 'deposit' | 'registration' | undefined
588
+ }
589
+ }
590
+
591
+ export declare namespace apply {
592
+ /** Projection input at one persisted cursor. */
593
+ type Options = {
594
+ /** Previously delivered account states. */
595
+ accounts: readonly Account[]
596
+ /** Registered recipients with stable order. */
597
+ eligible: readonly { recipient: Address; registrationOrder: bigint }[]
598
+ /** Canonically ordered public events. */
599
+ events: readonly Event[]
600
+ /** Addresses excluded from individual boost rewards. */
601
+ excluded: readonly Address[]
602
+ /** Per-recipient lifetime principal cap. */
603
+ perUserPrincipalCapAssets: bigint
604
+ /** Campaign lifetime principal cap. */
605
+ totalPrincipalCapAssets: bigint
606
+ }
607
+
608
+ /** Closing projection and permanently allocated campaign principal. */
609
+ type Result = {
610
+ /** Closing recipient projections. */
611
+ accounts: readonly Account[]
612
+ /** Total principal permanently allocated against the campaign cap. */
613
+ allocatedPrincipalAssets: bigint
614
+ }
615
+ }
616
+
617
+ /** Calculates time-weighted boost rewards for one interval. */
618
+ export function calculate(options: calculate.Options): calculate.Result {
619
+ if (options.endsAt <= options.startsAt) throw new Error('reward interval is empty')
620
+ const accounts = new Map(
621
+ options.accounts.map((account) => [account.recipient.toLowerCase(), clone(account)]),
622
+ )
623
+ const eligible = new Map(
624
+ options.accounts.map((account) => [account.recipient.toLowerCase(), account.registrationOrder]),
625
+ )
626
+ const excluded = new Set(options.excluded.map((address) => address.toLowerCase()))
627
+ const weighted = new Map<string, bigint>()
628
+ const accruedThrough = new Map<string, number>()
629
+ let allocated = [...accounts.values()].reduce(
630
+ (sum, account) => sum + account.allocatedPrincipalAssets,
631
+ 0n,
632
+ )
633
+ const events = [...options.events]
634
+ .filter((event) => event.timestamp >= options.startsAt && event.timestamp < options.endsAt)
635
+ .sort(compareEvents)
636
+ for (const event of events) {
637
+ for (const recipient of eventRecipients(event)) {
638
+ const account = accounts.get(recipient.toLowerCase())
639
+ if (account)
640
+ accumulateAccount(
641
+ weighted,
642
+ accruedThrough,
643
+ account,
644
+ excluded,
645
+ options.startsAt,
646
+ event.timestamp,
647
+ )
648
+ }
649
+ allocated = applyEvent(accounts, eligible, excluded, event, {
650
+ allocated,
651
+ perUserPrincipalCapAssets: options.perUserPrincipalCapAssets,
652
+ totalPrincipalCapAssets: options.totalPrincipalCapAssets,
653
+ })
654
+ }
655
+ for (const account of accounts.values())
656
+ accumulateAccount(weighted, accruedThrough, account, excluded, options.startsAt, options.endsAt)
657
+ const rewards = new Map<Address, bigint>()
658
+ const denominator = sharePriceScale * rateScale * secondsPerYear
659
+ for (const account of accounts.values()) {
660
+ const shareSeconds = weighted.get(account.recipient.toLowerCase()) ?? 0n
661
+ const numerator =
662
+ shareSeconds * options.assetPerEarnShareWad * BigInt(options.annualRateBps) +
663
+ account.accrualRemainder
664
+ const amount = numerator / denominator
665
+ account.accrualRemainder = numerator % denominator
666
+ account.pendingRewardAssets += amount
667
+ if (amount > 0n) rewards.set(account.recipient, amount)
668
+ }
669
+ return { accounts: [...accounts.values()].sort(compareAccounts), rewards }
670
+ }
671
+
672
+ export declare namespace calculate {
673
+ /** Time-weighted reward calculation input. */
674
+ type Options = {
675
+ /** Opening base assets per EarnShare, scaled by 1e18. */
676
+ assetPerEarnShareWad: bigint
677
+ /** Opening recipient projections. */
678
+ accounts: readonly Account[]
679
+ /** Incremental boost annual rate in basis points. */
680
+ annualRateBps: number
681
+ /** Exclusive interval end timestamp. */
682
+ endsAt: number
683
+ /** Public events within the interval. */
684
+ events: readonly Event[]
685
+ /** Addresses excluded from individual rewards. */
686
+ excluded: readonly Address[]
687
+ /** Per-recipient lifetime principal cap. */
688
+ perUserPrincipalCapAssets: bigint
689
+ /** Inclusive interval start timestamp. */
690
+ startsAt: number
691
+ /** Campaign lifetime principal cap. */
692
+ totalPrincipalCapAssets: bigint
693
+ }
694
+
695
+ /** Closing projections and newly accrued base-asset rewards. */
696
+ type Result = {
697
+ /** Closing recipient projections. */
698
+ accounts: readonly Account[]
699
+ /** Newly accrued base-asset rewards by recipient. */
700
+ rewards: ReadonlyMap<Address, bigint>
701
+ }
702
+ }
703
+
704
+ /** Calculates one reward interval pagewise and checkpoints exact arithmetic state. */
705
+ export async function calculatePages(options: calculatePages.Options): Promise<calculate.Result> {
706
+ if (options.endsAt <= options.startsAt) throw new Error('reward interval is empty')
707
+ const accounts = new Map(
708
+ (options.checkpoint?.accounts.map(fromSnapshot) ?? options.accounts.map(clone)).map(
709
+ (account) => [account.recipient.toLowerCase(), account],
710
+ ),
711
+ )
712
+ const eligible = new Map(
713
+ options.accounts.map((account) => [account.recipient.toLowerCase(), account.registrationOrder]),
714
+ )
715
+ const excluded = new Set(options.excluded.map((address) => address.toLowerCase()))
716
+ const accruedThrough = new Map<string, number>(
717
+ Object.entries(options.checkpoint?.accruedThrough ?? {}),
718
+ )
719
+ const weighted = new Map<string, bigint>(
720
+ Object.entries(options.checkpoint?.weightedEarnShareSeconds ?? {}).map(([recipient, value]) => [
721
+ recipient,
722
+ BigInt(value),
723
+ ]),
724
+ )
725
+ let allocated = [...accounts.values()].reduce(
726
+ (sum, account) => sum + account.allocatedPrincipalAssets,
727
+ 0n,
728
+ )
729
+ for await (const page of options.pages) {
730
+ const events = [...page]
731
+ .filter((event) => event.timestamp >= options.startsAt && event.timestamp < options.endsAt)
732
+ .sort(compareEvents)
733
+ for (const event of events) {
734
+ for (const recipient of eventRecipients(event)) {
735
+ const account = accounts.get(recipient.toLowerCase())
736
+ if (account)
737
+ accumulateAccount(
738
+ weighted,
739
+ accruedThrough,
740
+ account,
741
+ excluded,
742
+ options.startsAt,
743
+ event.timestamp,
744
+ )
745
+ }
746
+ allocated = applyEvent(accounts, eligible, excluded, event, {
747
+ allocated,
748
+ perUserPrincipalCapAssets: options.perUserPrincipalCapAssets,
749
+ totalPrincipalCapAssets: options.totalPrincipalCapAssets,
750
+ })
751
+ }
752
+ const cursor = page.at(-1)?.cursor
753
+ if (cursor)
754
+ await options.checkpointState?.(
755
+ {
756
+ accounts: [...accounts.values()].sort(compareAccounts).map(snapshot),
757
+ accruedThrough: Object.fromEntries(accruedThrough),
758
+ weightedEarnShareSeconds: Object.fromEntries(
759
+ [...weighted].map(([recipient, value]) => [recipient, value.toString()]),
760
+ ),
761
+ },
762
+ cursor,
763
+ )
764
+ }
765
+ for (const account of accounts.values())
766
+ accumulateAccount(weighted, accruedThrough, account, excluded, options.startsAt, options.endsAt)
767
+ const rewards = new Map<Address, bigint>()
768
+ const denominator = sharePriceScale * rateScale * secondsPerYear
769
+ for (const account of accounts.values()) {
770
+ const shareSeconds = weighted.get(account.recipient.toLowerCase()) ?? 0n
771
+ const numerator =
772
+ shareSeconds * options.assetPerEarnShareWad * BigInt(options.annualRateBps) +
773
+ account.accrualRemainder
774
+ const amount = numerator / denominator
775
+ account.accrualRemainder = numerator % denominator
776
+ account.pendingRewardAssets += amount
777
+ if (amount > 0n) rewards.set(account.recipient, amount)
778
+ }
779
+ return { accounts: [...accounts.values()].sort(compareAccounts), rewards }
780
+ }
781
+
782
+ export declare namespace calculatePages {
783
+ /** Serializable interval reducer state before reward finalization. */
784
+ type Checkpoint = {
785
+ /** Account projections after the checkpointed page. */
786
+ accounts: readonly Campaigns.AccountSnapshot[]
787
+ /** Last accrued timestamp keyed by normalized recipient. */
788
+ accruedThrough: Readonly<Record<string, number>>
789
+ /** Weighted EarnShare seconds keyed by normalized recipient. */
790
+ weightedEarnShareSeconds: Readonly<Record<string, string>>
791
+ }
792
+
793
+ /** Inputs for reward calculation over canonical event pages. */
794
+ type Options = Omit<calculate.Options, 'events'> & {
795
+ /** Previously persisted interval reducer state. */
796
+ checkpoint?: Checkpoint | undefined
797
+ /** Persists reducer state after one complete canonical page. */
798
+ checkpointState?:
799
+ | ((state: Checkpoint, cursor: Campaigns.EventCursor) => Promise<void> | void)
800
+ | undefined
801
+ /** Canonical event pages beginning after the persisted cursor. */
802
+ pages: AsyncIterable<readonly Event[]>
803
+ }
804
+ }
805
+
806
+ /** Converts a database account into the arithmetic projection. */
807
+ export function fromRecord(record: fromRecord.Record): Account {
808
+ return {
809
+ accrualRemainder: BigInt(record.accrualRemainder),
810
+ allocatedPrincipalAssets: BigInt(record.allocatedPrincipalAssets),
811
+ cumulativeEntitlement: BigInt(record.cumulativeEntitlement),
812
+ cumulativePaid: BigInt(record.cumulativePaid),
813
+ ...(record.deferral ? { deferral: record.deferral } : {}),
814
+ ...(record.eligibilityRegisteredAt
815
+ ? { eligibilityRegisteredAt: record.eligibilityRegisteredAt }
816
+ : {}),
817
+ lots: [],
818
+ pendingRewardAssets: BigInt(record.pendingRewardAssets),
819
+ publicEarnShares: BigInt(record.publicEarnShares),
820
+ qualifiedEarnShares: BigInt(record.qualifiedEarnShares),
821
+ recipient: getAddress(record.recipient),
822
+ registrationOrder: BigInt(record.registrationOrder),
823
+ }
824
+ }
825
+
826
+ export declare namespace fromRecord {
827
+ /** Persisted account fields consumed by the projection. */
828
+ type Record = {
829
+ accrualRemainder: string
830
+ allocatedPrincipalAssets: string
831
+ cumulativeEntitlement: string
832
+ cumulativePaid: string
833
+ deferral: string | null
834
+ eligibilityRegisteredAt: string | null
835
+ lots: readonly Campaigns.DepositLot[]
836
+ pendingRewardAssets: string
837
+ publicEarnShares: string
838
+ qualifiedEarnShares: string
839
+ recipient: Address
840
+ registrationOrder: string
841
+ }
842
+ }
843
+
844
+ function account(
845
+ accounts: Map<string, Account>,
846
+ eligible: ReadonlyMap<string, bigint>,
847
+ excluded: ReadonlySet<string>,
848
+ address: Address,
849
+ ): Account | undefined {
850
+ const key = address.toLowerCase()
851
+ if (excluded.has(key)) return undefined
852
+ const order = eligible.get(key)
853
+ if (order === undefined) return undefined
854
+ const existing = accounts.get(key)
855
+ if (existing) return existing
856
+ const created: Account = {
857
+ accrualRemainder: 0n,
858
+ allocatedPrincipalAssets: 0n,
859
+ cumulativeEntitlement: 0n,
860
+ cumulativePaid: 0n,
861
+ lots: [],
862
+ pendingRewardAssets: 0n,
863
+ publicEarnShares: 0n,
864
+ qualifiedEarnShares: 0n,
865
+ recipient: getAddress(address),
866
+ registrationOrder: order,
867
+ }
868
+ accounts.set(key, created)
869
+ return created
870
+ }
871
+
872
+ function accumulateAccount(
873
+ weighted: Map<string, bigint>,
874
+ accruedThrough: Map<string, number>,
875
+ account: Account,
876
+ excluded: ReadonlySet<string>,
877
+ startsAt: number,
878
+ through: number,
879
+ ) {
880
+ const key = account.recipient.toLowerCase()
881
+ const previous = accruedThrough.get(key) ?? startsAt
882
+ const seconds = through - previous
883
+ if (seconds < 0) throw new Error('reward events are not time ordered')
884
+ if (!excluded.has(key)) {
885
+ const balance = minimum(account.publicEarnShares, account.qualifiedEarnShares)
886
+ weighted.set(key, (weighted.get(key) ?? 0n) + balance * BigInt(seconds))
887
+ }
888
+ accruedThrough.set(key, through)
889
+ }
890
+
891
+ function eventRecipients(event: Event): readonly Address[] {
892
+ if (event.kind === 'deposit') return [event.recipient]
893
+ if (event.from.toLowerCase() === event.to.toLowerCase()) return [event.from]
894
+ return [event.from, event.to]
895
+ }
896
+
897
+ function applyEvent(
898
+ accounts: Map<string, Account>,
899
+ eligible: ReadonlyMap<string, bigint>,
900
+ excluded: ReadonlySet<string>,
901
+ event: Event,
902
+ caps: {
903
+ allocated: bigint
904
+ perUserPrincipalCapAssets: bigint
905
+ totalPrincipalCapAssets: bigint
906
+ },
907
+ ): bigint {
908
+ if (event.kind === 'deposit') {
909
+ const recipient = account(accounts, eligible, excluded, event.recipient)
910
+ if (!recipient || event.assets === 0n || event.earnShares === 0n) return caps.allocated
911
+ const allocatedAssets = minimum(
912
+ event.assets,
913
+ maximum(caps.perUserPrincipalCapAssets - recipient.allocatedPrincipalAssets, 0n),
914
+ maximum(caps.totalPrincipalCapAssets - caps.allocated, 0n),
915
+ )
916
+ if (allocatedAssets === 0n) return caps.allocated
917
+ const qualifiedShares = (event.earnShares * allocatedAssets) / event.assets
918
+ if (qualifiedShares === 0n) return caps.allocated
919
+ recipient.allocatedPrincipalAssets += allocatedAssets
920
+ recipient.qualifiedEarnShares += qualifiedShares
921
+ return caps.allocated + allocatedAssets
922
+ }
923
+ if (sameAddress(event.from, event.to)) return caps.allocated
924
+ if (event.from.toLowerCase() !== zeroAddress) {
925
+ const sender = accounts.get(event.from.toLowerCase())
926
+ if (sender) send(sender, event.amount)
927
+ }
928
+ if (event.to.toLowerCase() !== zeroAddress) {
929
+ const recipient = account(accounts, eligible, excluded, event.to)
930
+ if (recipient) recipient.publicEarnShares += event.amount
931
+ }
932
+ return caps.allocated
933
+ }
934
+
935
+ function send(account: Account, amount: bigint): void {
936
+ account.publicEarnShares = maximum(account.publicEarnShares - amount, 0n)
937
+ account.qualifiedEarnShares = maximum(account.qualifiedEarnShares - amount, 0n)
938
+ }
939
+
940
+ function sendLots(account: Account, amount: bigint): void {
941
+ account.publicEarnShares = maximum(account.publicEarnShares - amount, 0n)
942
+ let remaining = amount
943
+ for (const lot of account.lots) {
944
+ if (remaining === 0n) break
945
+ const shares = BigInt(lot.remainingEarnShares)
946
+ const consumed = minimum(shares, remaining)
947
+ lot.remainingEarnShares = (shares - consumed).toString()
948
+ account.qualifiedEarnShares -= consumed
949
+ remaining -= consumed
950
+ }
951
+ }
952
+
953
+ function sameAddress(left: Address, right: Address): boolean {
954
+ return left.toLowerCase() === right.toLowerCase()
955
+ }
956
+
957
+ function clone(account: Account): Account {
958
+ return { ...account, lots: account.lots.map((lot) => ({ ...lot, event: { ...lot.event } })) }
959
+ }
960
+
961
+ function compareAccounts(left: Account, right: Account): number {
962
+ return left.registrationOrder < right.registrationOrder
963
+ ? -1
964
+ : left.registrationOrder > right.registrationOrder
965
+ ? 1
966
+ : left.recipient.toLowerCase().localeCompare(right.recipient.toLowerCase())
967
+ }
968
+
969
+ function compareEvents(left: Event, right: Event): number {
970
+ return compareCursors(left.cursor, right.cursor)
971
+ }
972
+
973
+ function compareCursors(left: Campaigns.EventCursor, right: Campaigns.EventCursor): number {
974
+ return (
975
+ left.blockNumber - right.blockNumber ||
976
+ left.transactionIndex - right.transactionIndex ||
977
+ left.logIndex - right.logIndex
978
+ )
979
+ }
980
+
981
+ function maximum(left: bigint, right: bigint): bigint {
982
+ return left > right ? left : right
983
+ }
984
+
985
+ function minimum(...values: readonly bigint[]): bigint {
986
+ return values.reduce((result, value) => (value < result ? value : result))
987
+ }