tapimo 0.15.0 → 0.18.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 (734) 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 +896 -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 +33 -33
  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 +454 -1
  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 +10 -4
  45. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  46. package/dist/admin/apps/verified-tokens.js +24 -4
  47. package/dist/admin/apps/verified-tokens.js.map +1 -1
  48. package/dist/admin/index.d.ts +0 -1
  49. package/dist/admin/index.d.ts.map +1 -1
  50. package/dist/admin/index.js +0 -1
  51. package/dist/admin/index.js.map +1 -1
  52. package/dist/admin/ui.generated.d.ts +1 -1
  53. package/dist/admin/ui.generated.d.ts.map +1 -1
  54. package/dist/admin/ui.generated.js +99 -103
  55. package/dist/admin/ui.generated.js.map +1 -1
  56. package/dist/analytics/Analytics.d.ts.map +1 -1
  57. package/dist/analytics/Analytics.js +65 -1
  58. package/dist/analytics/Analytics.js.map +1 -1
  59. package/dist/analytics/tables/requestEvents.d.ts +1 -1
  60. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  61. package/dist/analytics/tables/requestEvents.js +58 -59
  62. package/dist/analytics/tables/requestEvents.js.map +1 -1
  63. package/dist/apps/data/App.d.ts +2709 -2670
  64. package/dist/apps/data/App.d.ts.map +1 -1
  65. package/dist/apps/data/routes/activities.d.ts +5 -5
  66. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  67. package/dist/apps/data/routes/activities.js +50 -0
  68. package/dist/apps/data/routes/activities.js.map +1 -1
  69. package/dist/apps/data/routes/addresses.d.ts +248 -248
  70. package/dist/apps/data/routes/balances.d.ts +22 -22
  71. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  72. package/dist/apps/data/routes/balances.js +5 -7
  73. package/dist/apps/data/routes/balances.js.map +1 -1
  74. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  75. package/dist/apps/data/routes/earn.d.ts +103 -12
  76. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  77. package/dist/apps/data/routes/earn.js +456 -220
  78. package/dist/apps/data/routes/earn.js.map +1 -1
  79. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  80. package/dist/apps/data/routes/exchanges.js +267 -97
  81. package/dist/apps/data/routes/exchanges.js.map +1 -1
  82. package/dist/apps/data/routes/fee-amm.d.ts +1 -19
  83. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  84. package/dist/apps/data/routes/fee-amm.js +93 -56
  85. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  86. package/dist/apps/data/routes/indexer.d.ts +10 -10
  87. package/dist/apps/data/routes/rpc.d.ts +30 -30
  88. package/dist/apps/data/routes/rpc.js +45 -11
  89. package/dist/apps/data/routes/rpc.js.map +1 -1
  90. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  91. package/dist/apps/data/routes/tokens.js +11 -6
  92. package/dist/apps/data/routes/tokens.js.map +1 -1
  93. package/dist/apps/data/routes/transactions.d.ts +2 -0
  94. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  95. package/dist/apps/data/routes/transactions.js +30 -22
  96. package/dist/apps/data/routes/transactions.js.map +1 -1
  97. package/dist/apps/data/routes/transfers.d.ts +12 -12
  98. package/dist/apps/data/routes/valuation.d.ts +30 -30
  99. package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
  100. package/dist/apps/data/routes/webhooks.d.ts +1 -1
  101. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  102. package/dist/apps/data/routes/webhooks.js +18 -11
  103. package/dist/apps/data/routes/webhooks.js.map +1 -1
  104. package/dist/apps/data/routes/zones.d.ts +3 -3
  105. package/dist/apps/management/App.d.ts +3043 -2198
  106. package/dist/apps/management/App.d.ts.map +1 -1
  107. package/dist/apps/management/App.js +2 -0
  108. package/dist/apps/management/App.js.map +1 -1
  109. package/dist/apps/management/Billing.d.ts +2 -4
  110. package/dist/apps/management/Billing.d.ts.map +1 -1
  111. package/dist/apps/management/Billing.js +65 -26
  112. package/dist/apps/management/Billing.js.map +1 -1
  113. package/dist/apps/management/routes/api-keys.d.ts +16 -4
  114. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  115. package/dist/apps/management/routes/api-keys.js +70 -11
  116. package/dist/apps/management/routes/api-keys.js.map +1 -1
  117. package/dist/apps/management/routes/billing.d.ts +84 -84
  118. package/dist/apps/management/routes/cli.d.ts +912 -0
  119. package/dist/apps/management/routes/cli.d.ts.map +1 -0
  120. package/dist/apps/management/routes/cli.js +416 -0
  121. package/dist/apps/management/routes/cli.js.map +1 -0
  122. package/dist/apps/management/routes/faucet.d.ts +8 -8
  123. package/dist/apps/management/routes/invitations.d.ts +24 -24
  124. package/dist/apps/management/routes/invite-links.d.ts +66 -66
  125. package/dist/apps/management/routes/members.d.ts +16 -16
  126. package/dist/apps/management/routes/orgs.d.ts +20 -20
  127. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  128. package/dist/apps/management/routes/orgs.js +8 -2
  129. package/dist/apps/management/routes/orgs.js.map +1 -1
  130. package/dist/apps/management/routes/projects.d.ts +76 -76
  131. package/dist/apps/management/routes/usage.d.ts +8 -8
  132. package/dist/apps/management/routes/verified-token-requests.d.ts +42 -42
  133. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  134. package/dist/apps/management/routes/verified-token-requests.js +7 -9
  135. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  136. package/dist/apps/management/routes/webhooks.d.ts +119 -119
  137. package/dist/apps/mcp.d.ts.map +1 -1
  138. package/dist/apps/mcp.js +16 -3
  139. package/dist/apps/mcp.js.map +1 -1
  140. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  141. package/dist/apps/mpp/internal/Policy.js +4 -2
  142. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  143. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  144. package/dist/apps/mpp/internal/Sponsorship.js +6 -4
  145. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  146. package/dist/apps/relay/App.d.ts +8 -0
  147. package/dist/apps/relay/App.d.ts.map +1 -1
  148. package/dist/apps/relay/App.js +16 -4
  149. package/dist/apps/relay/App.js.map +1 -1
  150. package/dist/apps/relay/Sponsorships.d.ts +4 -6
  151. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  152. package/dist/apps/relay/Sponsorships.js +71 -60
  153. package/dist/apps/relay/Sponsorships.js.map +1 -1
  154. package/dist/apps/routes/Access.d.ts +53 -0
  155. package/dist/apps/routes/Access.d.ts.map +1 -1
  156. package/dist/apps/routes/Access.js +121 -0
  157. package/dist/apps/routes/Access.js.map +1 -1
  158. package/dist/apps/routes/App.d.ts +397 -158
  159. package/dist/apps/routes/App.d.ts.map +1 -1
  160. package/dist/apps/routes/App.js.map +1 -1
  161. package/dist/apps/routes/routes/deposit-addresses.d.ts +169 -61
  162. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -1
  163. package/dist/apps/routes/routes/deposit-addresses.js +217 -32
  164. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -1
  165. package/dist/apps/routes/routes/quotes.d.ts +90 -0
  166. package/dist/apps/routes/routes/quotes.d.ts.map +1 -1
  167. package/dist/apps/routes/routes/quotes.js +101 -27
  168. package/dist/apps/routes/routes/quotes.js.map +1 -1
  169. package/dist/apps/routes/routes/transfers.d.ts +187 -135
  170. package/dist/apps/routes/routes/transfers.d.ts.map +1 -1
  171. package/dist/apps/routes/routes/transfers.js +182 -37
  172. package/dist/apps/routes/routes/transfers.js.map +1 -1
  173. package/dist/cli/ApiKeys.d.ts +120 -0
  174. package/dist/cli/ApiKeys.d.ts.map +1 -0
  175. package/dist/cli/ApiKeys.js +138 -0
  176. package/dist/cli/ApiKeys.js.map +1 -0
  177. package/dist/cli/Cli.d.ts +92 -34
  178. package/dist/cli/Cli.d.ts.map +1 -1
  179. package/dist/cli/Cli.js +188 -11
  180. package/dist/cli/Cli.js.map +1 -1
  181. package/dist/cli/Credentials.d.ts +95 -0
  182. package/dist/cli/Credentials.d.ts.map +1 -0
  183. package/dist/cli/Credentials.js +110 -0
  184. package/dist/cli/Credentials.js.map +1 -0
  185. package/dist/cli/Spec.d.ts +59 -0
  186. package/dist/cli/Spec.d.ts.map +1 -0
  187. package/dist/cli/Spec.js +77 -0
  188. package/dist/cli/Spec.js.map +1 -0
  189. package/dist/cli/bin.js +5 -1
  190. package/dist/cli/bin.js.map +1 -1
  191. package/dist/cli/commands/admin.d.ts +5 -5
  192. package/dist/cli/commands/admin.d.ts.map +1 -1
  193. package/dist/cli/commands/auth.d.ts +73 -0
  194. package/dist/cli/commands/auth.d.ts.map +1 -0
  195. package/dist/cli/commands/auth.js +204 -0
  196. package/dist/cli/commands/auth.js.map +1 -0
  197. package/dist/cli/commands/keys.d.ts +17 -0
  198. package/dist/cli/commands/keys.d.ts.map +1 -0
  199. package/dist/cli/commands/keys.js +109 -0
  200. package/dist/cli/commands/keys.js.map +1 -0
  201. package/dist/cloudflare.d.ts +27 -2
  202. package/dist/cloudflare.d.ts.map +1 -1
  203. package/dist/cloudflare.js +144 -17
  204. package/dist/cloudflare.js.map +1 -1
  205. package/dist/db/Db.d.ts +23 -0
  206. package/dist/db/Db.d.ts.map +1 -1
  207. package/dist/db/Db.js +418 -1
  208. package/dist/db/Db.js.map +1 -1
  209. package/dist/db/Schema.d.ts +44 -1
  210. package/dist/db/Schema.d.ts.map +1 -1
  211. package/dist/db/Schema.js +56 -3
  212. package/dist/db/Schema.js.map +1 -1
  213. package/dist/db/tables/apiKeyAdmissions.d.ts +28 -2
  214. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -1
  215. package/dist/db/tables/apiKeyAdmissions.js +65 -9
  216. package/dist/db/tables/apiKeyAdmissions.js.map +1 -1
  217. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +2 -0
  218. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -1
  219. package/dist/db/tables/apiKeyOwnerTombstones.js +2 -2
  220. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -1
  221. package/dist/db/tables/authAccounts.d.ts.map +1 -1
  222. package/dist/db/tables/authAccounts.js +1 -0
  223. package/dist/db/tables/authAccounts.js.map +1 -1
  224. package/dist/db/tables/earnVaults.d.ts +5 -1
  225. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  226. package/dist/db/tables/earnVaults.js +12 -1
  227. package/dist/db/tables/earnVaults.js.map +1 -1
  228. package/dist/db/tables/organizations.d.ts +4 -2
  229. package/dist/db/tables/organizations.d.ts.map +1 -1
  230. package/dist/db/tables/organizations.js +8 -34
  231. package/dist/db/tables/organizations.js.map +1 -1
  232. package/dist/db/tables/requestUsage.d.ts +5 -1
  233. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  234. package/dist/db/tables/requestUsage.js +10 -2
  235. package/dist/db/tables/requestUsage.js.map +1 -1
  236. package/dist/db/tables/rewardEligibilityAssociations.d.ts +13 -0
  237. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -1
  238. package/dist/db/tables/rewardEligibilityAssociations.js +11 -0
  239. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -1
  240. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  241. package/dist/db/tables/rewardRuns.js +4 -0
  242. package/dist/db/tables/rewardRuns.js.map +1 -1
  243. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -1
  244. package/dist/db/tables/rewardTransactionAttempts.js +2 -0
  245. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -1
  246. package/dist/db/tables/routesDepositAddresses.d.ts +29 -0
  247. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -1
  248. package/dist/db/tables/routesDepositAddresses.js +84 -31
  249. package/dist/db/tables/routesDepositAddresses.js.map +1 -1
  250. package/dist/db/tables/routesDeposits.d.ts.map +1 -1
  251. package/dist/db/tables/routesDeposits.js +31 -21
  252. package/dist/db/tables/routesDeposits.js.map +1 -1
  253. package/dist/db/tables/routesIdempotency.d.ts.map +1 -1
  254. package/dist/db/tables/routesIdempotency.js +2 -0
  255. package/dist/db/tables/routesIdempotency.js.map +1 -1
  256. package/dist/db/tables/routesPolicies.d.ts +58 -0
  257. package/dist/db/tables/routesPolicies.d.ts.map +1 -0
  258. package/dist/db/tables/routesPolicies.js +198 -0
  259. package/dist/db/tables/routesPolicies.js.map +1 -0
  260. package/dist/db/tables/routesTransferSubsidies.d.ts +22 -0
  261. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -1
  262. package/dist/db/tables/routesTransferSubsidies.js +41 -0
  263. package/dist/db/tables/routesTransferSubsidies.js.map +1 -1
  264. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -1
  265. package/dist/db/tables/routesTransferSubsidyNonces.js +12 -4
  266. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -1
  267. package/dist/db/tables/routesTransfers.d.ts +26 -1
  268. package/dist/db/tables/routesTransfers.d.ts.map +1 -1
  269. package/dist/db/tables/routesTransfers.js +36 -6
  270. package/dist/db/tables/routesTransfers.js.map +1 -1
  271. package/dist/db/tables/sponsoredTransactions.d.ts +45 -13
  272. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  273. package/dist/db/tables/sponsoredTransactions.js +144 -33
  274. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  275. package/dist/db/tables/users.d.ts +2 -0
  276. package/dist/db/tables/users.d.ts.map +1 -1
  277. package/dist/db/tables/users.js +11 -0
  278. package/dist/db/tables/users.js.map +1 -1
  279. package/dist/db/tables/verifiedTokenRequests.d.ts +21 -4
  280. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
  281. package/dist/db/tables/verifiedTokenRequests.js +65 -44
  282. package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
  283. package/dist/handlers/internal/multisig.d.ts +1 -1
  284. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  285. package/dist/handlers/internal/multisig.js +3 -2
  286. package/dist/handlers/internal/multisig.js.map +1 -1
  287. package/dist/handlers/relay.d.ts +2 -0
  288. package/dist/handlers/relay.d.ts.map +1 -1
  289. package/dist/handlers/relay.js +34 -15
  290. package/dist/handlers/relay.js.map +1 -1
  291. package/dist/internal/Auth.d.ts +73 -6
  292. package/dist/internal/Auth.d.ts.map +1 -1
  293. package/dist/internal/Auth.js +212 -85
  294. package/dist/internal/Auth.js.map +1 -1
  295. package/dist/internal/BetterAuth.d.ts +22 -0
  296. package/dist/internal/BetterAuth.d.ts.map +1 -1
  297. package/dist/internal/BetterAuth.js +17 -14
  298. package/dist/internal/BetterAuth.js.map +1 -1
  299. package/dist/internal/Cache.d.ts +5 -0
  300. package/dist/internal/Cache.d.ts.map +1 -1
  301. package/dist/internal/Cache.js +3 -1
  302. package/dist/internal/Cache.js.map +1 -1
  303. package/dist/internal/CliAuth.d.ts +243 -0
  304. package/dist/internal/CliAuth.d.ts.map +1 -0
  305. package/dist/internal/CliAuth.js +249 -0
  306. package/dist/internal/CliAuth.js.map +1 -0
  307. package/dist/internal/EarnSharePrices.d.ts +1 -1
  308. package/dist/internal/EarnSharePrices.d.ts.map +1 -1
  309. package/dist/internal/EarnSharePrices.js +7 -3
  310. package/dist/internal/EarnSharePrices.js.map +1 -1
  311. package/dist/internal/EarnVaults.d.ts +47 -0
  312. package/dist/internal/EarnVaults.d.ts.map +1 -1
  313. package/dist/internal/EarnVaults.js +188 -4
  314. package/dist/internal/EarnVaults.js.map +1 -1
  315. package/dist/internal/EarnWithdrawals.d.ts +73 -0
  316. package/dist/internal/EarnWithdrawals.d.ts.map +1 -0
  317. package/dist/internal/EarnWithdrawals.js +189 -0
  318. package/dist/internal/EarnWithdrawals.js.map +1 -0
  319. package/dist/internal/ExecutionContext.d.ts +21 -0
  320. package/dist/internal/ExecutionContext.d.ts.map +1 -0
  321. package/dist/internal/ExecutionContext.js +16 -0
  322. package/dist/internal/ExecutionContext.js.map +1 -0
  323. package/dist/internal/Log.d.ts +7 -3
  324. package/dist/internal/Log.d.ts.map +1 -1
  325. package/dist/internal/Log.js +163 -130
  326. package/dist/internal/Log.js.map +1 -1
  327. package/dist/internal/MetricSink.d.ts.map +1 -1
  328. package/dist/internal/MetricSink.js +26 -1
  329. package/dist/internal/MetricSink.js.map +1 -1
  330. package/dist/internal/RateLimit.d.ts +67 -0
  331. package/dist/internal/RateLimit.d.ts.map +1 -1
  332. package/dist/internal/RateLimit.js +174 -27
  333. package/dist/internal/RateLimit.js.map +1 -1
  334. package/dist/internal/Store.d.ts +6 -0
  335. package/dist/internal/Store.d.ts.map +1 -1
  336. package/dist/internal/Store.js +4 -5
  337. package/dist/internal/Store.js.map +1 -1
  338. package/dist/internal/Timing.d.ts +6 -0
  339. package/dist/internal/Timing.d.ts.map +1 -1
  340. package/dist/internal/Timing.js +21 -1
  341. package/dist/internal/Timing.js.map +1 -1
  342. package/dist/internal/Tron.d.ts +124 -0
  343. package/dist/internal/Tron.d.ts.map +1 -0
  344. package/dist/internal/Tron.js +202 -0
  345. package/dist/internal/Tron.js.map +1 -0
  346. package/dist/internal/Viem.d.ts +4 -0
  347. package/dist/internal/Viem.d.ts.map +1 -1
  348. package/dist/internal/Viem.js +25 -6
  349. package/dist/internal/Viem.js.map +1 -1
  350. package/dist/internal/rewards/Read.d.ts +2 -2
  351. package/dist/internal/rewards/Read.d.ts.map +1 -1
  352. package/dist/internal/rewards/Read.js +11 -2
  353. package/dist/internal/rewards/Read.js.map +1 -1
  354. package/dist/internal/routes/Action.d.ts +27 -0
  355. package/dist/internal/routes/Action.d.ts.map +1 -1
  356. package/dist/internal/routes/Action.js +49 -1
  357. package/dist/internal/routes/Action.js.map +1 -1
  358. package/dist/internal/routes/Chain.d.ts +2 -0
  359. package/dist/internal/routes/Chain.d.ts.map +1 -1
  360. package/dist/internal/routes/Chain.js +4 -0
  361. package/dist/internal/routes/Chain.js.map +1 -1
  362. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  363. package/dist/internal/routes/DepositAddress.js +5 -0
  364. package/dist/internal/routes/DepositAddress.js.map +1 -1
  365. package/dist/internal/routes/Evidence.d.ts.map +1 -1
  366. package/dist/internal/routes/Evidence.js +6 -2
  367. package/dist/internal/routes/Evidence.js.map +1 -1
  368. package/dist/internal/routes/EvmTransferSettlement.d.ts +17 -0
  369. package/dist/internal/routes/EvmTransferSettlement.d.ts.map +1 -0
  370. package/dist/internal/routes/EvmTransferSettlement.js +196 -0
  371. package/dist/internal/routes/EvmTransferSettlement.js.map +1 -0
  372. package/dist/internal/routes/Policy.d.ts +161 -0
  373. package/dist/internal/routes/Policy.d.ts.map +1 -0
  374. package/dist/internal/routes/Policy.js +249 -0
  375. package/dist/internal/routes/Policy.js.map +1 -0
  376. package/dist/internal/routes/Provider.d.ts +66 -3
  377. package/dist/internal/routes/Provider.d.ts.map +1 -1
  378. package/dist/internal/routes/Provider.js +106 -27
  379. package/dist/internal/routes/Provider.js.map +1 -1
  380. package/dist/internal/routes/Quota.d.ts +57 -0
  381. package/dist/internal/routes/Quota.d.ts.map +1 -0
  382. package/dist/internal/routes/Quota.js +144 -0
  383. package/dist/internal/routes/Quota.js.map +1 -0
  384. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  385. package/dist/internal/routes/Reconciliation.js +163 -47
  386. package/dist/internal/routes/Reconciliation.js.map +1 -1
  387. package/dist/internal/routes/SolanaTransferSettlement.d.ts +12 -0
  388. package/dist/internal/routes/SolanaTransferSettlement.d.ts.map +1 -0
  389. package/dist/internal/routes/SolanaTransferSettlement.js +220 -0
  390. package/dist/internal/routes/SolanaTransferSettlement.js.map +1 -0
  391. package/dist/internal/routes/SolanaTransferSubsidy.d.ts +172 -0
  392. package/dist/internal/routes/SolanaTransferSubsidy.d.ts.map +1 -0
  393. package/dist/internal/routes/SolanaTransferSubsidy.js +564 -0
  394. package/dist/internal/routes/SolanaTransferSubsidy.js.map +1 -0
  395. package/dist/internal/routes/Subsidy.d.ts +2 -2
  396. package/dist/internal/routes/Subsidy.d.ts.map +1 -1
  397. package/dist/internal/routes/Subsidy.js +2 -2
  398. package/dist/internal/routes/Subsidy.js.map +1 -1
  399. package/dist/internal/routes/Transfer.d.ts +229 -1
  400. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  401. package/dist/internal/routes/Transfer.js +644 -7
  402. package/dist/internal/routes/Transfer.js.map +1 -1
  403. package/dist/internal/routes/TransferReconciliation.d.ts +6 -0
  404. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -1
  405. package/dist/internal/routes/TransferReconciliation.js +83 -159
  406. package/dist/internal/routes/TransferReconciliation.js.map +1 -1
  407. package/dist/internal/routes/TransferSettlement.d.ts +45 -0
  408. package/dist/internal/routes/TransferSettlement.d.ts.map +1 -0
  409. package/dist/internal/routes/TransferSettlement.js +2 -0
  410. package/dist/internal/routes/TransferSettlement.js.map +1 -0
  411. package/dist/internal/routes/TransferSubsidy.d.ts +23 -8
  412. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -1
  413. package/dist/internal/routes/TransferSubsidy.js +64 -5
  414. package/dist/internal/routes/TransferSubsidy.js.map +1 -1
  415. package/dist/internal/routes/TronTransferSettlement.d.ts +12 -0
  416. package/dist/internal/routes/TronTransferSettlement.d.ts.map +1 -0
  417. package/dist/internal/routes/TronTransferSettlement.js +201 -0
  418. package/dist/internal/routes/TronTransferSettlement.js.map +1 -0
  419. package/dist/internal/routes/TronTransferSubsidy.d.ts +174 -0
  420. package/dist/internal/routes/TronTransferSubsidy.d.ts.map +1 -0
  421. package/dist/internal/routes/TronTransferSubsidy.js +439 -0
  422. package/dist/internal/routes/TronTransferSubsidy.js.map +1 -0
  423. package/dist/internal/routes/index.d.ts +3 -0
  424. package/dist/internal/routes/index.d.ts.map +1 -1
  425. package/dist/internal/routes/index.js +3 -0
  426. package/dist/internal/routes/index.js.map +1 -1
  427. package/dist/internal/routes/providers/across.d.ts +3 -0
  428. package/dist/internal/routes/providers/across.d.ts.map +1 -1
  429. package/dist/internal/routes/providers/across.js +11 -0
  430. package/dist/internal/routes/providers/across.js.map +1 -1
  431. package/dist/internal/routes/providers/legacyMesh.d.ts +29 -0
  432. package/dist/internal/routes/providers/legacyMesh.d.ts.map +1 -0
  433. package/dist/internal/routes/providers/legacyMesh.js +474 -0
  434. package/dist/internal/routes/providers/legacyMesh.js.map +1 -0
  435. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts +59 -0
  436. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts.map +1 -0
  437. package/dist/internal/routes/providers/legacyMeshDelivery.js +229 -0
  438. package/dist/internal/routes/providers/legacyMeshDelivery.js.map +1 -0
  439. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts +19 -0
  440. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts.map +1 -0
  441. package/dist/internal/routes/providers/legacyMeshOutbound.js +457 -0
  442. package/dist/internal/routes/providers/legacyMeshOutbound.js.map +1 -0
  443. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts +123 -0
  444. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts.map +1 -0
  445. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js +333 -0
  446. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js.map +1 -0
  447. package/dist/internal/routes/providers/propAmm.d.ts +70 -0
  448. package/dist/internal/routes/providers/propAmm.d.ts.map +1 -0
  449. package/dist/internal/routes/providers/propAmm.js +524 -0
  450. package/dist/internal/routes/providers/propAmm.js.map +1 -0
  451. package/dist/internal/routes/providers/relay.d.ts +4 -1
  452. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  453. package/dist/internal/routes/providers/relay.js +353 -42
  454. package/dist/internal/routes/providers/relay.js.map +1 -1
  455. package/dist/internal/routes/providers/rhino.d.ts +3 -0
  456. package/dist/internal/routes/providers/rhino.d.ts.map +1 -1
  457. package/dist/internal/routes/providers/rhino.js +11 -0
  458. package/dist/internal/routes/providers/rhino.js.map +1 -1
  459. package/dist/internal/routes/providers/squid.d.ts +3 -0
  460. package/dist/internal/routes/providers/squid.d.ts.map +1 -1
  461. package/dist/internal/routes/providers/squid.js +19 -0
  462. package/dist/internal/routes/providers/squid.js.map +1 -1
  463. package/dist/internal/routes/providers/stargate.d.ts.map +1 -1
  464. package/dist/internal/routes/providers/stargate.js +22 -9
  465. package/dist/internal/routes/providers/stargate.js.map +1 -1
  466. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -1
  467. package/dist/internal/routes/providers/symbiosis.js +13 -17
  468. package/dist/internal/routes/providers/symbiosis.js.map +1 -1
  469. package/dist/providers/index.d.ts +14 -0
  470. package/dist/providers/index.d.ts.map +1 -1
  471. package/dist/providers/index.js +6 -0
  472. package/dist/providers/index.js.map +1 -1
  473. package/package.json +16 -6
  474. package/src/ApiKey.ts +7 -3
  475. package/src/ApiKeys.test.ts +652 -8
  476. package/src/ApiKeys.ts +191 -11
  477. package/src/App.test.ts +405 -18
  478. package/src/App.ts +51 -15
  479. package/src/Client.test-d.ts +157 -10
  480. package/src/Client.test.ts +4 -4
  481. package/src/Scope.ts +1 -2
  482. package/src/admin/App.ts +11 -5
  483. package/src/admin/apps/api-keys.test.ts +98 -2
  484. package/src/admin/apps/api-keys.ts +21 -12
  485. package/src/admin/apps/earn-vaults.test.ts +76 -7
  486. package/src/admin/apps/earn-vaults.ts +47 -8
  487. package/src/admin/apps/organizations.test.ts +147 -31
  488. package/src/admin/apps/organizations.ts +5 -4
  489. package/src/admin/apps/route-policies.test.ts +220 -0
  490. package/src/admin/apps/route-policies.ts +322 -0
  491. package/src/admin/apps/routes-support.test.ts +107 -2
  492. package/src/admin/apps/routes-support.ts +43 -3
  493. package/src/admin/apps/routes.test.ts +150 -0
  494. package/src/admin/apps/routes.ts +97 -1
  495. package/src/admin/apps/scopes.test.ts +1 -1
  496. package/src/admin/apps/verified-tokens.test.ts +32 -0
  497. package/src/admin/apps/verified-tokens.ts +30 -4
  498. package/src/admin/index.ts +0 -1
  499. package/src/admin/ui/plugin.ts +2 -1
  500. package/src/admin/ui/src/components/Dialog.tsx +1 -1
  501. package/src/admin/ui/src/components/EarnVaultForm.tsx +45 -0
  502. package/src/admin/ui/src/components/RoutePicker.tsx +79 -0
  503. package/src/admin/ui/src/lib/earn-vaults.ts +1 -1
  504. package/src/admin/ui/src/lib/route-policies.test.ts +452 -0
  505. package/src/admin/ui/src/lib/route-policies.ts +232 -0
  506. package/src/admin/ui/src/lib/routes.ts +34 -0
  507. package/src/admin/ui/src/lib/verified-tokens.ts +24 -9
  508. package/src/admin/ui/src/routeTree.gen.ts +21 -0
  509. package/src/admin/ui/src/routes/__root.tsx +1 -1
  510. package/src/admin/ui/src/routes/api-keys.tsx +21 -2
  511. package/src/admin/ui/src/routes/early-access.tsx +1 -0
  512. package/src/admin/ui/src/routes/earn.vaults.tsx +1 -0
  513. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +22 -0
  514. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +10 -0
  515. package/src/admin/ui/src/routes/organizations.tsx +35 -4
  516. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +18 -3
  517. package/src/admin/ui/src/routes/route-policies.tsx +678 -0
  518. package/src/admin/ui/src/routes/routes.tsx +85 -2
  519. package/src/admin/ui/src/routes/routes_.support.tsx +6 -22
  520. package/src/admin/ui/src/routes/subsidies.tsx +1 -0
  521. package/src/admin/ui/src/routes/verified-tokens.tsx +65 -20
  522. package/src/admin/ui.generated.ts +99 -104
  523. package/src/analytics/Analytics.test.ts +4 -50
  524. package/src/analytics/Analytics.ts +65 -1
  525. package/src/analytics/tables/requestEvents.test.ts +402 -1
  526. package/src/analytics/tables/requestEvents.ts +62 -93
  527. package/src/apps/data/App.test.ts +26 -0
  528. package/src/apps/data/routes/activities.test.ts +315 -14
  529. package/src/apps/data/routes/activities.ts +60 -0
  530. package/src/apps/data/routes/balances.ts +5 -7
  531. package/src/apps/data/routes/earn.bench.ts +18 -0
  532. package/src/apps/data/routes/earn.local.test.ts +507 -0
  533. package/src/apps/data/routes/earn.test.ts +405 -127
  534. package/src/apps/data/routes/earn.ts +660 -270
  535. package/src/apps/data/routes/exchanges.bench.ts +3 -1
  536. package/src/apps/data/routes/exchanges.test.ts +166 -2
  537. package/src/apps/data/routes/exchanges.ts +308 -101
  538. package/src/apps/data/routes/fee-amm.test.ts +153 -2
  539. package/src/apps/data/routes/fee-amm.ts +132 -62
  540. package/src/apps/data/routes/receipts.test.ts +21 -18
  541. package/src/apps/data/routes/rpc.test.ts +34 -2
  542. package/src/apps/data/routes/rpc.ts +47 -10
  543. package/src/apps/data/routes/tokens.provenance.test.ts +157 -0
  544. package/src/apps/data/routes/tokens.test.ts +4 -4
  545. package/src/apps/data/routes/tokens.ts +11 -6
  546. package/src/apps/data/routes/transactions.test.ts +29 -0
  547. package/src/apps/data/routes/transactions.ts +33 -22
  548. package/src/apps/data/routes/webhooks.scan.test.ts +29 -0
  549. package/src/apps/data/routes/webhooks.test.ts +18 -3
  550. package/src/apps/data/routes/webhooks.ts +27 -13
  551. package/src/apps/management/App.ts +4 -0
  552. package/src/apps/management/Billing.test.ts +253 -27
  553. package/src/apps/management/Billing.ts +83 -29
  554. package/src/apps/management/routes/api-keys.test.ts +1 -1
  555. package/src/apps/management/routes/api-keys.ts +85 -11
  556. package/src/apps/management/routes/billing.test.ts +68 -4
  557. package/src/apps/management/routes/cli.test.ts +370 -0
  558. package/src/apps/management/routes/cli.ts +533 -0
  559. package/src/apps/management/routes/me.test.ts +14 -4
  560. package/src/apps/management/routes/orgs.test.ts +108 -4
  561. package/src/apps/management/routes/orgs.ts +7 -2
  562. package/src/apps/management/routes/usage.test.ts +2 -2
  563. package/src/apps/management/routes/verified-token-requests.test.ts +16 -2
  564. package/src/apps/management/routes/verified-token-requests.ts +7 -10
  565. package/src/apps/mcp.test.ts +108 -25
  566. package/src/apps/mcp.ts +15 -3
  567. package/src/apps/mpp/internal/Policy.test.ts +51 -4
  568. package/src/apps/mpp/internal/Policy.ts +6 -2
  569. package/src/apps/mpp/internal/Sponsorship.test.ts +29 -0
  570. package/src/apps/mpp/internal/Sponsorship.ts +6 -4
  571. package/src/apps/relay/App.test.ts +85 -1
  572. package/src/apps/relay/App.ts +28 -4
  573. package/src/apps/relay/Sponsorships.test.ts +97 -1
  574. package/src/apps/relay/Sponsorships.ts +77 -66
  575. package/src/apps/routes/Access.test.ts +319 -0
  576. package/src/apps/routes/Access.ts +147 -0
  577. package/src/apps/routes/App.ts +10 -0
  578. package/src/apps/routes/routes/chains.test.ts +3 -2
  579. package/src/apps/routes/routes/deposit-addresses.test.ts +978 -34
  580. package/src/apps/routes/routes/deposit-addresses.ts +243 -32
  581. package/src/apps/routes/routes/propAmm.local.test.ts +951 -0
  582. package/src/apps/routes/routes/quotes.test.ts +81 -8
  583. package/src/apps/routes/routes/quotes.ts +109 -27
  584. package/src/apps/routes/routes/transfers.test.ts +252 -15
  585. package/src/apps/routes/routes/transfers.ts +212 -33
  586. package/src/cli/ApiKeys.test.ts +265 -0
  587. package/src/cli/ApiKeys.ts +189 -0
  588. package/src/cli/Cli.test.ts +188 -0
  589. package/src/cli/Cli.ts +280 -12
  590. package/src/cli/Credentials.test.ts +122 -0
  591. package/src/cli/Credentials.ts +144 -0
  592. package/src/cli/Spec.test.ts +133 -0
  593. package/src/cli/Spec.ts +132 -0
  594. package/src/cli/bin.test.ts +49 -0
  595. package/src/cli/bin.ts +5 -1
  596. package/src/cli/commands/auth.test.ts +138 -0
  597. package/src/cli/commands/auth.ts +254 -0
  598. package/src/cli/commands/keys.test.ts +68 -0
  599. package/src/cli/commands/keys.ts +125 -0
  600. package/src/cloudflare.ts +184 -36
  601. package/src/db/Db.test.ts +877 -0
  602. package/src/db/Db.ts +507 -1
  603. package/src/db/Schema.ts +75 -4
  604. package/src/db/tables/apiKeyAdmissions.test.ts +57 -0
  605. package/src/db/tables/apiKeyAdmissions.ts +101 -11
  606. package/src/db/tables/apiKeyOwnerTombstones.ts +2 -2
  607. package/src/db/tables/authAccounts.test.ts +30 -0
  608. package/src/db/tables/authAccounts.ts +1 -0
  609. package/src/db/tables/earnVaults.test.ts +34 -0
  610. package/src/db/tables/earnVaults.ts +17 -2
  611. package/src/db/tables/organizations.test.ts +148 -84
  612. package/src/db/tables/organizations.ts +11 -43
  613. package/src/db/tables/requestUsage.ts +13 -2
  614. package/src/db/tables/rewardCampaigns.test.ts +163 -0
  615. package/src/db/tables/rewardEligibilityAssociations.test.ts +14 -0
  616. package/src/db/tables/rewardEligibilityAssociations.ts +24 -0
  617. package/src/db/tables/rewardRuns.ts +4 -0
  618. package/src/db/tables/rewardTransactionAttempts.ts +2 -0
  619. package/src/db/tables/routesDepositAddresses.test.ts +263 -0
  620. package/src/db/tables/routesDepositAddresses.ts +118 -34
  621. package/src/db/tables/routesDeposits.test.ts +133 -0
  622. package/src/db/tables/routesDeposits.ts +47 -26
  623. package/src/db/tables/routesIdempotency.test.ts +80 -0
  624. package/src/db/tables/routesIdempotency.ts +2 -0
  625. package/src/db/tables/routesPolicies.test.ts +143 -0
  626. package/src/db/tables/routesPolicies.ts +251 -0
  627. package/src/db/tables/routesTransferSubsidies.ts +64 -0
  628. package/src/db/tables/routesTransferSubsidyNonces.ts +16 -4
  629. package/src/db/tables/routesTransfers.test.ts +183 -2
  630. package/src/db/tables/routesTransfers.ts +65 -6
  631. package/src/db/tables/sponsoredTransactions.test.ts +351 -76
  632. package/src/db/tables/sponsoredTransactions.ts +182 -38
  633. package/src/db/tables/users.test.ts +51 -0
  634. package/src/db/tables/users.ts +12 -0
  635. package/src/db/tables/verifiedTokenRequests.test.ts +39 -20
  636. package/src/db/tables/verifiedTokenRequests.ts +80 -44
  637. package/src/handlers/internal/multisig.store.test.ts +120 -0
  638. package/src/handlers/internal/multisig.test.ts +389 -0
  639. package/src/handlers/internal/multisig.ts +13 -10
  640. package/src/handlers/relay.test.ts +259 -83
  641. package/src/handlers/relay.ts +36 -17
  642. package/src/internal/Auth.test.ts +383 -8
  643. package/src/internal/Auth.ts +272 -99
  644. package/src/internal/BetterAuth.test.ts +58 -22
  645. package/src/internal/BetterAuth.ts +23 -17
  646. package/src/internal/Cache.ts +3 -1
  647. package/src/internal/CliAuth.test.ts +279 -0
  648. package/src/internal/CliAuth.ts +319 -0
  649. package/src/internal/EarnSharePrices.test.ts +25 -0
  650. package/src/internal/EarnSharePrices.ts +9 -2
  651. package/src/internal/EarnVaults.test.ts +67 -0
  652. package/src/internal/EarnVaults.ts +299 -4
  653. package/src/internal/EarnWithdrawals.test.ts +315 -0
  654. package/src/internal/EarnWithdrawals.ts +266 -0
  655. package/src/internal/ExecutionContext.ts +31 -0
  656. package/src/internal/Log.test.ts +210 -0
  657. package/src/internal/Log.ts +180 -142
  658. package/src/internal/MetricSink.test.ts +190 -15
  659. package/src/internal/MetricSink.ts +27 -1
  660. package/src/internal/RateLimit.test.ts +144 -8
  661. package/src/internal/RateLimit.ts +254 -26
  662. package/src/internal/Store.ts +4 -5
  663. package/src/internal/Timing.test.ts +32 -0
  664. package/src/internal/Timing.ts +20 -1
  665. package/src/internal/Tron.test-d.ts +22 -0
  666. package/src/internal/Tron.test.ts +94 -0
  667. package/src/internal/Tron.ts +289 -0
  668. package/src/internal/Viem.rpc.test.ts +76 -0
  669. package/src/internal/Viem.ts +29 -6
  670. package/src/internal/rewards/Read.test.ts +109 -0
  671. package/src/internal/rewards/Read.ts +13 -4
  672. package/src/internal/routes/Action.test.ts +70 -0
  673. package/src/internal/routes/Action.ts +76 -1
  674. package/src/internal/routes/Chain.test.ts +18 -0
  675. package/src/internal/routes/Chain.ts +5 -0
  676. package/src/internal/routes/DepositAddress.ts +5 -0
  677. package/src/internal/routes/Evidence.test.ts +64 -0
  678. package/src/internal/routes/Evidence.ts +11 -3
  679. package/src/internal/routes/EvmTransferSettlement.ts +213 -0
  680. package/src/internal/routes/Policy.test.ts +316 -0
  681. package/src/internal/routes/Policy.ts +399 -0
  682. package/src/internal/routes/Provider.test.ts +103 -2
  683. package/src/internal/routes/Provider.ts +149 -27
  684. package/src/internal/routes/Quota.test.ts +149 -0
  685. package/src/internal/routes/Quota.ts +226 -0
  686. package/src/internal/routes/Reconciliation.local.test.ts +285 -0
  687. package/src/internal/routes/Reconciliation.test.ts +371 -13
  688. package/src/internal/routes/Reconciliation.ts +193 -42
  689. package/src/internal/routes/SolanaTransferSettlement.ts +232 -0
  690. package/src/internal/routes/SolanaTransferSubsidy.test.ts +471 -0
  691. package/src/internal/routes/SolanaTransferSubsidy.ts +760 -0
  692. package/src/internal/routes/SourceObservation.test.ts +221 -0
  693. package/src/internal/routes/Subsidy.local.test.ts +46 -0
  694. package/src/internal/routes/Subsidy.ts +4 -2
  695. package/src/internal/routes/Transfer.solana.test.ts +389 -0
  696. package/src/internal/routes/Transfer.test.ts +130 -1
  697. package/src/internal/routes/Transfer.tron.test.ts +172 -0
  698. package/src/internal/routes/Transfer.ts +866 -8
  699. package/src/internal/routes/TransferReconciliation.test.ts +26 -4
  700. package/src/internal/routes/TransferReconciliation.ts +91 -166
  701. package/src/internal/routes/TransferSettlement.ts +48 -0
  702. package/src/internal/routes/TransferSubsidy.local.test.ts +143 -0
  703. package/src/internal/routes/TransferSubsidy.test.ts +34 -4
  704. package/src/internal/routes/TransferSubsidy.ts +87 -12
  705. package/src/internal/routes/TronTransferSettlement.ts +212 -0
  706. package/src/internal/routes/TronTransferSubsidy.test.ts +109 -0
  707. package/src/internal/routes/TronTransferSubsidy.ts +619 -0
  708. package/src/internal/routes/index.test.ts +3 -0
  709. package/src/internal/routes/index.ts +3 -0
  710. package/src/internal/routes/providers/across.ts +13 -0
  711. package/src/internal/routes/providers/index.test.ts +141 -0
  712. package/src/internal/routes/providers/legacyMesh.test.ts +484 -0
  713. package/src/internal/routes/providers/legacyMesh.ts +633 -0
  714. package/src/internal/routes/providers/legacyMeshDelivery.test.ts +306 -0
  715. package/src/internal/routes/providers/legacyMeshDelivery.ts +320 -0
  716. package/src/internal/routes/providers/legacyMeshOutbound.test.ts +401 -0
  717. package/src/internal/routes/providers/legacyMeshOutbound.ts +566 -0
  718. package/src/internal/routes/providers/legacyMeshOutboundDelivery.ts +473 -0
  719. package/src/internal/routes/providers/propAmm.ts +640 -0
  720. package/src/internal/routes/providers/relay.test.ts +1299 -18
  721. package/src/internal/routes/providers/relay.ts +424 -39
  722. package/src/internal/routes/providers/rhino.ts +14 -1
  723. package/src/internal/routes/providers/squid.ts +21 -0
  724. package/src/internal/routes/providers/stargate.test.ts +105 -1
  725. package/src/internal/routes/providers/stargate.ts +22 -9
  726. package/src/internal/routes/providers/symbiosis.ts +13 -47
  727. package/src/providers/index.test.ts +2 -0
  728. package/src/providers/index.ts +18 -0
  729. package/dist/admin/Access.d.ts +0 -39
  730. package/dist/admin/Access.d.ts.map +0 -1
  731. package/dist/admin/Access.js +0 -73
  732. package/dist/admin/Access.js.map +0 -1
  733. package/src/admin/Access.test.ts +0 -130
  734. package/src/admin/Access.ts +0 -85
