tapimo 0.15.1 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (709) hide show
  1. package/README.md +137 -0
  2. package/dist/ApiKey.d.ts +1 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +4 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +37 -11
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +163 -10
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +13085 -11974
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +46 -15
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +1 -1
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +1 -1
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +893 -191
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +5 -1
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +70 -70
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +8 -3
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +66 -27
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  28. package/dist/admin/apps/earn-vaults.js +36 -7
  29. package/dist/admin/apps/earn-vaults.js.map +1 -1
  30. package/dist/admin/apps/organizations.d.ts +25 -25
  31. package/dist/admin/apps/organizations.d.ts.map +1 -1
  32. package/dist/admin/apps/organizations.js +5 -4
  33. package/dist/admin/apps/organizations.js.map +1 -1
  34. package/dist/admin/apps/route-policies.d.ts +632 -0
  35. package/dist/admin/apps/route-policies.d.ts.map +1 -0
  36. package/dist/admin/apps/route-policies.js +257 -0
  37. package/dist/admin/apps/route-policies.js.map +1 -0
  38. package/dist/admin/apps/routes-support.js +39 -3
  39. package/dist/admin/apps/routes-support.js.map +1 -1
  40. package/dist/admin/apps/routes.d.ts +529 -76
  41. package/dist/admin/apps/routes.d.ts.map +1 -1
  42. package/dist/admin/apps/routes.js +82 -1
  43. package/dist/admin/apps/routes.js.map +1 -1
  44. package/dist/admin/apps/verified-tokens.d.ts +157 -157
  45. package/dist/admin/index.d.ts +0 -1
  46. package/dist/admin/index.d.ts.map +1 -1
  47. package/dist/admin/index.js +0 -1
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/admin/ui.generated.d.ts +1 -1
  50. package/dist/admin/ui.generated.d.ts.map +1 -1
  51. package/dist/admin/ui.generated.js +205 -201
  52. package/dist/admin/ui.generated.js.map +1 -1
  53. package/dist/analytics/Analytics.d.ts.map +1 -1
  54. package/dist/analytics/Analytics.js +65 -1
  55. package/dist/analytics/Analytics.js.map +1 -1
  56. package/dist/analytics/tables/requestEvents.d.ts +1 -1
  57. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  58. package/dist/analytics/tables/requestEvents.js +58 -59
  59. package/dist/analytics/tables/requestEvents.js.map +1 -1
  60. package/dist/apps/data/App.d.ts +2709 -2670
  61. package/dist/apps/data/App.d.ts.map +1 -1
  62. package/dist/apps/data/routes/activities.d.ts +357 -357
  63. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  64. package/dist/apps/data/routes/activities.js +50 -0
  65. package/dist/apps/data/routes/activities.js.map +1 -1
  66. package/dist/apps/data/routes/addresses.d.ts +248 -248
  67. package/dist/apps/data/routes/balances.d.ts +22 -22
  68. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  69. package/dist/apps/data/routes/balances.js +5 -7
  70. package/dist/apps/data/routes/balances.js.map +1 -1
  71. package/dist/apps/data/routes/blocks.d.ts +125 -125
  72. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  73. package/dist/apps/data/routes/earn.d.ts +103 -12
  74. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  75. package/dist/apps/data/routes/earn.js +456 -220
  76. package/dist/apps/data/routes/earn.js.map +1 -1
  77. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  78. package/dist/apps/data/routes/exchanges.js +267 -97
  79. package/dist/apps/data/routes/exchanges.js.map +1 -1
  80. package/dist/apps/data/routes/fee-amm.d.ts +109 -127
  81. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  82. package/dist/apps/data/routes/fee-amm.js +83 -54
  83. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  84. package/dist/apps/data/routes/indexer.d.ts +43 -43
  85. package/dist/apps/data/routes/receipts.d.ts +235 -235
  86. package/dist/apps/data/routes/rpc.d.ts +30 -30
  87. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  88. package/dist/apps/data/routes/tokens.js +11 -6
  89. package/dist/apps/data/routes/tokens.js.map +1 -1
  90. package/dist/apps/data/routes/transactions.d.ts +2 -0
  91. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  92. package/dist/apps/data/routes/transactions.js +30 -22
  93. package/dist/apps/data/routes/transactions.js.map +1 -1
  94. package/dist/apps/data/routes/transfers.d.ts +77 -77
  95. package/dist/apps/data/routes/valuation.d.ts +32 -32
  96. package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
  97. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  98. package/dist/apps/data/routes/webhooks.js +1 -1
  99. package/dist/apps/data/routes/webhooks.js.map +1 -1
  100. package/dist/apps/data/routes/zones.d.ts +31 -31
  101. package/dist/apps/management/App.d.ts +2909 -2064
  102. package/dist/apps/management/App.d.ts.map +1 -1
  103. package/dist/apps/management/App.js +2 -0
  104. package/dist/apps/management/App.js.map +1 -1
  105. package/dist/apps/management/Billing.d.ts +2 -4
  106. package/dist/apps/management/Billing.d.ts.map +1 -1
  107. package/dist/apps/management/Billing.js +65 -26
  108. package/dist/apps/management/Billing.js.map +1 -1
  109. package/dist/apps/management/routes/api-keys.d.ts +257 -245
  110. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  111. package/dist/apps/management/routes/api-keys.js +70 -11
  112. package/dist/apps/management/routes/api-keys.js.map +1 -1
  113. package/dist/apps/management/routes/billing.d.ts +84 -84
  114. package/dist/apps/management/routes/cli.d.ts +912 -0
  115. package/dist/apps/management/routes/cli.d.ts.map +1 -0
  116. package/dist/apps/management/routes/cli.js +416 -0
  117. package/dist/apps/management/routes/cli.js.map +1 -0
  118. package/dist/apps/management/routes/faucet.d.ts +8 -8
  119. package/dist/apps/management/routes/invitations.d.ts +138 -138
  120. package/dist/apps/management/routes/invite-links.d.ts +172 -172
  121. package/dist/apps/management/routes/members.d.ts +16 -16
  122. package/dist/apps/management/routes/orgs.d.ts +104 -104
  123. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  124. package/dist/apps/management/routes/orgs.js +8 -2
  125. package/dist/apps/management/routes/orgs.js.map +1 -1
  126. package/dist/apps/management/routes/projects.d.ts +125 -125
  127. package/dist/apps/management/routes/usage.d.ts +8 -8
  128. package/dist/apps/management/routes/verified-token-requests.d.ts +86 -86
  129. package/dist/apps/management/routes/webhooks.d.ts +485 -485
  130. package/dist/apps/mpp/App.d.ts +44 -44
  131. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  132. package/dist/apps/mpp/internal/Policy.js +4 -2
  133. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  134. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  135. package/dist/apps/mpp/internal/Sponsorship.js +6 -4
  136. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  137. package/dist/apps/relay/App.d.ts +8 -0
  138. package/dist/apps/relay/App.d.ts.map +1 -1
  139. package/dist/apps/relay/App.js +16 -4
  140. package/dist/apps/relay/App.js.map +1 -1
  141. package/dist/apps/relay/Sponsorships.d.ts +4 -6
  142. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  143. package/dist/apps/relay/Sponsorships.js +71 -60
  144. package/dist/apps/relay/Sponsorships.js.map +1 -1
  145. package/dist/apps/routes/Access.d.ts +53 -0
  146. package/dist/apps/routes/Access.d.ts.map +1 -1
  147. package/dist/apps/routes/Access.js +121 -0
  148. package/dist/apps/routes/Access.js.map +1 -1
  149. package/dist/apps/routes/App.d.ts +397 -158
  150. package/dist/apps/routes/App.d.ts.map +1 -1
  151. package/dist/apps/routes/App.js.map +1 -1
  152. package/dist/apps/routes/routes/chains.d.ts +25 -25
  153. package/dist/apps/routes/routes/deposit-addresses.d.ts +169 -61
  154. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -1
  155. package/dist/apps/routes/routes/deposit-addresses.js +217 -32
  156. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -1
  157. package/dist/apps/routes/routes/quotes.d.ts +171 -81
  158. package/dist/apps/routes/routes/quotes.d.ts.map +1 -1
  159. package/dist/apps/routes/routes/quotes.js +101 -27
  160. package/dist/apps/routes/routes/quotes.js.map +1 -1
  161. package/dist/apps/routes/routes/transfers.d.ts +532 -480
  162. package/dist/apps/routes/routes/transfers.d.ts.map +1 -1
  163. package/dist/apps/routes/routes/transfers.js +182 -37
  164. package/dist/apps/routes/routes/transfers.js.map +1 -1
  165. package/dist/cli/ApiKeys.d.ts +120 -0
  166. package/dist/cli/ApiKeys.d.ts.map +1 -0
  167. package/dist/cli/ApiKeys.js +138 -0
  168. package/dist/cli/ApiKeys.js.map +1 -0
  169. package/dist/cli/Cli.d.ts +92 -34
  170. package/dist/cli/Cli.d.ts.map +1 -1
  171. package/dist/cli/Cli.js +188 -11
  172. package/dist/cli/Cli.js.map +1 -1
  173. package/dist/cli/Credentials.d.ts +95 -0
  174. package/dist/cli/Credentials.d.ts.map +1 -0
  175. package/dist/cli/Credentials.js +110 -0
  176. package/dist/cli/Credentials.js.map +1 -0
  177. package/dist/cli/Spec.d.ts +59 -0
  178. package/dist/cli/Spec.d.ts.map +1 -0
  179. package/dist/cli/Spec.js +77 -0
  180. package/dist/cli/Spec.js.map +1 -0
  181. package/dist/cli/bin.js +5 -1
  182. package/dist/cli/bin.js.map +1 -1
  183. package/dist/cli/commands/admin.d.ts +5 -5
  184. package/dist/cli/commands/admin.d.ts.map +1 -1
  185. package/dist/cli/commands/auth.d.ts +73 -0
  186. package/dist/cli/commands/auth.d.ts.map +1 -0
  187. package/dist/cli/commands/auth.js +204 -0
  188. package/dist/cli/commands/auth.js.map +1 -0
  189. package/dist/cli/commands/keys.d.ts +17 -0
  190. package/dist/cli/commands/keys.d.ts.map +1 -0
  191. package/dist/cli/commands/keys.js +109 -0
  192. package/dist/cli/commands/keys.js.map +1 -0
  193. package/dist/cloudflare.d.ts +27 -2
  194. package/dist/cloudflare.d.ts.map +1 -1
  195. package/dist/cloudflare.js +144 -17
  196. package/dist/cloudflare.js.map +1 -1
  197. package/dist/db/Db.d.ts +23 -0
  198. package/dist/db/Db.d.ts.map +1 -1
  199. package/dist/db/Db.js +413 -1
  200. package/dist/db/Db.js.map +1 -1
  201. package/dist/db/Schema.d.ts +44 -1
  202. package/dist/db/Schema.d.ts.map +1 -1
  203. package/dist/db/Schema.js +56 -3
  204. package/dist/db/Schema.js.map +1 -1
  205. package/dist/db/tables/apiKeyAdmissions.d.ts +28 -2
  206. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -1
  207. package/dist/db/tables/apiKeyAdmissions.js +65 -9
  208. package/dist/db/tables/apiKeyAdmissions.js.map +1 -1
  209. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +2 -0
  210. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -1
  211. package/dist/db/tables/apiKeyOwnerTombstones.js +2 -2
  212. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -1
  213. package/dist/db/tables/authAccounts.d.ts.map +1 -1
  214. package/dist/db/tables/authAccounts.js +1 -0
  215. package/dist/db/tables/authAccounts.js.map +1 -1
  216. package/dist/db/tables/earnVaults.d.ts +5 -1
  217. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  218. package/dist/db/tables/earnVaults.js +12 -1
  219. package/dist/db/tables/earnVaults.js.map +1 -1
  220. package/dist/db/tables/organizations.d.ts +4 -2
  221. package/dist/db/tables/organizations.d.ts.map +1 -1
  222. package/dist/db/tables/organizations.js +8 -34
  223. package/dist/db/tables/organizations.js.map +1 -1
  224. package/dist/db/tables/requestUsage.d.ts +5 -1
  225. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  226. package/dist/db/tables/requestUsage.js +10 -2
  227. package/dist/db/tables/requestUsage.js.map +1 -1
  228. package/dist/db/tables/rewardEligibilityAssociations.d.ts +13 -0
  229. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -1
  230. package/dist/db/tables/rewardEligibilityAssociations.js +11 -0
  231. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -1
  232. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  233. package/dist/db/tables/rewardRuns.js +4 -0
  234. package/dist/db/tables/rewardRuns.js.map +1 -1
  235. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -1
  236. package/dist/db/tables/rewardTransactionAttempts.js +2 -0
  237. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -1
  238. package/dist/db/tables/routesDepositAddresses.d.ts +29 -0
  239. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -1
  240. package/dist/db/tables/routesDepositAddresses.js +84 -31
  241. package/dist/db/tables/routesDepositAddresses.js.map +1 -1
  242. package/dist/db/tables/routesDeposits.d.ts.map +1 -1
  243. package/dist/db/tables/routesDeposits.js +31 -21
  244. package/dist/db/tables/routesDeposits.js.map +1 -1
  245. package/dist/db/tables/routesIdempotency.d.ts.map +1 -1
  246. package/dist/db/tables/routesIdempotency.js +2 -0
  247. package/dist/db/tables/routesIdempotency.js.map +1 -1
  248. package/dist/db/tables/routesPolicies.d.ts +58 -0
  249. package/dist/db/tables/routesPolicies.d.ts.map +1 -0
  250. package/dist/db/tables/routesPolicies.js +198 -0
  251. package/dist/db/tables/routesPolicies.js.map +1 -0
  252. package/dist/db/tables/routesTransferSubsidies.d.ts +22 -0
  253. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -1
  254. package/dist/db/tables/routesTransferSubsidies.js +41 -0
  255. package/dist/db/tables/routesTransferSubsidies.js.map +1 -1
  256. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -1
  257. package/dist/db/tables/routesTransferSubsidyNonces.js +12 -4
  258. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -1
  259. package/dist/db/tables/routesTransfers.d.ts +26 -1
  260. package/dist/db/tables/routesTransfers.d.ts.map +1 -1
  261. package/dist/db/tables/routesTransfers.js +36 -6
  262. package/dist/db/tables/routesTransfers.js.map +1 -1
  263. package/dist/db/tables/sponsoredTransactions.d.ts +45 -13
  264. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  265. package/dist/db/tables/sponsoredTransactions.js +144 -33
  266. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  267. package/dist/db/tables/users.d.ts +2 -0
  268. package/dist/db/tables/users.d.ts.map +1 -1
  269. package/dist/db/tables/users.js +11 -0
  270. package/dist/db/tables/users.js.map +1 -1
  271. package/dist/handlers/internal/multisig.d.ts +1 -1
  272. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  273. package/dist/handlers/internal/multisig.js +3 -2
  274. package/dist/handlers/internal/multisig.js.map +1 -1
  275. package/dist/handlers/relay.d.ts +2 -0
  276. package/dist/handlers/relay.d.ts.map +1 -1
  277. package/dist/handlers/relay.js +34 -15
  278. package/dist/handlers/relay.js.map +1 -1
  279. package/dist/internal/Auth.d.ts +57 -6
  280. package/dist/internal/Auth.d.ts.map +1 -1
  281. package/dist/internal/Auth.js +182 -78
  282. package/dist/internal/Auth.js.map +1 -1
  283. package/dist/internal/BetterAuth.d.ts +22 -0
  284. package/dist/internal/BetterAuth.d.ts.map +1 -1
  285. package/dist/internal/BetterAuth.js +17 -14
  286. package/dist/internal/BetterAuth.js.map +1 -1
  287. package/dist/internal/Cache.d.ts +5 -0
  288. package/dist/internal/Cache.d.ts.map +1 -1
  289. package/dist/internal/Cache.js +3 -1
  290. package/dist/internal/Cache.js.map +1 -1
  291. package/dist/internal/CliAuth.d.ts +243 -0
  292. package/dist/internal/CliAuth.d.ts.map +1 -0
  293. package/dist/internal/CliAuth.js +249 -0
  294. package/dist/internal/CliAuth.js.map +1 -0
  295. package/dist/internal/EarnSharePrices.d.ts +1 -1
  296. package/dist/internal/EarnSharePrices.d.ts.map +1 -1
  297. package/dist/internal/EarnSharePrices.js +7 -3
  298. package/dist/internal/EarnSharePrices.js.map +1 -1
  299. package/dist/internal/EarnVaults.d.ts +47 -0
  300. package/dist/internal/EarnVaults.d.ts.map +1 -1
  301. package/dist/internal/EarnVaults.js +188 -4
  302. package/dist/internal/EarnVaults.js.map +1 -1
  303. package/dist/internal/EarnWithdrawals.d.ts +73 -0
  304. package/dist/internal/EarnWithdrawals.d.ts.map +1 -0
  305. package/dist/internal/EarnWithdrawals.js +189 -0
  306. package/dist/internal/EarnWithdrawals.js.map +1 -0
  307. package/dist/internal/ExecutionContext.d.ts +21 -0
  308. package/dist/internal/ExecutionContext.d.ts.map +1 -0
  309. package/dist/internal/ExecutionContext.js +16 -0
  310. package/dist/internal/ExecutionContext.js.map +1 -0
  311. package/dist/internal/Log.d.ts +7 -3
  312. package/dist/internal/Log.d.ts.map +1 -1
  313. package/dist/internal/Log.js +163 -130
  314. package/dist/internal/Log.js.map +1 -1
  315. package/dist/internal/MetricSink.d.ts.map +1 -1
  316. package/dist/internal/MetricSink.js +26 -1
  317. package/dist/internal/MetricSink.js.map +1 -1
  318. package/dist/internal/RateLimit.d.ts +67 -0
  319. package/dist/internal/RateLimit.d.ts.map +1 -1
  320. package/dist/internal/RateLimit.js +174 -27
  321. package/dist/internal/RateLimit.js.map +1 -1
  322. package/dist/internal/Store.d.ts +6 -0
  323. package/dist/internal/Store.d.ts.map +1 -1
  324. package/dist/internal/Store.js +4 -5
  325. package/dist/internal/Store.js.map +1 -1
  326. package/dist/internal/Timing.d.ts +6 -0
  327. package/dist/internal/Timing.d.ts.map +1 -1
  328. package/dist/internal/Timing.js +21 -1
  329. package/dist/internal/Timing.js.map +1 -1
  330. package/dist/internal/Tron.d.ts +124 -0
  331. package/dist/internal/Tron.d.ts.map +1 -0
  332. package/dist/internal/Tron.js +202 -0
  333. package/dist/internal/Tron.js.map +1 -0
  334. package/dist/internal/Viem.d.ts +4 -0
  335. package/dist/internal/Viem.d.ts.map +1 -1
  336. package/dist/internal/Viem.js +25 -6
  337. package/dist/internal/Viem.js.map +1 -1
  338. package/dist/internal/rewards/Read.d.ts +2 -2
  339. package/dist/internal/rewards/Read.d.ts.map +1 -1
  340. package/dist/internal/rewards/Read.js +11 -2
  341. package/dist/internal/rewards/Read.js.map +1 -1
  342. package/dist/internal/routes/Action.d.ts +27 -0
  343. package/dist/internal/routes/Action.d.ts.map +1 -1
  344. package/dist/internal/routes/Action.js +49 -1
  345. package/dist/internal/routes/Action.js.map +1 -1
  346. package/dist/internal/routes/Chain.d.ts +2 -0
  347. package/dist/internal/routes/Chain.d.ts.map +1 -1
  348. package/dist/internal/routes/Chain.js +4 -0
  349. package/dist/internal/routes/Chain.js.map +1 -1
  350. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  351. package/dist/internal/routes/DepositAddress.js +5 -0
  352. package/dist/internal/routes/DepositAddress.js.map +1 -1
  353. package/dist/internal/routes/Evidence.d.ts.map +1 -1
  354. package/dist/internal/routes/Evidence.js +6 -2
  355. package/dist/internal/routes/Evidence.js.map +1 -1
  356. package/dist/internal/routes/EvmTransferSettlement.d.ts +17 -0
  357. package/dist/internal/routes/EvmTransferSettlement.d.ts.map +1 -0
  358. package/dist/internal/routes/EvmTransferSettlement.js +196 -0
  359. package/dist/internal/routes/EvmTransferSettlement.js.map +1 -0
  360. package/dist/internal/routes/Policy.d.ts +161 -0
  361. package/dist/internal/routes/Policy.d.ts.map +1 -0
  362. package/dist/internal/routes/Policy.js +249 -0
  363. package/dist/internal/routes/Policy.js.map +1 -0
  364. package/dist/internal/routes/Provider.d.ts +66 -3
  365. package/dist/internal/routes/Provider.d.ts.map +1 -1
  366. package/dist/internal/routes/Provider.js +106 -27
  367. package/dist/internal/routes/Provider.js.map +1 -1
  368. package/dist/internal/routes/Quota.d.ts +57 -0
  369. package/dist/internal/routes/Quota.d.ts.map +1 -0
  370. package/dist/internal/routes/Quota.js +144 -0
  371. package/dist/internal/routes/Quota.js.map +1 -0
  372. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  373. package/dist/internal/routes/Reconciliation.js +163 -47
  374. package/dist/internal/routes/Reconciliation.js.map +1 -1
  375. package/dist/internal/routes/SolanaTransferSettlement.d.ts +12 -0
  376. package/dist/internal/routes/SolanaTransferSettlement.d.ts.map +1 -0
  377. package/dist/internal/routes/SolanaTransferSettlement.js +220 -0
  378. package/dist/internal/routes/SolanaTransferSettlement.js.map +1 -0
  379. package/dist/internal/routes/SolanaTransferSubsidy.d.ts +172 -0
  380. package/dist/internal/routes/SolanaTransferSubsidy.d.ts.map +1 -0
  381. package/dist/internal/routes/SolanaTransferSubsidy.js +564 -0
  382. package/dist/internal/routes/SolanaTransferSubsidy.js.map +1 -0
  383. package/dist/internal/routes/Subsidy.d.ts +2 -2
  384. package/dist/internal/routes/Subsidy.d.ts.map +1 -1
  385. package/dist/internal/routes/Subsidy.js +2 -2
  386. package/dist/internal/routes/Subsidy.js.map +1 -1
  387. package/dist/internal/routes/Transfer.d.ts +229 -1
  388. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  389. package/dist/internal/routes/Transfer.js +644 -7
  390. package/dist/internal/routes/Transfer.js.map +1 -1
  391. package/dist/internal/routes/TransferReconciliation.d.ts +6 -0
  392. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -1
  393. package/dist/internal/routes/TransferReconciliation.js +83 -159
  394. package/dist/internal/routes/TransferReconciliation.js.map +1 -1
  395. package/dist/internal/routes/TransferSettlement.d.ts +45 -0
  396. package/dist/internal/routes/TransferSettlement.d.ts.map +1 -0
  397. package/dist/internal/routes/TransferSettlement.js +2 -0
  398. package/dist/internal/routes/TransferSettlement.js.map +1 -0
  399. package/dist/internal/routes/TransferSubsidy.d.ts +23 -8
  400. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -1
  401. package/dist/internal/routes/TransferSubsidy.js +64 -5
  402. package/dist/internal/routes/TransferSubsidy.js.map +1 -1
  403. package/dist/internal/routes/TronTransferSettlement.d.ts +12 -0
  404. package/dist/internal/routes/TronTransferSettlement.d.ts.map +1 -0
  405. package/dist/internal/routes/TronTransferSettlement.js +201 -0
  406. package/dist/internal/routes/TronTransferSettlement.js.map +1 -0
  407. package/dist/internal/routes/TronTransferSubsidy.d.ts +174 -0
  408. package/dist/internal/routes/TronTransferSubsidy.d.ts.map +1 -0
  409. package/dist/internal/routes/TronTransferSubsidy.js +439 -0
  410. package/dist/internal/routes/TronTransferSubsidy.js.map +1 -0
  411. package/dist/internal/routes/index.d.ts +3 -0
  412. package/dist/internal/routes/index.d.ts.map +1 -1
  413. package/dist/internal/routes/index.js +3 -0
  414. package/dist/internal/routes/index.js.map +1 -1
  415. package/dist/internal/routes/providers/across.d.ts +3 -0
  416. package/dist/internal/routes/providers/across.d.ts.map +1 -1
  417. package/dist/internal/routes/providers/across.js +11 -0
  418. package/dist/internal/routes/providers/across.js.map +1 -1
  419. package/dist/internal/routes/providers/legacyMesh.d.ts +29 -0
  420. package/dist/internal/routes/providers/legacyMesh.d.ts.map +1 -0
  421. package/dist/internal/routes/providers/legacyMesh.js +474 -0
  422. package/dist/internal/routes/providers/legacyMesh.js.map +1 -0
  423. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts +59 -0
  424. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts.map +1 -0
  425. package/dist/internal/routes/providers/legacyMeshDelivery.js +229 -0
  426. package/dist/internal/routes/providers/legacyMeshDelivery.js.map +1 -0
  427. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts +19 -0
  428. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts.map +1 -0
  429. package/dist/internal/routes/providers/legacyMeshOutbound.js +457 -0
  430. package/dist/internal/routes/providers/legacyMeshOutbound.js.map +1 -0
  431. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts +123 -0
  432. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts.map +1 -0
  433. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js +333 -0
  434. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js.map +1 -0
  435. package/dist/internal/routes/providers/propAmm.d.ts +70 -0
  436. package/dist/internal/routes/providers/propAmm.d.ts.map +1 -0
  437. package/dist/internal/routes/providers/propAmm.js +524 -0
  438. package/dist/internal/routes/providers/propAmm.js.map +1 -0
  439. package/dist/internal/routes/providers/relay.d.ts +3 -0
  440. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  441. package/dist/internal/routes/providers/relay.js +352 -41
  442. package/dist/internal/routes/providers/relay.js.map +1 -1
  443. package/dist/internal/routes/providers/rhino.d.ts +3 -0
  444. package/dist/internal/routes/providers/rhino.d.ts.map +1 -1
  445. package/dist/internal/routes/providers/rhino.js +11 -0
  446. package/dist/internal/routes/providers/rhino.js.map +1 -1
  447. package/dist/internal/routes/providers/squid.d.ts +3 -0
  448. package/dist/internal/routes/providers/squid.d.ts.map +1 -1
  449. package/dist/internal/routes/providers/squid.js +19 -0
  450. package/dist/internal/routes/providers/squid.js.map +1 -1
  451. package/dist/internal/routes/providers/stargate.d.ts.map +1 -1
  452. package/dist/internal/routes/providers/stargate.js +22 -9
  453. package/dist/internal/routes/providers/stargate.js.map +1 -1
  454. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -1
  455. package/dist/internal/routes/providers/symbiosis.js +13 -17
  456. package/dist/internal/routes/providers/symbiosis.js.map +1 -1
  457. package/dist/providers/index.d.ts +14 -0
  458. package/dist/providers/index.d.ts.map +1 -1
  459. package/dist/providers/index.js +6 -0
  460. package/dist/providers/index.js.map +1 -1
  461. package/package.json +16 -6
  462. package/src/ApiKey.ts +7 -3
  463. package/src/ApiKeys.test.ts +652 -8
  464. package/src/ApiKeys.ts +191 -11
  465. package/src/App.test.ts +405 -18
  466. package/src/App.ts +51 -15
  467. package/src/Client.test-d.ts +157 -10
  468. package/src/Client.test.ts +4 -4
  469. package/src/Scope.ts +1 -2
  470. package/src/admin/App.ts +11 -5
  471. package/src/admin/apps/api-keys.test.ts +98 -2
  472. package/src/admin/apps/api-keys.ts +21 -12
  473. package/src/admin/apps/earn-vaults.test.ts +76 -7
  474. package/src/admin/apps/earn-vaults.ts +47 -8
  475. package/src/admin/apps/organizations.test.ts +147 -31
  476. package/src/admin/apps/organizations.ts +5 -4
  477. package/src/admin/apps/route-policies.test.ts +220 -0
  478. package/src/admin/apps/route-policies.ts +322 -0
  479. package/src/admin/apps/routes-support.test.ts +107 -2
  480. package/src/admin/apps/routes-support.ts +43 -3
  481. package/src/admin/apps/routes.test.ts +150 -0
  482. package/src/admin/apps/routes.ts +97 -1
  483. package/src/admin/apps/scopes.test.ts +1 -1
  484. package/src/admin/index.ts +0 -1
  485. package/src/admin/ui/plugin.ts +2 -1
  486. package/src/admin/ui/src/components/Dialog.tsx +1 -1
  487. package/src/admin/ui/src/components/EarnVaultForm.tsx +45 -0
  488. package/src/admin/ui/src/components/RoutePicker.tsx +79 -0
  489. package/src/admin/ui/src/lib/earn-vaults.ts +1 -1
  490. package/src/admin/ui/src/lib/route-policies.test.ts +452 -0
  491. package/src/admin/ui/src/lib/route-policies.ts +232 -0
  492. package/src/admin/ui/src/lib/routes.ts +34 -0
  493. package/src/admin/ui/src/routeTree.gen.ts +21 -0
  494. package/src/admin/ui/src/routes/api-keys.tsx +21 -2
  495. package/src/admin/ui/src/routes/early-access.tsx +1 -0
  496. package/src/admin/ui/src/routes/earn.vaults.tsx +1 -0
  497. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +22 -0
  498. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +10 -0
  499. package/src/admin/ui/src/routes/organizations.tsx +1 -0
  500. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +18 -3
  501. package/src/admin/ui/src/routes/route-policies.tsx +678 -0
  502. package/src/admin/ui/src/routes/routes.tsx +85 -2
  503. package/src/admin/ui/src/routes/routes_.support.tsx +6 -22
  504. package/src/admin/ui/src/routes/subsidies.tsx +1 -0
  505. package/src/admin/ui/src/routes/verified-tokens.tsx +1 -0
  506. package/src/admin/ui.generated.ts +258 -202
  507. package/src/analytics/Analytics.test.ts +4 -50
  508. package/src/analytics/Analytics.ts +65 -1
  509. package/src/analytics/tables/requestEvents.test.ts +402 -1
  510. package/src/analytics/tables/requestEvents.ts +62 -93
  511. package/src/apps/data/routes/activities.test.ts +315 -14
  512. package/src/apps/data/routes/activities.ts +60 -0
  513. package/src/apps/data/routes/balances.ts +5 -7
  514. package/src/apps/data/routes/earn.bench.ts +18 -0
  515. package/src/apps/data/routes/earn.local.test.ts +507 -0
  516. package/src/apps/data/routes/earn.test.ts +405 -127
  517. package/src/apps/data/routes/earn.ts +660 -270
  518. package/src/apps/data/routes/exchanges.bench.ts +3 -1
  519. package/src/apps/data/routes/exchanges.test.ts +166 -2
  520. package/src/apps/data/routes/exchanges.ts +308 -101
  521. package/src/apps/data/routes/fee-amm.test.ts +134 -2
  522. package/src/apps/data/routes/fee-amm.ts +122 -60
  523. package/src/apps/data/routes/receipts.test.ts +21 -18
  524. package/src/apps/data/routes/rpc.test.ts +2 -2
  525. package/src/apps/data/routes/tokens.provenance.test.ts +157 -0
  526. package/src/apps/data/routes/tokens.test.ts +4 -4
  527. package/src/apps/data/routes/tokens.ts +11 -6
  528. package/src/apps/data/routes/transactions.test.ts +29 -0
  529. package/src/apps/data/routes/transactions.ts +33 -22
  530. package/src/apps/data/routes/webhooks.test.ts +12 -3
  531. package/src/apps/data/routes/webhooks.ts +2 -1
  532. package/src/apps/management/App.ts +4 -0
  533. package/src/apps/management/Billing.test.ts +253 -27
  534. package/src/apps/management/Billing.ts +83 -29
  535. package/src/apps/management/routes/api-keys.test.ts +1 -1
  536. package/src/apps/management/routes/api-keys.ts +85 -11
  537. package/src/apps/management/routes/billing.test.ts +68 -4
  538. package/src/apps/management/routes/cli.test.ts +370 -0
  539. package/src/apps/management/routes/cli.ts +533 -0
  540. package/src/apps/management/routes/me.test.ts +14 -4
  541. package/src/apps/management/routes/orgs.test.ts +108 -4
  542. package/src/apps/management/routes/orgs.ts +7 -2
  543. package/src/apps/management/routes/usage.test.ts +2 -2
  544. package/src/apps/mpp/internal/Policy.test.ts +51 -4
  545. package/src/apps/mpp/internal/Policy.ts +6 -2
  546. package/src/apps/mpp/internal/Sponsorship.test.ts +29 -0
  547. package/src/apps/mpp/internal/Sponsorship.ts +6 -4
  548. package/src/apps/relay/App.test.ts +85 -1
  549. package/src/apps/relay/App.ts +28 -4
  550. package/src/apps/relay/Sponsorships.test.ts +97 -1
  551. package/src/apps/relay/Sponsorships.ts +77 -66
  552. package/src/apps/routes/Access.test.ts +319 -0
  553. package/src/apps/routes/Access.ts +147 -0
  554. package/src/apps/routes/App.ts +10 -0
  555. package/src/apps/routes/routes/chains.test.ts +3 -2
  556. package/src/apps/routes/routes/deposit-addresses.test.ts +978 -34
  557. package/src/apps/routes/routes/deposit-addresses.ts +243 -32
  558. package/src/apps/routes/routes/propAmm.local.test.ts +951 -0
  559. package/src/apps/routes/routes/quotes.test.ts +81 -8
  560. package/src/apps/routes/routes/quotes.ts +109 -27
  561. package/src/apps/routes/routes/transfers.test.ts +252 -15
  562. package/src/apps/routes/routes/transfers.ts +212 -33
  563. package/src/cli/ApiKeys.test.ts +265 -0
  564. package/src/cli/ApiKeys.ts +189 -0
  565. package/src/cli/Cli.test.ts +188 -0
  566. package/src/cli/Cli.ts +280 -12
  567. package/src/cli/Credentials.test.ts +122 -0
  568. package/src/cli/Credentials.ts +144 -0
  569. package/src/cli/Spec.test.ts +133 -0
  570. package/src/cli/Spec.ts +132 -0
  571. package/src/cli/bin.test.ts +49 -0
  572. package/src/cli/bin.ts +5 -1
  573. package/src/cli/commands/auth.test.ts +138 -0
  574. package/src/cli/commands/auth.ts +254 -0
  575. package/src/cli/commands/keys.test.ts +68 -0
  576. package/src/cli/commands/keys.ts +125 -0
  577. package/src/cloudflare.ts +184 -36
  578. package/src/db/Db.test.ts +877 -0
  579. package/src/db/Db.ts +498 -1
  580. package/src/db/Schema.ts +75 -4
  581. package/src/db/tables/apiKeyAdmissions.test.ts +57 -0
  582. package/src/db/tables/apiKeyAdmissions.ts +101 -11
  583. package/src/db/tables/apiKeyOwnerTombstones.ts +2 -2
  584. package/src/db/tables/authAccounts.test.ts +30 -0
  585. package/src/db/tables/authAccounts.ts +1 -0
  586. package/src/db/tables/earnVaults.test.ts +34 -0
  587. package/src/db/tables/earnVaults.ts +17 -2
  588. package/src/db/tables/organizations.test.ts +148 -84
  589. package/src/db/tables/organizations.ts +11 -43
  590. package/src/db/tables/requestUsage.ts +13 -2
  591. package/src/db/tables/rewardCampaigns.test.ts +163 -0
  592. package/src/db/tables/rewardEligibilityAssociations.test.ts +14 -0
  593. package/src/db/tables/rewardEligibilityAssociations.ts +24 -0
  594. package/src/db/tables/rewardRuns.ts +4 -0
  595. package/src/db/tables/rewardTransactionAttempts.ts +2 -0
  596. package/src/db/tables/routesDepositAddresses.test.ts +263 -0
  597. package/src/db/tables/routesDepositAddresses.ts +118 -34
  598. package/src/db/tables/routesDeposits.test.ts +66 -5
  599. package/src/db/tables/routesDeposits.ts +47 -26
  600. package/src/db/tables/routesIdempotency.test.ts +80 -0
  601. package/src/db/tables/routesIdempotency.ts +2 -0
  602. package/src/db/tables/routesPolicies.test.ts +143 -0
  603. package/src/db/tables/routesPolicies.ts +251 -0
  604. package/src/db/tables/routesTransferSubsidies.ts +64 -0
  605. package/src/db/tables/routesTransferSubsidyNonces.ts +16 -4
  606. package/src/db/tables/routesTransfers.test.ts +183 -2
  607. package/src/db/tables/routesTransfers.ts +65 -6
  608. package/src/db/tables/sponsoredTransactions.test.ts +351 -76
  609. package/src/db/tables/sponsoredTransactions.ts +182 -38
  610. package/src/db/tables/users.test.ts +51 -0
  611. package/src/db/tables/users.ts +12 -0
  612. package/src/handlers/internal/multisig.store.test.ts +120 -0
  613. package/src/handlers/internal/multisig.test.ts +389 -0
  614. package/src/handlers/internal/multisig.ts +13 -10
  615. package/src/handlers/relay.test.ts +259 -83
  616. package/src/handlers/relay.ts +36 -17
  617. package/src/internal/Auth.test.ts +291 -8
  618. package/src/internal/Auth.ts +227 -96
  619. package/src/internal/BetterAuth.test.ts +58 -22
  620. package/src/internal/BetterAuth.ts +23 -17
  621. package/src/internal/Cache.ts +3 -1
  622. package/src/internal/CliAuth.test.ts +279 -0
  623. package/src/internal/CliAuth.ts +319 -0
  624. package/src/internal/EarnSharePrices.test.ts +25 -0
  625. package/src/internal/EarnSharePrices.ts +9 -2
  626. package/src/internal/EarnVaults.test.ts +67 -0
  627. package/src/internal/EarnVaults.ts +299 -4
  628. package/src/internal/EarnWithdrawals.test.ts +315 -0
  629. package/src/internal/EarnWithdrawals.ts +266 -0
  630. package/src/internal/ExecutionContext.ts +31 -0
  631. package/src/internal/Log.test.ts +210 -0
  632. package/src/internal/Log.ts +180 -142
  633. package/src/internal/MetricSink.test.ts +190 -15
  634. package/src/internal/MetricSink.ts +27 -1
  635. package/src/internal/RateLimit.test.ts +144 -8
  636. package/src/internal/RateLimit.ts +254 -26
  637. package/src/internal/Store.ts +4 -5
  638. package/src/internal/Timing.test.ts +32 -0
  639. package/src/internal/Timing.ts +20 -1
  640. package/src/internal/Tron.test-d.ts +22 -0
  641. package/src/internal/Tron.test.ts +94 -0
  642. package/src/internal/Tron.ts +289 -0
  643. package/src/internal/Viem.rpc.test.ts +76 -0
  644. package/src/internal/Viem.ts +29 -6
  645. package/src/internal/rewards/Read.test.ts +109 -0
  646. package/src/internal/rewards/Read.ts +13 -4
  647. package/src/internal/routes/Action.test.ts +70 -0
  648. package/src/internal/routes/Action.ts +76 -1
  649. package/src/internal/routes/Chain.test.ts +18 -0
  650. package/src/internal/routes/Chain.ts +5 -0
  651. package/src/internal/routes/DepositAddress.ts +5 -0
  652. package/src/internal/routes/Evidence.test.ts +64 -0
  653. package/src/internal/routes/Evidence.ts +11 -3
  654. package/src/internal/routes/EvmTransferSettlement.ts +213 -0
  655. package/src/internal/routes/Policy.test.ts +316 -0
  656. package/src/internal/routes/Policy.ts +399 -0
  657. package/src/internal/routes/Provider.test.ts +103 -2
  658. package/src/internal/routes/Provider.ts +149 -27
  659. package/src/internal/routes/Quota.test.ts +149 -0
  660. package/src/internal/routes/Quota.ts +226 -0
  661. package/src/internal/routes/Reconciliation.local.test.ts +285 -0
  662. package/src/internal/routes/Reconciliation.test.ts +371 -13
  663. package/src/internal/routes/Reconciliation.ts +193 -42
  664. package/src/internal/routes/SolanaTransferSettlement.ts +232 -0
  665. package/src/internal/routes/SolanaTransferSubsidy.test.ts +471 -0
  666. package/src/internal/routes/SolanaTransferSubsidy.ts +760 -0
  667. package/src/internal/routes/SourceObservation.test.ts +221 -0
  668. package/src/internal/routes/Subsidy.local.test.ts +46 -0
  669. package/src/internal/routes/Subsidy.ts +4 -2
  670. package/src/internal/routes/Transfer.solana.test.ts +389 -0
  671. package/src/internal/routes/Transfer.test.ts +130 -1
  672. package/src/internal/routes/Transfer.tron.test.ts +172 -0
  673. package/src/internal/routes/Transfer.ts +866 -8
  674. package/src/internal/routes/TransferReconciliation.test.ts +26 -4
  675. package/src/internal/routes/TransferReconciliation.ts +91 -166
  676. package/src/internal/routes/TransferSettlement.ts +48 -0
  677. package/src/internal/routes/TransferSubsidy.local.test.ts +143 -0
  678. package/src/internal/routes/TransferSubsidy.test.ts +34 -4
  679. package/src/internal/routes/TransferSubsidy.ts +87 -12
  680. package/src/internal/routes/TronTransferSettlement.ts +212 -0
  681. package/src/internal/routes/TronTransferSubsidy.test.ts +109 -0
  682. package/src/internal/routes/TronTransferSubsidy.ts +619 -0
  683. package/src/internal/routes/index.test.ts +3 -0
  684. package/src/internal/routes/index.ts +3 -0
  685. package/src/internal/routes/providers/across.ts +13 -0
  686. package/src/internal/routes/providers/index.test.ts +141 -0
  687. package/src/internal/routes/providers/legacyMesh.test.ts +484 -0
  688. package/src/internal/routes/providers/legacyMesh.ts +633 -0
  689. package/src/internal/routes/providers/legacyMeshDelivery.test.ts +306 -0
  690. package/src/internal/routes/providers/legacyMeshDelivery.ts +320 -0
  691. package/src/internal/routes/providers/legacyMeshOutbound.test.ts +401 -0
  692. package/src/internal/routes/providers/legacyMeshOutbound.ts +566 -0
  693. package/src/internal/routes/providers/legacyMeshOutboundDelivery.ts +473 -0
  694. package/src/internal/routes/providers/propAmm.ts +640 -0
  695. package/src/internal/routes/providers/relay.test.ts +1263 -41
  696. package/src/internal/routes/providers/relay.ts +423 -38
  697. package/src/internal/routes/providers/rhino.ts +14 -1
  698. package/src/internal/routes/providers/squid.ts +21 -0
  699. package/src/internal/routes/providers/stargate.test.ts +105 -1
  700. package/src/internal/routes/providers/stargate.ts +22 -9
  701. package/src/internal/routes/providers/symbiosis.ts +13 -47
  702. package/src/providers/index.test.ts +2 -0
  703. package/src/providers/index.ts +18 -0
  704. package/dist/admin/Access.d.ts +0 -39
  705. package/dist/admin/Access.d.ts.map +0 -1
  706. package/dist/admin/Access.js +0 -73
  707. package/dist/admin/Access.js.map +0 -1
  708. package/src/admin/Access.test.ts +0 -130
  709. package/src/admin/Access.ts +0 -85
