tapimo 0.15.1 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (709) hide show
  1. package/README.md +137 -0
  2. package/dist/ApiKey.d.ts +1 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +4 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +37 -11
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +163 -10
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +13085 -11974
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +46 -15
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +1 -1
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +1 -1
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +893 -191
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +5 -1
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +70 -70
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +8 -3
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +66 -27
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  28. package/dist/admin/apps/earn-vaults.js +36 -7
  29. package/dist/admin/apps/earn-vaults.js.map +1 -1
  30. package/dist/admin/apps/organizations.d.ts +25 -25
  31. package/dist/admin/apps/organizations.d.ts.map +1 -1
  32. package/dist/admin/apps/organizations.js +5 -4
  33. package/dist/admin/apps/organizations.js.map +1 -1
  34. package/dist/admin/apps/route-policies.d.ts +632 -0
  35. package/dist/admin/apps/route-policies.d.ts.map +1 -0
  36. package/dist/admin/apps/route-policies.js +257 -0
  37. package/dist/admin/apps/route-policies.js.map +1 -0
  38. package/dist/admin/apps/routes-support.js +39 -3
  39. package/dist/admin/apps/routes-support.js.map +1 -1
  40. package/dist/admin/apps/routes.d.ts +529 -76
  41. package/dist/admin/apps/routes.d.ts.map +1 -1
  42. package/dist/admin/apps/routes.js +82 -1
  43. package/dist/admin/apps/routes.js.map +1 -1
  44. package/dist/admin/apps/verified-tokens.d.ts +157 -157
  45. package/dist/admin/index.d.ts +0 -1
  46. package/dist/admin/index.d.ts.map +1 -1
  47. package/dist/admin/index.js +0 -1
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/admin/ui.generated.d.ts +1 -1
  50. package/dist/admin/ui.generated.d.ts.map +1 -1
  51. package/dist/admin/ui.generated.js +205 -201
  52. package/dist/admin/ui.generated.js.map +1 -1
  53. package/dist/analytics/Analytics.d.ts.map +1 -1
  54. package/dist/analytics/Analytics.js +65 -1
  55. package/dist/analytics/Analytics.js.map +1 -1
  56. package/dist/analytics/tables/requestEvents.d.ts +1 -1
  57. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  58. package/dist/analytics/tables/requestEvents.js +58 -59
  59. package/dist/analytics/tables/requestEvents.js.map +1 -1
  60. package/dist/apps/data/App.d.ts +2709 -2670
  61. package/dist/apps/data/App.d.ts.map +1 -1
  62. package/dist/apps/data/routes/activities.d.ts +357 -357
  63. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  64. package/dist/apps/data/routes/activities.js +50 -0
  65. package/dist/apps/data/routes/activities.js.map +1 -1
  66. package/dist/apps/data/routes/addresses.d.ts +248 -248
  67. package/dist/apps/data/routes/balances.d.ts +22 -22
  68. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  69. package/dist/apps/data/routes/balances.js +5 -7
  70. package/dist/apps/data/routes/balances.js.map +1 -1
  71. package/dist/apps/data/routes/blocks.d.ts +125 -125
  72. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  73. package/dist/apps/data/routes/earn.d.ts +103 -12
  74. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  75. package/dist/apps/data/routes/earn.js +456 -220
  76. package/dist/apps/data/routes/earn.js.map +1 -1
  77. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  78. package/dist/apps/data/routes/exchanges.js +267 -97
  79. package/dist/apps/data/routes/exchanges.js.map +1 -1
  80. package/dist/apps/data/routes/fee-amm.d.ts +109 -127
  81. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  82. package/dist/apps/data/routes/fee-amm.js +83 -54
  83. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  84. package/dist/apps/data/routes/indexer.d.ts +43 -43
  85. package/dist/apps/data/routes/receipts.d.ts +235 -235
  86. package/dist/apps/data/routes/rpc.d.ts +30 -30
  87. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  88. package/dist/apps/data/routes/tokens.js +11 -6
  89. package/dist/apps/data/routes/tokens.js.map +1 -1
  90. package/dist/apps/data/routes/transactions.d.ts +2 -0
  91. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  92. package/dist/apps/data/routes/transactions.js +30 -22
  93. package/dist/apps/data/routes/transactions.js.map +1 -1
  94. package/dist/apps/data/routes/transfers.d.ts +77 -77
  95. package/dist/apps/data/routes/valuation.d.ts +32 -32
  96. package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
  97. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  98. package/dist/apps/data/routes/webhooks.js +1 -1
  99. package/dist/apps/data/routes/webhooks.js.map +1 -1
  100. package/dist/apps/data/routes/zones.d.ts +31 -31
  101. package/dist/apps/management/App.d.ts +2909 -2064
  102. package/dist/apps/management/App.d.ts.map +1 -1
  103. package/dist/apps/management/App.js +2 -0
  104. package/dist/apps/management/App.js.map +1 -1
  105. package/dist/apps/management/Billing.d.ts +2 -4
  106. package/dist/apps/management/Billing.d.ts.map +1 -1
  107. package/dist/apps/management/Billing.js +65 -26
  108. package/dist/apps/management/Billing.js.map +1 -1
  109. package/dist/apps/management/routes/api-keys.d.ts +257 -245
  110. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  111. package/dist/apps/management/routes/api-keys.js +70 -11
  112. package/dist/apps/management/routes/api-keys.js.map +1 -1
  113. package/dist/apps/management/routes/billing.d.ts +84 -84
  114. package/dist/apps/management/routes/cli.d.ts +912 -0
  115. package/dist/apps/management/routes/cli.d.ts.map +1 -0
  116. package/dist/apps/management/routes/cli.js +416 -0
  117. package/dist/apps/management/routes/cli.js.map +1 -0
  118. package/dist/apps/management/routes/faucet.d.ts +8 -8
  119. package/dist/apps/management/routes/invitations.d.ts +138 -138
  120. package/dist/apps/management/routes/invite-links.d.ts +172 -172
  121. package/dist/apps/management/routes/members.d.ts +16 -16
  122. package/dist/apps/management/routes/orgs.d.ts +104 -104
  123. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  124. package/dist/apps/management/routes/orgs.js +8 -2
  125. package/dist/apps/management/routes/orgs.js.map +1 -1
  126. package/dist/apps/management/routes/projects.d.ts +125 -125
  127. package/dist/apps/management/routes/usage.d.ts +8 -8
  128. package/dist/apps/management/routes/verified-token-requests.d.ts +86 -86
  129. package/dist/apps/management/routes/webhooks.d.ts +485 -485
  130. package/dist/apps/mpp/App.d.ts +44 -44
  131. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  132. package/dist/apps/mpp/internal/Policy.js +4 -2
  133. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  134. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  135. package/dist/apps/mpp/internal/Sponsorship.js +6 -4
  136. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  137. package/dist/apps/relay/App.d.ts +8 -0
  138. package/dist/apps/relay/App.d.ts.map +1 -1
  139. package/dist/apps/relay/App.js +16 -4
  140. package/dist/apps/relay/App.js.map +1 -1
  141. package/dist/apps/relay/Sponsorships.d.ts +4 -6
  142. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  143. package/dist/apps/relay/Sponsorships.js +71 -60
  144. package/dist/apps/relay/Sponsorships.js.map +1 -1
  145. package/dist/apps/routes/Access.d.ts +53 -0
  146. package/dist/apps/routes/Access.d.ts.map +1 -1
  147. package/dist/apps/routes/Access.js +121 -0
  148. package/dist/apps/routes/Access.js.map +1 -1
  149. package/dist/apps/routes/App.d.ts +397 -158
  150. package/dist/apps/routes/App.d.ts.map +1 -1
  151. package/dist/apps/routes/App.js.map +1 -1
  152. package/dist/apps/routes/routes/chains.d.ts +25 -25
  153. package/dist/apps/routes/routes/deposit-addresses.d.ts +169 -61
  154. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -1
  155. package/dist/apps/routes/routes/deposit-addresses.js +217 -32
  156. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -1
  157. package/dist/apps/routes/routes/quotes.d.ts +171 -81
  158. package/dist/apps/routes/routes/quotes.d.ts.map +1 -1
  159. package/dist/apps/routes/routes/quotes.js +101 -27
  160. package/dist/apps/routes/routes/quotes.js.map +1 -1
  161. package/dist/apps/routes/routes/transfers.d.ts +532 -480
  162. package/dist/apps/routes/routes/transfers.d.ts.map +1 -1
  163. package/dist/apps/routes/routes/transfers.js +182 -37
  164. package/dist/apps/routes/routes/transfers.js.map +1 -1
  165. package/dist/cli/ApiKeys.d.ts +120 -0
  166. package/dist/cli/ApiKeys.d.ts.map +1 -0
  167. package/dist/cli/ApiKeys.js +138 -0
  168. package/dist/cli/ApiKeys.js.map +1 -0
  169. package/dist/cli/Cli.d.ts +92 -34
  170. package/dist/cli/Cli.d.ts.map +1 -1
  171. package/dist/cli/Cli.js +188 -11
  172. package/dist/cli/Cli.js.map +1 -1
  173. package/dist/cli/Credentials.d.ts +95 -0
  174. package/dist/cli/Credentials.d.ts.map +1 -0
  175. package/dist/cli/Credentials.js +110 -0
  176. package/dist/cli/Credentials.js.map +1 -0
  177. package/dist/cli/Spec.d.ts +59 -0
  178. package/dist/cli/Spec.d.ts.map +1 -0
  179. package/dist/cli/Spec.js +77 -0
  180. package/dist/cli/Spec.js.map +1 -0
  181. package/dist/cli/bin.js +5 -1
  182. package/dist/cli/bin.js.map +1 -1
  183. package/dist/cli/commands/admin.d.ts +5 -5
  184. package/dist/cli/commands/admin.d.ts.map +1 -1
  185. package/dist/cli/commands/auth.d.ts +73 -0
  186. package/dist/cli/commands/auth.d.ts.map +1 -0
  187. package/dist/cli/commands/auth.js +204 -0
  188. package/dist/cli/commands/auth.js.map +1 -0
  189. package/dist/cli/commands/keys.d.ts +17 -0
  190. package/dist/cli/commands/keys.d.ts.map +1 -0
  191. package/dist/cli/commands/keys.js +109 -0
  192. package/dist/cli/commands/keys.js.map +1 -0
  193. package/dist/cloudflare.d.ts +27 -2
  194. package/dist/cloudflare.d.ts.map +1 -1
  195. package/dist/cloudflare.js +144 -17
  196. package/dist/cloudflare.js.map +1 -1
  197. package/dist/db/Db.d.ts +23 -0
  198. package/dist/db/Db.d.ts.map +1 -1
  199. package/dist/db/Db.js +413 -1
  200. package/dist/db/Db.js.map +1 -1
  201. package/dist/db/Schema.d.ts +44 -1
  202. package/dist/db/Schema.d.ts.map +1 -1
  203. package/dist/db/Schema.js +56 -3
  204. package/dist/db/Schema.js.map +1 -1
  205. package/dist/db/tables/apiKeyAdmissions.d.ts +28 -2
  206. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -1
  207. package/dist/db/tables/apiKeyAdmissions.js +65 -9
  208. package/dist/db/tables/apiKeyAdmissions.js.map +1 -1
  209. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +2 -0
  210. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -1
  211. package/dist/db/tables/apiKeyOwnerTombstones.js +2 -2
  212. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -1
  213. package/dist/db/tables/authAccounts.d.ts.map +1 -1
  214. package/dist/db/tables/authAccounts.js +1 -0
  215. package/dist/db/tables/authAccounts.js.map +1 -1
  216. package/dist/db/tables/earnVaults.d.ts +5 -1
  217. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  218. package/dist/db/tables/earnVaults.js +12 -1
  219. package/dist/db/tables/earnVaults.js.map +1 -1
  220. package/dist/db/tables/organizations.d.ts +4 -2
  221. package/dist/db/tables/organizations.d.ts.map +1 -1
  222. package/dist/db/tables/organizations.js +8 -34
  223. package/dist/db/tables/organizations.js.map +1 -1
  224. package/dist/db/tables/requestUsage.d.ts +5 -1
  225. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  226. package/dist/db/tables/requestUsage.js +10 -2
  227. package/dist/db/tables/requestUsage.js.map +1 -1
  228. package/dist/db/tables/rewardEligibilityAssociations.d.ts +13 -0
  229. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -1
  230. package/dist/db/tables/rewardEligibilityAssociations.js +11 -0
  231. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -1
  232. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  233. package/dist/db/tables/rewardRuns.js +4 -0
  234. package/dist/db/tables/rewardRuns.js.map +1 -1
  235. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -1
  236. package/dist/db/tables/rewardTransactionAttempts.js +2 -0
  237. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -1
  238. package/dist/db/tables/routesDepositAddresses.d.ts +29 -0
  239. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -1
  240. package/dist/db/tables/routesDepositAddresses.js +84 -31
  241. package/dist/db/tables/routesDepositAddresses.js.map +1 -1
  242. package/dist/db/tables/routesDeposits.d.ts.map +1 -1
  243. package/dist/db/tables/routesDeposits.js +31 -21
  244. package/dist/db/tables/routesDeposits.js.map +1 -1
  245. package/dist/db/tables/routesIdempotency.d.ts.map +1 -1
  246. package/dist/db/tables/routesIdempotency.js +2 -0
  247. package/dist/db/tables/routesIdempotency.js.map +1 -1
  248. package/dist/db/tables/routesPolicies.d.ts +58 -0
  249. package/dist/db/tables/routesPolicies.d.ts.map +1 -0
  250. package/dist/db/tables/routesPolicies.js +198 -0
  251. package/dist/db/tables/routesPolicies.js.map +1 -0
  252. package/dist/db/tables/routesTransferSubsidies.d.ts +22 -0
  253. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -1
  254. package/dist/db/tables/routesTransferSubsidies.js +41 -0
  255. package/dist/db/tables/routesTransferSubsidies.js.map +1 -1
  256. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -1
  257. package/dist/db/tables/routesTransferSubsidyNonces.js +12 -4
  258. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -1
  259. package/dist/db/tables/routesTransfers.d.ts +26 -1
  260. package/dist/db/tables/routesTransfers.d.ts.map +1 -1
  261. package/dist/db/tables/routesTransfers.js +36 -6
  262. package/dist/db/tables/routesTransfers.js.map +1 -1
  263. package/dist/db/tables/sponsoredTransactions.d.ts +45 -13
  264. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  265. package/dist/db/tables/sponsoredTransactions.js +144 -33
  266. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  267. package/dist/db/tables/users.d.ts +2 -0
  268. package/dist/db/tables/users.d.ts.map +1 -1
  269. package/dist/db/tables/users.js +11 -0
  270. package/dist/db/tables/users.js.map +1 -1
  271. package/dist/handlers/internal/multisig.d.ts +1 -1
  272. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  273. package/dist/handlers/internal/multisig.js +3 -2
  274. package/dist/handlers/internal/multisig.js.map +1 -1
  275. package/dist/handlers/relay.d.ts +2 -0
  276. package/dist/handlers/relay.d.ts.map +1 -1
  277. package/dist/handlers/relay.js +34 -15
  278. package/dist/handlers/relay.js.map +1 -1
  279. package/dist/internal/Auth.d.ts +57 -6
  280. package/dist/internal/Auth.d.ts.map +1 -1
  281. package/dist/internal/Auth.js +182 -78
  282. package/dist/internal/Auth.js.map +1 -1
  283. package/dist/internal/BetterAuth.d.ts +22 -0
  284. package/dist/internal/BetterAuth.d.ts.map +1 -1
  285. package/dist/internal/BetterAuth.js +17 -14
  286. package/dist/internal/BetterAuth.js.map +1 -1
  287. package/dist/internal/Cache.d.ts +5 -0
  288. package/dist/internal/Cache.d.ts.map +1 -1
  289. package/dist/internal/Cache.js +3 -1
  290. package/dist/internal/Cache.js.map +1 -1
  291. package/dist/internal/CliAuth.d.ts +243 -0
  292. package/dist/internal/CliAuth.d.ts.map +1 -0
  293. package/dist/internal/CliAuth.js +249 -0
  294. package/dist/internal/CliAuth.js.map +1 -0
  295. package/dist/internal/EarnSharePrices.d.ts +1 -1
  296. package/dist/internal/EarnSharePrices.d.ts.map +1 -1
  297. package/dist/internal/EarnSharePrices.js +7 -3
  298. package/dist/internal/EarnSharePrices.js.map +1 -1
  299. package/dist/internal/EarnVaults.d.ts +47 -0
  300. package/dist/internal/EarnVaults.d.ts.map +1 -1
  301. package/dist/internal/EarnVaults.js +188 -4
  302. package/dist/internal/EarnVaults.js.map +1 -1
  303. package/dist/internal/EarnWithdrawals.d.ts +73 -0
  304. package/dist/internal/EarnWithdrawals.d.ts.map +1 -0
  305. package/dist/internal/EarnWithdrawals.js +189 -0
  306. package/dist/internal/EarnWithdrawals.js.map +1 -0
  307. package/dist/internal/ExecutionContext.d.ts +21 -0
  308. package/dist/internal/ExecutionContext.d.ts.map +1 -0
  309. package/dist/internal/ExecutionContext.js +16 -0
  310. package/dist/internal/ExecutionContext.js.map +1 -0
  311. package/dist/internal/Log.d.ts +7 -3
  312. package/dist/internal/Log.d.ts.map +1 -1
  313. package/dist/internal/Log.js +163 -130
  314. package/dist/internal/Log.js.map +1 -1
  315. package/dist/internal/MetricSink.d.ts.map +1 -1
  316. package/dist/internal/MetricSink.js +26 -1
  317. package/dist/internal/MetricSink.js.map +1 -1
  318. package/dist/internal/RateLimit.d.ts +67 -0
  319. package/dist/internal/RateLimit.d.ts.map +1 -1
  320. package/dist/internal/RateLimit.js +174 -27
  321. package/dist/internal/RateLimit.js.map +1 -1
  322. package/dist/internal/Store.d.ts +6 -0
  323. package/dist/internal/Store.d.ts.map +1 -1
  324. package/dist/internal/Store.js +4 -5
  325. package/dist/internal/Store.js.map +1 -1
  326. package/dist/internal/Timing.d.ts +6 -0
  327. package/dist/internal/Timing.d.ts.map +1 -1
  328. package/dist/internal/Timing.js +21 -1
  329. package/dist/internal/Timing.js.map +1 -1
  330. package/dist/internal/Tron.d.ts +124 -0
  331. package/dist/internal/Tron.d.ts.map +1 -0
  332. package/dist/internal/Tron.js +202 -0
  333. package/dist/internal/Tron.js.map +1 -0
  334. package/dist/internal/Viem.d.ts +4 -0
  335. package/dist/internal/Viem.d.ts.map +1 -1
  336. package/dist/internal/Viem.js +25 -6
  337. package/dist/internal/Viem.js.map +1 -1
  338. package/dist/internal/rewards/Read.d.ts +2 -2
  339. package/dist/internal/rewards/Read.d.ts.map +1 -1
  340. package/dist/internal/rewards/Read.js +11 -2
  341. package/dist/internal/rewards/Read.js.map +1 -1
  342. package/dist/internal/routes/Action.d.ts +27 -0
  343. package/dist/internal/routes/Action.d.ts.map +1 -1
  344. package/dist/internal/routes/Action.js +49 -1
  345. package/dist/internal/routes/Action.js.map +1 -1
  346. package/dist/internal/routes/Chain.d.ts +2 -0
  347. package/dist/internal/routes/Chain.d.ts.map +1 -1
  348. package/dist/internal/routes/Chain.js +4 -0
  349. package/dist/internal/routes/Chain.js.map +1 -1
  350. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  351. package/dist/internal/routes/DepositAddress.js +5 -0
  352. package/dist/internal/routes/DepositAddress.js.map +1 -1
  353. package/dist/internal/routes/Evidence.d.ts.map +1 -1
  354. package/dist/internal/routes/Evidence.js +6 -2
  355. package/dist/internal/routes/Evidence.js.map +1 -1
  356. package/dist/internal/routes/EvmTransferSettlement.d.ts +17 -0
  357. package/dist/internal/routes/EvmTransferSettlement.d.ts.map +1 -0
  358. package/dist/internal/routes/EvmTransferSettlement.js +196 -0
  359. package/dist/internal/routes/EvmTransferSettlement.js.map +1 -0
  360. package/dist/internal/routes/Policy.d.ts +161 -0
  361. package/dist/internal/routes/Policy.d.ts.map +1 -0
  362. package/dist/internal/routes/Policy.js +249 -0
  363. package/dist/internal/routes/Policy.js.map +1 -0
  364. package/dist/internal/routes/Provider.d.ts +66 -3
  365. package/dist/internal/routes/Provider.d.ts.map +1 -1
  366. package/dist/internal/routes/Provider.js +106 -27
  367. package/dist/internal/routes/Provider.js.map +1 -1
  368. package/dist/internal/routes/Quota.d.ts +57 -0
  369. package/dist/internal/routes/Quota.d.ts.map +1 -0
  370. package/dist/internal/routes/Quota.js +144 -0
  371. package/dist/internal/routes/Quota.js.map +1 -0
  372. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  373. package/dist/internal/routes/Reconciliation.js +163 -47
  374. package/dist/internal/routes/Reconciliation.js.map +1 -1
  375. package/dist/internal/routes/SolanaTransferSettlement.d.ts +12 -0
  376. package/dist/internal/routes/SolanaTransferSettlement.d.ts.map +1 -0
  377. package/dist/internal/routes/SolanaTransferSettlement.js +220 -0
  378. package/dist/internal/routes/SolanaTransferSettlement.js.map +1 -0
  379. package/dist/internal/routes/SolanaTransferSubsidy.d.ts +172 -0
  380. package/dist/internal/routes/SolanaTransferSubsidy.d.ts.map +1 -0
  381. package/dist/internal/routes/SolanaTransferSubsidy.js +564 -0
  382. package/dist/internal/routes/SolanaTransferSubsidy.js.map +1 -0
  383. package/dist/internal/routes/Subsidy.d.ts +2 -2
  384. package/dist/internal/routes/Subsidy.d.ts.map +1 -1
  385. package/dist/internal/routes/Subsidy.js +2 -2
  386. package/dist/internal/routes/Subsidy.js.map +1 -1
  387. package/dist/internal/routes/Transfer.d.ts +229 -1
  388. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  389. package/dist/internal/routes/Transfer.js +644 -7
  390. package/dist/internal/routes/Transfer.js.map +1 -1
  391. package/dist/internal/routes/TransferReconciliation.d.ts +6 -0
  392. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -1
  393. package/dist/internal/routes/TransferReconciliation.js +83 -159
  394. package/dist/internal/routes/TransferReconciliation.js.map +1 -1
  395. package/dist/internal/routes/TransferSettlement.d.ts +45 -0
  396. package/dist/internal/routes/TransferSettlement.d.ts.map +1 -0
  397. package/dist/internal/routes/TransferSettlement.js +2 -0
  398. package/dist/internal/routes/TransferSettlement.js.map +1 -0
  399. package/dist/internal/routes/TransferSubsidy.d.ts +23 -8
  400. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -1
  401. package/dist/internal/routes/TransferSubsidy.js +64 -5
  402. package/dist/internal/routes/TransferSubsidy.js.map +1 -1
  403. package/dist/internal/routes/TronTransferSettlement.d.ts +12 -0
  404. package/dist/internal/routes/TronTransferSettlement.d.ts.map +1 -0
  405. package/dist/internal/routes/TronTransferSettlement.js +201 -0
  406. package/dist/internal/routes/TronTransferSettlement.js.map +1 -0
  407. package/dist/internal/routes/TronTransferSubsidy.d.ts +174 -0
  408. package/dist/internal/routes/TronTransferSubsidy.d.ts.map +1 -0
  409. package/dist/internal/routes/TronTransferSubsidy.js +439 -0
  410. package/dist/internal/routes/TronTransferSubsidy.js.map +1 -0
  411. package/dist/internal/routes/index.d.ts +3 -0
  412. package/dist/internal/routes/index.d.ts.map +1 -1
  413. package/dist/internal/routes/index.js +3 -0
  414. package/dist/internal/routes/index.js.map +1 -1
  415. package/dist/internal/routes/providers/across.d.ts +3 -0
  416. package/dist/internal/routes/providers/across.d.ts.map +1 -1
  417. package/dist/internal/routes/providers/across.js +11 -0
  418. package/dist/internal/routes/providers/across.js.map +1 -1
  419. package/dist/internal/routes/providers/legacyMesh.d.ts +29 -0
  420. package/dist/internal/routes/providers/legacyMesh.d.ts.map +1 -0
  421. package/dist/internal/routes/providers/legacyMesh.js +474 -0
  422. package/dist/internal/routes/providers/legacyMesh.js.map +1 -0
  423. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts +59 -0
  424. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts.map +1 -0
  425. package/dist/internal/routes/providers/legacyMeshDelivery.js +229 -0
  426. package/dist/internal/routes/providers/legacyMeshDelivery.js.map +1 -0
  427. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts +19 -0
  428. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts.map +1 -0
  429. package/dist/internal/routes/providers/legacyMeshOutbound.js +457 -0
  430. package/dist/internal/routes/providers/legacyMeshOutbound.js.map +1 -0
  431. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts +123 -0
  432. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts.map +1 -0
  433. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js +333 -0
  434. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js.map +1 -0
  435. package/dist/internal/routes/providers/propAmm.d.ts +70 -0
  436. package/dist/internal/routes/providers/propAmm.d.ts.map +1 -0
  437. package/dist/internal/routes/providers/propAmm.js +524 -0
  438. package/dist/internal/routes/providers/propAmm.js.map +1 -0
  439. package/dist/internal/routes/providers/relay.d.ts +3 -0
  440. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  441. package/dist/internal/routes/providers/relay.js +352 -41
  442. package/dist/internal/routes/providers/relay.js.map +1 -1
  443. package/dist/internal/routes/providers/rhino.d.ts +3 -0
  444. package/dist/internal/routes/providers/rhino.d.ts.map +1 -1
  445. package/dist/internal/routes/providers/rhino.js +11 -0
  446. package/dist/internal/routes/providers/rhino.js.map +1 -1
  447. package/dist/internal/routes/providers/squid.d.ts +3 -0
  448. package/dist/internal/routes/providers/squid.d.ts.map +1 -1
  449. package/dist/internal/routes/providers/squid.js +19 -0
  450. package/dist/internal/routes/providers/squid.js.map +1 -1
  451. package/dist/internal/routes/providers/stargate.d.ts.map +1 -1
  452. package/dist/internal/routes/providers/stargate.js +22 -9
  453. package/dist/internal/routes/providers/stargate.js.map +1 -1
  454. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -1
  455. package/dist/internal/routes/providers/symbiosis.js +13 -17
  456. package/dist/internal/routes/providers/symbiosis.js.map +1 -1
  457. package/dist/providers/index.d.ts +14 -0
  458. package/dist/providers/index.d.ts.map +1 -1
  459. package/dist/providers/index.js +6 -0
  460. package/dist/providers/index.js.map +1 -1
  461. package/package.json +16 -6
  462. package/src/ApiKey.ts +7 -3
  463. package/src/ApiKeys.test.ts +652 -8
  464. package/src/ApiKeys.ts +191 -11
  465. package/src/App.test.ts +405 -18
  466. package/src/App.ts +51 -15
  467. package/src/Client.test-d.ts +157 -10
  468. package/src/Client.test.ts +4 -4
  469. package/src/Scope.ts +1 -2
  470. package/src/admin/App.ts +11 -5
  471. package/src/admin/apps/api-keys.test.ts +98 -2
  472. package/src/admin/apps/api-keys.ts +21 -12
  473. package/src/admin/apps/earn-vaults.test.ts +76 -7
  474. package/src/admin/apps/earn-vaults.ts +47 -8
  475. package/src/admin/apps/organizations.test.ts +147 -31
  476. package/src/admin/apps/organizations.ts +5 -4
  477. package/src/admin/apps/route-policies.test.ts +220 -0
  478. package/src/admin/apps/route-policies.ts +322 -0
  479. package/src/admin/apps/routes-support.test.ts +107 -2
  480. package/src/admin/apps/routes-support.ts +43 -3
  481. package/src/admin/apps/routes.test.ts +150 -0
  482. package/src/admin/apps/routes.ts +97 -1
  483. package/src/admin/apps/scopes.test.ts +1 -1
  484. package/src/admin/index.ts +0 -1
  485. package/src/admin/ui/plugin.ts +2 -1
  486. package/src/admin/ui/src/components/Dialog.tsx +1 -1
  487. package/src/admin/ui/src/components/EarnVaultForm.tsx +45 -0
  488. package/src/admin/ui/src/components/RoutePicker.tsx +79 -0
  489. package/src/admin/ui/src/lib/earn-vaults.ts +1 -1
  490. package/src/admin/ui/src/lib/route-policies.test.ts +452 -0
  491. package/src/admin/ui/src/lib/route-policies.ts +232 -0
  492. package/src/admin/ui/src/lib/routes.ts +34 -0
  493. package/src/admin/ui/src/routeTree.gen.ts +21 -0
  494. package/src/admin/ui/src/routes/api-keys.tsx +21 -2
  495. package/src/admin/ui/src/routes/early-access.tsx +1 -0
  496. package/src/admin/ui/src/routes/earn.vaults.tsx +1 -0
  497. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +22 -0
  498. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +10 -0
  499. package/src/admin/ui/src/routes/organizations.tsx +1 -0
  500. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +18 -3
  501. package/src/admin/ui/src/routes/route-policies.tsx +678 -0
  502. package/src/admin/ui/src/routes/routes.tsx +85 -2
  503. package/src/admin/ui/src/routes/routes_.support.tsx +6 -22
  504. package/src/admin/ui/src/routes/subsidies.tsx +1 -0
  505. package/src/admin/ui/src/routes/verified-tokens.tsx +1 -0
  506. package/src/admin/ui.generated.ts +258 -202
  507. package/src/analytics/Analytics.test.ts +4 -50
  508. package/src/analytics/Analytics.ts +65 -1
  509. package/src/analytics/tables/requestEvents.test.ts +402 -1
  510. package/src/analytics/tables/requestEvents.ts +62 -93
  511. package/src/apps/data/routes/activities.test.ts +315 -14
  512. package/src/apps/data/routes/activities.ts +60 -0
  513. package/src/apps/data/routes/balances.ts +5 -7
  514. package/src/apps/data/routes/earn.bench.ts +18 -0
  515. package/src/apps/data/routes/earn.local.test.ts +507 -0
  516. package/src/apps/data/routes/earn.test.ts +405 -127
  517. package/src/apps/data/routes/earn.ts +660 -270
  518. package/src/apps/data/routes/exchanges.bench.ts +3 -1
  519. package/src/apps/data/routes/exchanges.test.ts +166 -2
  520. package/src/apps/data/routes/exchanges.ts +308 -101
  521. package/src/apps/data/routes/fee-amm.test.ts +134 -2
  522. package/src/apps/data/routes/fee-amm.ts +122 -60
  523. package/src/apps/data/routes/receipts.test.ts +21 -18
  524. package/src/apps/data/routes/rpc.test.ts +2 -2
  525. package/src/apps/data/routes/tokens.provenance.test.ts +157 -0
  526. package/src/apps/data/routes/tokens.test.ts +4 -4
  527. package/src/apps/data/routes/tokens.ts +11 -6
  528. package/src/apps/data/routes/transactions.test.ts +29 -0
  529. package/src/apps/data/routes/transactions.ts +33 -22
  530. package/src/apps/data/routes/webhooks.test.ts +12 -3
  531. package/src/apps/data/routes/webhooks.ts +2 -1
  532. package/src/apps/management/App.ts +4 -0
  533. package/src/apps/management/Billing.test.ts +253 -27
  534. package/src/apps/management/Billing.ts +83 -29
  535. package/src/apps/management/routes/api-keys.test.ts +1 -1
  536. package/src/apps/management/routes/api-keys.ts +85 -11
  537. package/src/apps/management/routes/billing.test.ts +68 -4
  538. package/src/apps/management/routes/cli.test.ts +370 -0
  539. package/src/apps/management/routes/cli.ts +533 -0
  540. package/src/apps/management/routes/me.test.ts +14 -4
  541. package/src/apps/management/routes/orgs.test.ts +108 -4
  542. package/src/apps/management/routes/orgs.ts +7 -2
  543. package/src/apps/management/routes/usage.test.ts +2 -2
  544. package/src/apps/mpp/internal/Policy.test.ts +51 -4
  545. package/src/apps/mpp/internal/Policy.ts +6 -2
  546. package/src/apps/mpp/internal/Sponsorship.test.ts +29 -0
  547. package/src/apps/mpp/internal/Sponsorship.ts +6 -4
  548. package/src/apps/relay/App.test.ts +85 -1
  549. package/src/apps/relay/App.ts +28 -4
  550. package/src/apps/relay/Sponsorships.test.ts +97 -1
  551. package/src/apps/relay/Sponsorships.ts +77 -66
  552. package/src/apps/routes/Access.test.ts +319 -0
  553. package/src/apps/routes/Access.ts +147 -0
  554. package/src/apps/routes/App.ts +10 -0
  555. package/src/apps/routes/routes/chains.test.ts +3 -2
  556. package/src/apps/routes/routes/deposit-addresses.test.ts +978 -34
  557. package/src/apps/routes/routes/deposit-addresses.ts +243 -32
  558. package/src/apps/routes/routes/propAmm.local.test.ts +951 -0
  559. package/src/apps/routes/routes/quotes.test.ts +81 -8
  560. package/src/apps/routes/routes/quotes.ts +109 -27
  561. package/src/apps/routes/routes/transfers.test.ts +252 -15
  562. package/src/apps/routes/routes/transfers.ts +212 -33
  563. package/src/cli/ApiKeys.test.ts +265 -0
  564. package/src/cli/ApiKeys.ts +189 -0
  565. package/src/cli/Cli.test.ts +188 -0
  566. package/src/cli/Cli.ts +280 -12
  567. package/src/cli/Credentials.test.ts +122 -0
  568. package/src/cli/Credentials.ts +144 -0
  569. package/src/cli/Spec.test.ts +133 -0
  570. package/src/cli/Spec.ts +132 -0
  571. package/src/cli/bin.test.ts +49 -0
  572. package/src/cli/bin.ts +5 -1
  573. package/src/cli/commands/auth.test.ts +138 -0
  574. package/src/cli/commands/auth.ts +254 -0
  575. package/src/cli/commands/keys.test.ts +68 -0
  576. package/src/cli/commands/keys.ts +125 -0
  577. package/src/cloudflare.ts +184 -36
  578. package/src/db/Db.test.ts +877 -0
  579. package/src/db/Db.ts +498 -1
  580. package/src/db/Schema.ts +75 -4
  581. package/src/db/tables/apiKeyAdmissions.test.ts +57 -0
  582. package/src/db/tables/apiKeyAdmissions.ts +101 -11
  583. package/src/db/tables/apiKeyOwnerTombstones.ts +2 -2
  584. package/src/db/tables/authAccounts.test.ts +30 -0
  585. package/src/db/tables/authAccounts.ts +1 -0
  586. package/src/db/tables/earnVaults.test.ts +34 -0
  587. package/src/db/tables/earnVaults.ts +17 -2
  588. package/src/db/tables/organizations.test.ts +148 -84
  589. package/src/db/tables/organizations.ts +11 -43
  590. package/src/db/tables/requestUsage.ts +13 -2
  591. package/src/db/tables/rewardCampaigns.test.ts +163 -0
  592. package/src/db/tables/rewardEligibilityAssociations.test.ts +14 -0
  593. package/src/db/tables/rewardEligibilityAssociations.ts +24 -0
  594. package/src/db/tables/rewardRuns.ts +4 -0
  595. package/src/db/tables/rewardTransactionAttempts.ts +2 -0
  596. package/src/db/tables/routesDepositAddresses.test.ts +263 -0
  597. package/src/db/tables/routesDepositAddresses.ts +118 -34
  598. package/src/db/tables/routesDeposits.test.ts +66 -5
  599. package/src/db/tables/routesDeposits.ts +47 -26
  600. package/src/db/tables/routesIdempotency.test.ts +80 -0
  601. package/src/db/tables/routesIdempotency.ts +2 -0
  602. package/src/db/tables/routesPolicies.test.ts +143 -0
  603. package/src/db/tables/routesPolicies.ts +251 -0
  604. package/src/db/tables/routesTransferSubsidies.ts +64 -0
  605. package/src/db/tables/routesTransferSubsidyNonces.ts +16 -4
  606. package/src/db/tables/routesTransfers.test.ts +183 -2
  607. package/src/db/tables/routesTransfers.ts +65 -6
  608. package/src/db/tables/sponsoredTransactions.test.ts +351 -76
  609. package/src/db/tables/sponsoredTransactions.ts +182 -38
  610. package/src/db/tables/users.test.ts +51 -0
  611. package/src/db/tables/users.ts +12 -0
  612. package/src/handlers/internal/multisig.store.test.ts +120 -0
  613. package/src/handlers/internal/multisig.test.ts +389 -0
  614. package/src/handlers/internal/multisig.ts +13 -10
  615. package/src/handlers/relay.test.ts +259 -83
  616. package/src/handlers/relay.ts +36 -17
  617. package/src/internal/Auth.test.ts +291 -8
  618. package/src/internal/Auth.ts +227 -96
  619. package/src/internal/BetterAuth.test.ts +58 -22
  620. package/src/internal/BetterAuth.ts +23 -17
  621. package/src/internal/Cache.ts +3 -1
  622. package/src/internal/CliAuth.test.ts +279 -0
  623. package/src/internal/CliAuth.ts +319 -0
  624. package/src/internal/EarnSharePrices.test.ts +25 -0
  625. package/src/internal/EarnSharePrices.ts +9 -2
  626. package/src/internal/EarnVaults.test.ts +67 -0
  627. package/src/internal/EarnVaults.ts +299 -4
  628. package/src/internal/EarnWithdrawals.test.ts +315 -0
  629. package/src/internal/EarnWithdrawals.ts +266 -0
  630. package/src/internal/ExecutionContext.ts +31 -0
  631. package/src/internal/Log.test.ts +210 -0
  632. package/src/internal/Log.ts +180 -142
  633. package/src/internal/MetricSink.test.ts +190 -15
  634. package/src/internal/MetricSink.ts +27 -1
  635. package/src/internal/RateLimit.test.ts +144 -8
  636. package/src/internal/RateLimit.ts +254 -26
  637. package/src/internal/Store.ts +4 -5
  638. package/src/internal/Timing.test.ts +32 -0
  639. package/src/internal/Timing.ts +20 -1
  640. package/src/internal/Tron.test-d.ts +22 -0
  641. package/src/internal/Tron.test.ts +94 -0
  642. package/src/internal/Tron.ts +289 -0
  643. package/src/internal/Viem.rpc.test.ts +76 -0
  644. package/src/internal/Viem.ts +29 -6
  645. package/src/internal/rewards/Read.test.ts +109 -0
  646. package/src/internal/rewards/Read.ts +13 -4
  647. package/src/internal/routes/Action.test.ts +70 -0
  648. package/src/internal/routes/Action.ts +76 -1
  649. package/src/internal/routes/Chain.test.ts +18 -0
  650. package/src/internal/routes/Chain.ts +5 -0
  651. package/src/internal/routes/DepositAddress.ts +5 -0
  652. package/src/internal/routes/Evidence.test.ts +64 -0
  653. package/src/internal/routes/Evidence.ts +11 -3
  654. package/src/internal/routes/EvmTransferSettlement.ts +213 -0
  655. package/src/internal/routes/Policy.test.ts +316 -0
  656. package/src/internal/routes/Policy.ts +399 -0
  657. package/src/internal/routes/Provider.test.ts +103 -2
  658. package/src/internal/routes/Provider.ts +149 -27
  659. package/src/internal/routes/Quota.test.ts +149 -0
  660. package/src/internal/routes/Quota.ts +226 -0
  661. package/src/internal/routes/Reconciliation.local.test.ts +285 -0
  662. package/src/internal/routes/Reconciliation.test.ts +371 -13
  663. package/src/internal/routes/Reconciliation.ts +193 -42
  664. package/src/internal/routes/SolanaTransferSettlement.ts +232 -0
  665. package/src/internal/routes/SolanaTransferSubsidy.test.ts +471 -0
  666. package/src/internal/routes/SolanaTransferSubsidy.ts +760 -0
  667. package/src/internal/routes/SourceObservation.test.ts +221 -0
  668. package/src/internal/routes/Subsidy.local.test.ts +46 -0
  669. package/src/internal/routes/Subsidy.ts +4 -2
  670. package/src/internal/routes/Transfer.solana.test.ts +389 -0
  671. package/src/internal/routes/Transfer.test.ts +130 -1
  672. package/src/internal/routes/Transfer.tron.test.ts +172 -0
  673. package/src/internal/routes/Transfer.ts +866 -8
  674. package/src/internal/routes/TransferReconciliation.test.ts +26 -4
  675. package/src/internal/routes/TransferReconciliation.ts +91 -166
  676. package/src/internal/routes/TransferSettlement.ts +48 -0
  677. package/src/internal/routes/TransferSubsidy.local.test.ts +143 -0
  678. package/src/internal/routes/TransferSubsidy.test.ts +34 -4
  679. package/src/internal/routes/TransferSubsidy.ts +87 -12
  680. package/src/internal/routes/TronTransferSettlement.ts +212 -0
  681. package/src/internal/routes/TronTransferSubsidy.test.ts +109 -0
  682. package/src/internal/routes/TronTransferSubsidy.ts +619 -0
  683. package/src/internal/routes/index.test.ts +3 -0
  684. package/src/internal/routes/index.ts +3 -0
  685. package/src/internal/routes/providers/across.ts +13 -0
  686. package/src/internal/routes/providers/index.test.ts +141 -0
  687. package/src/internal/routes/providers/legacyMesh.test.ts +484 -0
  688. package/src/internal/routes/providers/legacyMesh.ts +633 -0
  689. package/src/internal/routes/providers/legacyMeshDelivery.test.ts +306 -0
  690. package/src/internal/routes/providers/legacyMeshDelivery.ts +320 -0
  691. package/src/internal/routes/providers/legacyMeshOutbound.test.ts +401 -0
  692. package/src/internal/routes/providers/legacyMeshOutbound.ts +566 -0
  693. package/src/internal/routes/providers/legacyMeshOutboundDelivery.ts +473 -0
  694. package/src/internal/routes/providers/propAmm.ts +640 -0
  695. package/src/internal/routes/providers/relay.test.ts +1263 -41
  696. package/src/internal/routes/providers/relay.ts +423 -38
  697. package/src/internal/routes/providers/rhino.ts +14 -1
  698. package/src/internal/routes/providers/squid.ts +21 -0
  699. package/src/internal/routes/providers/stargate.test.ts +105 -1
  700. package/src/internal/routes/providers/stargate.ts +22 -9
  701. package/src/internal/routes/providers/symbiosis.ts +13 -47
  702. package/src/providers/index.test.ts +2 -0
  703. package/src/providers/index.ts +18 -0
  704. package/dist/admin/Access.d.ts +0 -39
  705. package/dist/admin/Access.d.ts.map +0 -1
  706. package/dist/admin/Access.js +0 -73
  707. package/dist/admin/Access.js.map +0 -1
  708. package/src/admin/Access.test.ts +0 -130
  709. package/src/admin/Access.ts +0 -85