@@ -1,11 +1,11 @@
1
1
  import { Hono } from 'hono'
2
2
  import * as z from 'zod/mini'
3
- import { base, mainnet } from 'viem/chains'
4
3
  import { tempo } from 'viem/tempo/chains'
5
4
 
6
5
  import * as Db from '../../db/Db.js'
7
6
  import * as OpenApi from '../../internal/OpenApi.js'
8
7
  import * as RoutesCatalog from '../../internal/routes/Catalog.js'
8
+ import * as RoutesTransferSubsidy from '../../internal/routes/TransferSubsidy.js'
9
9
  import type * as App from '../App.js'
10
10
 
11
11
  /** Zod schemas owned by the admin route support matrix. */
@@ -159,6 +159,7 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
159
159
  const rows = new Map<string, Row>()
160
160
  for (const providerRoute of routes) {
161
161
  const { capabilities, providerId, route } = providerRoute
162
+ if (!isPartnerRoute(route)) continue
162
163
  const id = `${route.source.chain.id}/${route.source.slug}-${route.destination.chain.id}/${route.destination.slug}`
163
164
  const row = rows.get(id) ?? {
164
165
  depositAddressProviders: [],
@@ -183,8 +184,11 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
183
184
  row.walletTransferProviders.push({ modes: [...capabilities.transfer.modes], providerId })
184
185
  row.subsidies.walletTransfer ||=
185
186
  capabilities.transfer.modes.includes('exactSource') &&
186
- route.source.chain.id === `eip155:${tempo.id}` &&
187
- [`eip155:${base.id}`, `eip155:${mainnet.id}`].includes(route.destination.chain.id) &&
187
+ RoutesTransferSubsidy.supportsRoute({
188
+ destinationChainId: route.destination.chain.id,
189
+ sourceChainId: route.source.chain.id,
190
+ tempoChainId: tempo.id,
191
+ }) &&
188
192
  usdPair
189
193
  }
190
194
  rows.set(id, row)
@@ -192,6 +196,42 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
192
196
  return [...rows.values()]
193
197
  }
