tapimo 0.15.1 → 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 (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
@@ -25,14 +25,43 @@ import {
25
25
  readContract,
26
26
  sendRawTransaction,
27
27
  } from 'viem/actions'
28
+ import { Actions } from 'viem/tempo'
28
29
 
30
+ import * as Fees from '../Fees.js'
29
31
  import * as Viem from '../Viem.js'
30
- import type * as Chain from './Chain.js'
32
+ import * as Chain from './Chain.js'
31
33
  import type * as Provider from './Provider.js'
32
34
 
35
+ /** Returns whether a wallet transfer can receive a destination subsidy. */
36
+ export function supportsRoute(options: supportsRoute.Options): boolean {
37
+ const tempo = `eip155:${options.tempoChainId}`
38
+ return (
39
+ (options.destinationChainId === tempo && options.sourceChainId !== tempo) ||
40
+ (options.sourceChainId === tempo &&
41
+ [
42
+ 'eip155:1',
43
+ 'eip155:8453',
44
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
45
+ 'tron:0x2b6653dc',
46
+ ].includes(options.destinationChainId))
47
+ )
48
+ }
49
+
50
+ export declare namespace supportsRoute {
51
+ /** Chain identifiers used to check subsidy eligibility. */
52
+ type Options = {
53
+ /** Destination CAIP-2 chain identifier. */
54
+ destinationChainId: string
55
+ /** Source CAIP-2 chain identifier. */
56
+ sourceChainId: string
57
+ /** Tempo chain configured for the application. */
58
+ tempoChainId: number
59
+ }
60
+ }
61
+
33
62
  /** Read-only destination subsidy inventory available during action creation. */
34
63
  export type Inventory = {
35
- /** Account that supplies destination USDC and native gas. */
64
+ /** Account that supplies destination tokens and transaction fees. */
36
65
  account: Address
37
66
  /** Verifies token and gas capacity without accessing signing material. */
38
67
  check(parameters: Inventory.check.Parameters): Promise<Inventory.check.Result>
@@ -75,7 +104,7 @@ export type Transaction = {
75
104
  hash: Hex.Hex
76
105
  /** EOA nonce reserved for this transaction. */
77
106
  nonce: number
78
- /** Worst-case native gas amount reserved for this transaction. */
107
+ /** Worst-case gas cost in wei, or rounded attodollars on Tempo. */
79
108
  nativeAmount?: string | undefined
80
109
  /** Signed EVM transaction bytes. */
81
110
  transaction: Hex.Hex
@@ -109,7 +138,7 @@ export function read(value: unknown): Transaction | undefined {
109
138
 
110
139
  /** Prepares and submits ERC-20 destination subsidy transactions. */
111
140
  export type Settler = {
112
- /** Account that supplies destination USDC and native gas. */
141
+ /** Account that supplies destination tokens and transaction fees. */
113
142
  account: Address
114
143
  /** Broadcasts one previously persisted signed transaction. */
115
144
  broadcast(parameters: { chain: Chain.Chain; transaction: Transaction }): Promise<void>
@@ -145,10 +174,12 @@ export declare namespace Settler {
145
174
 
146
175
  /** Inventory reserved while serializing transactions for one signer. */
147
176
  type Reservations = {
148
- /** Native gas amount promised by unsettled transactions. */
177
+ /** Gas cost promised by unsettled transactions, in wei or rounded attodollars on Tempo. */
149
178
  nativeAmount: bigint
150
179
  /** Token amount promised by unsettled transactions. */
151
180
  tokenAmount: bigint
181
+ /** Delivery commitments by lowercase token address, including tokens used for Tempo fees. */
182
+ tokenAmounts: Record<string, bigint>
152
183
  }
153
184
  }
154
185
 
@@ -220,7 +251,7 @@ export function createInventory(options: createInventory.Options): Inventory {
220
251
  export declare namespace createInventory {
221
252
  /** Dependencies for one destination subsidy inventory checker. */
222
253
  type Options = {
223
- /** EVM account funded with destination USDC and native gas. */
254
+ /** EVM account funded with destination tokens and transaction fees. */
224
255
  account: Address
225
256
  /** Fetch implementation used for destination RPC requests. */
226
257
  fetch: typeof globalThis.fetch
@@ -283,11 +314,14 @@ export function create(options: create.Options): Settler {
283
314
  throw cause
284
315
  })
285
316
  if (!receipt) return { broadcast: true, type: 'pending' }
286
- const [canonical, finalized] = await Promise.all([
317
+ const [canonical, head] = await Promise.all([
287
318
  getBlock(client, { blockNumber: receipt.blockNumber, includeTransactions: false }),
288
- getBlock(client, { blockTag: 'finalized', includeTransactions: false }),
319
+ getBlock(client, {
320
+ blockTag: Chain.settlementBlockTag(parameters.chain),
321
+ includeTransactions: false,
322
+ }),
289
323
  ])
290
- if (canonical.hash !== receipt.blockHash || receipt.blockNumber > finalized.number)
324
+ if (canonical.hash !== receipt.blockHash || receipt.blockNumber > head.number)
291
325
  return { broadcast: false, type: 'pending' }
292
326
  if (receipt.status !== 'success') return { type: 'reverted' }
293
327
  const matched = receipt.logs.some((log) => {
@@ -344,11 +378,52 @@ async function checkInventory(
344
378
  }),
345
379
  ...(parameters.nonce === undefined ? {} : { nonce: parameters.nonce }),
346
380
  to: parameters.token,
381
+ // Horcrux signs EIP-1559 envelopes; inventory and signing must estimate the same fee fields.
382
+ type: 'eip1559',
347
383
  value: 0n,
348
384
  } as never)
349
- const gasPrice = request.maxFeePerGas ?? request.gasPrice
385
+ // eth_fillTransaction can include an effective gasPrice, which is not a signed EIP-1559 fee field.
386
+ delete request.gasPrice
387
+ const gasPrice = request.maxFeePerGas
350
388
  if (request.gas === undefined || gasPrice === undefined) throw new BalanceUnavailableError()
351
389
  const nativeAmount = request.gas * gasPrice
390
+ if (parameters.chain.slug === 'tempo') {
391
+ const preferred = await Actions.fee.getUserToken(client, { account: address })
392
+ const feeToken = preferred?.address ?? parameters.token
393
+ const deliveryToken = parameters.token.toLowerCase()
394
+ const feeTokenAddress = feeToken.toLowerCase()
395
+ const sameToken = feeTokenAddress === deliveryToken
396
+ const feeBalance = sameToken
397
+ ? tokenBalance
398
+ : await readContract(client, {
399
+ abi: erc20Abi,
400
+ address: feeToken,
401
+ args: [address],
402
+ functionName: 'balanceOf',
403
+ })
404
+ const feeAmount = Fees.fromGas(request.gas, gasPrice)
405
+ // Reserve each fee cap after rounding to TIP-20 units. Native balance is a constant on Tempo.
406
+ const reservedFees = Fees.fromGas(1n, parameters.reservations.nativeAmount)
407
+ const reservedTokens = parameters.reservations.tokenAmounts[feeTokenAddress] ?? 0n
408
+ // Fee preferences can change before settlement, so each delivery token must cover pending gas.
409
+ if (
410
+ tokenBalance <
411
+ parameters.amount + parameters.reservations.tokenAmount + reservedFees + feeAmount ||
412
+ feeBalance < reservedTokens + reservedFees + feeAmount + (sameToken ? parameters.amount : 0n)
413
+ )
414
+ throw new BalanceUnavailableError()
415
+ for (const [token, amount] of Object.entries(parameters.reservations.tokenAmounts)) {
416
+ if (token === deliveryToken || token === feeTokenAddress) continue
417
+ const balance = await readContract(client, {
418
+ abi: erc20Abi,
419
+ address: token as Address,
420
+ args: [address],
421
+ functionName: 'balanceOf',
422
+ })
423
+ if (balance < amount + reservedFees + feeAmount) throw new BalanceUnavailableError()
424
+ }
425
+ return { nativeAmount: feeAmount * Fees.scalingFactor, request }
426
+ }
352
427
  if ((await getBalance(client, { address })) < nativeAmount + parameters.reservations.nativeAmount)
353
428
  throw new BalanceUnavailableError()
354
429
  return { nativeAmount, request }
@@ -357,7 +432,7 @@ async function checkInventory(
357
432
  export declare namespace create {
358
433
  /** Dependencies for one destination subsidy settler. */
359
434
  type Options = {
360
- /** EVM account funded with destination USDC and native gas. */
435
+ /** EVM account funded with destination tokens and transaction fees. */
361
436
  account: LocalAccount
362
437
  /** Fetch implementation used for destination RPC requests. */
363
438
  fetch: typeof globalThis.fetch
@@ -412,7 +487,7 @@ function isNonceTooLowBroadcastError(cause: unknown): boolean {
412
487
  return /nonce too low/i.test(message)
413
488
  }
414
489
 
415
- /** The subsidy account lacks destination token inventory or native gas. */
490
+ /** The subsidy account lacks destination token inventory or transaction fee funds. */
416
491
  export class BalanceUnavailableError extends Error {
417
492
  override name = 'Routes.TransferSubsidy.BalanceUnavailableError'
418
493
  }
@@ -0,0 +1,212 @@
1
+ import * as Value from '../Value.js'
2
+ import * as Transfer from './Transfer.js'
3
+ import type * as TransferSettlement from './TransferSettlement.js'
4
+ import * as TronTransferSubsidy from './TronTransferSubsidy.js'
5
+
6
+ const tronFinalityGraceMs = 180_000
7
+
8
+ /** Advances a persisted Tron subsidy through signing, broadcast, and finality. */
9
+ export async function settle(options: settle.Options): Promise<TransferSettlement.Result> {
10
+ let current = options.current
11
+ const existing = TronTransferSubsidy.readSigned(current.providerState?.['transferSubsidy'])
12
+ const prepared = TronTransferSubsidy.readPrepared(
13
+ current.providerState?.['tronTransferSubsidyPrepared'],
14
+ )
15
+ const terms = {
16
+ account: existing?.account ?? prepared?.account ?? current.subsidyAccount ?? '',
17
+ amount: options.deficit,
18
+ chainId: options.destinationChain.id,
19
+ recipient: current.snapshot.recipient,
20
+ token: current.snapshot.destinationToken.address,
21
+ }
22
+ if (
23
+ (existing && !TronTransferSubsidy.matchesTerms(existing, terms)) ||
24
+ (prepared && !TronTransferSubsidy.matchesTerms(prepared, terms))
25
+ ) {
26
+ options.recordSubsidy('evidence_conflict')
27
+ return {
28
+ reason: {
29
+ code: 'subsidy_failed',
30
+ message: 'Destination subsidy evidence conflicts with the verified delivery.',
31
+ },
32
+ record: current,
33
+ type: 'action-required',
34
+ }
35
+ }
36
+ const account = existing?.account ?? prepared?.account ?? current.subsidyAccount
37
+ const settler = existing
38
+ ? options.settlers?.[0]
39
+ : options.settlers?.find((entry) => entry.account === account)
40
+ if (!settler) {
41
+ options.recordSubsidy('unavailable')
42
+ return {
43
+ reason: {
44
+ code: 'subsidy_failed',
45
+ message: 'Destination subsidy settlement is unavailable.',
46
+ },
47
+ record: current,
48
+ type: 'action-required',
49
+ }
50
+ }
51
+ const commitment = current.subsidyCommitmentAmount
52
+ if (!existing && !prepared && (!commitment || options.deficit > BigInt(commitment.baseUnits))) {
53
+ options.recordSubsidy('routes_subsidy_limit_exceeded')
54
+ return {
55
+ reason: {
56
+ code: 'routes_subsidy_limit_exceeded',
57
+ message: 'The required destination subsidy exceeds its approved commitment.',
58
+ },
59
+ record: current,
60
+ type: 'action-required',
61
+ }
62
+ }
63
+ const recipient = current.snapshot.recipient
64
+ const token = current.snapshot.destinationToken.address
65
+ const subsidyAmount = Value.tokenAmount({
66
+ baseUnits: options.deficit,
67
+ currency: current.snapshot.destinationToken.currency,
68
+ decimals: current.snapshot.destinationToken.decimals,
69
+ })
70
+ let signed = existing
71
+ if (!signed) {
72
+ const result = await Transfer.prepareTronSubsidy(options.db, {
73
+ account: settler.account,
74
+ chainId: options.destinationChain.id,
75
+ id: current.id,
76
+ orgId: current.orgId,
77
+ prepare: ({ reservations }) =>
78
+ settler.prepare({
79
+ amount: options.deficit,
80
+ chain: options.destinationChain,
81
+ recipient,
82
+ reservations,
83
+ token,
84
+ }),
85
+ subsidyAmount,
86
+ tokenAddress: token,
87
+ }).catch((cause) => {
88
+ if (cause instanceof TronTransferSubsidy.BalanceUnavailableError) return 'balance' as const
89
+ if (cause instanceof Transfer.SubsidySignerBlockedError) return 'blocked' as const
90
+ throw cause
91
+ })
92
+ if (result === 'balance' || result === 'blocked') {
93
+ options.recordSubsidy(result === 'balance' ? 'balance_unavailable' : 'signer_blocked')
94
+ return {
95
+ reason: {
96
+ code: result === 'balance' ? 'subsidy_balance_unavailable' : 'subsidy_failed',
97
+ message:
98
+ result === 'balance'
99
+ ? 'Tempo lacks enough destination token inventory or native gas.'
100
+ : 'Destination subsidy settlement requires operator recovery.',
101
+ },
102
+ record: current,
103
+ type: 'action-required',
104
+ }
105
+ }
106
+ if (result.type === 'not_found' || result.type === 'invalid') return { type: 'pending' }
107
+ current = result.record
108
+ if ('references' in result && result.references && options.dispatchTransferUpdates)
109
+ await options.dispatchTransferUpdates(result.references)
110
+ if (result.type === 'signed' || result.type === 'shared') {
111
+ signed = result.signed
112
+ if (result.type === 'shared') options.recordSubsidy('shared')
113
+ } else {
114
+ options.recordSubsidy('prepared')
115
+ if (result.prepared.expiresAt <= Date.now()) {
116
+ options.recordSubsidy('expired')
117
+ return {
118
+ reason: {
119
+ code: 'subsidy_failed',
120
+ message: 'The prepared Tron subsidy expired before signing.',
121
+ },
122
+ record: current,
123
+ type: 'action-required',
124
+ }
125
+ }
126
+ // The persisted transfer id is the stable Horcrux replay key for this immutable request.
127
+ const signature = await settler.sign({
128
+ idempotencyKey: current.id,
129
+ prepared: result.prepared,
130
+ })
131
+ const persisted = await Transfer.signTronSubsidy(options.db, {
132
+ id: current.id,
133
+ signed: signature,
134
+ })
135
+ if (persisted.type === 'not_found' || persisted.type === 'invalid') return { type: 'pending' }
136
+ signed = persisted.signed
137
+ current = persisted.record
138
+ if ('references' in persisted && options.dispatchTransferUpdates)
139
+ await options.dispatchTransferUpdates(persisted.references)
140
+ options.recordSubsidy(persisted.type === 'shared' ? 'shared' : 'signed')
141
+ }
142
+ }
143
+ const status = await settler.status({
144
+ chain: options.destinationChain,
145
+ recipient,
146
+ signed,
147
+ token,
148
+ })
149
+ if (status === 'reverted') {
150
+ options.recordSubsidy('reverted')
151
+ return {
152
+ reason: {
153
+ code: 'subsidy_failed',
154
+ message: 'The destination subsidy transaction reverted.',
155
+ },
156
+ record: current,
157
+ state: {
158
+ subsidyAmount: Value.tokenAmount({
159
+ baseUnits: 0n,
160
+ currency: current.snapshot.destinationToken.currency,
161
+ decimals: current.snapshot.destinationToken.decimals,
162
+ }),
163
+ },
164
+ type: 'action-required',
165
+ }
166
+ }
167
+ if (status === 'pending') {
168
+ if (signed.expiresAt + tronFinalityGraceMs <= Date.now()) {
169
+ options.recordSubsidy('expired')
170
+ return {
171
+ reason: {
172
+ code: 'subsidy_failed',
173
+ message: 'The Tron subsidy expired without verified delivery.',
174
+ },
175
+ record: current,
176
+ type: 'action-required',
177
+ }
178
+ }
179
+ // An included transaction may remain invisible to the solidified RPC after its TAPOS expiry.
180
+ if (signed.expiresAt <= Date.now()) return { type: 'pending' }
181
+ const rejected = await settler.broadcast({ chain: options.destinationChain, signed }).then(
182
+ () => false,
183
+ (cause: unknown) => {
184
+ if (TronTransferSubsidy.isPermanentBroadcastError(cause)) return true
185
+ throw cause
186
+ },
187
+ )
188
+ if (rejected) {
189
+ options.recordSubsidy('broadcast_rejected')
190
+ return {
191
+ reason: {
192
+ code: 'subsidy_failed',
193
+ message: 'The Tron subsidy transaction was rejected.',
194
+ },
195
+ record: current,
196
+ type: 'action-required',
197
+ }
198
+ }
199
+ options.recordSubsidy('broadcast')
200
+ return { type: 'pending' }
201
+ }
202
+ options.recordSubsidy('completed')
203
+ return { amount: options.deficit, hash: signed.hash, record: current, type: 'success' }
204
+ }
205
+
206
+ export declare namespace settle {
207
+ /** Dependencies for one Tron settlement attempt. */
208
+ type Options = TransferSettlement.Options & {
209
+ /** Available Horcrux-managed Tron wallets. */
210
+ settlers?: readonly TronTransferSubsidy.Settler[] | undefined
211
+ }
212
+ }
@@ -0,0 +1,109 @@
1
+ import { AbiFunction, Address, Hash, Secp256k1, Signature } from 'ox'
2
+
3
+ import * as Tron from '../Tron.js'
4
+ import * as Subsidy from './TronTransferSubsidy.js'
5
+
6
+ const transfer = AbiFunction.from('function transfer(address to, uint256 amount) returns (bool)')
7
+ const recipient = Tron.fromEvmAddress('0x1111111111111111111111111111111111111111')
8
+ const token = Tron.fromEvmAddress('0x2222222222222222222222222222222222222222')
9
+
10
+ function fixture() {
11
+ const { privateKey, publicKey } = Secp256k1.createKeyPair()
12
+ const account = Tron.fromEvmAddress(Address.fromPublicKey(publicKey))
13
+ const rawDataHex = '010203'
14
+ const hash = Hash.sha256(`0x${rawDataHex}`)
15
+ const data = AbiFunction.encodeData(transfer, [Tron.toEvmAddress(recipient), 100n]).slice(2)
16
+ const owner_address = `41${Tron.toEvmAddress(account).slice(2)}`
17
+ const contract_address = `41${Tron.toEvmAddress(token).slice(2)}`
18
+ const raw_data = {
19
+ contract: [
20
+ { contract_address, data, owner_address, type: 'TriggerSmartContract' as const },
21
+ ] as const,
22
+ expiration: 1_735_689_600_000,
23
+ fee_limit: 100_000_000,
24
+ ref_block_bytes: 'a2b4',
25
+ ref_block_hash: '1234567890abcdef',
26
+ timestamp: 1_735_689_540_000,
27
+ }
28
+ const prepared = {
29
+ account,
30
+ amount: '100',
31
+ chainId: 'tron:0x2b6653dc',
32
+ expiresAt: raw_data.expiration,
33
+ hash,
34
+ nativeAmount: String(raw_data.fee_limit),
35
+ rawDataHex,
36
+ request: { network: 'tron:mainnet' as const, transaction: { raw_data } },
37
+ transaction: { raw_data, raw_data_hex: rawDataHex, txID: hash.slice(2) },
38
+ }
39
+ const signature = Signature.toHex(Secp256k1.sign({ payload: hash, privateKey })).slice(2)
40
+ return { prepared, signature }
41
+ }
42
+
43
+ describe('readPrepared', () => {
44
+ test('accepts an immutable Tron transfer and rejects changed amount or raw bytes', () => {
45
+ const { prepared } = fixture()
46
+ expect(Subsidy.readPrepared(prepared)).toEqual(prepared)
47
+ expect(Subsidy.readPrepared(JSON.stringify(prepared))).toEqual(prepared)
48
+ expect(Subsidy.readPrepared({ ...prepared, amount: '101' })).toBeUndefined()
49
+ expect(Subsidy.readPrepared({ ...prepared, rawDataHex: '010204' })).toBeUndefined()
50
+ })
51
+ })
52
+
53
+ describe('readSigned', () => {
54
+ test('requires a recoverable signature from the prepared subsidy wallet', () => {
55
+ const { prepared, signature } = fixture()
56
+ expect(Subsidy.readSigned({ ...prepared, signature })).toEqual({ ...prepared, signature })
57
+ expect(Subsidy.readSigned(JSON.stringify({ ...prepared, signature }))).toEqual({
58
+ ...prepared,
59
+ signature,
60
+ })
61
+ expect(Subsidy.readSigned({ ...prepared, signature: '00'.repeat(65) })).toBeUndefined()
62
+ })
63
+ })
64
+
65
+ describe('matchesTerms', () => {
66
+ test('checks the exact destination wallet, token, recipient, amount, and chain', () => {
67
+ const { prepared } = fixture()
68
+ const terms = {
69
+ account: prepared.account,
70
+ amount: 100n,
71
+ chainId: prepared.chainId,
72
+ recipient,
73
+ token,
74
+ }
75
+ expect(Subsidy.matchesTerms(prepared, terms)).toBe(true)
76
+ expect(Subsidy.matchesTerms(prepared, { ...terms, amount: 101n })).toBe(false)
77
+ expect(Subsidy.matchesTerms(prepared, { ...terms, recipient: token })).toBe(false)
78
+ expect(Subsidy.matchesTerms(prepared, { ...terms, token: recipient })).toBe(false)
79
+ expect(Subsidy.matchesTerms(prepared, { ...terms, chainId: 'tron:nile' })).toBe(false)
80
+ })
81
+ })
82
+
83
+ describe('isPermanentBroadcastError', () => {
84
+ test('recognizes deterministic rejections while keeping transient failures retryable', () => {
85
+ expect(
86
+ Subsidy.isPermanentBroadcastError(new Subsidy.BroadcastError('Rejected.', 'SIGERROR')),
87
+ ).toBe(true)
88
+ expect(
89
+ Subsidy.isPermanentBroadcastError(new Subsidy.BroadcastError('Retry later.', 'SERVER_BUSY')),
90
+ ).toBe(false)
91
+ })
92
+ })
93
+
94
+ describe('create', () => {
95
+ test('rejects invalid signer configuration before chain access', () => {
96
+ expect(() =>
97
+ Subsidy.create({
98
+ account: 'not-a-Tron-address',
99
+ feeLimitSun: 100_000_000,
100
+ fetch,
101
+ horcrux: { auth: { type: 'none' }, url: 'http://127.0.0.1:3040' },
102
+ policy: { maxAmount: '0.10' },
103
+ walletId: 'a709a198-4726-4a43-b7c3-2f4e6100f9b8',
104
+ }),
105
+ ).toThrowErrorMatchingInlineSnapshot(
106
+ '[Routes.TronTransferSubsidy.ConfigurationError: Invalid Tron subsidy account.]',
107
+ )
108
+ })
109
+ })