@@ -15,11 +15,11 @@ import { tempoMainnet } from 'viem/tempo/chains';
15
15
  import * as z from 'zod/mini';
16
16
  import * as ApiKey from '../ApiKey.js';
17
17
  import * as ApiKeys from '../ApiKeys.js';
18
- import * as ApiKeyAdmissions from '../db/tables/apiKeyAdmissions.js';
19
- import * as ApiKeyOwnerTombstones from '../db/tables/apiKeyOwnerTombstones.js';
20
18
  import * as AuthAccounts from '../db/tables/authAccounts.js';
21
19
  import * as BetterAuth from './BetterAuth.js';
20
+ import * as CliAuth from './CliAuth.js';
22
21
  import * as Db from '../db/Db.js';
22
+ import * as ExecutionContext from './ExecutionContext.js';
23
23
  import * as Memberships from '../db/tables/memberships.js';
24
24
  import * as IpAllowlist from './IpAllowlist.js';
25
25
  import * as Metadata from '../apps/metadata.js';
@@ -41,6 +41,8 @@ const defaultIdentitySessionTtl = 24 * 60 * 60;
41
41
  const defaultMppRateLimit = { limit: 100, period: 'minute' };
42
42
  const defaultPublicRateLimit = { limit: 60, period: 'minute' };