@@ -101,10 +101,9 @@ describe('getVerifiedEarnVault', () => {
101
101
  TestApp.json(response, App.schema.getVerifiedEarnVault.Response),
102
102
  TestApp.json(publicResponse, Earn.schema.getEarnVault.Response),
103
103
  ])
104
- // Every field the admin include set can select is resolved identically to
105
- // the public surface.
104
+ // Public vault fields stay identical; earnings configuration is admin-only.
106
105
  expect(publicVault.meta).toBeUndefined()
107
- expect(vault).toStrictEqual(publicVault)
106
+ expect(vault).toStrictEqual({ ...publicVault, earnings: null })
108
107
  expect({
109
108
  description: vault.description,
110
109
  slug: vault.slug,
@@ -173,15 +172,34 @@ describe('listVerifiedEarnVaults', () => {
173
172
  expect([response.status, publicResponse.status]).toEqual([200, 200])
174
173
  const [body, publicBody] = await Promise.all([
175
174
  TestApp.json(response, App.schema.listVerifiedEarnVaults.Response),
176
- TestApp.json(publicResponse, App.schema.listVerifiedEarnVaults.Response),
175
+ TestApp.json(publicResponse, Earn.schema.getVerifiedEarnVaults.Response),
177
176
  ])
178
- expect(body).toStrictEqual(publicBody)
177
+ expect(body).toStrictEqual({
178
+ ...publicBody,
179
+ data: publicBody.data.map((vault) => ({ ...vault, earnings: null })),
180
+ })
179
181
  },
180
182
  90_000,
181
183
  )
182
184
  })
