tapimo 0.11.0 → 0.13.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 (443) hide show
  1. package/dist/App.d.ts +6396 -4575
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +39 -4
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.d.ts +15 -0
  6. package/dist/Assets.d.ts.map +1 -1
  7. package/dist/Assets.js +7 -0
  8. package/dist/Assets.js.map +1 -1
  9. package/dist/Scope.d.ts +2 -0
  10. package/dist/Scope.d.ts.map +1 -1
  11. package/dist/Scope.js +17 -0
  12. package/dist/Scope.js.map +1 -1
  13. package/dist/admin/App.d.ts +176 -78
  14. package/dist/admin/App.d.ts.map +1 -1
  15. package/dist/admin/apps/api-keys.d.ts +84 -4
  16. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  17. package/dist/admin/apps/api-keys.js +54 -0
  18. package/dist/admin/apps/api-keys.js.map +1 -1
  19. package/dist/admin/apps/earn-vaults.d.ts +123 -9
  20. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  21. package/dist/admin/apps/earn-vaults.js +60 -7
  22. package/dist/admin/apps/earn-vaults.js.map +1 -1
  23. package/dist/admin/apps/organizations.d.ts.map +1 -1
  24. package/dist/admin/apps/organizations.js +4 -2
  25. package/dist/admin/apps/organizations.js.map +1 -1
  26. package/dist/admin/apps/verified-tokens.d.ts +90 -90
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.js +71 -71
  29. package/dist/admin/ui.generated.js.map +1 -1
  30. package/dist/apps/Zones.d.ts +16 -16
  31. package/dist/apps/Zones.js +4 -4
  32. package/dist/apps/data/App.d.ts +1699 -749
  33. package/dist/apps/data/App.d.ts.map +1 -1
  34. package/dist/apps/data/App.js +58 -9
  35. package/dist/apps/data/App.js.map +1 -1
  36. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  37. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  38. package/dist/apps/data/ZoneSelection.js +44 -0
  39. package/dist/apps/data/ZoneSelection.js.map +1 -0
  40. package/dist/apps/data/routes/activities.d.ts +2417 -50
  41. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  42. package/dist/apps/data/routes/activities.js +1896 -1293
  43. package/dist/apps/data/routes/activities.js.map +1 -1
  44. package/dist/apps/data/routes/addresses.d.ts +471 -340
  45. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  46. package/dist/apps/data/routes/balances.d.ts +12 -12
  47. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  48. package/dist/apps/data/routes/balances.js +44 -17
  49. package/dist/apps/data/routes/balances.js.map +1 -1
  50. package/dist/apps/data/routes/blocks.d.ts +42 -42
  51. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  52. package/dist/apps/data/routes/blocks.js +22 -12
  53. package/dist/apps/data/routes/blocks.js.map +1 -1
  54. package/dist/apps/data/routes/coingecko.d.ts +179 -179
  55. package/dist/apps/data/routes/earn.d.ts +144 -19
  56. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  57. package/dist/apps/data/routes/earn.js +160 -28
  58. package/dist/apps/data/routes/earn.js.map +1 -1
  59. package/dist/apps/data/routes/exchanges.d.ts +719 -13
  60. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  61. package/dist/apps/data/routes/exchanges.js +16 -13
  62. package/dist/apps/data/routes/exchanges.js.map +1 -1
  63. package/dist/apps/data/routes/fee-amm.d.ts +2 -2
  64. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  65. package/dist/apps/data/routes/fee-amm.js +9 -11
  66. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  67. package/dist/apps/data/routes/indexer.d.ts +34 -34
  68. package/dist/apps/data/routes/receipts.d.ts +363 -263
  69. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  70. package/dist/apps/data/routes/receipts.js +29 -11
  71. package/dist/apps/data/routes/receipts.js.map +1 -1
  72. package/dist/apps/data/routes/rpc.js +24 -10
  73. package/dist/apps/data/routes/rpc.js.map +1 -1
  74. package/dist/apps/data/routes/tokenlist.d.ts +13 -13
  75. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  76. package/dist/apps/data/routes/tokenlist.js +16 -15
  77. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  78. package/dist/apps/data/routes/tokens.d.ts +112 -98
  79. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  80. package/dist/apps/data/routes/tokens.js +85 -35
  81. package/dist/apps/data/routes/tokens.js.map +1 -1
  82. package/dist/apps/data/routes/transactions.d.ts +7 -2
  83. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  84. package/dist/apps/data/routes/transactions.js +38 -18
  85. package/dist/apps/data/routes/transactions.js.map +1 -1
  86. package/dist/apps/data/routes/transfers.d.ts +1 -1
  87. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  88. package/dist/apps/data/routes/transfers.js +25 -21
  89. package/dist/apps/data/routes/transfers.js.map +1 -1
  90. package/dist/apps/data/routes/valuation.d.ts +1 -1
  91. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  92. package/dist/apps/data/routes/valuation.js +12 -7
  93. package/dist/apps/data/routes/valuation.js.map +1 -1
  94. package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
  95. package/dist/apps/data/routes/webhooks.d.ts +15 -15
  96. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  97. package/dist/apps/data/routes/webhooks.js +2 -2
  98. package/dist/apps/data/routes/webhooks.js.map +1 -1
  99. package/dist/apps/data/routes/zones.d.ts +32 -32
  100. package/dist/apps/data/routes/zones.js +1 -1
  101. package/dist/apps/funding/App.d.ts +38 -27
  102. package/dist/apps/funding/App.d.ts.map +1 -1
  103. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  104. package/dist/apps/funding/routes/chains.js +5 -4
  105. package/dist/apps/funding/routes/chains.js.map +1 -1
  106. package/dist/apps/funding/routes/deposit-addresses.d.ts +16 -16
  107. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  108. package/dist/apps/funding/routes/deposit-addresses.js +24 -19
  109. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  110. package/dist/apps/funding/routes/providers.d.ts +13 -13
  111. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  112. package/dist/apps/funding/routes/providers.js +3 -2
  113. package/dist/apps/funding/routes/providers.js.map +1 -1
  114. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  115. package/dist/apps/funding/routes/quotes.js +2 -2
  116. package/dist/apps/funding/routes/quotes.js.map +1 -1
  117. package/dist/apps/funding/routes/transfers.d.ts +60 -48
  118. package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
  119. package/dist/apps/funding/routes/transfers.js +27 -19
  120. package/dist/apps/funding/routes/transfers.js.map +1 -1
  121. package/dist/apps/management/App.d.ts +4558 -3700
  122. package/dist/apps/management/App.d.ts.map +1 -1
  123. package/dist/apps/management/Billing.d.ts.map +1 -1
  124. package/dist/apps/management/Billing.js +19 -6
  125. package/dist/apps/management/Billing.js.map +1 -1
  126. package/dist/apps/management/routes/api-keys.d.ts +786 -175
  127. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  128. package/dist/apps/management/routes/api-keys.js +312 -34
  129. package/dist/apps/management/routes/api-keys.js.map +1 -1
  130. package/dist/apps/management/routes/billing.d.ts +103 -30
  131. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  132. package/dist/apps/management/routes/billing.js +91 -32
  133. package/dist/apps/management/routes/billing.js.map +1 -1
  134. package/dist/apps/management/routes/faucet.d.ts +35 -35
  135. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  136. package/dist/apps/management/routes/faucet.js +23 -12
  137. package/dist/apps/management/routes/faucet.js.map +1 -1
  138. package/dist/apps/management/routes/invitations.d.ts +46 -13
  139. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  140. package/dist/apps/management/routes/invitations.js +79 -29
  141. package/dist/apps/management/routes/invitations.js.map +1 -1
  142. package/dist/apps/management/routes/invite-links.d.ts +120 -75
  143. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  144. package/dist/apps/management/routes/invite-links.js +100 -41
  145. package/dist/apps/management/routes/invite-links.js.map +1 -1
  146. package/dist/apps/management/routes/me.d.ts +5 -5
  147. package/dist/apps/management/routes/me.d.ts.map +1 -1
  148. package/dist/apps/management/routes/me.js +14 -10
  149. package/dist/apps/management/routes/me.js.map +1 -1
  150. package/dist/apps/management/routes/members.d.ts +99 -78
  151. package/dist/apps/management/routes/members.d.ts.map +1 -1
  152. package/dist/apps/management/routes/members.js +37 -18
  153. package/dist/apps/management/routes/members.js.map +1 -1
  154. package/dist/apps/management/routes/orgs.d.ts +48 -8
  155. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  156. package/dist/apps/management/routes/orgs.js +48 -19
  157. package/dist/apps/management/routes/orgs.js.map +1 -1
  158. package/dist/apps/management/routes/projects.d.ts +108 -46
  159. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  160. package/dist/apps/management/routes/projects.js +72 -21
  161. package/dist/apps/management/routes/projects.js.map +1 -1
  162. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  163. package/dist/apps/management/routes/scopes.js +8 -5
  164. package/dist/apps/management/routes/scopes.js.map +1 -1
  165. package/dist/apps/management/routes/usage.d.ts +82 -82
  166. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  167. package/dist/apps/management/routes/usage.js +41 -31
  168. package/dist/apps/management/routes/usage.js.map +1 -1
  169. package/dist/apps/management/routes/verified-token-requests.d.ts +35 -7
  170. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  171. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  172. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  173. package/dist/apps/management/routes/webhooks.d.ts +200 -183
  174. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  175. package/dist/apps/management/routes/webhooks.js +80 -35
  176. package/dist/apps/management/routes/webhooks.js.map +1 -1
  177. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  178. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  179. package/dist/apps/mpp/internal/Adapter.js +12 -0
  180. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  181. package/dist/db/Db.d.ts +2 -0
  182. package/dist/db/Db.d.ts.map +1 -1
  183. package/dist/db/Db.js +52 -1
  184. package/dist/db/Db.js.map +1 -1
  185. package/dist/db/Schema.d.ts +26 -3
  186. package/dist/db/Schema.d.ts.map +1 -1
  187. package/dist/db/Schema.js +24 -5
  188. package/dist/db/Schema.js.map +1 -1
  189. package/dist/db/tables/earnVaults.d.ts +5 -1
  190. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  191. package/dist/db/tables/earnVaults.js +5 -0
  192. package/dist/db/tables/earnVaults.js.map +1 -1
  193. package/dist/db/tables/fundingCatalog.d.ts +4 -2
  194. package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
  195. package/dist/db/tables/fundingCatalog.js +5 -1
  196. package/dist/db/tables/fundingCatalog.js.map +1 -1
  197. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  198. package/dist/db/tables/webhookDeliveries.js +10 -0
  199. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  200. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  201. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  202. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  203. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  204. package/dist/db/tables/webhookQueueEvents.d.ts +14 -20
  205. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  206. package/dist/db/tables/webhookQueueEvents.js +68 -47
  207. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  208. package/dist/db/tables/webhookSubscriptions.d.ts +16 -5
  209. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  210. package/dist/db/tables/webhookSubscriptions.js +29 -5
  211. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  212. package/dist/handlers/internal/utils.d.ts.map +1 -1
  213. package/dist/handlers/internal/utils.js +9 -0
  214. package/dist/handlers/internal/utils.js.map +1 -1
  215. package/dist/internal/Auth.d.ts +11 -2
  216. package/dist/internal/Auth.d.ts.map +1 -1
  217. package/dist/internal/Auth.js +19 -6
  218. package/dist/internal/Auth.js.map +1 -1
  219. package/dist/internal/Cache.d.ts.map +1 -1
  220. package/dist/internal/Cache.js +11 -7
  221. package/dist/internal/Cache.js.map +1 -1
  222. package/dist/internal/EarnVaults.d.ts +43 -4
  223. package/dist/internal/EarnVaults.d.ts.map +1 -1
  224. package/dist/internal/EarnVaults.js +167 -0
  225. package/dist/internal/EarnVaults.js.map +1 -1
  226. package/dist/internal/Fetch.d.ts +23 -0
  227. package/dist/internal/Fetch.d.ts.map +1 -0
  228. package/dist/internal/Fetch.js +26 -0
  229. package/dist/internal/Fetch.js.map +1 -0
  230. package/dist/internal/Log.d.ts +3 -1
  231. package/dist/internal/Log.d.ts.map +1 -1
  232. package/dist/internal/Log.js +16 -3
  233. package/dist/internal/Log.js.map +1 -1
  234. package/dist/internal/OpenApi.d.ts +30 -24
  235. package/dist/internal/OpenApi.d.ts.map +1 -1
  236. package/dist/internal/OpenApi.js +140 -41
  237. package/dist/internal/OpenApi.js.map +1 -1
  238. package/dist/internal/Response.d.ts +14 -9
  239. package/dist/internal/Response.d.ts.map +1 -1
  240. package/dist/internal/Response.js +16 -5
  241. package/dist/internal/Response.js.map +1 -1
  242. package/dist/internal/Schema.d.ts +11 -10
  243. package/dist/internal/Schema.d.ts.map +1 -1
  244. package/dist/internal/Schema.js +14 -9
  245. package/dist/internal/Schema.js.map +1 -1
  246. package/dist/internal/Store.d.ts +28 -6
  247. package/dist/internal/Store.d.ts.map +1 -1
  248. package/dist/internal/Store.js +121 -25
  249. package/dist/internal/Store.js.map +1 -1
  250. package/dist/internal/Tidx.d.ts +2 -0
  251. package/dist/internal/Tidx.d.ts.map +1 -1
  252. package/dist/internal/Tidx.js +23 -6
  253. package/dist/internal/Tidx.js.map +1 -1
  254. package/dist/internal/Timeout.d.ts +36 -0
  255. package/dist/internal/Timeout.d.ts.map +1 -0
  256. package/dist/internal/Timeout.js +37 -0
  257. package/dist/internal/Timeout.js.map +1 -0
  258. package/dist/internal/Timing.d.ts +9 -0
  259. package/dist/internal/Timing.d.ts.map +1 -1
  260. package/dist/internal/Timing.js +7 -0
  261. package/dist/internal/Timing.js.map +1 -1
  262. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  263. package/dist/internal/WebhookDestination.js +3 -0
  264. package/dist/internal/WebhookDestination.js.map +1 -1
  265. package/dist/internal/Webhooks.d.ts +29 -12
  266. package/dist/internal/Webhooks.d.ts.map +1 -1
  267. package/dist/internal/Webhooks.js +37 -20
  268. package/dist/internal/Webhooks.js.map +1 -1
  269. package/dist/internal/funding/Action.d.ts +9 -0
  270. package/dist/internal/funding/Action.d.ts.map +1 -1
  271. package/dist/internal/funding/Action.js +16 -8
  272. package/dist/internal/funding/Action.js.map +1 -1
  273. package/dist/internal/funding/Catalog.d.ts +9 -2
  274. package/dist/internal/funding/Catalog.d.ts.map +1 -1
  275. package/dist/internal/funding/Catalog.js +19 -8
  276. package/dist/internal/funding/Catalog.js.map +1 -1
  277. package/dist/internal/funding/Deposit.d.ts +2 -2
  278. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  279. package/dist/internal/funding/Deposit.js +9 -8
  280. package/dist/internal/funding/Deposit.js.map +1 -1
  281. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  282. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  283. package/dist/internal/funding/DepositAddress.js +9 -8
  284. package/dist/internal/funding/DepositAddress.js.map +1 -1
  285. package/dist/internal/funding/Provider.d.ts +68 -13
  286. package/dist/internal/funding/Provider.d.ts.map +1 -1
  287. package/dist/internal/funding/Provider.js +42 -20
  288. package/dist/internal/funding/Provider.js.map +1 -1
  289. package/dist/internal/funding/Transfer.d.ts +13 -12
  290. package/dist/internal/funding/Transfer.d.ts.map +1 -1
  291. package/dist/internal/funding/Transfer.js +23 -21
  292. package/dist/internal/funding/Transfer.js.map +1 -1
  293. package/dist/internal/funding/providers/stargate.d.ts +38 -0
  294. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  295. package/dist/internal/funding/providers/stargate.js +277 -0
  296. package/dist/internal/funding/providers/stargate.js.map +1 -0
  297. package/dist/internal/index.d.ts +1 -0
  298. package/dist/internal/index.d.ts.map +1 -1
  299. package/dist/internal/index.js +1 -0
  300. package/dist/internal/index.js.map +1 -1
  301. package/dist/providers/index.d.ts +7 -0
  302. package/dist/providers/index.d.ts.map +1 -1
  303. package/dist/providers/index.js +3 -0
  304. package/dist/providers/index.js.map +1 -1
  305. package/package.json +3 -3
  306. package/src/App.test.ts +148 -0
  307. package/src/App.ts +45 -4
  308. package/src/Assets.test.ts +18 -0
  309. package/src/Assets.ts +22 -0
  310. package/src/Client.test-d.ts +311 -16
  311. package/src/Scope.test.ts +20 -0
  312. package/src/Scope.ts +16 -0
  313. package/src/admin/apps/api-keys.test.ts +75 -0
  314. package/src/admin/apps/api-keys.ts +64 -0
  315. package/src/admin/apps/earn-vaults.test.ts +143 -0
  316. package/src/admin/apps/earn-vaults.ts +84 -7
  317. package/src/admin/apps/organizations.ts +6 -2
  318. package/src/admin/ui/src/lib/api-keys.ts +19 -0
  319. package/src/admin/ui/src/routes/api-keys.tsx +125 -2
  320. package/src/admin/ui.generated.ts +71 -71
  321. package/src/apps/Zones.test.ts +4 -4
  322. package/src/apps/Zones.ts +4 -4
  323. package/src/apps/composition.test.ts +1 -1
  324. package/src/apps/data/App.test.ts +72 -0
  325. package/src/apps/data/App.ts +58 -10
  326. package/src/apps/data/ZoneSelection.test.ts +196 -0
  327. package/src/apps/data/ZoneSelection.ts +108 -0
  328. package/src/apps/data/routes/activities.test.ts +1843 -2
  329. package/src/apps/data/routes/activities.ts +2211 -1388
  330. package/src/apps/data/routes/balances.ts +134 -98
  331. package/src/apps/data/routes/blocks.test.ts +533 -0
  332. package/src/apps/data/routes/blocks.ts +36 -17
  333. package/src/apps/data/routes/earn.test.ts +187 -25
  334. package/src/apps/data/routes/earn.ts +228 -32
  335. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  336. package/src/apps/data/routes/exchanges.test.ts +31 -1
  337. package/src/apps/data/routes/exchanges.ts +19 -15
  338. package/src/apps/data/routes/fee-amm.ts +18 -11
  339. package/src/apps/data/routes/receipts.ts +48 -17
  340. package/src/apps/data/routes/rpc.test.ts +75 -0
  341. package/src/apps/data/routes/rpc.ts +23 -9
  342. package/src/apps/data/routes/tokenlist.ts +21 -18
  343. package/src/apps/data/routes/tokens.test.ts +607 -0
  344. package/src/apps/data/routes/tokens.ts +312 -231
  345. package/src/apps/data/routes/transactions.ts +69 -30
  346. package/src/apps/data/routes/transfers.test.ts +424 -3
  347. package/src/apps/data/routes/transfers.ts +57 -36
  348. package/src/apps/data/routes/valuation.ts +94 -78
  349. package/src/apps/data/routes/webhooks.ts +6 -2
  350. package/src/apps/data/routes/zones.test.ts +21 -15
  351. package/src/apps/data/routes/zones.ts +1 -1
  352. package/src/apps/funding/routes/chains.test.ts +211 -7
  353. package/src/apps/funding/routes/chains.ts +19 -12
  354. package/src/apps/funding/routes/deposit-addresses.test.ts +416 -0
  355. package/src/apps/funding/routes/deposit-addresses.ts +101 -84
  356. package/src/apps/funding/routes/providers.ts +9 -5
  357. package/src/apps/funding/routes/quotes.test.ts +42 -0
  358. package/src/apps/funding/routes/quotes.ts +8 -5
  359. package/src/apps/funding/routes/transfers.test.ts +430 -40
  360. package/src/apps/funding/routes/transfers.ts +76 -59
  361. package/src/apps/management/Billing.test.ts +26 -0
  362. package/src/apps/management/Billing.ts +24 -7
  363. package/src/apps/management/routes/api-keys.test.ts +398 -0
  364. package/src/apps/management/routes/api-keys.ts +481 -145
  365. package/src/apps/management/routes/billing.test.ts +209 -0
  366. package/src/apps/management/routes/billing.ts +254 -177
  367. package/src/apps/management/routes/faucet.test.ts +39 -0
  368. package/src/apps/management/routes/faucet.ts +75 -41
  369. package/src/apps/management/routes/invitations.test.ts +216 -0
  370. package/src/apps/management/routes/invitations.ts +186 -109
  371. package/src/apps/management/routes/invite-links.test.ts +263 -1
  372. package/src/apps/management/routes/invite-links.ts +295 -214
  373. package/src/apps/management/routes/me.test.ts +49 -0
  374. package/src/apps/management/routes/me.ts +42 -32
  375. package/src/apps/management/routes/members.test.ts +124 -1
  376. package/src/apps/management/routes/members.ts +81 -51
  377. package/src/apps/management/routes/orgs.test.ts +176 -0
  378. package/src/apps/management/routes/orgs.ts +101 -59
  379. package/src/apps/management/routes/projects.test.ts +183 -0
  380. package/src/apps/management/routes/projects.ts +124 -60
  381. package/src/apps/management/routes/scopes.test.ts +44 -0
  382. package/src/apps/management/routes/scopes.ts +37 -28
  383. package/src/apps/management/routes/usage.test.ts +92 -0
  384. package/src/apps/management/routes/usage.ts +186 -151
  385. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  386. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  387. package/src/apps/management/routes/webhooks.test.ts +234 -0
  388. package/src/apps/management/routes/webhooks.ts +191 -78
  389. package/src/apps/mpp/internal/Adapter.ts +13 -1
  390. package/src/db/Db.test.ts +41 -0
  391. package/src/db/Db.ts +75 -1
  392. package/src/db/Schema.ts +33 -5
  393. package/src/db/tables/earnVaults.test.ts +22 -0
  394. package/src/db/tables/earnVaults.ts +11 -1
  395. package/src/db/tables/fundingCatalog.test.ts +16 -2
  396. package/src/db/tables/fundingCatalog.ts +9 -3
  397. package/src/db/tables/webhookDeliveries.ts +13 -0
  398. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  399. package/src/db/tables/webhookQueueEvents.ts +95 -61
  400. package/src/db/tables/webhookSubscriptions.ts +45 -6
  401. package/src/handlers/internal/utils.test.ts +53 -0
  402. package/src/handlers/internal/utils.ts +15 -0
  403. package/src/internal/Auth.ts +35 -9
  404. package/src/internal/Cache.ts +14 -7
  405. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  406. package/src/internal/EarnVaults.test.ts +79 -0
  407. package/src/internal/EarnVaults.ts +277 -0
  408. package/src/internal/Fetch.test.ts +46 -0
  409. package/src/internal/Fetch.ts +56 -0
  410. package/src/internal/Log.test.ts +21 -0
  411. package/src/internal/Log.ts +20 -5
  412. package/src/internal/OpenApi.ts +177 -51
  413. package/src/internal/Response.test.ts +95 -0
  414. package/src/internal/Response.ts +41 -3
  415. package/src/internal/Schema.test.ts +18 -0
  416. package/src/internal/Schema.ts +19 -9
  417. package/src/internal/Store.test.ts +364 -0
  418. package/src/internal/Store.ts +153 -27
  419. package/src/internal/Tidx.test.ts +21 -1
  420. package/src/internal/Tidx.ts +23 -6
  421. package/src/internal/Timeout.test.ts +35 -0
  422. package/src/internal/Timeout.ts +73 -0
  423. package/src/internal/Timing.ts +16 -0
  424. package/src/internal/WebhookDestination.ts +3 -0
  425. package/src/internal/Webhooks.test.ts +122 -8
  426. package/src/internal/Webhooks.ts +59 -29
  427. package/src/internal/funding/Action.test.ts +41 -1
  428. package/src/internal/funding/Action.ts +69 -41
  429. package/src/internal/funding/Catalog.test.ts +34 -0
  430. package/src/internal/funding/Catalog.ts +28 -11
  431. package/src/internal/funding/Deposit.ts +71 -64
  432. package/src/internal/funding/DepositAddress.ts +50 -43
  433. package/src/internal/funding/Provider.test.ts +73 -0
  434. package/src/internal/funding/Provider.ts +246 -170
  435. package/src/internal/funding/Transfer.ts +133 -110
  436. package/src/internal/funding/providers/index.test.ts +22 -0
  437. package/src/internal/funding/providers/relay.test.ts +2 -2
  438. package/src/internal/funding/providers/stargate.test.ts +163 -0
  439. package/src/internal/funding/providers/stargate.ts +409 -0
  440. package/src/internal/index.test.ts +1 -0
  441. package/src/internal/index.ts +1 -0
  442. package/src/providers/index.test.ts +1 -0
  443. package/src/providers/index.ts +9 -0
