tapimo 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1143) 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 +21383 -18056
  9. package/dist/App.d.ts.map +1 -1
  10. package/dist/App.js +301 -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 +2 -2
  24. package/dist/Webhooks.js.map +1 -1
  25. package/dist/admin/App.d.ts +3936 -1337
  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 +159 -7
  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 +1446 -0
  34. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  35. package/dist/admin/apps/earn-vaults.js +465 -8
  36. package/dist/admin/apps/earn-vaults.js.map +1 -1
  37. package/dist/admin/apps/organizations.d.ts +344 -3
  38. package/dist/admin/apps/organizations.d.ts.map +1 -1
  39. package/dist/admin/apps/organizations.js +288 -10
  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 +16 -16
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +3 -3
  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 +129 -69
  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 +40 -8
  76. package/dist/apps/Zones.js.map +1 -1
  77. package/dist/apps/data/App.d.ts +4310 -2548
  78. package/dist/apps/data/App.d.ts.map +1 -1
  79. package/dist/apps/data/App.js +86 -26
  80. package/dist/apps/data/App.js.map +1 -1
  81. package/dist/apps/data/routes/activities.d.ts +364 -34
  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 +94 -22
  86. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  87. package/dist/apps/data/routes/blocks.d.ts +37 -37
  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 +1641 -352
  92. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  93. package/dist/apps/data/routes/earn.js +1561 -120
  94. package/dist/apps/data/routes/earn.js.map +1 -1
  95. package/dist/apps/data/routes/exchanges.d.ts +15 -0
  96. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  97. package/dist/apps/data/routes/exchanges.js +180 -114
  98. package/dist/apps/data/routes/exchanges.js.map +1 -1
  99. package/dist/apps/data/routes/fee-amm.d.ts +5 -0
  100. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  101. package/dist/apps/data/routes/fee-amm.js +49 -38
  102. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  103. package/dist/apps/data/routes/indexer.d.ts +125 -0
  104. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  105. package/dist/apps/data/routes/indexer.js +83 -27
  106. package/dist/apps/data/routes/indexer.js.map +1 -1
  107. package/dist/apps/data/routes/rpc.d.ts +507 -33
  108. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  109. package/dist/apps/data/routes/rpc.js +266 -156
  110. package/dist/apps/data/routes/rpc.js.map +1 -1
  111. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  112. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  113. package/dist/apps/data/routes/tokenlist.js +68 -11
  114. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  115. package/dist/apps/data/routes/tokens.d.ts +95 -93
  116. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  117. package/dist/apps/data/routes/tokens.js +26 -14
  118. package/dist/apps/data/routes/tokens.js.map +1 -1
  119. package/dist/apps/data/routes/transfers.d.ts +16 -0
  120. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  121. package/dist/apps/data/routes/transfers.js +9 -7
  122. package/dist/apps/data/routes/transfers.js.map +1 -1
  123. package/dist/apps/data/routes/verified-tokens.d.ts +4 -4
  124. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  125. package/dist/apps/data/routes/verified-tokens.js +64 -20
  126. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  127. package/dist/apps/data/routes/webhooks.d.ts +1210 -70
  128. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  129. package/dist/apps/data/routes/webhooks.js +301 -163
  130. package/dist/apps/data/routes/webhooks.js.map +1 -1
  131. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  132. package/dist/apps/data/routes/zones.js +20 -12
  133. package/dist/apps/data/routes/zones.js.map +1 -1
  134. package/dist/apps/docs/reference.js +2 -2
  135. package/dist/apps/docs/reference.js.map +1 -1
  136. package/dist/apps/index.d.ts +1 -1
  137. package/dist/apps/index.d.ts.map +1 -1
  138. package/dist/apps/index.js +1 -1
  139. package/dist/apps/index.js.map +1 -1
  140. package/dist/apps/management/App.d.ts +4119 -3297
  141. package/dist/apps/management/App.d.ts.map +1 -1
  142. package/dist/apps/management/App.js +5 -14
  143. package/dist/apps/management/App.js.map +1 -1
  144. package/dist/apps/management/Billing.d.ts +49 -8
  145. package/dist/apps/management/Billing.d.ts.map +1 -1
  146. package/dist/apps/management/Billing.js +221 -26
  147. package/dist/apps/management/Billing.js.map +1 -1
  148. package/dist/apps/management/routes/api-keys.d.ts +174 -72
  149. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  150. package/dist/apps/management/routes/api-keys.js +43 -15
  151. package/dist/apps/management/routes/api-keys.js.map +1 -1
  152. package/dist/apps/management/routes/billing.d.ts +364 -78
  153. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  154. package/dist/apps/management/routes/billing.js +274 -49
  155. package/dist/apps/management/routes/billing.js.map +1 -1
  156. package/dist/apps/management/routes/faucet.d.ts +6 -6
  157. package/dist/apps/management/routes/faucet.js +1 -1
  158. package/dist/apps/management/routes/faucet.js.map +1 -1
  159. package/dist/apps/management/routes/invitations.d.ts +99 -24
  160. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  161. package/dist/apps/management/routes/invitations.js +117 -13
  162. package/dist/apps/management/routes/invitations.js.map +1 -1
  163. package/dist/apps/management/routes/invite-links.d.ts +42 -42
  164. package/dist/apps/management/routes/me.d.ts.map +1 -1
  165. package/dist/apps/management/routes/me.js +6 -2
  166. package/dist/apps/management/routes/me.js.map +1 -1
  167. package/dist/apps/management/routes/members.d.ts +16 -16
  168. package/dist/apps/management/routes/orgs.d.ts +36 -20
  169. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  170. package/dist/apps/management/routes/orgs.js +52 -12
  171. package/dist/apps/management/routes/orgs.js.map +1 -1
  172. package/dist/apps/management/routes/projects.d.ts +40 -40
  173. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  174. package/dist/apps/management/routes/projects.js +6 -1
  175. package/dist/apps/management/routes/projects.js.map +1 -1
  176. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  177. package/dist/apps/management/routes/scopes.js +4 -1
  178. package/dist/apps/management/routes/scopes.js.map +1 -1
  179. package/dist/apps/management/routes/usage.d.ts +8 -8
  180. package/dist/apps/management/routes/usage.js +21 -4
  181. package/dist/apps/management/routes/usage.js.map +1 -1
  182. package/dist/apps/management/routes/verified-token-requests.d.ts +16 -16
  183. package/dist/apps/management/routes/webhooks.d.ts +931 -215
  184. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  185. package/dist/apps/management/routes/webhooks.js +71 -25
  186. package/dist/apps/management/routes/webhooks.js.map +1 -1
  187. package/dist/apps/mcp.d.ts +1 -1
  188. package/dist/apps/mcp.js +7 -7
  189. package/dist/apps/mcp.js.map +1 -1
  190. package/dist/apps/mpp/App.d.ts.map +1 -1
  191. package/dist/apps/mpp/App.js +35 -7
  192. package/dist/apps/mpp/App.js.map +1 -1
  193. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  194. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  195. package/dist/apps/mpp/internal/Adapter.js +30 -1
  196. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  197. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  198. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  199. package/dist/apps/mpp/internal/Policy.js +24 -6
  200. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  201. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  202. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  203. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  204. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  205. package/dist/apps/relay/App.d.ts +2 -0
  206. package/dist/apps/relay/App.d.ts.map +1 -1
  207. package/dist/apps/relay/App.js +177 -26
  208. package/dist/apps/relay/App.js.map +1 -1
  209. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  210. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  211. package/dist/apps/relay/Sponsorships.js +232 -25
  212. package/dist/apps/relay/Sponsorships.js.map +1 -1
  213. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  214. package/dist/apps/routes/Access.d.ts.map +1 -0
  215. package/dist/apps/{funding → routes}/Access.js +4 -4
  216. package/dist/apps/routes/Access.js.map +1 -0
  217. package/dist/apps/{funding → routes}/App.d.ts +841 -136
  218. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  219. package/dist/apps/{funding → routes}/App.js +17 -17
  220. package/dist/apps/routes/App.js.map +1 -0
  221. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  222. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  223. package/dist/apps/routes/Inventory.js.map +1 -0
  224. package/dist/apps/routes/index.d.ts +2 -0
  225. package/dist/apps/routes/index.d.ts.map +1 -0
  226. package/dist/apps/routes/index.js +2 -0
  227. package/dist/apps/routes/index.js.map +1 -0
  228. package/dist/apps/{funding → routes}/routes/chains.d.ts +7 -7
  229. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  230. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  231. package/dist/apps/routes/routes/chains.js.map +1 -0
  232. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +123 -59
  233. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  234. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +498 -223
  235. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  236. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  237. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  238. package/dist/apps/routes/routes/providers.js +57 -0
  239. package/dist/apps/routes/routes/providers.js.map +1 -0
  240. package/dist/apps/{funding → routes}/routes/quotes.d.ts +19 -16
  241. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  242. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  243. package/dist/apps/routes/routes/quotes.js.map +1 -0
  244. package/dist/apps/{funding → routes}/routes/transfers.d.ts +957 -71
  245. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  246. package/dist/apps/routes/routes/transfers.js +1140 -0
  247. package/dist/apps/routes/routes/transfers.js.map +1 -0
  248. package/dist/cli/Cli.d.ts +30 -0
  249. package/dist/cli/Cli.d.ts.map +1 -1
  250. package/dist/cli/commands/admin.d.ts +36 -0
  251. package/dist/cli/commands/admin.d.ts.map +1 -1
  252. package/dist/cli/commands/admin.js +273 -0
  253. package/dist/cli/commands/admin.js.map +1 -1
  254. package/dist/cloudflare.d.ts +16 -14
  255. package/dist/cloudflare.d.ts.map +1 -1
  256. package/dist/cloudflare.js +26 -21
  257. package/dist/cloudflare.js.map +1 -1
  258. package/dist/db/Db.d.ts +63 -21
  259. package/dist/db/Db.d.ts.map +1 -1
  260. package/dist/db/Db.js +1052 -15
  261. package/dist/db/Db.js.map +1 -1
  262. package/dist/db/Schema.d.ts +785 -133
  263. package/dist/db/Schema.d.ts.map +1 -1
  264. package/dist/db/Schema.js +590 -162
  265. package/dist/db/Schema.js.map +1 -1
  266. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  267. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  268. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  269. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  270. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  271. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  272. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  273. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  274. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  275. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  276. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  277. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  278. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  279. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  280. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  281. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  282. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  283. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  284. package/dist/db/tables/apiKeyRevocations.js +98 -0
  285. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  286. package/dist/db/tables/authAccounts.d.ts +47 -0
  287. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  288. package/dist/db/tables/authAccounts.js +72 -0
  289. package/dist/db/tables/authAccounts.js.map +1 -0
  290. package/dist/db/tables/authSessions.d.ts +12 -0
  291. package/dist/db/tables/authSessions.d.ts.map +1 -0
  292. package/dist/db/tables/authSessions.js +2 -0
  293. package/dist/db/tables/authSessions.js.map +1 -0
  294. package/dist/db/tables/authVerifications.d.ts +12 -0
  295. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  296. package/dist/db/tables/authVerifications.js +2 -0
  297. package/dist/db/tables/authVerifications.js.map +1 -0
  298. package/dist/db/tables/invitations.d.ts +17 -1
  299. package/dist/db/tables/invitations.d.ts.map +1 -1
  300. package/dist/db/tables/invitations.js +123 -43
  301. package/dist/db/tables/invitations.js.map +1 -1
  302. package/dist/db/tables/memberships.d.ts +8 -0
  303. package/dist/db/tables/memberships.d.ts.map +1 -1
  304. package/dist/db/tables/memberships.js +51 -2
  305. package/dist/db/tables/memberships.js.map +1 -1
  306. package/dist/db/tables/organizations.d.ts +51 -5
  307. package/dist/db/tables/organizations.d.ts.map +1 -1
  308. package/dist/db/tables/organizations.js +135 -47
  309. package/dist/db/tables/organizations.js.map +1 -1
  310. package/dist/db/tables/projects.d.ts +27 -1
  311. package/dist/db/tables/projects.d.ts.map +1 -1
  312. package/dist/db/tables/projects.js +38 -3
  313. package/dist/db/tables/projects.js.map +1 -1
  314. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  315. package/dist/db/tables/requestUsage.js.map +1 -1
  316. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  317. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  318. package/dist/db/tables/rewardAccounts.js +88 -0
  319. package/dist/db/tables/rewardAccounts.js.map +1 -0
  320. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  321. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  322. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  323. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  324. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  325. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  326. package/dist/db/tables/rewardCampaigns.js +392 -0
  327. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  328. package/dist/db/tables/rewardCredits.d.ts +53 -0
  329. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  330. package/dist/db/tables/rewardCredits.js +63 -0
  331. package/dist/db/tables/rewardCredits.js.map +1 -0
  332. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  333. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  334. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  335. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  336. package/dist/db/tables/rewardRuns.d.ts +188 -0
  337. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  338. package/dist/db/tables/rewardRuns.js +278 -0
  339. package/dist/db/tables/rewardRuns.js.map +1 -0
  340. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  341. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  342. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  343. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  344. package/dist/db/tables/routesCatalog.d.ts +58 -0
  345. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  346. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  347. package/dist/db/tables/routesCatalog.js.map +1 -0
  348. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  349. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  350. package/dist/db/tables/routesDepositAddresses.js +587 -0
  351. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  352. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  353. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  354. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  355. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  356. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  357. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  358. package/dist/db/tables/routesDeposits.js +576 -0
  359. package/dist/db/tables/routesDeposits.js.map +1 -0
  360. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  361. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  362. package/dist/db/tables/routesIdempotency.js +330 -0
  363. package/dist/db/tables/routesIdempotency.js.map +1 -0
  364. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  365. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  366. package/dist/db/tables/routesSubsidies.js +45 -0
  367. package/dist/db/tables/routesSubsidies.js.map +1 -0
  368. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  369. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  370. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  371. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  372. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  373. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  374. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  375. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  376. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  377. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  378. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  379. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  380. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  381. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  382. package/dist/db/tables/routesTransferTransactions.js +86 -0
  383. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  384. package/dist/db/tables/routesTransfers.d.ts +319 -0
  385. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  386. package/dist/db/tables/routesTransfers.js +372 -0
  387. package/dist/db/tables/routesTransfers.js.map +1 -0
  388. package/dist/db/tables/sponsoredTransactions.d.ts +112 -13
  389. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  390. package/dist/db/tables/sponsoredTransactions.js +241 -38
  391. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  392. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  393. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  394. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  395. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  396. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  397. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  398. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  399. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  400. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  401. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  402. package/dist/db/tables/stripeCustomers.js +13 -0
  403. package/dist/db/tables/stripeCustomers.js.map +1 -1
  404. package/dist/db/tables/users.d.ts +17 -1
  405. package/dist/db/tables/users.d.ts.map +1 -1
  406. package/dist/db/tables/users.js +47 -2
  407. package/dist/db/tables/users.js.map +1 -1
  408. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  409. package/dist/db/tables/webhookQueueEvents.js +5 -1
  410. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  411. package/dist/db/tables/webhookSubscriptions.d.ts +22 -10
  412. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  413. package/dist/db/tables/webhookSubscriptions.js +50 -15
  414. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  415. package/dist/handlers/internal/executionError.d.ts +2 -2
  416. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  417. package/dist/handlers/internal/executionError.js +1 -2
  418. package/dist/handlers/internal/executionError.js.map +1 -1
  419. package/dist/handlers/internal/multisig.d.ts +4 -232
  420. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  421. package/dist/handlers/internal/multisig.js +11 -537
  422. package/dist/handlers/internal/multisig.js.map +1 -1
  423. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  424. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  425. package/dist/handlers/internal/sponsorship.js +13 -9
  426. package/dist/handlers/internal/sponsorship.js.map +1 -1
  427. package/dist/handlers/relay.d.ts +9 -12
  428. package/dist/handlers/relay.d.ts.map +1 -1
  429. package/dist/handlers/relay.js +81 -85
  430. package/dist/handlers/relay.js.map +1 -1
  431. package/dist/index.d.ts +0 -17
  432. package/dist/index.d.ts.map +1 -1
  433. package/dist/index.js +0 -17
  434. package/dist/index.js.map +1 -1
  435. package/dist/internal/AssetResponse.d.ts +12 -0
  436. package/dist/internal/AssetResponse.d.ts.map +1 -0
  437. package/dist/internal/AssetResponse.js +21 -0
  438. package/dist/internal/AssetResponse.js.map +1 -0
  439. package/dist/internal/Auth.d.ts +48 -12
  440. package/dist/internal/Auth.d.ts.map +1 -1
  441. package/dist/internal/Auth.js +603 -175
  442. package/dist/internal/Auth.js.map +1 -1
  443. package/dist/internal/BetterAuth.d.ts +1488 -0
  444. package/dist/internal/BetterAuth.d.ts.map +1 -0
  445. package/dist/internal/BetterAuth.js +253 -0
  446. package/dist/internal/BetterAuth.js.map +1 -0
  447. package/dist/internal/Cache.d.ts +2 -0
  448. package/dist/internal/Cache.d.ts.map +1 -1
  449. package/dist/internal/Cache.js +2 -0
  450. package/dist/internal/Cache.js.map +1 -1
  451. package/dist/internal/EarnRates.d.ts +26 -3
  452. package/dist/internal/EarnRates.d.ts.map +1 -1
  453. package/dist/internal/EarnRates.js +84 -19
  454. package/dist/internal/EarnRates.js.map +1 -1
  455. package/dist/internal/EarnSharePrices.d.ts +120 -0
  456. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  457. package/dist/internal/EarnSharePrices.js +179 -0
  458. package/dist/internal/EarnSharePrices.js.map +1 -0
  459. package/dist/internal/EarnVaults.d.ts +4 -0
  460. package/dist/internal/EarnVaults.d.ts.map +1 -1
  461. package/dist/internal/EarnVaults.js +31 -14
  462. package/dist/internal/EarnVaults.js.map +1 -1
  463. package/dist/internal/Email.d.ts +37 -0
  464. package/dist/internal/Email.d.ts.map +1 -0
  465. package/dist/internal/Email.js +16 -0
  466. package/dist/internal/Email.js.map +1 -0
  467. package/dist/internal/Log.d.ts +32 -28
  468. package/dist/internal/Log.d.ts.map +1 -1
  469. package/dist/internal/Log.js +18 -11
  470. package/dist/internal/Log.js.map +1 -1
  471. package/dist/internal/MetricSink.d.ts +3 -0
  472. package/dist/internal/MetricSink.d.ts.map +1 -1
  473. package/dist/internal/MetricSink.js +67 -8
  474. package/dist/internal/MetricSink.js.map +1 -1
  475. package/dist/internal/Mpp.d.ts.map +1 -1
  476. package/dist/internal/Mpp.js +20 -25
  477. package/dist/internal/Mpp.js.map +1 -1
  478. package/dist/internal/OpenApi.d.ts +26 -3
  479. package/dist/internal/OpenApi.d.ts.map +1 -1
  480. package/dist/internal/OpenApi.js +25 -10
  481. package/dist/internal/OpenApi.js.map +1 -1
  482. package/dist/internal/Provider.d.ts +1 -1
  483. package/dist/internal/Provider.d.ts.map +1 -1
  484. package/dist/internal/RateLimit.d.ts.map +1 -1
  485. package/dist/internal/RateLimit.js +13 -1
  486. package/dist/internal/RateLimit.js.map +1 -1
  487. package/dist/internal/Store.d.ts +16 -0
  488. package/dist/internal/Store.d.ts.map +1 -1
  489. package/dist/internal/Store.js +59 -8
  490. package/dist/internal/Store.js.map +1 -1
  491. package/dist/internal/Tidx.d.ts +9 -2
  492. package/dist/internal/Tidx.d.ts.map +1 -1
  493. package/dist/internal/Tidx.js +78 -11
  494. package/dist/internal/Tidx.js.map +1 -1
  495. package/dist/internal/Timing.d.ts +26 -0
  496. package/dist/internal/Timing.d.ts.map +1 -1
  497. package/dist/internal/Timing.js +63 -5
  498. package/dist/internal/Timing.js.map +1 -1
  499. package/dist/internal/VercelOidc.d.ts +94 -0
  500. package/dist/internal/VercelOidc.d.ts.map +1 -0
  501. package/dist/internal/VercelOidc.js +128 -0
  502. package/dist/internal/VercelOidc.js.map +1 -0
  503. package/dist/internal/VerifiedTokens.d.ts +2 -8
  504. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  505. package/dist/internal/VerifiedTokens.js +24 -24
  506. package/dist/internal/VerifiedTokens.js.map +1 -1
  507. package/dist/internal/Viem.d.ts +46 -2068
  508. package/dist/internal/Viem.d.ts.map +1 -1
  509. package/dist/internal/Viem.js +171 -11
  510. package/dist/internal/Viem.js.map +1 -1
  511. package/dist/internal/Webhooks.d.ts +12 -4
  512. package/dist/internal/Webhooks.d.ts.map +1 -1
  513. package/dist/internal/Webhooks.js +9 -3
  514. package/dist/internal/Webhooks.js.map +1 -1
  515. package/dist/internal/ZoneRpc.d.ts +7 -0
  516. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  517. package/dist/internal/ZoneRpc.js +49 -0
  518. package/dist/internal/ZoneRpc.js.map +1 -0
  519. package/dist/internal/index.d.ts +3 -1
  520. package/dist/internal/index.d.ts.map +1 -1
  521. package/dist/internal/index.js +3 -1
  522. package/dist/internal/index.js.map +1 -1
  523. package/dist/internal/rewards/Audit.d.ts +88 -0
  524. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  525. package/dist/internal/rewards/Audit.js +134 -0
  526. package/dist/internal/rewards/Audit.js.map +1 -0
  527. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  528. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  529. package/dist/internal/rewards/Campaigns.js +531 -0
  530. package/dist/internal/rewards/Campaigns.js.map +1 -0
  531. package/dist/internal/rewards/Credits.d.ts +76 -0
  532. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  533. package/dist/internal/rewards/Credits.js +95 -0
  534. package/dist/internal/rewards/Credits.js.map +1 -0
  535. package/dist/internal/rewards/Events.d.ts +100 -0
  536. package/dist/internal/rewards/Events.d.ts.map +1 -0
  537. package/dist/internal/rewards/Events.js +340 -0
  538. package/dist/internal/rewards/Events.js.map +1 -0
  539. package/dist/internal/rewards/Projection.d.ts +237 -0
  540. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  541. package/dist/internal/rewards/Projection.js +616 -0
  542. package/dist/internal/rewards/Projection.js.map +1 -0
  543. package/dist/internal/rewards/Rates.d.ts +44 -0
  544. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  545. package/dist/internal/rewards/Rates.js +60 -0
  546. package/dist/internal/rewards/Rates.js.map +1 -0
  547. package/dist/internal/rewards/Read.d.ts +158 -0
  548. package/dist/internal/rewards/Read.d.ts.map +1 -0
  549. package/dist/internal/rewards/Read.js +292 -0
  550. package/dist/internal/rewards/Read.js.map +1 -0
  551. package/dist/internal/rewards/Runner.d.ts +164 -0
  552. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  553. package/dist/internal/rewards/Runner.js +1778 -0
  554. package/dist/internal/rewards/Runner.js.map +1 -0
  555. package/dist/internal/rewards/Signer.d.ts +224 -0
  556. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  557. package/dist/internal/rewards/Signer.js +135 -0
  558. package/dist/internal/rewards/Signer.js.map +1 -0
  559. package/dist/internal/rewards/index.d.ts +15 -0
  560. package/dist/internal/rewards/index.d.ts.map +1 -0
  561. package/dist/internal/rewards/index.js +15 -0
  562. package/dist/internal/rewards/index.js.map +1 -0
  563. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  564. package/dist/internal/routes/Action.d.ts.map +1 -0
  565. package/dist/internal/{funding → routes}/Action.js +17 -9
  566. package/dist/internal/routes/Action.js.map +1 -0
  567. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  568. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  569. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  570. package/dist/internal/routes/Catalog.js.map +1 -0
  571. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  572. package/dist/internal/routes/Chain.d.ts.map +1 -0
  573. package/dist/internal/{funding → routes}/Chain.js +3 -3
  574. package/dist/internal/routes/Chain.js.map +1 -0
  575. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  576. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  577. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  578. package/dist/internal/routes/Deposit.js.map +1 -0
  579. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  580. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  581. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  582. package/dist/internal/routes/DepositAddress.js.map +1 -0
  583. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  584. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  585. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -3
  586. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  587. package/dist/internal/routes/Economics.d.ts +25 -0
  588. package/dist/internal/routes/Economics.d.ts.map +1 -0
  589. package/dist/internal/routes/Economics.js +28 -0
  590. package/dist/internal/routes/Economics.js.map +1 -0
  591. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  592. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  593. package/dist/internal/{funding → routes}/Evidence.js +9 -17
  594. package/dist/internal/routes/Evidence.js.map +1 -0
  595. package/dist/internal/routes/Observability.d.ts +154 -0
  596. package/dist/internal/routes/Observability.d.ts.map +1 -0
  597. package/dist/internal/routes/Observability.js +389 -0
  598. package/dist/internal/routes/Observability.js.map +1 -0
  599. package/dist/internal/{funding → routes}/Provider.d.ts +350 -104
  600. package/dist/internal/routes/Provider.d.ts.map +1 -0
  601. package/dist/internal/{funding → routes}/Provider.js +233 -97
  602. package/dist/internal/routes/Provider.js.map +1 -0
  603. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  604. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  605. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  606. package/dist/internal/routes/Reconciliation.js.map +1 -0
  607. package/dist/internal/routes/Route.d.ts +21 -0
  608. package/dist/internal/routes/Route.d.ts.map +1 -0
  609. package/dist/internal/{funding → routes}/Route.js +1 -1
  610. package/dist/internal/routes/Route.js.map +1 -0
  611. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  612. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  613. package/dist/internal/{funding → routes}/SourceObservation.js +13 -15
  614. package/dist/internal/routes/SourceObservation.js.map +1 -0
  615. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  616. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  617. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  618. package/dist/internal/routes/Subsidy.js.map +1 -0
  619. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  620. package/dist/internal/routes/Token.d.ts.map +1 -0
  621. package/dist/internal/{funding → routes}/Token.js +3 -3
  622. package/dist/internal/routes/Token.js.map +1 -0
  623. package/dist/internal/{funding → routes}/Transfer.d.ts +324 -34
  624. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  625. package/dist/internal/routes/Transfer.js +728 -0
  626. package/dist/internal/routes/Transfer.js.map +1 -0
  627. package/dist/internal/routes/TransferReconciliation.d.ts +55 -0
  628. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  629. package/dist/internal/routes/TransferReconciliation.js +422 -0
  630. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  631. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  632. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  633. package/dist/internal/routes/TransferSubsidy.js +256 -0
  634. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  635. package/dist/internal/routes/TransferWebhook.d.ts +21 -0
  636. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  637. package/dist/internal/routes/TransferWebhook.js +43 -0
  638. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  639. package/dist/internal/{funding → routes}/index.d.ts +3 -0
  640. package/dist/internal/routes/index.d.ts.map +1 -0
  641. package/dist/internal/{funding → routes}/index.js +3 -0
  642. package/dist/internal/routes/index.js.map +1 -0
  643. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  644. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  645. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  646. package/dist/internal/routes/providers/across.js.map +1 -0
  647. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  648. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  649. package/dist/internal/{funding → routes}/providers/relay.js +197 -122
  650. package/dist/internal/routes/providers/relay.js.map +1 -0
  651. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  652. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  653. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  654. package/dist/internal/routes/providers/rhino.js.map +1 -0
  655. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  656. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  657. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  658. package/dist/internal/routes/providers/squid.js.map +1 -0
  659. package/dist/internal/routes/providers/stargate.d.ts +165 -0
  660. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  661. package/dist/internal/routes/providers/stargate.js +898 -0
  662. package/dist/internal/routes/providers/stargate.js.map +1 -0
  663. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  664. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  665. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  666. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  667. package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
  668. package/dist/internal/webhookDestinations/slack.js +22 -6
  669. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  670. package/dist/providers/index.d.ts +12 -12
  671. package/dist/providers/index.d.ts.map +1 -1
  672. package/dist/providers/index.js +12 -12
  673. package/dist/providers/index.js.map +1 -1
  674. package/dist/server.d.ts +19 -0
  675. package/dist/server.d.ts.map +1 -0
  676. package/dist/server.js +19 -0
  677. package/dist/server.js.map +1 -0
  678. package/package.json +15 -4
  679. package/src/ApiKey.ts +1 -1
  680. package/src/ApiKeys.test.ts +1033 -3
  681. package/src/ApiKeys.ts +489 -48
  682. package/src/App.test-d.ts +1 -1
  683. package/src/App.test.ts +216 -25
  684. package/src/App.ts +335 -31
  685. package/src/Assets.test.ts +2 -2
  686. package/src/Assets.ts +3 -1
  687. package/src/Auth.test-d.ts +1 -1
  688. package/src/Client.test-d.ts +611 -101
  689. package/src/Handler.ts +0 -1
  690. package/src/OpenApi.contract.test.ts +195 -0
  691. package/src/Scope.ts +17 -5
  692. package/src/Webhooks.ts +2 -2
  693. package/src/admin/App.test.ts +30 -2
  694. package/src/admin/App.ts +42 -6
  695. package/src/admin/apps/api-keys.test.ts +267 -5
  696. package/src/admin/apps/api-keys.ts +100 -50
  697. package/src/admin/apps/earn-vaults.test.ts +158 -0
  698. package/src/admin/apps/earn-vaults.ts +681 -7
  699. package/src/admin/apps/organizations.test.ts +342 -1
  700. package/src/admin/apps/organizations.ts +368 -8
  701. package/src/admin/apps/routes-support.test.ts +200 -0
  702. package/src/admin/apps/routes-support.ts +201 -0
  703. package/src/admin/apps/routes.test.ts +450 -0
  704. package/src/admin/apps/routes.ts +896 -0
  705. package/src/admin/apps/scopes.test.ts +15 -5
  706. package/src/admin/apps/subsidies.test.ts +306 -0
  707. package/src/admin/apps/subsidies.ts +457 -0
  708. package/src/admin/apps/verified-tokens.test.ts +8 -3
  709. package/src/admin/apps/verified-tokens.ts +3 -3
  710. package/src/admin/ui/plugin.ts +1 -2
  711. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  712. package/src/admin/ui/src/lib/config.ts +11 -2
  713. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  714. package/src/admin/ui/src/lib/organizations.test.ts +147 -3
  715. package/src/admin/ui/src/lib/organizations.ts +136 -0
  716. package/src/admin/ui/src/lib/query-client.ts +1 -1
  717. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  718. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  719. package/src/admin/ui/src/lib/routes.ts +304 -0
  720. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  721. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  722. package/src/admin/ui/src/routes/__root.tsx +12 -1
  723. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  724. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  725. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +334 -2
  726. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  727. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  728. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  729. package/src/admin/ui.generated.ts +144 -69
  730. package/src/analytics/Analytics.test.ts +108 -18
  731. package/src/analytics/Analytics.ts +38 -6
  732. package/src/analytics/tables/requestEvents.test.ts +100 -0
  733. package/src/analytics/tables/requestEvents.ts +10 -1
  734. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  735. package/src/apps/Zones.test.ts +18 -3
  736. package/src/apps/Zones.ts +55 -8
  737. package/src/apps/composition.test.ts +68 -59
  738. package/src/apps/data/App.test.ts +154 -2
  739. package/src/apps/data/App.ts +102 -33
  740. package/src/apps/data/routes/activities.test.ts +419 -7
  741. package/src/apps/data/routes/activities.ts +683 -216
  742. package/src/apps/data/routes/balances.test.ts +2 -2
  743. package/src/apps/data/routes/blocks.test.ts +46 -1
  744. package/src/apps/data/routes/coingecko.test.ts +419 -1
  745. package/src/apps/data/routes/coingecko.ts +309 -253
  746. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  747. package/src/apps/data/routes/earn.test.ts +1661 -29
  748. package/src/apps/data/routes/earn.ts +2314 -328
  749. package/src/apps/data/routes/exchanges.test.ts +752 -30
  750. package/src/apps/data/routes/exchanges.ts +954 -753
  751. package/src/apps/data/routes/fee-amm.test.ts +224 -0
  752. package/src/apps/data/routes/fee-amm.ts +208 -178
  753. package/src/apps/data/routes/indexer.test.ts +389 -0
  754. package/src/apps/data/routes/indexer.ts +165 -69
  755. package/src/apps/data/routes/receipts.test.ts +1 -1
  756. package/src/apps/data/routes/rpc.test.ts +352 -8
  757. package/src/apps/data/routes/rpc.ts +407 -219
  758. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  759. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  760. package/src/apps/data/routes/tokenlist.ts +173 -88
  761. package/src/apps/data/routes/tokens.test.ts +93 -3
  762. package/src/apps/data/routes/tokens.ts +39 -23
  763. package/src/apps/data/routes/transactions.test.ts +1 -1
  764. package/src/apps/data/routes/transfers.test.ts +56 -24
  765. package/src/apps/data/routes/transfers.ts +19 -8
  766. package/src/apps/data/routes/valuation.test.ts +1 -1
  767. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  768. package/src/apps/data/routes/verified-tokens.ts +99 -29
  769. package/src/apps/data/routes/webhooks.test.ts +659 -81
  770. package/src/apps/data/routes/webhooks.ts +1104 -817
  771. package/src/apps/data/routes/zones.test.ts +148 -71
  772. package/src/apps/data/routes/zones.ts +71 -55
  773. package/src/apps/docs/reference.ts +2 -2
  774. package/src/apps/index.ts +1 -1
  775. package/src/apps/management/App.ts +9 -51
  776. package/src/apps/management/Billing.test.ts +375 -14
  777. package/src/apps/management/Billing.ts +283 -34
  778. package/src/apps/management/routes/api-keys.test.ts +269 -7
  779. package/src/apps/management/routes/api-keys.ts +61 -20
  780. package/src/apps/management/routes/billing.test.ts +477 -15
  781. package/src/apps/management/routes/billing.ts +377 -50
  782. package/src/apps/management/routes/faucet.test.ts +1 -1
  783. package/src/apps/management/routes/faucet.ts +1 -1
  784. package/src/apps/management/routes/invitations.test.ts +270 -3
  785. package/src/apps/management/routes/invitations.ts +185 -15
  786. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  787. package/src/apps/management/routes/me.test.ts +246 -5
  788. package/src/apps/management/routes/me.ts +7 -2
  789. package/src/apps/management/routes/members.test.ts +108 -0
  790. package/src/apps/management/routes/orgs.test.ts +191 -3
  791. package/src/apps/management/routes/orgs.ts +58 -11
  792. package/src/apps/management/routes/projects.test.ts +33 -3
  793. package/src/apps/management/routes/projects.ts +6 -1
  794. package/src/apps/management/routes/scopes.test.ts +30 -2
  795. package/src/apps/management/routes/scopes.ts +4 -1
  796. package/src/apps/management/routes/usage.test.ts +32 -0
  797. package/src/apps/management/routes/usage.ts +22 -4
  798. package/src/apps/management/routes/webhooks.test.ts +49 -26
  799. package/src/apps/management/routes/webhooks.ts +93 -38
  800. package/src/apps/mcp.test.ts +6 -6
  801. package/src/apps/mcp.ts +7 -7
  802. package/src/apps/mpp/App.ts +37 -7
  803. package/src/apps/mpp/Mpp.test.ts +49 -8
  804. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  805. package/src/apps/mpp/internal/Adapter.ts +34 -0
  806. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  807. package/src/apps/mpp/internal/Policy.ts +49 -7
  808. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  809. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  810. package/src/apps/relay/App.test.ts +1024 -38
  811. package/src/apps/relay/App.ts +228 -32
  812. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  813. package/src/apps/relay/Sponsorships.test.ts +67 -4
  814. package/src/apps/relay/Sponsorships.ts +253 -29
  815. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  816. package/src/apps/{funding → routes}/Access.ts +6 -6
  817. package/src/apps/routes/App.test.ts +165 -0
  818. package/src/apps/routes/App.ts +96 -0
  819. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  820. package/src/apps/routes/index.ts +1 -0
  821. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  822. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  823. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1362 -462
  824. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +568 -248
  825. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  826. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  827. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  828. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  829. package/src/apps/routes/routes/transfers.test.ts +2876 -0
  830. package/src/apps/routes/routes/transfers.ts +1332 -0
  831. package/src/cli/Cli.test.ts +1 -1
  832. package/src/cli/commands/admin.test.ts +748 -1
  833. package/src/cli/commands/admin.ts +278 -0
  834. package/src/cloudflare.ts +52 -47
  835. package/src/db/Db.test.ts +245 -2
  836. package/src/db/Db.ts +1511 -34
  837. package/src/db/Schema.ts +744 -228
  838. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  839. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  840. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  841. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  842. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  843. package/src/db/tables/apiKeyRevocations.ts +121 -0
  844. package/src/db/tables/authAccounts.ts +105 -0
  845. package/src/db/tables/authSessions.ts +13 -0
  846. package/src/db/tables/authVerifications.ts +13 -0
  847. package/src/db/tables/invitations.ts +142 -45
  848. package/src/db/tables/memberships.ts +79 -3
  849. package/src/db/tables/organizations.test.ts +725 -7
  850. package/src/db/tables/organizations.ts +182 -49
  851. package/src/db/tables/projects.test.ts +71 -0
  852. package/src/db/tables/projects.ts +59 -4
  853. package/src/db/tables/requestUsage.ts +4 -1
  854. package/src/db/tables/rewardAccounts.ts +178 -0
  855. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  856. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  857. package/src/db/tables/rewardCampaigns.ts +647 -0
  858. package/src/db/tables/rewardCredits.ts +110 -0
  859. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  860. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  861. package/src/db/tables/rewardRuns.ts +514 -0
  862. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  863. package/src/db/tables/routesCatalog.test.ts +185 -0
  864. package/src/db/tables/routesCatalog.ts +163 -0
  865. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  866. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  867. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  868. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  869. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +316 -46
  870. package/src/db/tables/routesDeposits.ts +1062 -0
  871. package/src/db/tables/routesIdempotency.test.ts +796 -0
  872. package/src/db/tables/routesIdempotency.ts +496 -0
  873. package/src/db/tables/routesSubsidies.test.ts +120 -0
  874. package/src/db/tables/routesSubsidies.ts +71 -0
  875. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  876. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  877. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  878. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  879. package/src/db/tables/routesTransferTransactions.ts +158 -0
  880. package/src/db/tables/routesTransfers.test.ts +338 -0
  881. package/src/db/tables/routesTransfers.ts +662 -0
  882. package/src/db/tables/sponsoredTransactions.test.ts +563 -1
  883. package/src/db/tables/sponsoredTransactions.ts +386 -42
  884. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  885. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  886. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  887. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  888. package/src/db/tables/stripeCustomers.test.ts +85 -0
  889. package/src/db/tables/stripeCustomers.ts +24 -0
  890. package/src/db/tables/users.test.ts +129 -0
  891. package/src/db/tables/users.ts +49 -3
  892. package/src/db/tables/webhookQueueEvents.ts +8 -1
  893. package/src/db/tables/webhookSubscriptions.ts +103 -21
  894. package/src/handlers/internal/executionError.ts +3 -4
  895. package/src/handlers/internal/multisig.ts +13 -816
  896. package/src/handlers/internal/sponsorship.ts +26 -10
  897. package/src/handlers/relay.test-d.ts +9 -1
  898. package/src/handlers/relay.test.ts +823 -3
  899. package/src/handlers/relay.ts +127 -107
  900. package/src/index.test-d.ts +7 -0
  901. package/src/index.ts +0 -17
  902. package/src/internal/AssetResponse.ts +26 -0
  903. package/src/internal/Auth.test.ts +1564 -9
  904. package/src/internal/Auth.ts +833 -239
  905. package/src/internal/BetterAuth.test.ts +242 -0
  906. package/src/internal/BetterAuth.ts +349 -0
  907. package/src/internal/Cache.ts +2 -0
  908. package/src/internal/EarnRates.test.ts +17 -0
  909. package/src/internal/EarnRates.ts +124 -31
  910. package/src/internal/EarnSharePrices.test.ts +182 -0
  911. package/src/internal/EarnSharePrices.ts +313 -0
  912. package/src/internal/EarnVaults.test.ts +21 -0
  913. package/src/internal/EarnVaults.ts +37 -15
  914. package/src/internal/Email.ts +54 -0
  915. package/src/internal/Idempotency.test.ts +2 -2
  916. package/src/internal/Log.test-d.ts +10 -7
  917. package/src/internal/Log.test.ts +114 -16
  918. package/src/internal/Log.ts +55 -40
  919. package/src/internal/MetricSink.test.ts +313 -26
  920. package/src/internal/MetricSink.ts +73 -8
  921. package/src/internal/Mpp.test.ts +31 -0
  922. package/src/internal/Mpp.ts +21 -24
  923. package/src/internal/OpenApi.ts +45 -12
  924. package/src/internal/Provider.test.ts +1 -1
  925. package/src/internal/Provider.ts +1 -1
  926. package/src/internal/RateLimit.test.ts +21 -3
  927. package/src/internal/RateLimit.ts +12 -1
  928. package/src/internal/Store.test-d.ts +1 -1
  929. package/src/internal/Store.test.ts +151 -8
  930. package/src/internal/Store.ts +76 -9
  931. package/src/internal/Tidx.test.ts +59 -8
  932. package/src/internal/Tidx.ts +86 -14
  933. package/src/internal/Timing.test.ts +77 -0
  934. package/src/internal/Timing.ts +83 -6
  935. package/src/internal/VercelOidc.test.ts +188 -0
  936. package/src/internal/VercelOidc.ts +193 -0
  937. package/src/internal/VerifiedTokens.test.ts +60 -6
  938. package/src/internal/VerifiedTokens.ts +21 -24
  939. package/src/internal/Viem.batch.test.ts +80 -0
  940. package/src/internal/Viem.test.ts +201 -2
  941. package/src/internal/Viem.ts +249 -17
  942. package/src/internal/Webhooks.test.ts +125 -1
  943. package/src/internal/Webhooks.ts +22 -4
  944. package/src/internal/ZoneRpc.ts +50 -0
  945. package/src/internal/exchange/Provider.test.ts +2 -2
  946. package/src/internal/index.test.ts +3 -1
  947. package/src/internal/index.ts +3 -1
  948. package/src/internal/rewards/Audit.ts +231 -0
  949. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  950. package/src/internal/rewards/Campaigns.ts +1205 -0
  951. package/src/internal/rewards/Credits.ts +165 -0
  952. package/src/internal/rewards/Events.local.test.ts +113 -0
  953. package/src/internal/rewards/Events.test.ts +152 -0
  954. package/src/internal/rewards/Events.ts +468 -0
  955. package/src/internal/rewards/Projection.test.ts +681 -0
  956. package/src/internal/rewards/Projection.ts +987 -0
  957. package/src/internal/rewards/Rates.test.ts +171 -0
  958. package/src/internal/rewards/Rates.ts +110 -0
  959. package/src/internal/rewards/Read.test.ts +501 -0
  960. package/src/internal/rewards/Read.ts +476 -0
  961. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  962. package/src/internal/rewards/Runner.states.test.ts +188 -0
  963. package/src/internal/rewards/Runner.test.ts +90 -0
  964. package/src/internal/rewards/Runner.ts +2229 -0
  965. package/src/internal/rewards/Signer.test.ts +79 -0
  966. package/src/internal/rewards/Signer.ts +180 -0
  967. package/src/internal/rewards/index.ts +14 -0
  968. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  969. package/src/internal/{funding → routes}/Action.ts +35 -8
  970. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  971. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  972. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  973. package/src/internal/{funding → routes}/Chain.ts +11 -11
  974. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  975. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  976. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  977. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  978. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  979. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -8
  980. package/src/internal/routes/Economics.test.ts +42 -0
  981. package/src/internal/routes/Economics.ts +47 -0
  982. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  983. package/src/internal/{funding → routes}/Evidence.ts +11 -22
  984. package/src/internal/routes/Observability.test.ts +636 -0
  985. package/src/internal/routes/Observability.ts +668 -0
  986. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  987. package/src/internal/{funding → routes}/Provider.ts +531 -185
  988. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  989. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  990. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  991. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  992. package/src/internal/{funding → routes}/Route.ts +7 -7
  993. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  994. package/src/internal/{funding → routes}/SourceObservation.ts +18 -22
  995. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  996. package/src/internal/routes/Subsidy.test.ts +169 -0
  997. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  998. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  999. package/src/internal/{funding → routes}/Token.ts +5 -5
  1000. package/src/internal/routes/Transfer.test.ts +1199 -0
  1001. package/src/internal/routes/Transfer.ts +1206 -0
  1002. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  1003. package/src/internal/routes/TransferReconciliation.ts +527 -0
  1004. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1005. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1006. package/src/internal/routes/TransferWebhook.test.ts +128 -0
  1007. package/src/internal/routes/TransferWebhook.ts +67 -0
  1008. package/src/internal/{funding → routes}/index.test.ts +6 -3
  1009. package/src/internal/{funding → routes}/index.ts +3 -0
  1010. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1011. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1012. package/src/internal/{funding → routes}/providers/relay.test.ts +165 -32
  1013. package/src/internal/{funding → routes}/providers/relay.ts +231 -136
  1014. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1015. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1016. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1017. package/src/internal/routes/providers/stargate.ts +1276 -0
  1018. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1019. package/src/internal/webhookDestinations/slack.ts +20 -5
  1020. package/src/providers/index.ts +13 -13
  1021. package/src/server.ts +18 -0
  1022. package/dist/apps/funding/Access.d.ts.map +0 -1
  1023. package/dist/apps/funding/Access.js.map +0 -1
  1024. package/dist/apps/funding/App.js.map +0 -1
  1025. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1026. package/dist/apps/funding/Inventory.js.map +0 -1
  1027. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1028. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1029. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1030. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1031. package/dist/apps/funding/index.d.ts +0 -2
  1032. package/dist/apps/funding/index.d.ts.map +0 -1
  1033. package/dist/apps/funding/index.js +0 -2
  1034. package/dist/apps/funding/index.js.map +0 -1
  1035. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1036. package/dist/apps/funding/routes/chains.js.map +0 -1
  1037. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1038. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1039. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1040. package/dist/apps/funding/routes/providers.js +0 -57
  1041. package/dist/apps/funding/routes/providers.js.map +0 -1
  1042. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1043. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1044. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1045. package/dist/apps/funding/routes/transfers.js +0 -622
  1046. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1047. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1048. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1049. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1050. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1051. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1052. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1053. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1054. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1055. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1056. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1057. package/dist/db/tables/fundingDeposits.js +0 -295
  1058. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1059. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1060. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1061. package/dist/db/tables/fundingIdempotency.js +0 -103
  1062. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1063. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1064. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1065. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -15
  1066. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1067. package/dist/db/tables/fundingTransferTransactions.js +0 -27
  1068. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1069. package/dist/db/tables/fundingTransfers.d.ts +0 -82
  1070. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1071. package/dist/db/tables/fundingTransfers.js +0 -89
  1072. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1073. package/dist/internal/funding/Action.d.ts.map +0 -1
  1074. package/dist/internal/funding/Action.js.map +0 -1
  1075. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1076. package/dist/internal/funding/Catalog.js.map +0 -1
  1077. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1078. package/dist/internal/funding/Chain.js.map +0 -1
  1079. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1080. package/dist/internal/funding/Deposit.js.map +0 -1
  1081. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1082. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1083. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1084. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1085. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1086. package/dist/internal/funding/Evidence.js.map +0 -1
  1087. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1088. package/dist/internal/funding/Provider.js.map +0 -1
  1089. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1090. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1091. package/dist/internal/funding/Route.d.ts +0 -21
  1092. package/dist/internal/funding/Route.d.ts.map +0 -1
  1093. package/dist/internal/funding/Route.js.map +0 -1
  1094. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1095. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1096. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1097. package/dist/internal/funding/Subsidy.js.map +0 -1
  1098. package/dist/internal/funding/Token.d.ts.map +0 -1
  1099. package/dist/internal/funding/Token.js.map +0 -1
  1100. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1101. package/dist/internal/funding/Transfer.js +0 -334
  1102. package/dist/internal/funding/Transfer.js.map +0 -1
  1103. package/dist/internal/funding/index.d.ts.map +0 -1
  1104. package/dist/internal/funding/index.js.map +0 -1
  1105. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1106. package/dist/internal/funding/providers/across.js.map +0 -1
  1107. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1108. package/dist/internal/funding/providers/relay.js.map +0 -1
  1109. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1110. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1111. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1112. package/dist/internal/funding/providers/squid.js.map +0 -1
  1113. package/dist/internal/funding/providers/stargate.d.ts +0 -38
  1114. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1115. package/dist/internal/funding/providers/stargate.js +0 -277
  1116. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1117. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1118. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1119. package/src/apps/funding/App.test.ts +0 -78
  1120. package/src/apps/funding/App.ts +0 -78
  1121. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1122. package/src/apps/funding/index.ts +0 -1
  1123. package/src/apps/funding/routes/transfers.test.ts +0 -1638
  1124. package/src/apps/funding/routes/transfers.ts +0 -721
  1125. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1126. package/src/db/tables/fundingCatalog.ts +0 -163
  1127. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1128. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1129. package/src/db/tables/fundingDeposits.ts +0 -572
  1130. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1131. package/src/db/tables/fundingIdempotency.ts +0 -180
  1132. package/src/db/tables/fundingTransferTransactions.test.ts +0 -69
  1133. package/src/db/tables/fundingTransferTransactions.ts +0 -37
  1134. package/src/db/tables/fundingTransfers.test.ts +0 -89
  1135. package/src/db/tables/fundingTransfers.ts +0 -153
  1136. package/src/handlers/internal/multisig.test.ts +0 -818
  1137. package/src/internal/funding/Subsidy.test.ts +0 -75
  1138. package/src/internal/funding/Transfer.test.ts +0 -369
  1139. package/src/internal/funding/Transfer.ts +0 -545
  1140. package/src/internal/funding/providers/stargate.test.ts +0 -163
  1141. package/src/internal/funding/providers/stargate.ts +0 -409
  1142. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1143. /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
+ }