194
198
 
199
+ function isPartnerRoute(route: RoutesCatalog.ProviderRoute['route']) {
200
+ const { destination, source } = route
201
+ if (destination.chain.slug === 'tempo') {
202
+ if (source.chain.slug === 'tempo') return false
203
+ if (source.slug === 'usdc') {
204
+ if (['pathusd', 'whishusd'].includes(destination.slug)) return true
205
+ return (
206
+ ['base', 'ethereum', 'solana'].includes(source.chain.slug) &&
207
+ ['ousd', 'usdce', 'usdt0'].includes(destination.slug)
208
+ )
209
+ }
210
+ return (
211
+ source.chain.slug === 'tron' &&
212
+ source.slug === 'usdt' &&
213
+ ['ousd', 'pathusd', 'usdce', 'usdt0', 'whishusd'].includes(destination.slug)
214
+ )
215
+ }
216
+
217
+ if (source.chain.slug !== 'tempo') return false
218
+ if (destination.chain.slug === 'tempo') return false
219
+ if (destination.slug === 'usdc') {
220
+ if (['pathusd', 'whishusd'].includes(source.slug)) return true
221
+ if (source.slug === 'usdt0')
222
+ return ['base', 'ethereum', 'solana'].includes(destination.chain.slug)
223
+ return (
224
+ ['ousd', 'usdce'].includes(source.slug) &&
225
+ ['base', 'ethereum', 'solana'].includes(destination.chain.slug)
226
+ )
227
+ }
228
+ return (
229
+ destination.chain.slug === 'tron' &&
230
+ destination.slug === 'usdt' &&
231
+ ['ousd', 'pathusd', 'usdce', 'usdt0', 'whishusd'].includes(source.slug)
232
+ )
233
+ }
234
+
195
235
  function pickChain(chain: RoutesCatalog.ProviderRoute['route']['source']['chain']) {
196
236
  return { id: chain.id, name: chain.name, slug: chain.slug }
197
237
  }
