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
@@ -1,12 +1,15 @@
1
1
  import { Client } from 'tapimo'
2
2
  import { Mpp as PublicMpp } from 'tapimo/mpp'
3
+ import { hc } from 'hono/client'
3
4
  import type * as z from 'zod/mini'
4
5
 
6
+ import type * as Admin from './admin/App.js'
5
7
  import * as Activities from './apps/data/routes/activities.js'
6
8
  import * as ApiKeys from './apps/management/routes/api-keys.js'
7
9
  import * as Balances from './apps/data/routes/balances.js'
8
10
  import * as Billing from './apps/management/routes/billing.js'
9
11
  import * as Blocks from './apps/data/routes/blocks.js'
12
+ import * as Cli from './apps/management/routes/cli.js'
10
13
  import * as Earn from './apps/data/routes/earn.js'
11
14
  import * as Exchanges from './apps/data/routes/exchanges.js'
12
15
  import * as Faucet from './apps/management/routes/faucet.js'
@@ -83,6 +86,23 @@ test('returns typed client', async () => {
83
86
  })
84
87
 
85
88
  describe('narrows responses by status', () => {
89
+ test('PUT /earn/verified-vaults preserves per-vault earnings configuration', async () => {
90
+ const client = hc<ReturnType<typeof Admin.create>>('https://admin.example')
91
+ const res = await client.earn['verified-vaults'].$put({
92
+ json: {
93
+ chainId: 4217,
94
+ earnings: { rewardDistributors: [] },
95
+ vaultAddress: `0x${'11'.repeat(20)}`,
96
+ },
97
+ })
98
+ if (res.status === 200) {
99
+ const json = await res.json()
100
+ expectTypeOf(json.earnings).toEqualTypeOf<{
101
+ rewardDistributors: `0x${string}`[]
102
+ } | null>()
103
+ }
104
+ })
105
+
86
106
  test('POST /v1/earn/rewards/eligibility', async () => {
87
107
  const client = Client.create()
88
108
  const res = await client.v1.earn.rewards.eligibility.$post({
@@ -576,6 +596,8 @@ describe('narrows responses by status', () => {
576
596
  expectTypeOf(json.block?.timestamp).toEqualTypeOf<string | undefined>()
577
597
  expectTypeOf(json.chainId).toEqualTypeOf<number>()
578
598
  expectTypeOf(json.id).toEqualTypeOf<`0x${string}`>()
599
+ expectTypeOf(json.privateAssetBalance).toEqualTypeOf<string | undefined>()
600
+ expectTypeOf(json.privateAssetToken).toEqualTypeOf<`0x${string}` | undefined>()
579
601
  expectTypeOf(json.shareAllowance).toEqualTypeOf<string>()
580
602
  expectTypeOf(json.shareBalance).toEqualTypeOf<string>()
581
603
  expectTypeOf(json.shareToken).toEqualTypeOf<`0x${string}`>()
@@ -666,6 +688,11 @@ describe('narrows responses by status', () => {
666
688
  address: `0x${'bb'.repeat(20)}`,
667
689
  vaultId: `0x${'aa'.repeat(20)}`,
668
690
  },
691
+ query: {
692
+ end: '2026-09-18T00:00:00.000Z',
693
+ period: 'custom',
694
+ start: '2026-09-11T00:00:00.000Z',
695
+ },
669
696
  })
670
697
 
671
698
  expectTypeOf(res.status).toEqualTypeOf<200 | 400 | 404 | 502 | PaidAccessStatus>()
@@ -677,7 +704,7 @@ describe('narrows responses by status', () => {
677
704
  expectTypeOf(json.assetToken).toEqualTypeOf<`0x${string}`>()
678
705
  expectTypeOf(json.currentValue).toEqualTypeOf<string>()
679
706
  expectTypeOf(json.id).toEqualTypeOf<`0x${string}`>()
680
- expectTypeOf(json.period).toEqualTypeOf<'30d' | 'active' | 'lifetime'>()
707
+ expectTypeOf(json.period).toEqualTypeOf<'7d' | '30d' | 'active' | 'custom' | 'lifetime'>()
681
708
  expectTypeOf(json.status).toEqualTypeOf<
682
709
  'complete' | 'incomplete_cost_basis' | 'pending_redemption'
683
710
  >()
@@ -701,8 +728,11 @@ describe('narrows responses by status', () => {
701
728
  totalDeposited: string
702
729
  totalWithdrawn: string
703
730
  }>()
704
- if (json.status === 'complete' && json.period === '30d')
705
- expectTypeOf(json.windowEarnings).toEqualTypeOf<string>()
731
+ if (json.period === '7d' || json.period === '30d' || json.period === 'custom') {
732
+ expectTypeOf(json.start).toEqualTypeOf<string>()
733
+ expectTypeOf(json.end).toEqualTypeOf<string>()
734
+ if (json.status === 'complete') expectTypeOf(json.windowEarnings).toEqualTypeOf<string>()
735
+ }
706
736
  void json
707
737
  return
708
738
  }
@@ -1694,6 +1724,94 @@ describe('narrows responses by status', () => {
1694
1724
  }
1695
1725
  })
1696
1726
 
1727
+ test('POST /v1/cli/authorizations', async () => {
1728
+ const client = Client.create()
1729
+ const res = await client.v1.cli.authorizations.$post({
1730
+ json: { codeChallenge: 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM' },
1731
+ })
1732
+
1733
+ expectTypeOf(res.status).toEqualTypeOf<200 | 404 | 502 | PublicAccessStatus>()
1734
+
1735
+ switch (res.status) {
1736
+ case 200: {
1737
+ const json = await res.json()
1738
+ expectTypeOf(json).toEqualTypeOf<z.output<typeof Cli.schema.CreateResponse>>()
1739
+ return
1740
+ }
1741
+ case 404: {
1742
+ const json = await res.json()
1743
+ expectTypeOf(json.error.code).toEqualTypeOf<'cli_auth_not_enabled'>()
1744
+ return
1745
+ }
1746
+ }
1747
+ })
1748
+
1749
+ test('GET /v1/cli/authorizations/:code', async () => {
1750
+ const client = Client.create()
1751
+ const res = await client.v1.cli.authorizations[':code{[A-Za-z -]+}'].$get({
1752
+ param: { code: 'BCDF-GHJK' },
1753
+ })
1754
+
1755
+ expectTypeOf(res.status).toEqualTypeOf<200 | 400 | 401 | 403 | 404 | 502>()
1756
+
1757
+ switch (res.status) {
1758
+ case 200: {
1759
+ const json = await res.json()
1760
+ expectTypeOf(json.status).toEqualTypeOf<'approved' | 'denied' | 'pending'>()
1761
+ return
1762
+ }
1763
+ case 404: {
1764
+ const json = await res.json()
1765
+ expectTypeOf(json.error.code).toEqualTypeOf<
1766
+ 'cli_auth_not_enabled' | 'cli_authorization_not_found'
1767
+ >()
1768
+ return
1769
+ }
1770
+ }
1771
+ })
1772
+
1773
+ test('POST /v1/cli/authorizations/:code/approve', async () => {
1774
+ const client = Client.create()
1775
+ const res = await client.v1.cli.authorizations[':code{[A-Za-z -]+}'].approve.$post({
1776
+ json: {},
1777
+ param: { code: 'BCDF-GHJK' },
1778
+ })
1779
+
1780
+ expectTypeOf(res.status).toEqualTypeOf<200 | 400 | 401 | 403 | 404 | 409 | 502>()
1781
+
1782
+ switch (res.status) {
1783
+ case 200: {
1784
+ const json = await res.json()
1785
+ expectTypeOf(json.status).toEqualTypeOf<'approved' | 'denied'>()
1786
+ return
1787
+ }
1788
+ case 409: {
1789
+ const json = await res.json()
1790
+ expectTypeOf(json.error.code).toEqualTypeOf<'cli_authorization_decided'>()
1791
+ return
1792
+ }
1793
+ }
1794
+ })
1795
+
1796
+ test('POST /v1/cli/authorizations/:code/token', async () => {
1797
+ const client = Client.create()
1798
+ const res = await client.v1.cli.authorizations[':code{[A-Za-z -]+}'].token.$post({
1799
+ json: { codeVerifier: 'dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk' },
1800
+ param: { code: 'BCDF-GHJK' },
1801
+ })
1802
+
1803
+ expectTypeOf(res.status).toEqualTypeOf<200 | 404 | 502 | PublicAccessStatus>()
1804
+
1805
+ if (res.status === 200) {
1806
+ const json = await res.json()
1807
+ if (json.status === 'approved') expectTypeOf(json.token).toEqualTypeOf<string>()
1808
+ }
1809
+ if (res.status === 400) {
1810
+ const json = await res.json()
1811
+ expectTypeOf(json.error.code).toEqualTypeOf<Access400<'body_invalid' | 'param_invalid'>>()
1812
+ }
1813
+ })
1814
+
1697
1815
  test('POST /v1/invitations/:invitationId/accept', async () => {
1698
1816
  const client = Client.create()
1699
1817
  const res = await client.v1.invitations[':invitationId{inv_[A-Za-z0-9_-]+}'].accept.$post({
@@ -2499,7 +2617,7 @@ describe('narrows responses by status', () => {
2499
2617
  },
2500
2618
  })
2501
2619
 
2502
- expectTypeOf(res.status).toEqualTypeOf<200 | 400 | 502 | PaidAccessStatus>()
2620
+ expectTypeOf(res.status).toEqualTypeOf<200 | 400 | 409 | 502 | PaidAccessStatus>()
2503
2621
 
2504
2622
  switch (res.status) {
2505
2623
  case 200: {
@@ -2543,7 +2661,13 @@ describe('narrows responses by status', () => {
2543
2661
  }
2544
2662
  case 400: {
2545
2663
  const json = await res.json()
2546
- expectTypeOf(json.error.code).toEqualTypeOf<Access400<'query_invalid'>>()
2664
+ expectTypeOf(json.error.code).toEqualTypeOf<
2665
+ Access400<'query_invalid' | 'route_unavailable'>
2666
+ >()
2667
+ expectTypeOf(json.error.details).toEqualTypeOf<
2668
+ | readonly { message: string; path?: readonly (number | string)[] | undefined }[]
2669
+ | undefined
2670
+ >()
2547
2671
  expectTypeOf(json.error.message).toEqualTypeOf<string>()
2548
2672
  void json
2549
2673
  return
@@ -2651,6 +2775,14 @@ describe('narrows responses by status', () => {
2651
2775
  void json
2652
2776
  return
2653
2777
  }
2778
+ case 400: {
2779
+ const json = await res.json()
2780
+ expectTypeOf(json.error.code).toEqualTypeOf<
2781
+ 'amount_too_low' | 'api_key_malformed' | 'body_invalid'
2782
+ >()
2783
+ void json
2784
+ return
2785
+ }
2654
2786
  case 403: {
2655
2787
  const json = await res.json()
2656
2788
  expectTypeOf(json.error.code).toEqualTypeOf<
@@ -2659,21 +2791,29 @@ describe('narrows responses by status', () => {
2659
2791
  | 'billing_past_due'
2660
2792
  | 'billing_required'
2661
2793
  | 'routes_deposit_address_limit_exceeded'
2794
+ | 'routes_not_allowed'
2795
+ | 'routes_subsidy_not_allowed'
2662
2796
  | 'routes_subsidy_not_enabled'
2797
+ | 'routes_suspended'
2663
2798
  >()
2664
2799
  void json
2665
2800
  return
2666
2801
  }
2667
2802
  case 404: {
2668
2803
  const json = await res.json()
2669
- expectTypeOf(json.error.code).toEqualTypeOf<'deposit_address_not_available'>()
2804
+ expectTypeOf(json.error.code).toEqualTypeOf<
2805
+ 'deposit_address_not_available' | 'quote_not_available'
2806
+ >()
2670
2807
  void json
2671
2808
  return
2672
2809
  }
2673
2810
  case 409: {
2674
2811
  const json = await res.json()
2675
2812
  expectTypeOf(json.error.code).toEqualTypeOf<
2676
- 'idempotency_conflict' | 'idempotency_in_progress'
2813
+ | 'idempotency_conflict'
2814
+ | 'idempotency_in_progress'
2815
+ | 'route_policy_changed'
2816
+ | 'route_policy_identity_conflict'
2677
2817
  >()
2678
2818
  void json
2679
2819
  return
@@ -2888,7 +3028,6 @@ describe('narrows responses by status', () => {
2888
3028
  provider: 'stargate',
2889
3029
  recipient: `0x${'11'.repeat(20)}`,
2890
3030
  sender: `0x${'22'.repeat(20)}`,
2891
- sourceChain: 'eip155:8453',
2892
3031
  sourceToken: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
2893
3032
  } as const
2894
3033
  // @ts-expect-error `Idempotency-Key` is required for route transfer creation.
@@ -2897,6 +3036,10 @@ describe('narrows responses by status', () => {
2897
3036
  header: { 'idempotency-key': 'routes_01k1c5j8q8p0be6j5v9m6d1e4r' },
2898
3037
  json,
2899
3038
  })
3039
+ void client.v1.routes.transfers.$post({
3040
+ header: { 'idempotency-key': 'routes_explicit_source' },
3041
+ json: { ...json, sourceChain: 'eip155:4217' },
3042
+ })
2900
3043
 
2901
3044
  expectTypeOf(res.status).toEqualTypeOf<
2902
3045
  200 | 400 | 403 | 404 | 409 | 501 | 502 | 503 | PublicAccessStatus
@@ -2905,7 +3048,11 @@ describe('narrows responses by status', () => {
2905
3048
  switch (res.status) {
2906
3049
  case 200: {
2907
3050
  const json = await res.json()
2908
- expectTypeOf(json.action.type).toEqualTypeOf<'evm:calls'>()
3051
+ expectTypeOf(json.action.type).toEqualTypeOf<'evm:calls' | 'tron:calls'>()
3052
+ if (json.action.type === 'tron:calls') {
3053
+ expectTypeOf(json.action.calls[0]!.to).toEqualTypeOf<string>()
3054
+ expectTypeOf(json.action.calls[0]!.value).toEqualTypeOf<string>()
3055
+ }
2909
3056
  expectTypeOf(json.id).toEqualTypeOf<string>()
2910
3057
  expectTypeOf(json.status).toEqualTypeOf<
2911
3058
  z.output<typeof RoutesTransfers.schema.createRoutesTransfer.Response>['status']
@@ -2922,7 +3069,7 @@ describe('narrows responses by status', () => {
2922
3069
  case 409: {
2923
3070
  const json = await res.json()
2924
3071
  expectTypeOf(json.error.code).toEqualTypeOf<
2925
- 'idempotency_conflict' | 'idempotency_in_progress'
3072
+ 'idempotency_conflict' | 'idempotency_in_progress' | 'route_policy_changed'
2926
3073
  >()
2927
3074
  void json
2928
3075
  return
@@ -50,7 +50,7 @@ test('applies `apiKey` to canonical header over base headers', async () => {
50
50
  "tempo-api-key": "key_option",
51
51
  "user-agent": "tempo-api-test",
52
52
  },
53
- "url": "https://api.test/v1/blocks/latest?",
53
+ "url": "https://api.test/v1/blocks/latest",
54
54
  },
55
55
  ]
56
56
  `)
@@ -74,7 +74,7 @@ test('merges `apiKey` with dynamic base headers', async () => {
74
74
  "authorization": "Payment proof",
75
75
  "tempo-api-key": "key_option",
76
76
  },
77
- "url": "https://api.test/v1/blocks/latest?",
77
+ "url": "https://api.test/v1/blocks/latest",
78
78
  },
79
79
  ]
80
80
  `)
@@ -95,7 +95,7 @@ test('lets per-request headers override base `apiKey`', async () => {
95
95
  "headers": {
96
96
  "tempo-api-key": "key_request",
97
97
  },
98
- "url": "https://api.test/v1/blocks/latest?",
98
+ "url": "https://api.test/v1/blocks/latest",
99
99
  },
100
100
  ]
101
101
  `)
@@ -111,7 +111,7 @@ test('omits empty API keys', async () => {
111
111
  [
112
112
  {
113
113
  "headers": {},
114
- "url": "https://api.test/v1/blocks/latest?",
114
+ "url": "https://api.test/v1/blocks/latest",
115
115
  },
116
116
  ]
117
117
  `)
package/src/Scope.ts CHANGED
@@ -73,8 +73,7 @@ export const catalog = [
73
73
  selfServe: false,
74
74
  },
75
75
  {
76
- description:
77
- 'Legacy reward eligibility write scope retained for existing keys; registration requires wildcard access.',
76
+ description: 'Register wallet and Earn vault reward eligibility associations.',
78
77
  scope: 'rewards:write',
79
78
  selfServe: false,
80
79
  },
package/src/admin/App.ts CHANGED
@@ -20,6 +20,7 @@ import { apiKeys } from './apps/api-keys.js'
20
20
  import { earlyAccess } from './apps/early-access.js'
21
21
  import { earnVaults } from './apps/earn-vaults.js'
22
22
  import { routes } from './apps/routes.js'
23
+ import { routePolicies } from './apps/route-policies.js'
23
24
  import { routesSupport } from './apps/routes-support.js'
24
25
  import { organizations } from './apps/organizations.js'
25
26
  import { scopes } from './apps/scopes.js'
@@ -97,7 +98,7 @@ export function create(options: create.Options) {
97
98
  c.set('metrics', options.metrics)
98
99
  c.set('rateLimit', rateLimit)
99
100
  c.set('zones', zones)
100
- c.set('identity', await identify(c.req.raw))
101
+ c.set('identity', await identify(c.req.raw, c))
101
102
  try {
102
103
  return await next()
103
104
  } finally {
@@ -161,6 +162,8 @@ export function create(options: create.Options) {
161
162
  '/earn/verified-vaults/*',
162
163
  '/routes',
163
164
  '/routes/*',
165
+ '/route-policies',
166
+ '/route-policies/*',
164
167
  '/organizations',
165
168
  '/organizations/*',
166
169
  '/scopes',
@@ -202,6 +205,7 @@ export function create(options: create.Options) {
202
205
  .route('/earn/verified-vaults', earnVaults())
203
206
  .route('/routes/support', routesSupport())
204
207
  .route('/routes', routes())
208
+ .route('/route-policies', routePolicies())
205
209
  .route('/organizations', organizations())
206
210
  .route('/scopes', scopes())
207
211
  .route('/subsidies', subsidies())
@@ -272,11 +276,13 @@ export declare namespace create {
272
276
  /** Transactional email sender used for organization invitations. */
273
277
  email?: Email.Sender | undefined
274
278
  /**
275
- * Extracts the verified admin identity from a request, or `null` to deny.
276
- * Must only return an identity for an already-authenticated request (a
277
- * verified Access JWT, or a header set by a trusted proxy).
279
+ * Extracts an already-verified admin identity from the request or middleware
280
+ * context, or `null` to deny. Authentication middleware must run before this app.
278
281
  */
279
- identify: (request: Request) => Identity | null | Promise<Identity | null>
282
+ identify: (
283
+ request: Request,
284
+ context: Context<Environment>,
285
+ ) => Identity | null | Promise<Identity | null>
280
286
  /**
281
287
  * KV state store backing API-key records (shared with the main API's
282
288
  * `kv` option), provisioned against by the `/api-keys` routes.
@@ -2,7 +2,10 @@ import * as ApiKey from '../../ApiKey.js'
2
2
  import * as core_ApiKeys from '../../ApiKeys.js'
3
3
  import * as Organizations from '../../db/tables/organizations.js'
4
4
  import * as Projects from '../../db/tables/projects.js'
5
+ import * as RoutesDepositAddresses from '../../db/tables/routesDepositAddresses.js'
6
+ import * as RoutesPolicies from '../../db/tables/routesPolicies.js'
5
7
  import * as Users from '../../db/tables/users.js'
8
+ import * as Policy from '../../internal/routes/Policy.js'
6
9
 
7
10
  import * as TestAdmin from '../../../test/Admin.js'
8
11
  import * as TestApp from '../../../test/App.js'
@@ -342,8 +345,69 @@ describe('DELETE /api-keys/:id', () => {
342
345
  })
343
346
 
344
347
  describe('POST /api-keys/:id/rotate', () => {
348
+ test('allows the replacement of an unused one-off key to claim a deposit address', async () => {
349
+ const { client, db, store } = await setup()
350
+ const { record: source } = await core_ApiKeys.mint(store, {
351
+ scopes: ['routes:read', 'routes:write'],
352
+ })
353
+ expect(await Organizations.get(db, source.orgId)).toBeUndefined()
354
+ const response = await client['api-keys'][':id'].rotate.$post({ param: { id: source.id } })
355
+ expect(response.status).toBe(200)
356
+ const replacement = await TestApp.json(response, ApiKeys.schema.rotateApiKey.Response)
357
+ expect(replacement.orgId).toBe(source.orgId)
358
+ // Exercise the same owner/capacity boundary as POST /v1/routes/deposit-addresses.
359
+ await expect(
360
+ RoutesDepositAddresses.claimCreation(db, {
361
+ orgId: replacement.orgId,
362
+ claim: {
363
+ apiKeyId: replacement.id,
364
+ irrevocable: false,
365
+ keyHash: 'ab'.repeat(32),
366
+ requestHash: 'cd'.repeat(32),
367
+ ttlMs: 60_000,
368
+ },
369
+ }),
370
+ ).resolves.toMatchObject({ type: 'claimed' })
371
+ })
372
+
373
+ test('security: rotating a one-off key does not discard its route restrictions', async () => {
374
+ const { client, db, store } = await setup()
375
+ const { record: source } = await core_ApiKeys.mint(store, {
376
+ name: 'Restricted one-off',
377
+ scopes: ['routes:read', 'routes:write'],
378
+ })
379
+ // Deposit-address creation materializes the synthetic owner for one-off keys.
380
+ await Organizations.create(db, { id: source.orgId, name: 'One-off route owner' })
381
+ const scope = {
382
+ apiKeyId: source.id,
383
+ environment: source.environment,
384
+ orgId: source.orgId,
385
+ }
386
+ await RoutesPolicies.save(db, { scope, version: 0, policy: { access: [] } })
387
+
388
+ const response = await client['api-keys'][':id'].rotate.$post({ param: { id: source.id } })
389
+ expect(response.status).toBe(200)
390
+ const replacement = await TestApp.json(response, ApiKeys.schema.rotateApiKey.Response)
391
+ expect(replacement.orgId).toBe(source.orgId)
392
+ expect((await core_ApiKeys.resolve(store, replacement.token))?.scopes).toEqual(source.scopes)
393
+ const loaded = await RoutesPolicies.load(db, {
394
+ apiKeyId: replacement.id,
395
+ environment: replacement.environment,
396
+ orgId: replacement.orgId,
397
+ })
398
+ // Reproduce the runtime's default access for an owner with no org policy.
399
+ const effective = Policy.resolve({
400
+ layers: loaded.layers.map((layer) => layer.policy),
401
+ legacy: loaded.legacy,
402
+ ...(loaded.layers[0]?.version === 0 ? { defaultAccess: null } : {}),
403
+ })
404
+ expect(effective.access).toMatchInlineSnapshot(`[]`)
405
+ })
406
+
345
407
  test('mints a replacement with the source access and attribution', async () => {
346
- const { client, store } = await setup()
408
+ const { client, db, store } = await setup()
409
+ await Organizations.create(db, { id: 'org_privy', name: 'Privy' })
410
+ await Projects.create(db, { id: 'prj_privy', name: 'Zones', orgId: 'org_privy' })
347
411
  const { record: source, token: sourceToken } = await core_ApiKeys.mint(store, {
348
412
  allowedIps: ['203.0.113.0/24'],
349
413
  billingActive: true,
@@ -356,6 +420,16 @@ describe('POST /api-keys/:id/rotate', () => {
356
420
  rateLimits: { '*': { limit: 10_000, period: 'minute' } },
357
421
  scopes: ['zone:421700001:read', 'zone:421700001:write'],
358
422
  })
423
+ await RoutesPolicies.save(db, {
424
+ policy: { maxAmount: '12' },
425
+ scope: {
426
+ apiKeyId: source.id,
427
+ environment: 'sandbox',
428
+ orgId: source.orgId,
429
+ projectId: source.projectId,
430
+ },
431
+ version: 0,
432
+ })
359
433
 
360
434
  const response = await client['api-keys'][':id'].rotate.$post({
361
435
  param: { id: source.id },
@@ -382,6 +456,14 @@ describe('POST /api-keys/:id/rotate', () => {
382
456
  id: body.id,
383
457
  scopes: source.scopes,
384
458
  })
459
+ expect(
460
+ await RoutesPolicies.get(db, {
461
+ apiKeyId: body.id,
462
+ environment: 'sandbox',
463
+ orgId: source.orgId,
464
+ projectId: source.projectId,
465
+ }),
466
+ ).toMatchObject({ policy: { maxAmount: '12' }, version: 1 })
385
467
  })
386
468
 
387
469
  test('unknown id → 404', async () => {
@@ -441,7 +523,7 @@ describe('POST /api-keys/:id/rotate', () => {
441
523
  param: { id: source.id },
442
524
  })
443
525
  const replacement = await TestApp.json(rotateResponse, ApiKeys.schema.rotateApiKey.Response)
444
- expect(replacement.orgId).toBe(replacement.id)
526
+ expect(replacement.orgId).toBe(source.orgId)
445
527
 
446
528
  const updateResponse = await client['api-keys'][':id'].$patch({
447
529
  json: { orgId: organization.id },
@@ -599,6 +681,16 @@ describe('PATCH /api-keys/:id', () => {
599
681
  orgId: organization.id,
600
682
  scopes: ['data:read'],
601
683
  })
684
+ const originalScope = {
685
+ apiKeyId: record.id,
686
+ environment: record.environment,
687
+ orgId: organization.id,
688
+ } as const
689
+ await RoutesPolicies.save(db, {
690
+ policy: { maxAmount: '5' },
691
+ scope: originalScope,
692
+ version: 0,
693
+ })
602
694
  const response = await client['api-keys'][':id'].$patch({
603
695
  json: { orgId: other.id },
604
696
  param: { id: record.id },
@@ -607,6 +699,10 @@ describe('PATCH /api-keys/:id', () => {
607
699
  expect((await core_ApiKeys.resolve(store, token))?.orgId).toBe(other.id)
608
700
  expect(await core_ApiKeys.listByOrg(store, organization.id)).toEqual([])
609
701
  expect((await core_ApiKeys.listByOrg(store, other.id)).map(({ id }) => id)).toEqual([record.id])
702
+ expect(await RoutesPolicies.get(db, originalScope)).toMatchObject({ policy: {}, version: 2 })
703
+
704
+ await core_ApiKeys.updateBounded(db, store, record.id, { orgId: organization.id })
705
+ expect(await RoutesPolicies.get(db, originalScope)).toMatchObject({ policy: {}, version: 3 })
610
706
  })
611
707
 
612
708
  test('enforces the destination organization limit when changing attribution', async () => {
@@ -6,6 +6,7 @@ import * as ApiKeys from '../../ApiKeys.js'
6
6
  import * as Db from '../../db/Db.js'
7
7
  import * as Organizations from '../../db/tables/organizations.js'
8
8
  import * as Projects from '../../db/tables/projects.js'
9
+ import * as RoutesPolicies from '../../db/tables/routesPolicies.js'
9
10
  import * as Users from '../../db/tables/users.js'
10
11
  import * as OpenApi from '../../internal/OpenApi.js'
11
12
  import * as Response from '../../internal/Response.js'
@@ -377,20 +378,28 @@ export function apiKeys() {
377
378
  })
378
379
 
379
380
  try {
380
- const { record, token } = await ApiKeys.mintBounded(Db.get(c.get('db')), store, {
381
- allowedIps: source.allowedIps,
382
- createdBy: c.get('identity')!.email,
383
- environment: source.environment,
384
- scopes: [...new Set(source.scopes)],
385
- ...(source.billingActive === undefined ? {} : { billingActive: source.billingActive }),
386
- ...(source.expiresAt === undefined ? {} : { expiresAt: source.expiresAt }),
387
- ...(source.name === undefined ? {} : { name: source.name }),
388
- ...(source.orgId === source.id ? {} : { orgId: source.orgId }),
389
- ...(source.projectId === undefined ? {} : { projectId: source.projectId }),
390
- ...(source.rateLimits === undefined ? {} : { rateLimits: source.rateLimits }),
391
- })
381
+ const { record, token } = await ApiKeys.mintBounded(
382
+ Db.get(c.get('db')),
383
+ store,
384
+ {
385
+ allowedIps: source.allowedIps,
386
+ createdBy: c.get('identity')!.email,
387
+ environment: source.environment,
388
+ scopes: [...new Set(source.scopes)],
389
+ ...(source.billingActive === undefined
390
+ ? {}
391
+ : { billingActive: source.billingActive }),
392
+ ...(source.expiresAt === undefined ? {} : { expiresAt: source.expiresAt }),
393
+ ...(source.name === undefined ? {} : { name: source.name }),
394
+ orgId: source.orgId,
395
+ ...(source.projectId === undefined ? {} : { projectId: source.projectId }),
396
+ ...(source.rateLimits === undefined ? {} : { rateLimits: source.rateLimits }),
397
+ },
398
+ { policySourceApiKeyId: source.id },
399
+ )
392
400
  return c.json(Response.validated(schema.rotateApiKey.Response, { ...record, token }), 200)
393
401
  } catch (cause) {
402
+ if (cause instanceof RoutesPolicies.InvalidScopeError) return ownerNotFound(c)
394
403
  if (cause instanceof ApiKeys.OwnerDeletedError) return ownerNotFound(c)
395
404
  if (cause instanceof ApiKeys.LiveKeyLimitError) return keyLimitReached(c)
396
405
  return Response.upstream(c, cause)