package/src/App.test.ts CHANGED
@@ -40,6 +40,37 @@ describe('create', () => {
40
40
  expect(await store.get('status')).toMatchInlineSnapshot(`"ready"`)
41
41
  })
42
42
 
43
+ test('keeps cache persistence alive via waitUntil', async () => {
44
+ const pending = Promise.withResolvers<void>()
45
+ const waited: Promise<unknown>[] = []
46
+ const store = Store.from({
47
+ ...Store.memory(),
48
+ put: () => pending.promise,
49
+ type: 'cache',
50
+ })
51
+ const app = TestApp.create({ auth: false, cache: { store } })
52
+ app.get('/cache', async (c) =>
53
+ c.json(
54
+ await Store.memoize(async () => ({ value: 'fresh' }), {
55
+ key: 'app:cache',
56
+ store: c.get('store'),
57
+ ttl: 60_000,
58
+ }),
59
+ ),
60
+ )
61
+ const executionCtx = {
62
+ passThroughOnException: () => {},
63
+ waitUntil: (promise: Promise<unknown>) => void waited.push(promise),
64
+ }
65
+
66
+ const response = await app.request('/cache', undefined, undefined, executionCtx as never)
67
+
68
+ expect(response.status).toBe(200)
69
+ expect(waited).toHaveLength(1)
70
+ pending.resolve()
71
+ await Promise.all(waited)
72
+ })
73
+
43
74
  test('leaves routes public without auth middleware', async () => {
44
75
  const app = TestApp.create({ auth: false })
45
76
  const response = await app.request('/v1/tokens/not-an-address')
@@ -47,6 +78,57 @@ describe('create', () => {
47
78
  expect(response.status).toMatchInlineSnapshot(`400`)
48
79
  })
49
80
 
81
+ test('bounds a stalled request with a 504 envelope', async () => {
82
+ vi.useFakeTimers()
83
+ try {
84
+ const app = TestApp.create({ auth: false })
85
+ app.get('/hang', () => new Promise<never>(() => {}))
86
+
87
+ const pending = app.request('/hang')
88
+ await vi.advanceTimersByTimeAsync(60_000)
89
+ const response = await pending
90
+ const { requestId, ...body } = (await response.json()) as Record<string, unknown>
91
+
92
+ expect(response.status).toMatchInlineSnapshot(`504`)
93
+ expect(requestId).toBeTypeOf('string')
94
+ expect(body).toMatchInlineSnapshot(`
95
+ {
96
+ "error": {
97
+ "code": "request_timeout",
98
+ "message": "Request timed out",
99
+ },
100
+ }
101
+ `)
102
+ } finally {
103
+ vi.useRealTimers()
104
+ }
105
+ })
106
+
107
+ test('exempts mutations and paid requests from the deadline', async () => {
108
+ vi.useFakeTimers()
109
+ try {
110
+ const app = TestApp.create({ auth: false })
111
+ const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
112
+ app.post('/slow', async (c) => {
113
+ await wait(90_000)
114
+ return c.json({ ok: true }, 200)
115
+ })
116
+ app.get('/slow-paid', async (c) => {
117
+ await wait(90_000)
118
+ return c.json({ ok: true }, 200)
119
+ })
120
+
121
+ const post = app.request('/slow', { method: 'POST' })
122
+ const paid = app.request('/slow-paid', { headers: { authorization: 'Payment credential' } })
123
+ await vi.advanceTimersByTimeAsync(90_000)
124
+
125
+ expect((await post).status).toMatchInlineSnapshot(`200`)
126
+ expect((await paid).status).toMatchInlineSnapshot(`200`)
127
+ } finally {
128
+ vi.useRealTimers()
129
+ }
130
+ })
131
+
50
132
  test('serves public health check', async () => {
51
133
  const app = TestApp.create({ path: 'api/' })
52
134
  const response = await app.request('/api/health')
@@ -147,6 +229,54 @@ describe('create', () => {
147
229
  `)
148
230
  })
149
231
 
232
+ test('preserves named error schemas across generated documents', async () => {
233
+ const first = await (await TestApp.create().request('/openapi.json')).json()
234
+ const second = await (await TestApp.create().request('/openapi.json')).json()
235
+
236
+ expect(
237
+ [first, second].map((spec) => ({
238
+ forbidden: spec.components.schemas.ForbiddenError.type,
239
+ internal: spec.components.schemas.InternalError.type,
240
+ })),
241
+ ).toEqual([
242
+ { forbidden: 'object', internal: 'object' },
243
+ { forbidden: 'object', internal: 'object' },
244
+ ])
245
+ })
246
+
247
+ test('keeps standard and custom error component names distinct', async () => {
248
+ const spec = await (await TestApp.create().request('/openapi.json')).json()
249
+ const billing =
250
+ spec.paths['/v1/orgs/{orgId}/billing/stripe/checkout'].post.responses[501].content[
251
+ 'application/json'
252
+ ].schema.$ref
253
+ const funding =
254
+ spec.paths['/v1/funding/transfers/vault'].post.responses[501].content['application/json']
255
+ .schema.$ref
256
+ const billingName = billing.split('/').at(-1)
257
+ const fundingName = funding.split('/').at(-1)
258
+
259
+ expect({
260
+ billing: {
261
+ codes: spec.components.schemas[billingName].properties.error.properties.code.enum,
262
+ ref: billing,
263
+ },
264
+ funding: {
265
+ codes: spec.components.schemas[fundingName].properties.error.properties.code.enum,
266
+ ref: funding,
267
+ },
268
+ }).toEqual({
269
+ billing: {
270
+ codes: ['billing_unconfigured'],
271
+ ref: '#/components/schemas/NotImplementedError',
272
+ },
273
+ funding: {
274
+ codes: ['not_implemented'],
275
+ ref: '#/components/schemas/NotImplemented501Error',
276
+ },
277
+ })
278
+ })
279
+
150
280
  test('authenticates a minted store-backed key and rejects after revoke', async () => {
151
281
  const store = Store.memory()
152
282
  const { record, token } = await ApiKeys.mint(store, {
@@ -453,6 +583,24 @@ describe('create', () => {
453
583
  `)
454
584
  })
455
585
 
586
+ test('passes the original request error to the configured logger', async () => {
587
+ const cause = new Error('boom')
588
+ let logged: Error | undefined
589
+ const app = TestApp.create({
590
+ logger: (_entry, error) => {
591
+ logged = error
592
+ },
593
+ })
594
+ app.get('/boom', () => {
595
+ throw cause
596
+ })
597
+
598
+ const response = await app.request('/boom')
599
+
600
+ expect(response.status).toBe(500)
601
+ expect(logged).toBe(cause)
602
+ })
603
+
456
604
  test('logs the selected chain for anonymous edge-cache hits', async () => {
457
605
  const entries: Log.Entry[] = []
458
606
  const app = TestApp.create({
package/src/App.ts CHANGED
@@ -5,6 +5,7 @@ import { compress as hono_compress } from 'hono/compress'
5
5
  import { cors as hono_cors } from 'hono/cors'
6
6
  import { HTTPException } from 'hono/http-exception'
7
7
  import { requestId, type RequestIdVariables } from 'hono/request-id'
8
+ import { timeout as hono_timeout } from 'hono/timeout'
8
9
  import { generateSpecs } from 'hono-openapi'
9
10
  import type { Chain } from 'viem'
10
11
 
@@ -91,6 +92,8 @@ export type Environment = {
91
92
  tidx: Tidx.getClient.Tidx | undefined
92
93
  /** Verified-token feature configuration (refresh window), or undefined when the feature is disabled. Token rows live in `db`. */
93
94
  verifiedTokens: { refreshMs?: number | undefined } | undefined
95
+ /** Zone chain ids inferred from the current API key, or undefined for single-chain requests. */
96
+ zoneChainIds: readonly Viem.ChainId[] | undefined
94
97
  /** Zone chains keyed by chain id; empty when none are configured. */
95
98
  zones: ReadonlyMap<number, Chain>
96
99
  /** Webhook feature configuration, or undefined when webhooks are disabled. Rows live in `db`. */
@@ -181,6 +184,10 @@ export declare namespace GetAsset {
181
184
  /** Top-level OpenAPI `info.description`, rendered above the reference. */
182
185
  const infoDescription = 'REST API for reading and interacting with Tempo'
183
186
 
187
+ // Comfortably above the slowest legitimate time-to-response observed in
188
+ // production (~40s tidx reads), far below the 17-100 minute stalls it bounds.
189
+ const requestTimeoutMs = 60_000
190
+
184
191
  /** Creates the Tempo API Hono app. */
185
192
  export function create<const path extends string = '/'>(options: create.Options<path>) {
186
193
  const { path = '/' as path } = options
@@ -270,8 +277,8 @@ export function create<const path extends string = '/'>(options: create.Options<
270
277
  base.use(
271
278
  '*',
272
279
  Log.middleware<Environment>({
273
- emit: async (entry) => {
274
- await log?.(entry)
280
+ emit: async (entry, cause) => {
281
+ await log?.(entry, cause)
275
282
  recordRequest?.(entry)
276
283
  // Return the analytics promise so `Log.middleware` extends the
277
284
  // response with `waitUntil`; otherwise the async sink's `queue.send`
@@ -282,6 +289,30 @@ export function create<const path extends string = '/'>(options: create.Options<
282
289
  }),
283
290
  )
284
291
 
292
+ // Bounds time-to-response only; streaming bodies are unaffected. Without a
293
+ // deadline, a request stalled on an unbounded upstream wait pins its
294
+ // invocation (and isolate memory) until the client disconnects.
295
+ const deadline = hono_timeout(
296
+ requestTimeoutMs,
297
+ (c) =>
298
+ new HTTPException(504, {
299
+ res: Response.error(c, {
300
+ code: 'request_timeout',
301
+ message: 'Request timed out',
302
+ status: 504,
303
+ }),
304
+ }),
305
+ )
306
+ // Safe methods only: the expired handler is abandoned, not aborted, so a
307
+ // mutation could still commit after the 504. Paid requests are also exempt:
308
+ // MPP consumes payment before the handler, and the Payment-Receipt attaches
309
+ // only when the handler returns through the payment wrapper.
310
+ base.use('*', (c, next) => {
311
+ if (c.req.method !== 'GET' && c.req.method !== 'HEAD') return next()
312
+ if (Auth.hasPaymentCredential(c)) return next()
313
+ return deadline(c, next)
314
+ })
315
+
285
316
  // Normalize the `db` option: the plain form is `{ source }` with no cached
286
317
  // side; `cached` falls back to `source` so consumers never branch.
287
318
  const db = 'source' in options.db ? options.db : { source: options.db }
@@ -329,7 +360,7 @@ export function create<const path extends string = '/'>(options: create.Options<
329
360
  c.set('providers', providers)
330
361
  c.set('rpc', options.rpc)
331
362
  c.set('scopeCatalog', scopeCatalog)
332
- c.set('store', store)
363
+ c.set('store', Store.withRequest(store, c.req, { waitUntil: getWaitUntil(c) }))
333
364
  c.set('supportedChainIds', supportedChainIds)
334
365
  c.set('zones', zones)
335
366
  await next()
@@ -481,7 +512,7 @@ export function create<const path extends string = '/'>(options: create.Options<
481
512
  documentation: {
482
513
  components: {
483
514
  headers: OpenApi.headerComponents,
484
- responses: OpenApi.responseComponents,
515
+ responses: OpenApi.responseComponents(),
485
516
  securitySchemes: {
486
517
  apiKey: {
487
518
  description:
@@ -893,6 +924,16 @@ namespace ResponseBody {
893
924
  }
894
925
  }
895
926
 
927
+ function getWaitUntil(c: { executionCtx?: { waitUntil(promise: Promise<unknown>): void } }) {
928
+ // `c.executionCtx` throws in runtimes without one, so cache persistence falls back to an awaited write.
929
+ try {
930
+ const context = c.executionCtx
931
+ return context ? context.waitUntil.bind(context) : undefined
932
+ } catch {
933
+ return undefined
934
+ }
935
+ }
936
+
896
937
  namespace NodeServer {
897
938
  type GetRequestListener = (typeof import('@hono/node-server'))['getRequestListener']
898
939
  export type Fetch = Parameters<GetRequestListener>[0]
@@ -0,0 +1,18 @@
1
+ import * as Assets from './Assets.js'
2
+
3
+ describe('url', () => {
4
+ test('builds hosted and base-path asset URLs', () => {
5
+ const options = {
6
+ chainId: 4217,
7
+ origin: 'https://api.tempo.xyz',
8
+ path: '/icons/0x20c000000000000000000000b9537d11c60e8b50',
9
+ } as const
10
+
11
+ expect(Assets.url(options)).toBe(
12
+ 'https://api.tempo.xyz/assets/4217/icons/0x20c000000000000000000000b9537d11c60e8b50',
13
+ )
14
+ expect(Assets.url({ ...options, basePath: '/api/' })).toBe(
15
+ 'https://api.tempo.xyz/api/assets/4217/icons/0x20c000000000000000000000b9537d11c60e8b50',
16
+ )
17
+ })
18
+ })
package/src/Assets.ts CHANGED
@@ -24,6 +24,28 @@ export type Assets = {
24
24
  put?: ((key: string, asset: Asset) => Promise<void>) | undefined
25
25
  }
26
26
 
27
+ /** Builds the public URL for an asset key using the same path shape as the data API. */
28
+ export function url(options: url.Options) {
29
+ const basePath = options.basePath?.replace(/^\/+|\/+$/g, '')
30
+ const path = options.path.replace(/^\/+/, '')
31
+ const pathname = [basePath, 'assets', String(options.chainId), path].filter(Boolean).join('/')
32
+ return new URL(`/${pathname}`, options.origin).toString()
33
+ }
34
+
35
+ export declare namespace url {
36
+ /** Inputs for building one public asset URL. */
37
+ type Options = {
38
+ /** Optional API base path mounted before `/assets`. */
39
+ basePath?: string | undefined
40
+ /** Chain that owns the asset. */
41
+ chainId: number
42
+ /** API origin that serves the asset. */
43
+ origin: string
44
+ /** Asset-store path below the chain id. */
45
+ path: string
46
+ }
47
+ }
48
+
27
49
  /** Backs {@link Assets} with a Cloudflare R2 bucket. */
28
50
  export function cloudflareR2(bucket: cloudflareR2.Bucket): Assets {
29
51
  return {