43
43
  const identityCookieName = 'tempo_identity';
44
+ const privacyUrl = 'https://tempo.xyz/privacy-policy/';
45
+ const termsUrl = 'https://console.tempo.xyz/legal/terms';
44
46
  const walletIdentityIssuer = 'https://wallet.tempo.xyz/api/oidc';
45
47
  function isIdentityTokenError(error) {
46
48
  return (error instanceof jose.errors.JOSEAlgNotAllowed ||
@@ -361,13 +363,15 @@ function createAuthMiddleware(options, resolve) {
361
363
  ...(sessionChainIds ? { sessionChainIds: new Set(sessionChainIds) } : {}),
362
364
  },
363
365
  }),
364
- rateLimit: RateLimit.memory(options.rateLimit),
366
+ rateLimit: rateLimitStore(options.rateLimit),
365
367
  ...(options.session ? { session: options.session } : {}),
366
368
  ...(options.superAdmin?.secret
367
369
  ? { superAdmin: { tokenHash: ApiKey.hash(options.superAdmin.secret) } }
368
370
  : {}),
369
371
  };
370
372
  return createMiddleware((c, next) => {
373
+ // Every route records its credential, including unprotected and unmatched paths.
374
+ recordCredential(c, getApiKeyCredential(c));
371
375
  const resolved = resolveRequestPolicy(c, { base, defaults, options });
372
376
  if (!resolved)
373
377
  return next();
@@ -406,15 +410,28 @@ function resolveRequestPolicy(c, options) {
406
410
  }
407
411
  function createApiKeyResolver(options) {
408
412
  const requests = new WeakMap();
409
- const uncached = (c, token) => {
413
+ // Requests whose key came from KV in this request: `ApiKeys.resolve` already
414
+ // read the fences, so reading them again adds a round trip and nothing else.
415
+ const fenced = new WeakMap();
416
+ const uncached = async (c, token) => {
410
417
  const kv = contextKv(c);
411
- return kv
412
- ? ApiKeys.resolve(kv.store, token, { scopeCatalog: options.scopeCatalog })
413
- : Promise.resolve(null);
418
+ if (!kv)
419
+ return null;
420
+ const apiKey = await ApiKeys.resolve(kv.store, token, { scopeCatalog: options.scopeCatalog });
421
+ fenced.set(c, ApiKey.hash(token));
422
+ return apiKey;
414
423
  };
415
424
  const cache = options.apiKey === false || options.apiKey?.cache === false
416
425
  ? { invalidate: () => { }, peek: () => undefined, resolve: uncached }
417
426
  : cachedResolve(uncached, options.apiKey?.cache ?? {});
427
+ // A cached record still checks its fences every request, so revocation and
428
+ // owner deletion never wait for the isolate cache to expire.
429
+ const active = async (c, token, apiKey) => {
430
+ const kv = contextKv(c);
431
+ if (!apiKey || !kv || fenced.get(c) === ApiKey.hash(token))
432
+ return apiKey;
433
+ return (await ApiKeys.isFenced(kv.store, apiKey)) ? null : apiKey;
434
+ };
418
435
  return {
419
436
  peek: (c, token) => {
420
437
  const tokenHash = ApiKey.hash(token);
@@ -423,18 +440,17 @@ function createApiKeyResolver(options) {
423
440
  return existing.apiKey;
424
441
  return cache.peek(token);
425
442
  },
443
+ probe: async (c, token) => {
444
+ // Probes must not warm the resolution cache before rate-limit admission.
445
+ return active(c, token, await uncached(c, token));
446
+ },
426
447
  resolve: async (c, token) => {
427
448
  const tokenHash = ApiKey.hash(token);
428
449
  const existing = requests.get(c);
429
450
  if (existing?.tokenHash === tokenHash)
430
451
  return existing.apiKey;
431
452
  const cached = await cache.resolve(c, token);
432
- const kv = contextKv(c);
433
- const apiKey = cached &&
434
- ((kv && (await ApiKeys.isOwnerDeleted(kv.store, cached))) ||
435
- !(await apiKeyOwnerExists(cached, options.db)))
436
- ? null
437
- : cached;
453
+ const apiKey = await active(c, token, cached);
438
454
  if (cached && !apiKey)
439
455
  cache.invalidate(token);
440
456
  requests.set(c, { apiKey, tokenHash });
@@ -442,17 +458,6 @@ function createApiKeyResolver(options) {
442
458
  },
443
459
  };
444
460
  }
445
- /** Rejects attributed keys fenced by a committed owner deletion. */
446
- async function apiKeyOwnerExists(apiKey, source) {
447
- if (!source)
448
- return true;
449
- const db = Db.get(source);
450
- if (!(await ApiKeyAdmissions.matches(db, apiKey)))
451
- return false;
452
- if (await ApiKeyOwnerTombstones.isDeleted(db, apiKey))
453
- return false;
454
- return true;
455
- }
456
461
  /** Zod schemas documenting the session sign-in surface. */
457
462
  var schema;
458
463
  (function (schema) {
@@ -546,7 +551,7 @@ export function install(options) {
546
551
  get email() {
547
552
  return options.email();
548
553
  },
549
- rateLimit: RateLimit.memory(options_middleware.rateLimit),
554
+ rateLimit: rateLimitStore(options_middleware.rateLimit),
550
555
  secret: options_session.secret,
551
556
  ...(options_session.google ? { google: options_session.google } : {}),
552
557
  ...(options_session.trustedOrigins
@@ -591,7 +596,10 @@ export function install(options) {
591
596
  return value === null ? undefined : JSON.parse(value);
592
597
  },
593
598
  async set(key, value, options) {
594
- await kv.store.put(`auth:${key}`, JSON.stringify(value), options?.ttl ? { ttl: options.ttl * 1_000 } : {});
599
+ const payload = key.startsWith('session:')
600
+ ? { ...value, ...(await bindWalletSession(value)) }
601
+ : value;
602
+ await kv.store.put(`auth:${key}`, JSON.stringify(payload), options?.ttl ? { ttl: options.ttl * 1_000 } : {});
595
603
  },
596
604
  },
597
605
  ...(ttl ? { ttl } : {}),
@@ -628,8 +636,51 @@ export function install(options) {
628
636
  return { email: verifiedEmail ?? user.email ?? undefined, user };
629
637
  });
630
638
  }
639
+ async function bindWalletSession(payload) {
640
+ const user = await resolveWallet(payload);
641
+ if (!user)
642
+ throw new Error('Authenticated wallet user was not found');
643
+ if (!user.user.termsSharedAt)
644
+ await Users.recordTermsShared(Db.get(db), user.user.id);
645
+ return { email: user.email, userId: user.user.id };
646
+ }
647
+ async function resolveWalletSession(payload) {
648
+ // Legacy sessions cannot be safely rebound after an email or wallet reassignment.
649
+ if (!payload.userId)
650
+ return null;
651
+ const database = Db.get(db);
652
+ const [user, linkedUserId] = await Promise.all([
653
+ Users.get(database, payload.userId),
654
+ AuthAccounts.getWalletUserId(database, payload.address),
655
+ ]);
656
+ if (!user || linkedUserId !== payload.userId)
657
+ return null;
658
+ if (payload.email && (user.email !== payload.email || !user.emailVerified))
659
+ return null;
660
+ return { email: user.emailVerified ? user.email : undefined, user };
661
+ }
662
+ // CLI sessions act as the approving user; the principal's identity names the
663
+ // CLI session so handlers never mistake it for a wallet sign-in.
664
+ const resolveCli = async (token) => {
665
+ const record = await CliAuth.resolve(kv.store, token);
666
+ if (!record)
667
+ return null;
668
+ const user = await Users.get(Db.get(db), record.userId);
669
+ if (!user)
670
+ return null;
671
+ return {
672
+ cli: { expiresAt: record.expiresAt, scopes: record.scopes ?? [] },
673
+ ...(user.emailVerified && user.email ? { email: user.email } : {}),
674
+ id: user.id,
675
+ identity: { provider: 'cli', subject: record.id },
676
+ type: 'session',
677
+ };
678
+ };
631
679
  const session = {
632
680
  resolve: async (c) => {
681
+ const bearer = /^Bearer\s+(.+)$/i.exec(c.req.header('authorization') ?? '')?.[1];
682
+ if (bearer && CliAuth.isToken(bearer))
683
+ return resolveCli(bearer);
633
684
  const [betterAuth, identitySession, wallet] = await Promise.all([
634
685
  (async () => {
635
686
  const auth = BetterAuth.fromContext(c, options_betterAuth);
@@ -663,7 +714,7 @@ export function install(options) {
663
714
  const payload = JSON.parse(value);
664
715
  if (payload.expiresAt <= Math.floor(Date.now() / 1_000))
665
716
  return null;
666
- const user = await resolveWallet(payload);
717
+ const user = await resolveWalletSession(payload);
667
718
  if (!user)
668
719
  return null;
669
720
  return {
@@ -677,7 +728,7 @@ export function install(options) {
677
728
  const payload = await handler.getSession(c.req.raw);
678
729
  if (!payload)
679
730
  return null;
680
- const user = await resolveWallet(payload);
731
+ const user = await resolveWalletSession(payload);
681
732
  if (!user)
682
733
  return null;
683
734
  return {
@@ -700,6 +751,11 @@ export function install(options) {
700
751
  const policy_public = policy({ public: true });
701
752
  const describe = OpenApi.describeRoute({ hide: true });
702
753
  const app = new Hono()
754
+ .use('*', async (c, next) => {
755
+ await next();
756
+ c.header('Tempo-Terms-URL', termsUrl);
757
+ c.header('Tempo-Privacy-URL', privacyUrl);
758
+ })
703
759
  .use('/v1/auth/siwe', policy_public, describe)
704
760
  .use('/v1/auth/siwe/*', policy_public, describe);
705
761
  // Documented operations: pre-routes carrying the OpenAPI metadata and the
@@ -794,11 +850,12 @@ export function install(options) {
794
850
  });
795
851
  const address = Address.checksum(claims.subject);
796
852
  await Users.upsertByAddress(Db.get(db), { address });
853
+ const binding = await bindWalletSession({ address, email: claims.email });
797
854
  const issuedAt = Math.floor(Date.now() / 1_000);
798
855
  const token = Hex.fromBytes(crypto.getRandomValues(new Uint8Array(32))).slice(2);
799
856
  await kv.store.put(identitySessionKey(token), JSON.stringify({
800
857
  address,
801
- ...(claims.email ? { email: claims.email } : {}),
858
+ ...binding,
802
859
  expiresAt: issuedAt + identitySessionTtl,
803
860
  issuedAt,
804
861
  }), { ttl: identitySessionTtl * 1_000 });
@@ -814,10 +871,12 @@ export function install(options) {
814
871
  app.post('/v1/auth/logout', policy(false), createMiddleware(async (c, next) => {
815
872
  const auth = c.get('auth');
816
873
  const principal = principalFromPublic(c, auth);
817
- const result = await consumeRateLimit(auth, {
874
+ const result = await Timing.time(c, 'rate_limit', () => consumeRateLimit(auth, {
818
875
  key: `public:${principal.id}`,
819
876
  limit: auth.publicRateLimit ?? defaultPublicRateLimit,
820
- });
877
+ principal: `public:${principal.id}`,
878
+ waitUntil: ExecutionContext.waitUntil(c),
879
+ }));
821
880
  if (result) {
822
881
  setRateLimitHeaders(c, result);
823
882
  if (!result.allowed)
@@ -827,7 +886,7 @@ export function install(options) {
827
886
  await next();
828
887
  return undefined;
829
888
  }), OpenApi.describeRoute({
830
- description: 'Revokes auth sessions and clears their cookies.',
889
+ description: 'Revokes auth sessions and clears their cookies. A CLI session sent as `Authorization: Bearer` is revoked on its own.',
831
890
  hide: false,
832
891
  operationId: 'logout',
833
892
  responses: {
@@ -838,6 +897,22 @@ export function install(options) {
838
897
  summary: 'Sign out',
839
898
  tags: ['Authentication'],
840
899
  }), async (c) => {
900
+ // A CLI session carries only its bearer token; revoke it and leave browser sessions alone.
901
+ const bearer = /^Bearer\s+(.+)$/i.exec(c.req.header('authorization') ?? '')?.[1];
902
+ if (bearer && CliAuth.isToken(bearer)) {
903
+ try {
904
+ await CliAuth.revoke(kv.store, bearer);
905
+ }
906
+ catch (cause) {
907
+ c.error = cause instanceof Error ? cause : new Error('CLI logout failed', { cause });
908
+ return Response.error(c, {
909
+ code: 'session_logout_failed',
910
+ message: 'Session logout failed',
911
+ status: 500,
912
+ });
913
+ }
914
+ return c.body(null, 204);
915
+ }
841
916
  const walletHeaders = (() => {
842
917
  const authorization = c.req.header('authorization');
843
918
  const cookie = c.req.header('cookie');
@@ -918,7 +993,7 @@ export function install(options) {
918
993
  Metadata.attach(app, {
919
994
  securitySchemes: {
920
995
  session: {
921
- description: 'Session cookie established by email OTP, Wallet identity, or SIWE sign-in. Browsers send `tempo_auth.session_token`, `tempo_identity`, or `accounts_auth`; Accounts sessions may also use `Authorization: Bearer <token>`.', // prettier-ignore
996
+ description: 'Session cookie established by email OTP, Wallet identity, or SIWE sign-in. Browsers send `tempo_auth.session_token`, `tempo_identity`, or `accounts_auth`; Accounts sessions may also use `Authorization: Bearer <token>`, and CLI sessions always use `Authorization: Bearer tempo:cli:…`.', // prettier-ignore
922
997
  in: 'header',
923
998
  name: 'Cookie',
924
999
  type: 'apiKey',
@@ -929,7 +1004,6 @@ export function install(options) {
929
1004
  })();
930
1005
  const resolve = createApiKeyResolver({
931
1006
  apiKey: options_middleware.apiKey,
932
- db: options.db,
933
1007
  scopeCatalog,
934
1008
  });
935
1009
  const defaults = laneDefaults(options_middleware);
@@ -942,12 +1016,15 @@ export function install(options) {
942
1016
  : undefined;
943
1017
  return createMiddleware(async (c, next) => {
944
1018
  const credential = getApiKeyCredential(c);
1019
+ recordCredential(c, credential);
945
1020
  const resolved = resolveRequestPolicy(c, { base, defaults, options: options_middleware });
946
1021
  const isSuperAdmin = credential &&
947
1022
  superAdminTokenHash !== undefined &&
948
1023
  ApiKey.hash(credential.token) === superAdminTokenHash;
1024
+ // CLI session tokens are never API keys, so they skip key resolution here too.
949
1025
  const canUseApiKeyQuota = credential &&
950
1026
  !isSuperAdmin &&
1027
+ !CliAuth.isToken(credential.token) &&
951
1028
  !hasPaymentCredential(c) &&
952
1029
  options_middleware.apiKey !== false &&
953
1030
  resolved?.policy?.apiKey &&
@@ -955,11 +1032,20 @@ export function install(options) {
955
1032
  const cached = canUseApiKeyQuota ? resolve.peek(c, credential.token) : undefined;
956
1033
  if (cached)
957
1034
  return next();
958
- const response = await Timing.time(c, 'edge_rate_limit', () => options_edgeRateLimit(c.req.raw));
1035
+ const response = await Timing.time(c, 'edge_rate_limit', () => options_edgeRateLimit(c.req.raw, canUseApiKeyQuota
1036
+ ? {
1037
+ resolvePartition: async () => {
1038
+ const apiKey = cached === undefined ? await resolve.probe(c, credential.token) : cached;
1039
+ // Rotating invalid credentials stays in the anonymous transport bucket.
1040
+ return apiKey ? `api-key:${ApiKey.hash(credential.token)}` : undefined;
1041
+ },
1042
+ }
1043
+ : {}));
959
1044
  if (response)
960
1045
  return response;
1046
+ // Cold keys resolve here, ahead of the auth lane, so time both under one name.
961
1047
  if (canUseApiKeyQuota && cached === undefined)
962
- await resolve.resolve(c, credential.token);
1048
+ await Timing.sum(c, 'auth_key', () => resolve.resolve(c, credential.token));
963
1049
  return next();
964
1050
  });
965
1051
  })();
@@ -1292,6 +1378,7 @@ export function require(policy) {
1292
1378
  return createMiddleware(async (c, next) => {
1293
1379
  const auth = c.get('auth');
1294
1380
  const credential = getApiKeyCredential(c);
1381
+ recordCredential(c, credential);
1295
1382
  const hasQueryApiKey = new URL(c.req.url).searchParams.has('key');
1296
1383
  // Auth owns `key`; strict route schemas must not validate it.
1297
1384
  stripApiKeyQuery(c);
@@ -1331,7 +1418,11 @@ export function require(policy) {
1331
1418
  c.set('principal', { actor: 'super_admin', id: 'super_admin', type: 'super_admin' });
1332
1419
  return proceed();
1333
1420
  }
1334
- const apiKey_resolved = await auth.apiKey?.resolve(c, credential.token);
1421
+ // CLI session tokens are prefixed, so they skip the API-key lookup.
1422
+ const cliToken = CliAuth.isToken(credential.token);
1423
+ const apiKey_resolved = cliToken
1424
+ ? null
1425
+ : await Timing.sum(c, 'auth_key', () => auth.apiKey?.resolve(c, credential.token));
1335
1426
  if (!apiKey_resolved) {
1336
1427
  if (unsupportedChain)
1337
1428
  return Response.unsupportedChainId(c, unsupportedChain.chainId, unsupportedChain.supportedChainIds);
@@ -1345,6 +1436,18 @@ export function require(policy) {
1345
1436
  return proceed();
1346
1437
  }
1347
1438
  }
1439
+ if (cliToken)
1440
+ return jsonError(c, policy.session
1441
+ ? {
1442
+ code: 'session_invalid',
1443
+ message: 'CLI session is invalid or expired. Sign in again.',
1444
+ status: 401,
1445
+ }
1446
+ : {
1447
+ code: 'forbidden',
1448
+ message: 'CLI sessions cannot call this route. Use an API key.',
1449
+ status: 403,
1450
+ });
1348
1451
  return jsonError(c, {
1349
1452
  code: 'api_key_invalid',
1350
1453
  message: 'Invalid API key',
@@ -1379,12 +1482,15 @@ export function require(policy) {
1379
1482
  ? (policy.public?.rateLimit ?? auth.publicRateLimit ?? { limit: 60, period: 'minute' })
1380
1483
  : resolveApiKeyLimit({ apiKey, auth, policy: policy.apiKey, scope });
1381
1484
  const paid = hasPayment && !throttled;
1485
+ const bucket = policy.apiKey.bucket;
1382
1486
  const result = paid
1383
1487
  ? null
1384
- : await consumeRateLimit(auth, {
1385
- key: rateLimitKey(`api_key:${apiKey.id}:scope:${scope}`, policy.apiKey.bucket),
1488
+ : await Timing.time(c, 'rate_limit', () => consumeRateLimit(auth, {
1489
+ key: rateLimitKey(`api_key:${apiKey.id}:scope:${scope}`, bucket),
1386
1490
  limit,
1387
- });
1491
+ principal: `api_key:${apiKey.id}`,
1492
+ waitUntil: ExecutionContext.waitUntil(c),
1493
+ }));
1388
1494
  if (result) {
1389
1495
  setRateLimitHeaders(c, result);
1390
1496
  // Surface the bucket so callers can correlate a 429 with the exhausted
@@ -1417,7 +1523,7 @@ export function require(policy) {
1417
1523
  if (missing.length > 0)
1418
1524
  return jsonError(c, {
1419
1525
  code: 'api_key_forbidden',
1420
- message: 'API key missing required scope',
1526
+ message: `API key is missing required permissions: ${missing.join(', ')}. Use an API key with these scopes.`,
1421
1527
  status: 403,
1422
1528
  });
1423
1529
  if (paid)
@@ -1464,10 +1570,12 @@ export function require(policy) {
1464
1570
  }
1465
1571
  const limit = policy.public?.rateLimit;
1466
1572
  if (limit) {
1467
- const result = await consumeRateLimit(auth, {
1573
+ const result = await Timing.time(c, 'rate_limit', () => consumeRateLimit(auth, {
1468
1574
  key: rateLimitKey(`public:${publicPrincipal.id}`, policy.public?.bucket),
1469
1575
  limit,
1470
- });
1576
+ principal: `public:${publicPrincipal.id}`,
1577
+ waitUntil: ExecutionContext.waitUntil(c),
1578
+ }));
1471
1579
  if (result)
1472
1580
  setRateLimitHeaders(c, result);
1473
1581
  if (!result || result.allowed) {
@@ -1508,6 +1616,10 @@ export function require(policy) {
1508
1616
  * server-side — we just stop waiting for it.
1509
1617
  */
1510
1618
  const rateLimitConsumeTimeout = 300;
1619
+ /** Accepts a ready store or builds the counter-backed default from its options. */
1620
+ function rateLimitStore(options) {
1621
+ return options && 'consume' in options ? options : RateLimit.memory(options);
1622
+ }
1511
1623
  /** Consumes one quota and returns null when its counter is unavailable, allowing callers to fail open. */
1512
1624
  export function consumeRateLimit(auth, options) {
1513
1625
  if (!auth.rateLimit)
@@ -1591,6 +1703,14 @@ function getApiKeyCredential(c) {
1591
1703
  return { token: apiKey };
1592
1704
  return null;
1593
1705
  }
1706
+ // Recorded before any lookup: requests that stall or are canceled during
1707
+ // resolution never receive a principal, but still need caller attribution.
1708
+ function recordCredential(c, credential) {
1709
+ if (credential)
1710
+ c.set('credential', 'api_key');
1711
+ else if (hasPaymentCredential(c))
1712
+ c.set('credential', 'payment');
1713
+ }
1594
1714
  function clientIp(c, auth) {
1595
1715
  return (trustedClientIps.get(c.req.raw) ??
1596
1716
  (auth.publicClientIp ? auth.publicClientIp(c.req.raw) : c.req.header('cf-connecting-ip')));
@@ -1717,10 +1837,12 @@ function principalFromPublic(c, auth) {
1717
1837
  }
1718
1838
  async function requirePayment(c, next, options) {
1719
1839
  if (hasPaymentCredential(c)) {
1720
- const result = await consumeRateLimit(options.auth, {
1840
+ const result = await Timing.time(c, 'rate_limit', () => consumeRateLimit(options.auth, {
1721
1841
  key: rateLimitKey(`mpp:${options.principal.type}:${options.principal.id}`, options.policy.mpp?.bucket),
1722
1842
  limit: options.policy.mpp?.rateLimit ?? options.auth.mpp?.rateLimit ?? defaultMppRateLimit,
1723
- });
1843
+ principal: `mpp:${options.principal.type}:${options.principal.id}`,
1844
+ waitUntil: ExecutionContext.waitUntil(c),
1845
+ }));
1724
1846
  if (result) {
1725
1847
  setRateLimitHeaders(c, result);
1726
1848
  c.header('RateLimit-Scope', 'mpp');
@@ -1801,18 +1923,12 @@ async function resolveSession(c, auth) {
1801
1923
  /** Maximum resolve-cache entries held per isolate before eviction. */
1802
1924
  const cachedMaxEntries = 10_000;
1803
1925
  /**
1804
- * Wraps token resolution with a short-TTL per-isolate cache so hot keys skip
1805
- * the backend read on every request. Positive results cache for `ttl`
1806
- * (default 60s), negative for `negativeTtl` (default 10s) so a freshly minted
1807
- * key is usable quickly; concurrent misses for one token are single-flighted.
1808
- * Entries are keyed by the token's sha256 (`ApiKey.hash`) — never the
1809
- * plaintext. Key updates may remain stale for up to `ttl`, the accepted
1810
- * trade-off for removing a backend read from the auth path.
1926
+ * Caches completed resolutions per isolate by token hash, with positive and negative TTLs.
1927
+ * Each miss resolves independently so callers never await another request's pending I/O.
1811
1928
  */
1812
- function cachedResolve(resolve, options) {
1929
+ export function cachedResolve(resolve, options) {
1813
1930
  const { negativeTtl = 10_000, now = Date.now, ttl = 60_000 } = options;
1814
1931
  const cells = new Map();
1815
- const flights = new Map();
1816
1932
  return {
1817
1933
  invalidate(token) {
1818
1934
  cells.delete(`v1:${ApiKey.hash(token)}`);
@@ -1835,31 +1951,19 @@ function cachedResolve(resolve, options) {
1835
1951
  return cell.value;
1836
1952
  if (cell)
1837
1953
  cells.delete(key);
1838
- const existing = flights.get(key);
1839
- if (existing)
1840
- return existing;
1841
- const flight = (async () => {
1842
- const value = await resolve(c, token);
1843
- // Bound the cache: random invalid tokens each add a (negative) entry,
1844
- // so sweep expired cells at the cap and then drop the oldest.
1845
- if (cells.size >= cachedMaxEntries) {
1846
- const time = now();
1847
- for (const [name, entry] of cells)
1848
- if (entry.expiresAt <= time)
1849
- cells.delete(name);
1850
- while (cells.size >= cachedMaxEntries)
1851
- cells.delete(cells.keys().next().value);
1852
- }
1853
- cells.set(key, { expiresAt: now() + (value ? ttl : negativeTtl), value });
1854
- return value;
1855
- })();
1856
- flights.set(key, flight);
1857
- try {
1858
- return await flight;
1859
- }
1860
- finally {
1861
- flights.delete(key);
1954
+ const value = await resolve(c, token);
1955
+ // Bound the cache: random invalid tokens each add a (negative) entry,
1956
+ // so sweep expired cells at the cap and then drop the oldest.
1957
+ if (cells.size >= cachedMaxEntries) {
1958
+ const time = now();
1959
+ for (const [name, entry] of cells)
1960
+ if (entry.expiresAt <= time)
1961
+ cells.delete(name);
1962
+ while (cells.size >= cachedMaxEntries)
1963
+ cells.delete(cells.keys().next().value);
1862
1964
  }
1965
+ cells.set(key, { expiresAt: now() + (value ? ttl : negativeTtl), value });
1966
+ return value;
1863
1967
  },
1864
1968
  };
1865
1969
  }