@@ -137,6 +137,127 @@ describe('GET /routes/transfers/:id', () => {
137
137
  ])
138
138
  expect(body).not.toHaveProperty('providerState')
139
139
  })
140
+
141
+ test.each([
142
+ { provider: 'relay', requestId: `0x${'ab'.repeat(32)}`, expected: [`0x${'ab'.repeat(32)}`] },
143
+ { provider: 'stargate', requestId: `0x${'ab'.repeat(32)}`, expected: [] },
144
+ { provider: 'relay', requestId: undefined, expected: [] },
145
+ { provider: 'relay', requestId: 42, expected: [] },
146
+ ])(
147
+ 'exposes only Relay request identifiers: $provider/$requestId',
148
+ async ({ provider, requestId, expected }) => {
149
+ const { client, db } = TestAdmin.setup()
150
+ const { organization, project } = await seedAttribution(db)
151
+ const record = await Transfer.create(db, {
152
+ apiKeyId: 'key_admin_routes',
153
+ environment: 'production',
154
+ orgId: organization.id,
155
+ projectId: project.id,
156
+ providerState: { checkEndpoint: '/private/check', requestId, secret: 'hidden' },
157
+ snapshot: TestRoutes.transferSnapshot({ provider: { id: provider, name: provider } }),
158
+ })
159
+
160
+ const response = await client.routes.transfers[':id'].$get({ param: { id: record.id } })
161
+ const body = await response.json()
162
+ expect(response.status).toBe(200)
163
+ expect(body).toHaveProperty('providerRequestIds', expected)
164
+ expect(body).not.toHaveProperty('providerState')
165
+ expect(JSON.stringify(body)).not.toContain('/private/check')
166
+ expect(JSON.stringify(body)).not.toContain('hidden')
167
+ },
168
+ )
169
+ })
170
+
171
+ describe('POST /routes/transfers/:id/retry', () => {
172
+ test('returns an action-required transfer to processing and records the event', async () => {
173
+ const { client, db } = TestAdmin.setup()
174
+ const { organization, project } = await seedAttribution(db)
175
+ const record = await seedActionRequiredTransfer(db, organization.id, project.id)
176
+
177
+ const response = await client.routes.transfers[':id'].retry.$post({
178
+ json: { version: record.version },
179
+ param: { id: record.id },
180
+ })
181
+ const body = await TestApp.json(response, AdminRoutes.schema.retryRoutesTransfer.Response)
182
+
183
+ expect(response.status).toBe(200)
184
+ expect(body).toMatchObject({ id: record.id, status: 'processing', version: record.version + 1 })
185
+ expect(body).not.toHaveProperty('statusReason')
186
+ const detail = await client.routes.transfers[':id'].$get({ param: { id: record.id } })
187
+ const { events } = await TestApp.json(detail, AdminRoutes.schema.getRoutesTransfer.Response)
188
+ expect(events.map(({ status }) => status)).toEqual([
189
+ 'awaiting-source',
190
+ 'processing',
191
+ 'action-required',
192
+ 'processing',
193
+ ])
194
+ })
195
+
196
+ test('rejects a stale version', async () => {
197
+ const { client, db } = TestAdmin.setup()
198
+ const { organization, project } = await seedAttribution(db)
199
+ const record = await seedActionRequiredTransfer(db, organization.id, project.id)
200
+
201
+ const response = await client.routes.transfers[':id'].retry.$post({
202
+ json: { version: record.version - 1 },
203
+ param: { id: record.id },
204
+ })
205
+
206
+ expect(response.status).toBe(409)
207
+ expect(await response.json()).toMatchObject({ error: { code: 'version_conflict' } })
208
+ })
209
+
210
+ test('rejects a transfer that is not action-required', async () => {
211
+ const { client, db } = TestAdmin.setup()
212
+ const { organization, project } = await seedAttribution(db)
213
+ const { record } = await seedTransfer(db, organization.id, project.id)
214
+
215
+ const response = await client.routes.transfers[':id'].retry.$post({
216
+ json: { version: record.version + 1 },
217
+ param: { id: record.id },
218
+ })
219
+
220
+ expect(response.status).toBe(409)
221
+ expect(await response.json()).toMatchObject({
222
+ error: { code: 'routes_transfer_not_retryable' },
223
+ })
224
+ })
225
+
226
+ test.each([
227
+ { providerState: { transferSubsidy: { hash: `0x${'cd'.repeat(32)}` } } },
228
+ { providerState: { solanaTransferSubsidyPrepared: '{}' } },
229
+ { providerState: { tronTransferSubsidyPrepared: '{}' } },
230
+ ])(
231
+ 'rejects a transfer with a prepared or signed subsidy: $providerState',
232
+ async ({ providerState }) => {
233
+ const { client, db } = TestAdmin.setup()
234
+ const { organization, project } = await seedAttribution(db)
235
+ const record = await seedActionRequiredTransfer(db, organization.id, project.id, {
236
+ providerState,
237
+ })
238
+
239
+ const response = await client.routes.transfers[':id'].retry.$post({
240
+ json: { version: record.version },
241
+ param: { id: record.id },
242
+ })
243
+
244
+ expect(response.status).toBe(409)
245
+ expect(await response.json()).toMatchObject({
246
+ error: { code: 'routes_transfer_subsidy_pending' },
247
+ })
248
+ },
249
+ )
250
+
251
+ test('returns 404 for an unknown transfer', async () => {
252
+ const { client } = TestAdmin.setup()
253
+
254
+ const response = await client.routes.transfers[':id'].retry.$post({
255
+ json: { version: 1 },
256
+ param: { id: 'rtr_001785792000000_2ZPE2gvateYEQ0dQslgvkhjx' },
257
+ })
258
+
259
+ expect(response.status).toBe(404)
260
+ })
140
261
  })