183
185
 
184
186
  describe('putVerifiedEarnVault', () => {
187
+ test('rejects malformed earnings counterparties before contract reads', async () => {
188
+ const { app } = TestAdmin.setup({ rpc: { url: () => 'http://127.0.0.1:1' } })
189
+ for (const earnings of [
190
+ { rewardDistributors: ['not-an-address'] },
191
+ { rewardDistributors: [], withdrawalSpenders: [] },
192
+ {},
193
+ ]) {
194
+ const response = await app.request('/earn/verified-vaults', {
195
+ body: JSON.stringify({ ...input, earnings }),
196
+ headers: { 'content-type': 'application/json' },
197
+ method: 'PUT',
198
+ })
199
+ expect(response.status).toBe(400)
200
+ }
201
+ })
202
+
185
203
  test('rejects invalid slugs', async () => {
186
204
  const { app } = TestAdmin.setup()
187
205
  const response = await app.request('/earn/verified-vaults', {
@@ -251,6 +269,48 @@ describe('putVerifiedEarnVault', () => {
251
269
  60_000,
252
270
  )
253
271
 
272
+ test.runIf(Runtime.get().mode === 'testnet')(
273
+ 'discovers a router from its address for an existing vault',
274
+ async () => {
275
+ const { app, db } = TestAdmin.setup({ zones: [TestEarn.zone] })
276
+ await core_EarnVaults.upsert(db, { ...TestEarn.zoneVerifiedVault, zones: [] })
277
+ const response = await app.request('/earn/verified-vaults', {
278
+ body: JSON.stringify({
279
+ chainId: zoneInput.chainId,
280
+ vaultAddress: zoneInput.vaultAddress,
281
+ zoneRouter: TestEarn.zoneRoute.earnRouter,
282
+ }),
283
+ headers: { 'content-type': 'application/json' },
284
+ method: 'PUT',
285
+ })
286
+ expect(response.status).toBe(200)
287
+ expect(
288
+ (await TestApp.json(response, App.schema.putVerifiedEarnVault.Response)).zones?.[0],
289
+ ).toMatchObject(TestEarn.zoneRoute)
290
+ expect(
291
+ await core_EarnVaults.get(db, {
292
+ chainId: zoneInput.chainId,
293
+ vaultAddress: zoneInput.vaultAddress,
294
+ }),
295
+ ).toMatchObject({ zones: [TestEarn.zoneRoute] })
296
+
297
+ const repeated = await app.request('/earn/verified-vaults', {
298
+ body: JSON.stringify({
299
+ chainId: zoneInput.chainId,
300
+ vaultAddress: zoneInput.vaultAddress,
301
+ zoneRouter: TestEarn.zoneRoute.earnRouter,
302
+ }),
303
+ headers: { 'content-type': 'application/json' },
304
+ method: 'PUT',
305
+ })
306
+ expect(repeated.status).toBe(200)
307
+ expect(
308
+ (await TestApp.json(repeated, App.schema.putVerifiedEarnVault.Response)).zones,
309
+ ).toHaveLength(1)
310
+ },
311
+ 90_000,
312
+ )
313
+
254
314
  test.runIf(Runtime.get().mode === 'testnet')(
255
315
  'verifies, stores, and preserves a Zone route',
256
316
  async () => {
@@ -363,13 +423,15 @@ describe('putVerifiedEarnVault', () => {
363
423
  'verifies, stores, and updates curated fields',
364
424
  async () => {
365
425
  const { app, db } = TestAdmin.setup({ zones: [TestEarn.zone] })
426
+ const earnings = { rewardDistributors: [asset] }
366
427
  const response = await app.request('/earn/verified-vaults', {
367
- body: JSON.stringify(input),
428
+ body: JSON.stringify({ ...input, earnings }),
368
429
  headers: { 'content-type': 'application/json' },
369
430
  method: 'PUT',
370
431
  })
371
432
  expect(response.status).toBe(200)
372
433
  const body = await TestApp.json(response, App.schema.putVerifiedEarnVault.Response)
434
+ expect(body.earnings).toEqual(earnings)
373
435
  expect({
374
436
  description: body.description,
375
437
  engineType: body.engine.type,
@@ -411,6 +473,13 @@ describe('putVerifiedEarnVault', () => {
411
473
  })
412
474
  expect(updatedResponse.status).toBe(200)
413
475
  const updated = await TestApp.json(updatedResponse, App.schema.putVerifiedEarnVault.Response)
476
+ expect(updated.earnings).toEqual(earnings)
477
+ const detail = await app.request(
478
+ `/earn/verified-vaults/${vaultAddress}?chainId=${tempoTestnet.id}`,
479
+ )
480
+ expect(
481
+ (await TestApp.json(detail, App.schema.getVerifiedEarnVault.Response)).earnings,
482
+ ).toEqual(earnings)
414
483
  expect({
415
484
  description: updated.description,
416
485
  label: updated.label,
@@ -621,7 +690,7 @@ describe('deleteVerifiedEarnVault', () => {
621
690
  `/v1/earn/vaults/${vaultAddress}?chainId=${tempoTestnet.id}&include=zone`,
622
691
  )
623
692
  expect(publicResponse.status).toBe(200)
624
- const vault = await TestApp.json(publicResponse, App.schema.getVerifiedEarnVault.Response)
693
+ const vault = await TestApp.json(publicResponse, Earn.schema.getEarnVault.Response)
625
694
  expect({
626
695
  description: vault.description,
627
696
  slug: vault.slug,
@@ -22,11 +22,22 @@ import type * as App from '../App.js'
22
22
 
23
23
  /** Zod schemas owned by the admin verified-vault handler. */
24
24
  export namespace schema {
25
- /** One Earn vault, shared with the public detail API. */
26
- export const Vault = Earn.schema.Vault
25
+ const earnings = z.object({
26
+ earnings: z
27
+ .nullable(EarnVaults.schema.Earnings)
28
+ .check(
29
+ z.describe(
30
+ 'Additional per-vault reward distributors. Recorded campaign distributors are always included; null adds none.',
31
+ ),
32
+ z.meta({ examples: [null] }),
33
+ ),
34
+ })
35
+
36
+ /** One Earn vault with its private accounting configuration. */
37
+ export const Vault = z.intersection(Earn.schema.Vault, earnings)
27
38
 
28
- /** One registry-curated Earn vault, shared with the public verified list. */
29
- export const VerifiedVault = Earn.schema.VerifiedVault
39
+ /** One registry-curated Earn vault with its accounting configuration. */
40
+ export const VerifiedVault = z.intersection(Earn.schema.VerifiedVault, earnings)
30
41
 
31
42
  /** Schemas for the listVerifiedEarnVaults operation. */
32
43
  export namespace listVerifiedEarnVaults {
@@ -34,7 +45,10 @@ export namespace schema {
34
45
  export const Query = Earn.schema.getVerifiedEarnVaults.BaseQuery
35
46
 
36
47
  /** Paginated verified Earn vaults. */
37
- export const Response = Earn.schema.getVerifiedEarnVaults.Response
48
+ export const Response = z.object({
49
+ data: z.array(VerifiedVault),
50
+ nextCursor: Earn.schema.getVerifiedEarnVaults.Response.shape.nextCursor,
51
+ })
38
52
  }
39
53
 
40
54
  /** Schemas for the getVerifiedEarnVault operation. */
@@ -69,6 +83,13 @@ export namespace schema {
69
83
  ),
70
84
  )
71
85
  .check(z.describe('Curated vault description, or null when absent.')),
86
+ earnings: z
87
+ .optional(earnings.shape.earnings)
88
+ .check(
89
+ z.describe(
90
+ 'Omit to preserve additional distributors, supply a list to replace the additions, or null to clear them. Recorded campaign history is always retained.',
91
+ ),
92
+ ),
72
93
  label: z
73
94
  .optional(
74
95
  z
@@ -102,6 +123,9 @@ export namespace schema {
102
123
  z.describe('Earn vault contract address.'),
103
124
  z.meta({ examples: ['0x4f94590b636f5878bce585e82379de81e1ec174f'] }),
104
125
  ),
126
+ zoneRouter: z
127
+ .optional(Schema.Address)
128
+ .check(z.describe('Parent-chain Earn router to discover and add to this vault.')),
105
129
  zones: z
106
130
  .optional(z.array(EarnVaults.schema.ZoneRoute))
107
131
  .check(z.describe('Curated private Zone routes.')),
@@ -772,7 +796,20 @@ export function earnVaults() {
772
796
  const privateInputTokens = input.privateInputTokens ?? existing?.privateInputTokens ?? []
773
797
  const privateOutputTokens =
774
798
  input.privateOutputTokens ?? existing?.privateOutputTokens ?? []
775
- const zoneRoutes = input.zones ?? existing?.zones ?? []
799
+ const zoneRoutes = [...(input.zones ?? existing?.zones ?? [])]
800
+ if (input.zoneRouter) {
801
+ const route = await EarnVaults.discoverZoneRoute({
802
+ discovery,
803
+ earnRouter: input.zoneRouter,
804
+ getClient: c.get('getClient'),
805
+ zones: c.get('zones'),
806
+ })
807
+ const index = zoneRoutes.findIndex(
808
+ (candidate) => candidate.earnRouter === route.earnRouter,
809
+ )
810
+ if (index === -1) zoneRoutes.push(route)
811
+ else zoneRoutes[index] = route
812
+ }
776
813
  const hasPrivateInputs = privateInputTokens.length > 0
777
814
  const hasPrivateOutputs = privateOutputTokens.length > 0
778
815
  if (hasPrivateInputs !== hasPrivateOutputs)
@@ -794,6 +831,7 @@ export function earnVaults() {
794
831
  chainId: input.chainId,
795
832
  description:
796
833
  input.description === undefined ? (existing?.description ?? null) : input.description,
834
+ earnings: input.earnings,
797
835
  label: input.label ?? existing?.label ?? discovery.shareToken.name,
798
836
  privateInputTokens,
799
837
  privateOutputTokens,
@@ -1159,12 +1197,12 @@ declare namespace resolveVaultRoutes {
1159
1197
  async function serializeVault(
1160
1198
  c: Context<App.Environment>,
1161
1199
  options: serializeVault.Options,
1162
- ): Promise<z.output<typeof Earn.schema.Vault>> {
1200
+ ): Promise<z.output<typeof schema.Vault>> {
1163
1201
  const [assetToken, shareToken] = await Promise.all([
1164
1202
  serializeToken(c, { ...options, metadata: options.discovery.assetToken }),
1165
1203
  serializeToken(c, { ...options, metadata: options.discovery.shareToken }),
1166
1204
  ])
1167
- return Earn.serializeVault({
1205
+ const vault = Earn.serializeVault({
1168
1206
  // Rate and valuation enrichment need indexer and FX access the admin app
1169
1207
  // does not carry, so its query schema cannot select either field.
1170
1208
  apy: null,
@@ -1178,6 +1216,7 @@ async function serializeVault(
1178
1216
  zoneRoutes: options.zoneRoutes,
1179
1217
  zones: c.get('zones'),
1180
1218
  })
1219
+ return { ...vault, earnings: options.record?.earnings ?? null }
1181
1220
  }
1182
1221
 
1183
1222
  declare namespace serializeVault {
@@ -1,4 +1,7 @@
1
- import type * as Analytics from '../../analytics/Analytics.js'
1
+ import { sql } from 'kysely'
2
+
3
+ import * as Analytics from '../../analytics/Analytics.js'
4
+ import * as RoutesAccess from '../../apps/routes/Access.js'
2
5
  import * as ApiKeys from '../../ApiKeys.js'
3
6
  import * as InvitationsApp from '../../apps/management/routes/invitations.js'
4
7
  import * as BillingSettings from '../../db/tables/billingSettings.js'
@@ -6,6 +9,7 @@ import * as EnabledBillingSources from '../../db/tables/enabledBillingSources.js
6
9
  import * as Memberships from '../../db/tables/memberships.js'
7
10
  import * as Organizations from '../../db/tables/organizations.js'
8
11
  import * as Projects from '../../db/tables/projects.js'
12
+ import * as RoutesPolicies from '../../db/tables/routesPolicies.js'
9
13
  import * as RoutesSubsidies from '../../db/tables/routesSubsidies.js'
10
14
  import * as SponsoredTransactions from '../../db/tables/sponsoredTransactions.js'
11
15
  import * as StripeCustomers from '../../db/tables/stripeCustomers.js'
@@ -21,6 +25,7 @@ import * as DepositAddress from '../../internal/routes/DepositAddress.js'
21
25
 
22
26
  import * as TestAdmin from '../../../test/Admin.js'
23
27
  import * as TestApp from '../../../test/App.js'
28
+ import * as Containers from '../../../test/containers.js'
24
29
  import * as TestRoutes from '../../../test/Routes.js'
25
30
  import * as AdminOrganizations from './organizations.js'
26
31
 
@@ -309,6 +314,84 @@ describe('GET /organizations/:orgId/subsidies', () => {
309
314
  })
310
315
 
311
316
  describe('PUT /organizations/:orgId/subsidies/routes', () => {
317
+ test.each([
318
+ { enabled: false } as const,
319
+ { enabled: true, frequency: 'tx', maxAmount: '0.01' } as const,
320
+ ])('serializes legacy changes with accepted policy commitments: %j', async (json) => {
321
+ const database = TestApp.databaseFactory()
322
+ const db = database()
323
+ const { client } = TestAdmin.setup({ db: database() })
324
+ const organization = await Organizations.create(db, { name: 'Legacy acceptance race' })
325
+ const scope = { environment: 'production', orgId: organization.id } as const
326
+ await RoutesSubsidies.upsertOrganization(db, {
327
+ frequency: 'tx',
328
+ maxAmount: '0.05',
329
+ orgId: organization.id,
330
+ })
331
+ await RoutesPolicies.save(db, {
332
+ policy: { access: null, subsidyPayer: 'tempo' },
333
+ scope,
334
+ version: 0,
335
+ })
336
+ const loaded = await RoutesPolicies.load(db, scope)
337
+ const context = {
338
+ scope,
339
+ legacy: loaded.legacy,
340
+ layers: loaded.layers.map((layer) => layer.policy),
341
+ versions: loaded.layers.map((layer) => layer.version),
342
+ }
343
+ const accepted = Promise.withResolvers<void>()
344
+ const release = Promise.withResolvers<void>()
345
+ const acceptance = database().transaction(async (tx) => {
346
+ await RoutesAccess.assertPolicy(tx, context)
347
+ accepted.resolve()
348
+ await release.promise
349
+ return RoutesAccess.commitment(
350
+ tx,
351
+ context,
352
+ {
353
+ destinationChainId: 'eip155:4217',
354
+ destinationTokenId: 'usdce',
355
+ providerId: 'relay',
356
+ sourceChainId: 'eip155:8453',
357
+ sourceTokenId: 'usdc',
358
+ },
359
+ '1',
360
+ )
361
+ })
362
+ await accepted.promise
363
+ let finished = false
364
+ const write = client.organizations[':orgId'].subsidies.routes
365
+ .$put({ json, param: { orgId: organization.id } })
366
+ .then((response) => {
367
+ finished = true
368
+ return response
369
+ })
370
+ try {
371
+ await expect
372
+ .poll(async () => {
373
+ const { rows } = await sql<{ waiting: boolean }>`select exists (
374
+ select 1 from pg_locks where locktype = 'advisory' and not granted
375
+ and classid::bigint = ((hashtextextended(${`routes-subsidy:${organization.id}`}, 0) >> 32) & 4294967295)
376
+ and objid::bigint = (hashtextextended(${`routes-subsidy:${organization.id}`}, 0) & 4294967295)
377
+ ) as waiting`.execute(db.kysely)
378
+ return finished || rows[0]!.waiting
379
+ })
380
+ .toBe(true)
381
+ expect(finished).toBe(false)
382
+ expect((await RoutesPolicies.load(db, scope)).legacy.maxAmount).toBe('0.05')
383
+ } finally {
384
+ release.resolve()
385
+ await acceptance
386
+ await write
387
+ }
388
+ expect((await write).status).toBe(200)
389
+ expect(await acceptance).toMatchObject({ maxAmount: '0.05', subsidyPayer: 'tempo' })
390
+ await expect(
391
+ db.transaction((tx) => RoutesAccess.assertPolicy(tx, context)),
392
+ ).rejects.toMatchObject({ code: 'route_policy_changed' })
393
+ })
394
+
312
395
  test('enables and disables a maximum subsidy amount', async () => {
313
396
  const { client, db } = TestAdmin.setup()
314
397
  const organization = await Organizations.create(db, { name: 'Routes' })
@@ -661,24 +744,70 @@ describe('GET /organizations/:orgId/api-keys', () => {
661
744
 
662
745
  describe('GET /organizations/:orgId/usage', () => {
663
746
  test('returns recent totals and error breakdowns from analytics', async () => {
664
- const { client, db } = TestAdmin.setup({ analytics: usageAnalytics })
665
- const organization = await Organizations.create(db, { name: 'Usage' })
666
- const response = await client.organizations[':orgId'].usage.$get({
667
- param: { orgId: organization.id },
668
- query: { period: '7d' },
669
- })
670
- const body = await TestApp.json(
671
- response,
672
- AdminOrganizations.schema.getOrganizationUsage.Response,
673
- )
747
+ const stack = await Containers.start()
748
+ try {
749
+ const analytics = Analytics.clickhouse({
750
+ database: 'tempo_api',
751
+ password: 'clickhouse',
752
+ url: `http://${stack.endpoints.clickhouse.host}:${stack.endpoints.clickhouse.port}`,
753
+ user: 'clickhouse',
754
+ })
755
+ await analytics.migrate()
756
+ const { client, db } = TestAdmin.setup({ analytics })
757
+ const organization = await Organizations.create(db, { name: 'Usage' })
758
+ await analytics.insert(
759
+ 'request_events',
760
+ Array.from({ length: 25 }, (_, index) => ({
761
+ billing_active: null,
762
+ chain_id: null,
763
+ duration_ms: index < 20 ? 12.5 : 2.5,
764
+ environment: 'production',
765
+ error_code: index < 2 ? 'upstream_error' : null,
766
+ key_environment: 'production' as const,
767
+ key_id: null,
768
+ method: 'GET',
769
+ org_id: organization.id,
770
+ principal_type: 'api_key' as const,
771
+ project_id: null,
772
+ query: '',
773
+ rate_limit_scope: null,
774
+ request_id: null,
775
+ route: index < 20 ? '/v1/tokens' : '/v1/tokenlist',
776
+ rpc_error_code: null,
777
+ rpc_error_count: 0,
778
+ rpc_error_data_code: null,
779
+ service: 'api',
780
+ status: index < 2 ? 500 : 200,
781
+ timestamp: new Date(Date.now() - 60_000).toISOString().replace('T', ' ').replace('Z', ''),
782
+ timings: {},
783
+ })),
784
+ )
785
+ const response = await client.organizations[':orgId'].usage.$get({
786
+ param: { orgId: organization.id },
787
+ query: { period: '7d' },
788
+ })
789
+ const body = await TestApp.json(
790
+ response,
791
+ AdminOrganizations.schema.getOrganizationUsage.Response,
792
+ )
674
793
 
675
- expect(body).toMatchObject({
676
- byError: [{ code: 'upstream_error', requests: 2 }],
677
- byRoute: [{ averageDurationMs: 12.5, errors: 2, requests: 20, route: '/v1/tokens' }],
678
- byStatus: [{ requests: 2, status: 500 }],
679
- period: '7d',
680
- totals: { averageDurationMs: 10.5, errors: 2, requests: 25 },
681
- })
794
+ expect(response.status).toBe(200)
795
+ expect(body).toMatchObject({
796
+ byError: [{ code: 'upstream_error', requests: 2 }],
797
+ byRoute: [
798
+ { averageDurationMs: 12.5, errors: 2, requests: 20, route: '/v1/tokens' },
799
+ { averageDurationMs: 2.5, errors: 0, requests: 5, route: '/v1/tokenlist' },
800
+ ],
801
+ byStatus: [
802
+ { requests: 23, status: 200 },
803
+ { requests: 2, status: 500 },
804
+ ],
805
+ period: '7d',
806
+ totals: { averageDurationMs: 10.5, errors: 2, requests: 25 },
807
+ })
808
+ } finally {
809
+ await stack.stop()
810
+ }
682
811
  })
683
812
  })
684
813
 
@@ -865,16 +994,3 @@ describe('GET /organizations/:orgId/webhooks', () => {
865
994
  expect(body.failuresTruncated).toBe(true)
866
995
  })
867
996
  })
868
-
869
- const usageAnalytics: Analytics.Analytics = {
870
- async insert() {},
871
- async migrate() {},
872
- async query(sql) {
873
- if (sql.includes('GROUP BY code')) return [{ code: 'upstream_error', requests: 2 }] as never[]
874
- if (sql.includes('GROUP BY route'))
875
- return [{ averageDurationMs: 12.5, errors: 2, requests: 20, route: '/v1/tokens' }] as never[]
876
- if (sql.includes('GROUP BY status')) return [{ requests: 2, status: 500 }] as never[]
877
- if (sql.includes('GROUP BY key_id') || sql.includes('GROUP BY toStartOf')) return []
878
- return [{ averageDurationMs: 10.5, errors: 2, requests: 25 }] as never[]
879
- },
880
- }
@@ -858,17 +858,18 @@ export function organizations() {
858
858
  try {
859
859
  const organization = await Organizations.get(db, orgId)
860
860
  if (!organization) return organizationNotFound(c)
861
- const subsidy = await (async () => {
861
+ const subsidy = await db.transaction(async (tx) => {
862
+ await RoutesSubsidies.lockOrganization(tx, orgId)
862
863
  if (!policy.enabled) {
863
- await RoutesSubsidies.removeOrganization(db, orgId)
864
+ await RoutesSubsidies.removeOrganization(tx, orgId)
864
865
  return undefined
865
866
  }
866
- return RoutesSubsidies.upsertOrganization(db, {
867
+ return RoutesSubsidies.upsertOrganization(tx, {
867
868
  frequency: policy.frequency,
868
869
  maxAmount: policy.maxAmount,
869
870
  orgId,
870
871
  })
871
- })()
872
+ })
872
873
  return c.json(
873
874
  Response.validated(
874
875
  schema.setOrganizationRoutesSubsidy.Response,