141
262
 
142
263
  describe('GET /routes/deposit-addresses', () => {
@@ -371,6 +492,35 @@ async function seedTransfer(db: Db.Db, orgId: string, projectId: string) {
371
492
  return { record, transactionRef }
372
493
  }
373
494
 
495
+ async function seedActionRequiredTransfer(
496
+ db: Db.Db,
497
+ orgId: string,
498
+ projectId: string,
499
+ options: seedActionRequiredTransfer.Options = {},
500
+ ) {
501
+ const { record } = await seedTransfer(db, orgId, projectId)
502
+ const result = await Transfer.transition(db, {
503
+ expectedVersion: record.version + 1,
504
+ id: record.id,
505
+ ...(options.providerState ? { providerState: options.providerState } : {}),
506
+ status: 'action-required',
507
+ statusReason: {
508
+ code: 'subsidy_failed',
509
+ message: 'Destination subsidy settlement is unavailable.',
510
+ },
511
+ })
512
+ if (result.type !== 'applied') throw new Error('Failed to seed action-required transfer.')
513
+ return result.record
514
+ }
515
+
516
+ declare namespace seedActionRequiredTransfer {
517
+ /** Private state attached while entering `action-required`. */
518
+ type Options = {
519
+ /** Replacement provider state, such as a persisted subsidy transaction. */
520
+ providerState?: Transfer.ProviderState | undefined
521
+ }
522
+ }
523
+
374
524
  async function seedDeposit(
375
525
  db: Db.Db,
376
526
  orgId: string,
@@ -13,6 +13,7 @@ import * as Cursor from '../../internal/Cursor.js'
13
13
  import * as Deposit from '../../internal/routes/Deposit.js'
14
14
  import * as DepositAddress from '../../internal/routes/DepositAddress.js'
15
15
  import * as Provider from '../../internal/routes/Provider.js'
16
+ import * as Observability from '../../internal/routes/Observability.js'
16
17
  import * as Transfer from '../../internal/routes/Transfer.js'
17
18
  import * as OpenApi from '../../internal/OpenApi.js'
18
19
  import * as Response from '../../internal/Response.js'
@@ -323,6 +324,7 @@ export namespace schema {
323
324
  }),
324
325
  )
325
326
  .check(z.describe('Material lifecycle events, oldest first.')),
327
+ providerRequestIds: correlationIds,
326
328
  transactions: z
327
329
  .array(
328
330
  z.object({
@@ -344,6 +346,24 @@ export namespace schema {
344
346
  )
345
347
  }
346
348
 
349
+ /** Schemas for retrying one stuck route transfer. */
350
+ export namespace retryRoutesTransfer {
351
+ /** Transfer path parameters. */
352
+ export const Params = getRoutesTransfer.Params
353
+
354
+ /** Expected transfer version. */
355
+ export const Body = z
356
+ .strictObject({
357
+ version: z
358
+ .number()
359
+ .check(z.int(), z.minimum(1), z.describe('Transfer version the operator reviewed.'), z.meta({ examples: [22] })), // prettier-ignore
360
+ })
361
+ .check(z.describe('Route transfer retry request.'))
362
+
363
+ /** Retried route transfer, back in `processing`. */
364
+ export const Response = RoutesTransfer
365
+ }
366
+
347
367
  /** Schemas for listing deposit addresses. */
348
368
  export namespace listRoutesDepositAddresses {
349
369
  /** Deposit-address filters and pagination. */
@@ -438,7 +458,7 @@ export namespace schema {
438
458
  }
439
459
  }
440
460
 
441
- /** Read-only routes operations for authenticated administrators. */
461
+ /** Routes operations for authenticated administrators. */
442
462
  export function routes() {
443
463
  return new Hono<App.Environment>()
444
464
  .get(
@@ -601,6 +621,12 @@ export function routes() {
601
621
  ...(event.snapshot.statusReason ? { statusReason: event.snapshot.statusReason } : {}),
602
622
  version: event.version,
603
623
  })),
624
+ providerRequestIds:
625
+ record.snapshot.provider.id === 'relay' &&
626
+ typeof record.providerState?.['requestId'] === 'string' &&
627
+ record.providerState['requestId'].length > 0
628
+ ? [record.providerState['requestId']]
629
+ : [],
604
630
  transactions: transactions.map(({ chainId, createdAt, role, transactionRef }) => ({
605
631
  chainId,
606
632
  createdAt,
@@ -612,6 +638,76 @@ export function routes() {
612
638
  )
613
639
  },
614
640
  )
641
+ .post(
642
+ '/transfers/:id/retry',
643
+ OpenApi.validate('param', schema.retryRoutesTransfer.Params, {
644
+ code: 'param_invalid',
645
+ message: 'Invalid path parameters',
646
+ }),
647
+ OpenApi.validate('json', schema.retryRoutesTransfer.Body, {
648
+ code: 'body_invalid',
649
+ message: 'Invalid request body',
650
+ }),
651
+ OpenApi.describeRoute({
652
+ operationId: 'retryAdminRoutesTransfer',
653
+ responses: OpenApi.responses({
654
+ errors: {
655
+ 404: 'Route transfer not found.',
656
+ 409: 'Route transfer changed or cannot be retried.',
657
+ },
658
+ success: {
659
+ description: 'The retried route transfer.',
660
+ schema: schema.retryRoutesTransfer.Response,
661
+ },
662
+ }),
663
+ summary: 'Retry route transfer',
664
+ tags: ['Routes'],
665
+ }),
666
+ async (c) => {
667
+ const db = Db.get(c.get('db'))
668
+ // The worker's reconciliation sweep dispatches every `processing` transfer on its next tick.
669
+ const result = await Transfer.retry(db, {
670
+ expectedVersion: c.req.valid('json').version,
671
+ id: c.req.valid('param').id,
672
+ })
673
+ if (result.type === 'not_found')
674
+ return Response.error(c, {
675
+ code: 'routes_transfer_not_found',
676
+ message: 'Route transfer not found.',
677
+ status: 404,
678
+ })
679
+ if (result.type === 'stale')
680
+ return Response.error(c, {
681
+ code: 'version_conflict',
682
+ message: 'Route transfer version is stale.',
683
+ status: 409,
684
+ })
685
+ if (result.type === 'invalid')
686
+ return Response.error(c, {
687
+ code: 'routes_transfer_not_retryable',
688
+ message: 'Only action-required transfers can be retried.',
689
+ status: 409,
690
+ })
691
+ if (result.type === 'subsidy_pending')
692
+ return Response.error(c, {
693
+ code: 'routes_transfer_subsidy_pending',
694
+ message: 'Route transfer has a prepared or signed subsidy; verify it on chain first.',
695
+ status: 409,
696
+ })
697
+ Observability.recordTransfer(c.get('metrics'), {
698
+ previous: result.previous,
699
+ record: result.record,
700
+ })
701
+ const attribution = await loadAttribution(db, [result.record])
702
+ return c.json(
703
+ Response.validated(
704
+ schema.retryRoutesTransfer.Response,
705
+ serializeTransfer(result.record, attribution),
706
+ ),
707
+ 200,
708
+ )
709
+ },
710
+ )
615
711
  .get(
616
712
  '/deposit-addresses',
617
713
  OpenApi.validate('query', schema.listRoutesDepositAddresses.Query, {
@@ -55,7 +55,7 @@ describe('GET /scopes', () => {
55
55
  "selfServe": false,
56
56
  },
57
57
  {
58
- "description": "Legacy reward eligibility write scope retained for existing keys; registration requires wildcard access.",
58
+ "description": "Register wallet and Earn vault reward eligibility associations.",
59
59
  "scope": "rewards:write",
60
60
  "selfServe": false,
61
61
  },
@@ -390,6 +390,38 @@ describe('GET /verified-tokens/requests', () => {
390
390
  const reviewedBody = await TestApp.json(reviewed, Verified.schema.listVerifiedTokenRequests.Response) // prettier-ignore
391
391
  expect(reviewedBody.data.map(({ id }) => id)).toEqual([denied!.id])
392
392
  })
393
+
394
+ test('paginates maximum-size queue rows five at a time', async () => {
395
+ const { client, db } = TestAdmin.setup()
396
+ const logo = `<svg>${'x'.repeat(256 * 1024 - 11)}</svg>`
397
+ for (let index = 1; index <= 6; index++)
398
+ await VerifiedTokenRequests.create(db, {
399
+ ...requestInput,
400
+ address: `0x${index.toString(16).padStart(40, '0')}`,
401
+ logo,
402
+ symbol: `T${index}`,
403
+ })
404
+
405
+ const firstResponse = await client['verified-tokens'].requests.$get({ query: { limit: '50' } })
406
+ const first = await TestApp.json(
407
+ firstResponse,
408
+ Verified.schema.listVerifiedTokenRequests.Response,
409
+ )
410
+ expect(first.data).toHaveLength(5)
411
+ expect(first.data.every((request) => request.logo?.length === 256 * 1024)).toBe(true)
412
+ expect(first.nextCursor).toEqual(expect.any(String))
413
+
414
+ const secondResponse = await client['verified-tokens'].requests.$get({
415
+ query: { cursor: first.nextCursor!, limit: '50' },
416
+ })
417
+ const second = await TestApp.json(
418
+ secondResponse,
419
+ Verified.schema.listVerifiedTokenRequests.Response,
420
+ )
421
+ expect(second.data).toHaveLength(1)
422
+ expect(second.nextCursor).toBeNull()
423
+ expect(new Set([...first.data, ...second.data].map(({ id }) => id)).size).toBe(6)
424
+ })
393
425
  })
394
426
 
395
427
  describe('POST /verified-tokens/requests/:requestId/approve', () => {
@@ -2,6 +2,7 @@ import { type Context, Hono } from 'hono'
2
2
  import * as z from 'zod/mini'
3
3
 
4
4
  import * as AssetResponse from '../../internal/AssetResponse.js'
5
+ import * as Cursor from '../../internal/Cursor.js'
5
6
  import * as OpenApi from '../../internal/OpenApi.js'
6
7
  import * as Response from '../../internal/Response.js'
7
8
  import * as Schema from '../../internal/Schema.js'
@@ -15,6 +16,8 @@ import type * as App from '../App.js'
15
16
 
16
17
  /** Required `chainId` query: admin mutations always address a chain explicitly. */
17
18
  const ChainIdQuery = Schema.ChainId
19
+ /** Maximum rows per review-queue response, bounding inline SVG payloads to 1.25 MiB. */
20
+ const maxRequestPage = 5
18
21
 
19
22
  /** Zod schemas owned by the admin verified-tokens handler. */
20
23
  export namespace schema {
@@ -157,6 +160,16 @@ export namespace schema {
157
160
  /** Query parameters for the request queue. */
158
161
  export const Query = z
159
162
  .strictObject({
163
+ cursor: Schema.Cursor,
164
+ limit: z
165
+ .pipe(
166
+ Schema.Limit,
167
+ z.transform((value) => Math.min(value, maxRequestPage)),
168
+ )
169
+ .check(
170
+ z.describe(`How many requests to return (5 maximum, default ${maxRequestPage}).`),
171
+ z.meta({ examples: [maxRequestPage] }),
172
+ ),
160
173
  status: z
161
174
  ._default(z.enum(['approved', 'denied', 'pending']), 'pending')
162
175
  .check(z.describe('Review status to filter by.')),
@@ -167,8 +180,9 @@ export namespace schema {
167
180
  export const Response = Schema.describe(
168
181
  z.object({
169
182
  data: z.array(Request).check(z.describe('Requests in the selected status, oldest first.')),
183
+ nextCursor: Schema.NextCursor,
170
184
  }),
171
- 'Verified-token requests in review-queue order.',
185
+ 'A page of verified-token requests in review-queue order.',
172
186
  )
173
187
  }
174
188
 
@@ -558,14 +572,26 @@ export function verifiedTokens() {
558
572
  }),
559
573
  async (c) => {
560
574
  const db = Db.get(c.get('db'))
561
- const { status } = c.req.valid('query')
562
- const records = await VerifiedTokenRequests.listByStatus(db, status)
575
+ const { cursor, limit, status } = c.req.valid('query')
576
+ const decoded = cursor ? Cursor.decode(cursor, ['timestamp', 'id']) : undefined
577
+ const records = await VerifiedTokenRequests.listByStatus(db, status, {
578
+ ...(decoded
579
+ ? { cursor: { createdAt: String(decoded[0]), id: String(decoded[1]) } }
580
+ : {}),
581
+ limit: limit + 1,
582
+ })
583
+ const page = Cursor.paginate({
584
+ key: (record) => [record.createdAt, record.id],
585
+ limit,
586
+ rows: records,
587
+ })
563
588
  return c.json(
564
589
  Response.validated(schema.listVerifiedTokenRequests.Response, {
565
- data: records.map((record) => ({
590
+ data: page.rows.map((record) => ({
566
591
  ...VerifiedTokenRequests.toRequest(record),
567
592
  orgName: record.orgName,
568
593
  })),
594
+ nextCursor: page.nextCursor,
569
595
  }),
570
596
  )
571
597
  },
@@ -1,2 +1 @@
1
- export * as Access from './Access.js'
2
1
  export * as App from './App.js'
@@ -23,7 +23,8 @@ const outFile = path.join(here, '..', 'ui.generated.ts')
23
23
  // Total gzipped budget for the whole UI; the React + TanStack + Regen baseline
24
24
  // is heavier than a hand-rolled SPA, so fail loudly before it bloats the
25
25
  // package. Raise deliberately (and revisit code-splitting) if it trips.
26
- const maxGzipBytes = 486_000
26
+ // Includes the independently added route-policy and route-support screens.
27
+ const maxGzipBytes = 500_000
27
28
 
28
29
  const contentTypes: Record<string, string> = {
29
30
  '.css': 'text/css; charset=utf-8',
@@ -9,7 +9,7 @@ function Popup(props: { children: ReactNode; className?: string | undefined }) {
9
9
  <Base.Backdrop className="fixed inset-0 z-40 bg-black/60 transition-opacity duration-150 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0" />
10
10
  <Base.Popup
11
11
  className={cx(
12
- 'fixed left-1/2 top-1/2 z-50 w-[calc(100vw-2rem)] max-w-md -translate-x-1/2 -translate-y-1/2 border border-border bg-surface p-6 shadow-lg outline-none transition-opacity duration-150 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0',
12
+ 'fixed left-1/2 top-1/2 z-50 w-[calc(100vw-2rem)] max-w-3xl -translate-x-1/2 -translate-y-1/2 border border-border bg-surface p-6 shadow-lg outline-none transition-opacity duration-150 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0',
13
13
  props.className,
14
14
  )}
15
15
  >
@@ -30,6 +30,51 @@ export function EarnVaultForm(options: EarnVaultForm.Props) {
30
30
  }
31
31
 
32
32
  export namespace EarnVaultForm {
33
+ /** Per-vault incoming reward counterparties. */
34
+ export function Earnings(options: Earnings.Props) {
35
+ return (
36
+ <fieldset className="group flex min-w-0 flex-col gap-3 border-t border-border pt-5 max-sm:[&_textarea]:text-copy-16">
37
+ <legend className="text-label-14 text-foreground">Earnings accounting</legend>
38
+ <label className="flex items-center gap-2 text-label-13 text-foreground">
39
+ <input
40
+ className="size-5 shrink-0 sm:size-4"
41
+ defaultChecked={options.value === null}
42
+ name="inheritEarnings"
43
+ type="checkbox"
44
+ />
45
+ Use recorded campaign distributors only
46
+ </label>
47
+ <p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
48
+ Recorded campaign distributors are always included. Outgoing shares count as withdrawals
49
+ for every recipient or spender, with no configuration required.
50
+ </p>
51
+ <div className="flex flex-col gap-3 group-has-checked:hidden">
52
+ <p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
53
+ Add dedicated reward distributors for this vault. You do not need to copy recorded
54
+ campaign distributors, including historical ones.
55
+ </p>
56
+ <Textarea
57
+ defaultValue={options.value?.rewardDistributors.join('\n')}
58
+ label="Additional reward distributors"
59
+ name="rewardDistributors"
60
+ placeholder="One address per line"
61
+ rows={5}
62
+ spellCheck={false}
63
+ />
64
+ <p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
65
+ Shares received from these addresses count as earnings. Do not add card spenders or
66
+ refund handlers: returned shares could be incorrectly counted as rewards.
67
+ </p>
68
+ </div>
69
+ </fieldset>
70
+ )
71
+ }
72
+
73
+ export namespace Earnings {
74
+ /** Saved settings, or null for campaign defaults. */
75
+ export type Props = { value: EarnVaults.Vault['earnings'] }
76
+ }
77
+
33
78
  /** Props for the verified-vault form shell. */
34
79
  export type Props = {
35
80
  /** Primary form action. */
@@ -0,0 +1,79 @@
1
+ import { useState } from 'react'
2
+ import { Button, Select, cx } from 'regen-ui'
3
+
4
+ import * as Policies from '../lib/route-policies.js'
5
+
6
+ /** Adds complete catalog routes through mutually filtered network, token, and provider choices. */
7
+ export function RoutePicker(options: RoutePicker.Props) {
8
+ const [selection, setSelection] = useState<Policies.RouteSelection>({})
9
+ const rule = selection.providerId ? Policies.selectedRoute(selection) : undefined
10
+ const duplicate =
11
+ rule &&
12
+ options.selected.some((selected) =>
13
+ fields.every(({ field }) => selected[field] === rule[field]),
14
+ )
15
+ return (
16
+ <fieldset
17
+ aria-label={`Add ${options.label.toLowerCase()} route`}
18
+ className={cx('@container flex min-w-0 flex-col gap-3', options.className)}
19
+ >
20
+ <div className="grid gap-3 @sm:grid-cols-2 @3xl:grid-cols-5">
21
+ {fields.map(({ field, label, placeholder }) => (
22
+ <label
23
+ className="flex min-w-0 flex-col gap-2 text-label-12 text-foreground-secondary"
24
+ key={field}
25
+ >
26
+ {label}
27
+ <Select
28
+ aria-label={label}
29
+ className="w-full min-w-0"
30
+ items={[
31
+ { label: placeholder, value: '' },
32
+ ...Policies.routeOptions(options.routes, selection, field),
33
+ ]}
34
+ onChange={(value) =>
35
+ setSelection((current) => ({ ...current, [field]: value || undefined }))
36
+ }
37
+ value={selection[field] ?? ''}
38
+ />
39
+ </label>
40
+ ))}
41
+ </div>
42
+ <div className="flex flex-wrap items-center justify-between gap-3">
43
+ <p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
44
+ {duplicate
45
+ ? 'This route is already included.'
46
+ : 'Choose in any order. Clear a field to broaden the other choices.'}
47
+ </p>
48
+ <Button
49
+ disabled={!rule || duplicate}
50
+ onClick={() => {
51
+ if (!rule) return
52
+ options.onAdd(rule)
53
+ }}
54
+ type="button"
55
+ >
56
+ Add route
57
+ </Button>
58
+ </div>
59
+ </fieldset>
60
+ )
61
+ }
62
+
63
+ declare namespace RoutePicker {
64
+ type Props = {
65
+ className?: string | undefined
66
+ label: string
67
+ onAdd: (rule: Policies.Rule) => void
68
+ routes: Policies.Payload['routes']
69
+ selected: readonly Policies.Rule[]
70
+ }
71
+ }
72
+
73
+ const fields = [
74
+ { field: 'sourceChainId', label: 'Source network', placeholder: 'Choose network' },
75
+ { field: 'sourceTokenId', label: 'Source token', placeholder: 'Choose token' },
76
+ { field: 'destinationChainId', label: 'Destination network', placeholder: 'Choose network' },
77
+ { field: 'destinationTokenId', label: 'Destination token', placeholder: 'Choose token' },
78
+ { field: 'providerId', label: 'Provider', placeholder: 'Choose provider' },
79
+ ] as const
@@ -18,7 +18,7 @@ export type Vault = DetailResponse &
18
18
  type ListResponse = Omit<BaseListResponse, 'data'> & { data: readonly Vault[] }
19
19
 
20
20
  type InsertRequest = InferRequestType<(typeof client)['earn']['verified-vaults']['$put']>['json']
21
- const include = 'access,capabilities,zone' as const
21
+ const include = 'access,capabilities,zone,zones' as const
22
22
 
23
23
  /** A chain id managed by the Earn registry UI. */
24
24
  export type ChainId = typeof mainnet.id | typeof testnet.id