tapimo 0.1.0 → 0.3.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 (520) hide show
  1. package/README.md +57 -16
  2. package/dist/ApiKey.d.ts +4 -1
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +6 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +98 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +150 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7917 -2315
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +141 -329
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +20 -4
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +23 -4
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/Webhooks.d.ts +2 -2
  19. package/dist/Webhooks.d.ts.map +1 -1
  20. package/dist/Webhooks.js +2 -2
  21. package/dist/Webhooks.js.map +1 -1
  22. package/dist/admin/App.d.ts +203 -120
  23. package/dist/admin/App.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.d.ts +111 -6
  25. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  26. package/dist/admin/apps/api-keys.js +67 -0
  27. package/dist/admin/apps/api-keys.js.map +1 -1
  28. package/dist/admin/apps/scopes.d.ts +12 -1
  29. package/dist/admin/apps/scopes.d.ts.map +1 -1
  30. package/dist/admin/apps/scopes.js +3 -0
  31. package/dist/admin/apps/scopes.js.map +1 -1
  32. package/dist/admin/apps/verified-tokens.d.ts +116 -116
  33. package/dist/admin/apps/verified-tokens.js +1 -1
  34. package/dist/admin/apps/verified-tokens.js.map +1 -1
  35. package/dist/admin/ui.generated.d.ts +1 -1
  36. package/dist/admin/ui.generated.js +13 -13
  37. package/dist/admin/ui.generated.js.map +1 -1
  38. package/dist/analytics/Analytics.d.ts +151 -0
  39. package/dist/analytics/Analytics.d.ts.map +1 -0
  40. package/dist/analytics/Analytics.js +212 -0
  41. package/dist/analytics/Analytics.js.map +1 -0
  42. package/dist/analytics/tables/requestEvents.d.ts +215 -0
  43. package/dist/analytics/tables/requestEvents.d.ts.map +1 -0
  44. package/dist/analytics/tables/requestEvents.js +264 -0
  45. package/dist/analytics/tables/requestEvents.js.map +1 -0
  46. package/dist/apps/data/App.d.ts +19576 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +272 -0
  49. package/dist/apps/data/App.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +3 -0
  51. package/dist/apps/data/index.d.ts.map +1 -0
  52. package/dist/apps/data/index.js +3 -0
  53. package/dist/apps/data/index.js.map +1 -0
  54. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  55. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  56. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  57. package/dist/apps/data/routes/activities.js.map +1 -0
  58. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  59. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  60. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  61. package/dist/apps/data/routes/addresses.js.map +1 -0
  62. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +4 -4
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  64. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  65. package/dist/apps/data/routes/balances.js.map +1 -0
  66. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  67. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  68. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  69. package/dist/apps/data/routes/blocks.js.map +1 -0
  70. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +8 -8
  71. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  72. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  73. package/dist/apps/data/routes/coingecko.js.map +1 -0
  74. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +108 -108
  75. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  76. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  77. package/dist/apps/data/routes/exchanges.js.map +1 -0
  78. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +39 -39
  79. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  80. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  81. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  82. package/dist/apps/data/routes/funding.d.ts +765 -0
  83. package/dist/apps/data/routes/funding.d.ts.map +1 -0
  84. package/dist/apps/data/routes/funding.js +383 -0
  85. package/dist/apps/data/routes/funding.js.map +1 -0
  86. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  87. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  88. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  89. package/dist/apps/data/routes/indexer.js.map +1 -0
  90. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
  91. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  92. package/dist/apps/{receipts.js → data/routes/receipts.js} +14 -20
  93. package/dist/apps/data/routes/receipts.js.map +1 -0
  94. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +33 -40
  95. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  96. package/dist/apps/{rpc.js → data/routes/rpc.js} +35 -7
  97. package/dist/apps/data/routes/rpc.js.map +1 -0
  98. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +40 -40
  99. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  100. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  101. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  102. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
  103. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  104. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  105. package/dist/apps/data/routes/tokens.js.map +1 -0
  106. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
  107. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  108. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  109. package/dist/apps/data/routes/transactions.js.map +1 -0
  110. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +62 -62
  111. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  112. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  113. package/dist/apps/data/routes/transfers.js.map +1 -0
  114. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +6 -6
  115. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  116. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  117. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  118. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +17 -17
  119. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  120. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +38 -34
  121. package/dist/apps/data/routes/webhooks.js.map +1 -0
  122. package/dist/apps/docs/App.d.ts +29 -0
  123. package/dist/apps/docs/App.d.ts.map +1 -0
  124. package/dist/apps/docs/App.js +54 -0
  125. package/dist/apps/docs/App.js.map +1 -0
  126. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  127. package/dist/apps/docs/fonts.d.ts.map +1 -0
  128. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  129. package/dist/apps/docs/fonts.js.map +1 -0
  130. package/dist/apps/docs/index.d.ts +2 -0
  131. package/dist/apps/docs/index.d.ts.map +1 -0
  132. package/dist/apps/docs/index.js +2 -0
  133. package/dist/apps/docs/index.js.map +1 -0
  134. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  135. package/dist/apps/docs/logo.d.ts.map +1 -0
  136. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  137. package/dist/apps/docs/logo.js.map +1 -0
  138. package/dist/apps/docs/reference.d.ts +21 -0
  139. package/dist/apps/docs/reference.d.ts.map +1 -0
  140. package/dist/apps/docs/reference.js +112 -0
  141. package/dist/apps/docs/reference.js.map +1 -0
  142. package/dist/apps/index.d.ts +5 -0
  143. package/dist/apps/index.d.ts.map +1 -0
  144. package/dist/apps/index.js +5 -0
  145. package/dist/apps/index.js.map +1 -0
  146. package/dist/apps/mcp.d.ts +76 -0
  147. package/dist/apps/mcp.d.ts.map +1 -0
  148. package/dist/apps/mcp.js +188 -0
  149. package/dist/apps/mcp.js.map +1 -0
  150. package/dist/apps/metadata.d.ts +7 -0
  151. package/dist/apps/metadata.d.ts.map +1 -0
  152. package/dist/apps/metadata.js +15 -0
  153. package/dist/apps/metadata.js.map +1 -0
  154. package/dist/apps/platform/App.d.ts +5262 -0
  155. package/dist/apps/platform/App.d.ts.map +1 -0
  156. package/dist/apps/platform/App.js +84 -0
  157. package/dist/apps/platform/App.js.map +1 -0
  158. package/dist/apps/platform/Billing.d.ts +279 -0
  159. package/dist/apps/platform/Billing.d.ts.map +1 -0
  160. package/dist/apps/platform/Billing.js +477 -0
  161. package/dist/apps/platform/Billing.js.map +1 -0
  162. package/dist/apps/platform/index.d.ts +3 -0
  163. package/dist/apps/platform/index.d.ts.map +1 -0
  164. package/dist/apps/platform/index.js +3 -0
  165. package/dist/apps/platform/index.js.map +1 -0
  166. package/dist/apps/platform/routes/api-keys.d.ts +973 -0
  167. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/api-keys.js +430 -0
  169. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  170. package/dist/apps/platform/routes/billing.d.ts +1520 -0
  171. package/dist/apps/platform/routes/billing.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/billing.js +795 -0
  173. package/dist/apps/platform/routes/billing.js.map +1 -0
  174. package/dist/apps/platform/routes/invitations.d.ts +851 -0
  175. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  176. package/dist/apps/platform/routes/invitations.js +471 -0
  177. package/dist/apps/platform/routes/invitations.js.map +1 -0
  178. package/dist/apps/platform/routes/me.d.ts +95 -0
  179. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  180. package/dist/apps/platform/routes/me.js +81 -0
  181. package/dist/apps/platform/routes/me.js.map +1 -0
  182. package/dist/apps/platform/routes/members.d.ts +554 -0
  183. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  184. package/dist/apps/platform/routes/members.js +251 -0
  185. package/dist/apps/platform/routes/members.js.map +1 -0
  186. package/dist/apps/platform/routes/orgs.d.ts +596 -0
  187. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  188. package/dist/apps/platform/routes/orgs.js +276 -0
  189. package/dist/apps/platform/routes/orgs.js.map +1 -0
  190. package/dist/apps/platform/routes/projects.d.ts +740 -0
  191. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  192. package/dist/apps/platform/routes/projects.js +286 -0
  193. package/dist/apps/platform/routes/projects.js.map +1 -0
  194. package/dist/apps/platform/routes/scopes.d.ts +107 -0
  195. package/dist/apps/platform/routes/scopes.d.ts.map +1 -0
  196. package/dist/apps/platform/routes/scopes.js +66 -0
  197. package/dist/apps/platform/routes/scopes.js.map +1 -0
  198. package/dist/apps/platform/routes/usage.d.ts +588 -0
  199. package/dist/apps/platform/routes/usage.d.ts.map +1 -0
  200. package/dist/apps/platform/routes/usage.js +391 -0
  201. package/dist/apps/platform/routes/usage.js.map +1 -0
  202. package/dist/apps/relay/App.d.ts +44 -0
  203. package/dist/apps/relay/App.d.ts.map +1 -0
  204. package/dist/apps/relay/App.js +211 -0
  205. package/dist/apps/relay/App.js.map +1 -0
  206. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  208. package/dist/apps/relay/Sponsorships.js +194 -0
  209. package/dist/apps/relay/Sponsorships.js.map +1 -0
  210. package/dist/apps/relay/index.d.ts +3 -0
  211. package/dist/apps/relay/index.d.ts.map +1 -0
  212. package/dist/apps/relay/index.js +3 -0
  213. package/dist/apps/relay/index.js.map +1 -0
  214. package/dist/cli/Cli.d.ts +9 -2
  215. package/dist/cli/Cli.d.ts.map +1 -1
  216. package/dist/cli/Cli.js +12 -4
  217. package/dist/cli/Cli.js.map +1 -1
  218. package/dist/cli/commands/admin.d.ts +5 -1
  219. package/dist/cli/commands/admin.d.ts.map +1 -1
  220. package/dist/cli/commands/admin.js +82 -3
  221. package/dist/cli/commands/admin.js.map +1 -1
  222. package/dist/db/Db.d.ts +17 -0
  223. package/dist/db/Db.d.ts.map +1 -1
  224. package/dist/db/Db.js +254 -0
  225. package/dist/db/Db.js.map +1 -1
  226. package/dist/db/Schema.d.ts +159 -0
  227. package/dist/db/Schema.d.ts.map +1 -1
  228. package/dist/db/Schema.js +187 -2
  229. package/dist/db/Schema.js.map +1 -1
  230. package/dist/db/tables/billingSettings.d.ts +55 -0
  231. package/dist/db/tables/billingSettings.d.ts.map +1 -0
  232. package/dist/db/tables/billingSettings.js +70 -0
  233. package/dist/db/tables/billingSettings.js.map +1 -0
  234. package/dist/db/tables/invitations.d.ts +84 -0
  235. package/dist/db/tables/invitations.d.ts.map +1 -0
  236. package/dist/db/tables/invitations.js +165 -0
  237. package/dist/db/tables/invitations.js.map +1 -0
  238. package/dist/db/tables/memberships.d.ts +108 -0
  239. package/dist/db/tables/memberships.d.ts.map +1 -0
  240. package/dist/db/tables/memberships.js +153 -0
  241. package/dist/db/tables/memberships.js.map +1 -0
  242. package/dist/db/tables/organizations.d.ts +48 -0
  243. package/dist/db/tables/organizations.d.ts.map +1 -1
  244. package/dist/db/tables/organizations.js +97 -2
  245. package/dist/db/tables/organizations.js.map +1 -1
  246. package/dist/db/tables/projects.d.ts +65 -0
  247. package/dist/db/tables/projects.d.ts.map +1 -0
  248. package/dist/db/tables/projects.js +75 -0
  249. package/dist/db/tables/projects.js.map +1 -0
  250. package/dist/db/tables/requestUsage.d.ts +121 -0
  251. package/dist/db/tables/requestUsage.d.ts.map +1 -0
  252. package/dist/db/tables/requestUsage.js +150 -0
  253. package/dist/db/tables/requestUsage.js.map +1 -0
  254. package/dist/db/tables/sponsoredTransactions.d.ts +239 -0
  255. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  256. package/dist/db/tables/sponsoredTransactions.js +314 -0
  257. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  258. package/dist/db/tables/stripeCustomers.d.ts +81 -0
  259. package/dist/db/tables/stripeCustomers.d.ts.map +1 -0
  260. package/dist/db/tables/stripeCustomers.js +120 -0
  261. package/dist/db/tables/stripeCustomers.js.map +1 -0
  262. package/dist/db/tables/users.d.ts +48 -0
  263. package/dist/db/tables/users.d.ts.map +1 -0
  264. package/dist/db/tables/users.js +65 -0
  265. package/dist/db/tables/users.js.map +1 -0
  266. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  267. package/dist/handlers/internal/executionError.js +2 -0
  268. package/dist/handlers/internal/executionError.js.map +1 -1
  269. package/dist/handlers/internal/multisig.d.ts +2 -6
  270. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  271. package/dist/handlers/internal/multisig.js +11 -36
  272. package/dist/handlers/internal/multisig.js.map +1 -1
  273. package/dist/handlers/internal/sponsorship.d.ts +35 -2
  274. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  275. package/dist/handlers/internal/sponsorship.js +53 -14
  276. package/dist/handlers/internal/sponsorship.js.map +1 -1
  277. package/dist/handlers/internal/utils.d.ts +10 -3
  278. package/dist/handlers/internal/utils.d.ts.map +1 -1
  279. package/dist/handlers/internal/utils.js +14 -6
  280. package/dist/handlers/internal/utils.js.map +1 -1
  281. package/dist/handlers/relay.d.ts +6 -2
  282. package/dist/handlers/relay.d.ts.map +1 -1
  283. package/dist/handlers/relay.js +16 -2
  284. package/dist/handlers/relay.js.map +1 -1
  285. package/dist/index.d.ts +1 -0
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +1 -0
  288. package/dist/index.js.map +1 -1
  289. package/dist/internal/Auth.d.ts +222 -6
  290. package/dist/internal/Auth.d.ts.map +1 -1
  291. package/dist/internal/Auth.js +625 -74
  292. package/dist/internal/Auth.js.map +1 -1
  293. package/dist/internal/Cache.d.ts.map +1 -1
  294. package/dist/internal/Cache.js +4 -1
  295. package/dist/internal/Cache.js.map +1 -1
  296. package/dist/internal/EdgeCache.d.ts +10 -0
  297. package/dist/internal/EdgeCache.d.ts.map +1 -1
  298. package/dist/internal/EdgeCache.js +39 -8
  299. package/dist/internal/EdgeCache.js.map +1 -1
  300. package/dist/internal/Fees.d.ts +27 -0
  301. package/dist/internal/Fees.d.ts.map +1 -0
  302. package/dist/internal/Fees.js +48 -0
  303. package/dist/internal/Fees.js.map +1 -0
  304. package/dist/internal/FundingRoutes.d.ts +183 -0
  305. package/dist/internal/FundingRoutes.d.ts.map +1 -0
  306. package/dist/internal/FundingRoutes.js +490 -0
  307. package/dist/internal/FundingRoutes.js.map +1 -0
  308. package/dist/internal/Id.d.ts +15 -0
  309. package/dist/internal/Id.d.ts.map +1 -0
  310. package/dist/internal/Id.js +22 -0
  311. package/dist/internal/Id.js.map +1 -0
  312. package/dist/internal/Log.d.ts +9 -3
  313. package/dist/internal/Log.d.ts.map +1 -1
  314. package/dist/internal/Log.js +7 -0
  315. package/dist/internal/Log.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +10 -20
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +8 -58
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/RateLimit.d.ts +25 -0
  321. package/dist/internal/RateLimit.d.ts.map +1 -1
  322. package/dist/internal/RateLimit.js +51 -0
  323. package/dist/internal/RateLimit.js.map +1 -1
  324. package/dist/internal/Response.d.ts +1 -1
  325. package/dist/internal/Response.d.ts.map +1 -1
  326. package/dist/internal/Schema.d.ts +8 -0
  327. package/dist/internal/Schema.d.ts.map +1 -1
  328. package/dist/internal/Schema.js +7 -0
  329. package/dist/internal/Schema.js.map +1 -1
  330. package/dist/internal/Store.d.ts +7 -1
  331. package/dist/internal/Store.d.ts.map +1 -1
  332. package/dist/internal/Store.js +16 -2
  333. package/dist/internal/Store.js.map +1 -1
  334. package/dist/internal/Viem.d.ts +84 -0
  335. package/dist/internal/Viem.d.ts.map +1 -1
  336. package/dist/internal/Webhooks.d.ts +1 -1
  337. package/dist/internal/Webhooks.d.ts.map +1 -1
  338. package/dist/internal/Webhooks.js +3 -3
  339. package/dist/internal/Webhooks.js.map +1 -1
  340. package/package.json +33 -6
  341. package/src/ApiKey.ts +10 -2
  342. package/src/ApiKeys.test.ts +155 -1
  343. package/src/ApiKeys.ts +203 -1
  344. package/src/App.test.ts +64 -75741
  345. package/src/App.ts +218 -420
  346. package/src/Client.test-d.ts +657 -15
  347. package/src/Scope.ts +26 -4
  348. package/src/Webhooks.ts +2 -2
  349. package/src/admin/apps/api-keys.test.ts +51 -0
  350. package/src/admin/apps/api-keys.ts +84 -0
  351. package/src/admin/apps/scopes.test.ts +11 -1
  352. package/src/admin/apps/scopes.ts +3 -0
  353. package/src/admin/apps/verified-tokens.ts +1 -1
  354. package/src/admin/ui/src/components/Page.tsx +2 -3
  355. package/src/admin/ui/src/routes/__root.tsx +2 -2
  356. package/src/admin/ui/src/routes/api-keys.tsx +2 -2
  357. package/src/admin/ui.generated.ts +13 -13
  358. package/src/analytics/Analytics.test.ts +527 -0
  359. package/src/analytics/Analytics.ts +318 -0
  360. package/src/analytics/tables/requestEvents.ts +523 -0
  361. package/src/apps/composition.test.ts +66 -0
  362. package/src/apps/data/App.test.ts +72 -0
  363. package/src/apps/data/App.ts +330 -0
  364. package/src/apps/data/index.ts +2 -0
  365. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  366. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  367. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  368. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
  369. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  370. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
  371. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  372. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  373. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  374. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
  375. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  376. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  377. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  378. package/src/apps/data/routes/funding.test.ts +214 -0
  379. package/src/apps/data/routes/funding.ts +584 -0
  380. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
  381. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  382. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
  383. package/src/apps/{receipts.ts → data/routes/receipts.ts} +15 -22
  384. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +122 -7
  385. package/src/apps/{rpc.ts → data/routes/rpc.ts} +38 -8
  386. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
  387. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  388. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
  389. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  390. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
  391. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  392. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
  393. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  394. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
  395. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  396. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +7 -7
  397. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +50 -43
  398. package/src/apps/docs/App.ts +65 -0
  399. package/src/apps/docs/index.ts +1 -0
  400. package/src/apps/docs/reference.ts +132 -0
  401. package/src/apps/index.ts +4 -0
  402. package/src/apps/mcp.test.ts +206 -0
  403. package/src/apps/mcp.ts +250 -0
  404. package/src/apps/metadata.ts +23 -0
  405. package/src/apps/platform/App.ts +169 -0
  406. package/src/apps/platform/Billing.test.ts +530 -0
  407. package/src/apps/platform/Billing.ts +682 -0
  408. package/src/apps/platform/index.ts +2 -0
  409. package/src/apps/platform/routes/api-keys.test.ts +493 -0
  410. package/src/apps/platform/routes/api-keys.ts +543 -0
  411. package/src/apps/platform/routes/billing.test.ts +1100 -0
  412. package/src/apps/platform/routes/billing.ts +966 -0
  413. package/src/apps/platform/routes/invitations.test.ts +409 -0
  414. package/src/apps/platform/routes/invitations.ts +587 -0
  415. package/src/apps/platform/routes/me.test.ts +351 -0
  416. package/src/apps/platform/routes/me.ts +106 -0
  417. package/src/apps/platform/routes/members.test.ts +195 -0
  418. package/src/apps/platform/routes/members.ts +313 -0
  419. package/src/apps/platform/routes/orgs.test.ts +313 -0
  420. package/src/apps/platform/routes/orgs.ts +365 -0
  421. package/src/apps/platform/routes/projects.test.ts +181 -0
  422. package/src/apps/platform/routes/projects.ts +367 -0
  423. package/src/apps/platform/routes/scopes.test.ts +29 -0
  424. package/src/apps/platform/routes/scopes.ts +85 -0
  425. package/src/apps/platform/routes/usage.test.ts +422 -0
  426. package/src/apps/platform/routes/usage.ts +527 -0
  427. package/src/apps/relay/App.test.ts +933 -0
  428. package/src/apps/relay/App.ts +236 -0
  429. package/src/apps/relay/Sponsorships.test.ts +375 -0
  430. package/src/apps/relay/Sponsorships.ts +306 -0
  431. package/src/apps/relay/index.ts +2 -0
  432. package/src/cli/Cli.test.ts +25 -2
  433. package/src/cli/Cli.ts +18 -3
  434. package/src/cli/commands/admin.test.ts +83 -0
  435. package/src/cli/commands/admin.ts +91 -3
  436. package/src/db/Db.ts +296 -0
  437. package/src/db/Schema.ts +241 -2
  438. package/src/db/tables/billingSettings.test.ts +87 -0
  439. package/src/db/tables/billingSettings.ts +108 -0
  440. package/src/db/tables/invitations.ts +198 -0
  441. package/src/db/tables/memberships.ts +208 -0
  442. package/src/db/tables/organizations.test.ts +38 -2
  443. package/src/db/tables/organizations.ts +117 -2
  444. package/src/db/tables/projects.ts +107 -0
  445. package/src/db/tables/requestUsage.ts +231 -0
  446. package/src/db/tables/sponsoredTransactions.test.ts +325 -0
  447. package/src/db/tables/sponsoredTransactions.ts +464 -0
  448. package/src/db/tables/stripeCustomers.test.ts +109 -0
  449. package/src/db/tables/stripeCustomers.ts +162 -0
  450. package/src/db/tables/users.ts +85 -0
  451. package/src/handlers/internal/executionError.ts +2 -0
  452. package/src/handlers/internal/multisig.test.ts +84 -10
  453. package/src/handlers/internal/multisig.ts +15 -50
  454. package/src/handlers/internal/sponsorship.ts +106 -20
  455. package/src/handlers/internal/utils.ts +19 -7
  456. package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
  457. package/src/handlers/relay.ts +23 -5
  458. package/src/index.ts +1 -0
  459. package/src/internal/Auth.test.ts +491 -25
  460. package/src/internal/Auth.ts +839 -84
  461. package/src/internal/Cache.ts +5 -1
  462. package/src/internal/Cursor.test.ts +3 -2
  463. package/src/internal/EdgeCache.test.ts +27 -4
  464. package/src/internal/EdgeCache.ts +47 -9
  465. package/src/internal/Fees.test.ts +32 -0
  466. package/src/internal/Fees.ts +51 -0
  467. package/src/internal/FundingRoutes.ts +583 -0
  468. package/src/internal/Id.test.ts +17 -0
  469. package/src/internal/Id.ts +24 -0
  470. package/src/internal/Log.test.ts +2 -1
  471. package/src/internal/Log.ts +16 -3
  472. package/src/internal/MetricSink.ts +1 -1
  473. package/src/internal/OpenApi.ts +12 -60
  474. package/src/internal/RateLimit.test.ts +84 -0
  475. package/src/internal/RateLimit.ts +70 -0
  476. package/src/internal/Response.ts +1 -1
  477. package/src/internal/Schema.ts +8 -0
  478. package/src/internal/Store.test.ts +52 -0
  479. package/src/internal/Store.ts +24 -5
  480. package/src/internal/Tidx.local.test.ts +1 -1
  481. package/src/internal/VerifiedTokens.test.ts +1 -1
  482. package/src/internal/WebhookDestination.test.ts +1 -1
  483. package/src/internal/Webhooks.test.ts +7 -7
  484. package/src/internal/Webhooks.ts +4 -4
  485. package/dist/apps/activities.js.map +0 -1
  486. package/dist/apps/addresses.js.map +0 -1
  487. package/dist/apps/balances.d.ts.map +0 -1
  488. package/dist/apps/balances.js.map +0 -1
  489. package/dist/apps/blocks.d.ts.map +0 -1
  490. package/dist/apps/blocks.js.map +0 -1
  491. package/dist/apps/coingecko.d.ts.map +0 -1
  492. package/dist/apps/coingecko.js.map +0 -1
  493. package/dist/apps/exchanges.d.ts.map +0 -1
  494. package/dist/apps/exchanges.js.map +0 -1
  495. package/dist/apps/fee-amm.d.ts.map +0 -1
  496. package/dist/apps/fee-amm.js.map +0 -1
  497. package/dist/apps/indexer.d.ts.map +0 -1
  498. package/dist/apps/indexer.js.map +0 -1
  499. package/dist/apps/receipts.d.ts.map +0 -1
  500. package/dist/apps/receipts.js.map +0 -1
  501. package/dist/apps/rpc.d.ts.map +0 -1
  502. package/dist/apps/rpc.js.map +0 -1
  503. package/dist/apps/tokenlist.d.ts.map +0 -1
  504. package/dist/apps/tokenlist.js.map +0 -1
  505. package/dist/apps/tokens.d.ts.map +0 -1
  506. package/dist/apps/tokens.js.map +0 -1
  507. package/dist/apps/transactions.d.ts.map +0 -1
  508. package/dist/apps/transactions.js.map +0 -1
  509. package/dist/apps/transfers.d.ts.map +0 -1
  510. package/dist/apps/transfers.js.map +0 -1
  511. package/dist/apps/verified-tokens.d.ts.map +0 -1
  512. package/dist/apps/verified-tokens.js.map +0 -1
  513. package/dist/apps/webhooks.js.map +0 -1
  514. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  515. package/dist/internal/OpenApi.fonts.js.map +0 -1
  516. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  517. package/dist/internal/OpenApi.logo.js.map +0 -1
  518. package/src/handlers/internal/multisig.localnet.test.ts +0 -146
  519. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  520. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -2,17 +2,18 @@ import { Hono, type Context } from 'hono'
2
2
  import { Hex } from 'ox'
3
3
  import * as z from 'zod/mini'
4
4
 
5
- import type * as App from '../App.js'
6
- import * as Auth from '../internal/Auth.js'
7
- import * as Cache from '../internal/Cache.js'
8
- import * as Cursor from '../internal/Cursor.js'
9
- import * as OpenApi from '../internal/OpenApi.js'
10
- import * as Response from '../internal/Response.js'
11
- import * as Schema from '../internal/Schema.js'
12
- import * as Store from '../internal/Store.js'
13
- import * as Timing from '../internal/Timing.js'
14
- import * as Ttl from '../internal/Ttl.js'
15
- import * as Value from '../internal/Value.js'
5
+ import type * as App from '../../../App.js'
6
+ import * as Auth from '../../../internal/Auth.js'
7
+ import * as Cache from '../../../internal/Cache.js'
8
+ import * as Cursor from '../../../internal/Cursor.js'
9
+ import * as Fees from '../../../internal/Fees.js'
10
+ import * as OpenApi from '../../../internal/OpenApi.js'
11
+ import * as Response from '../../../internal/Response.js'
12
+ import * as Schema from '../../../internal/Schema.js'
13
+ import * as Store from '../../../internal/Store.js'
14
+ import * as Timing from '../../../internal/Timing.js'
15
+ import * as Ttl from '../../../internal/Ttl.js'
16
+ import * as Value from '../../../internal/Value.js'
16
17
  import * as Tokens from './tokens.js'
17
18
 
18
19
  // Receipts and transactions deliberately form an import cycle (receipts reuses
@@ -25,13 +26,6 @@ import { decodeTransactionType, embedFeeTokens, schema as txSchema } from './tra
25
26
  /** Example transaction hash surfaced in OpenAPI docs. */
26
27
  const exampleHash = '0x515801d7f9a5ac705e793e85904c9c69b3f1694b465cc8fb6ba3f0298dc82665'
27
28
 
28
- // Tempo gas prices are denominated in attodollars (10^-18 USD) while fee-token
29
- // balances use 6 decimals (microdollars, 10^-6 USD), so the fee charged to the
30
- // fee payer — in the fee token's base units — is
31
- // `ceil(gasUsed * effectiveGasPrice / 10^12)` (ceiling division). Mirrors
32
- // `calc_gas_balance_spending` in tempoxyz/tempo.
33
- const feeScalingFactor = 10n ** 12n
34
-
35
29
  /**
36
30
  * Computes the fee charged to the fee payer, in the fee token's base units, from
37
31
  * the receipt's `gasUsed` and decimal `effectiveGasPrice`. Returns undefined
@@ -39,8 +33,7 @@ const feeScalingFactor = 10n ** 12n
39
33
  */
40
34
  function computeFeeAmount(gasUsed: number | undefined, effectiveGasPrice: string | undefined) {
41
35
  if (gasUsed === undefined || effectiveGasPrice === undefined) return undefined
42
- const product = BigInt(gasUsed) * BigInt(effectiveGasPrice)
43
- return ((product + feeScalingFactor - 1n) / feeScalingFactor).toString()
36
+ return Fees.fromGas(BigInt(gasUsed), BigInt(effectiveGasPrice)).toString()
44
37
  }
45
38
 
46
39
  /** Zod schemas owned by the receipt handlers. */
@@ -455,7 +448,7 @@ export namespace schema {
455
448
  export function receipts() {
456
449
  return new Hono<App.Environment>()
457
450
  .get(
458
- '/receipts',
451
+ '/v1/transactions/receipts',
459
452
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
460
453
  OpenApi.validate('query', schema.getReceipts.Query, {
461
454
  code: 'query_invalid',
@@ -548,7 +541,7 @@ export function receipts() {
548
541
  },
549
542
  )
550
543
  .get(
551
- '/:transactionHash/receipt',
544
+ '/v1/transactions/:transactionHash/receipt',
552
545
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
553
546
  OpenApi.validate('param', schema.getReceipt.Params, {
554
547
  code: 'transaction_invalid',
@@ -1,6 +1,6 @@
1
- import type * as Viem from '../internal/Viem.js'
2
- import * as TestApp from '../../test/App.js'
3
- import * as Runtime from '../../test/runtime.js'
1
+ import type * as Viem from '../../../internal/Viem.js'
2
+ import * as TestApp from '../../../../test/App.js'
3
+ import * as Runtime from '../../../../test/runtime.js'
4
4
 
5
5
  const runtime = Runtime.get()
6
6
 
@@ -96,7 +96,7 @@ describe('POST /rpc', () => {
96
96
  }
97
97
  })
98
98
 
99
- test('routes anonymous requests to the public RPC without basic auth', async () => {
99
+ test('allows eth-prefixed methods anonymously', async () => {
100
100
  const fetch = mockRpc()
101
101
 
102
102
  try {
@@ -109,7 +109,7 @@ describe('POST /rpc', () => {
109
109
 
110
110
  const response = await app.fetch(
111
111
  new Request('http://tempo-api.test/rpc/testnet', {
112
- body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
112
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_fillTransaction' }),
113
113
  method: 'POST',
114
114
  }),
115
115
  )
@@ -122,6 +122,82 @@ describe('POST /rpc', () => {
122
122
  }
123
123
  })
124
124
 
125
+ test('requires an API key for non-eth methods', async () => {
126
+ const fetch = mockRpc()
127
+
128
+ try {
129
+ const app = TestApp.create()
130
+ const response = await app.fetch(
131
+ new Request('http://tempo-api.test/rpc', {
132
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'tempo_fundAddress' }),
133
+ method: 'POST',
134
+ }),
135
+ )
136
+ const body = (await response.json()) as Record<string, unknown>
137
+ const { requestId, ...stable } = body
138
+
139
+ expect(response.status).toMatchInlineSnapshot(`401`)
140
+ expect(typeof requestId).toMatchInlineSnapshot(`"string"`)
141
+ expect(stable).toMatchInlineSnapshot(`
142
+ {
143
+ "error": {
144
+ "code": "api_key_missing",
145
+ "message": "Missing API key",
146
+ },
147
+ }
148
+ `)
149
+ expect(fetch.calls).toMatchInlineSnapshot(`[]`)
150
+ } finally {
151
+ fetch.restore()
152
+ }
153
+ })
154
+
155
+ test('requires an API key when a batch includes a private method', async () => {
156
+ const fetch = mockRpc()
157
+
158
+ try {
159
+ const app = TestApp.create()
160
+ const response = await app.fetch(
161
+ new Request('http://tempo-api.test/rpc', {
162
+ body: JSON.stringify([
163
+ { id: 1, jsonrpc: '2.0', method: 'eth_chainId' },
164
+ { id: 2, jsonrpc: '2.0', method: 'tempo_fundAddress' },
165
+ ]),
166
+ method: 'POST',
167
+ }),
168
+ )
169
+ const body = (await response.json()) as { error?: { code?: unknown } }
170
+
171
+ expect(response.status).toMatchInlineSnapshot(`401`)
172
+ expect(body.error?.code).toMatchInlineSnapshot(`"api_key_missing"`)
173
+ expect(fetch.calls).toMatchInlineSnapshot(`[]`)
174
+ } finally {
175
+ fetch.restore()
176
+ }
177
+ })
178
+
179
+ test('allows API keys to call private methods', async () => {
180
+ const fetch = mockRpc()
181
+
182
+ try {
183
+ const app = TestApp.create()
184
+ const response = await app.fetch(
185
+ new Request('http://tempo-api.test/rpc', {
186
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'tempo_fundAddress' }),
187
+ headers: { 'tempo-api-key': TestApp.key.token },
188
+ method: 'POST',
189
+ }),
190
+ )
191
+
192
+ expect(response.status).toMatchInlineSnapshot(`200`)
193
+ expect(fetch.calls[0]?.body).toMatchInlineSnapshot(
194
+ `"{"id":1,"jsonrpc":"2.0","method":"tempo_fundAddress"}"`,
195
+ )
196
+ } finally {
197
+ fetch.restore()
198
+ }
199
+ })
200
+
125
201
  test('uses the requested chain id for upstream URL resolution', async () => {
126
202
  const fetch = mockRpc()
127
203
 
@@ -315,7 +391,46 @@ describe('POST /rpc/relay', () => {
315
391
  `)
316
392
  })
317
393
 
318
- test('proxies for keys holding rpc-relay', async () => {
394
+ test('routes chain-scoped mounts to the relay pipeline', async () => {
395
+ const fetch = mockRpc()
396
+
397
+ try {
398
+ const app = TestApp.create({
399
+ auth: {
400
+ keys: [
401
+ {
402
+ id: 'key_relay',
403
+ orgId: 'org_test',
404
+ scopes: ['rpc-relay:read'],
405
+ token: 'secret_relay_key',
406
+ },
407
+ ],
408
+ },
409
+ rpc: { url: () => 'https://internal.rpc.test/json-rpc' },
410
+ })
411
+
412
+ // Without a fee payer configured the relay pipeline answers this method
413
+ // itself; a proxied request would return the mock upstream's result.
414
+ const response = await app.fetch(
415
+ new Request('http://tempo-api.test/rpc/relay/42431', {
416
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_signRawTransaction', params: ['0x76'] }), // prettier-ignore
417
+ headers: { 'tempo-api-key': 'secret_relay_key' },
418
+ method: 'POST',
419
+ }),
420
+ )
421
+
422
+ expect(response.status).toMatchInlineSnapshot(`200`)
423
+ const body = (await response.json()) as { error?: { message: string } | undefined }
424
+ expect(body.error?.message).toMatchInlineSnapshot(
425
+ `"eth_signRawTransaction requires a fee payer to be configured on the relay. Set the \`feePayer\` option in \`Handler.relay()\` to enable transaction sponsorship."`,
426
+ )
427
+ expect(fetch.calls).toMatchInlineSnapshot(`[]`)
428
+ } finally {
429
+ fetch.restore()
430
+ }
431
+ })
432
+
433
+ test('proxies for keys holding rpc-relay:read', async () => {
319
434
  const fetch = mockRpc()
320
435
 
321
436
  try {
@@ -325,7 +440,7 @@ describe('POST /rpc/relay', () => {
325
440
  {
326
441
  id: 'key_relay',
327
442
  orgId: 'org_test',
328
- scopes: ['rpc-relay'],
443
+ scopes: ['rpc-relay:read'],
329
444
  token: 'secret_relay_key',
330
445
  },
331
446
  ],
@@ -1,12 +1,12 @@
1
1
  import { Hono, type Context, type TypedResponse } from 'hono'
2
2
  import * as z from 'zod/mini'
3
3
 
4
- import type * as App from '../App.js'
5
- import * as Auth from '../internal/Auth.js'
6
- import * as OpenApi from '../internal/OpenApi.js'
7
- import * as Response from '../internal/Response.js'
8
- import * as Schema from '../internal/Schema.js'
9
- import * as Viem from '../internal/Viem.js'
4
+ import type * as App from '../../../App.js'
5
+ import * as Auth from '../../../internal/Auth.js'
6
+ import * as OpenApi from '../../../internal/OpenApi.js'
7
+ import * as Response from '../../../internal/Response.js'
8
+ import * as Schema from '../../../internal/Schema.js'
9
+ import * as Viem from '../../../internal/Viem.js'
10
10
 
11
11
  // Request headers that must not be forwarded upstream: hop-by-hop headers, the
12
12
  // inbound host, and any caller auth so the consumer's Tempo API credentials never
@@ -101,7 +101,7 @@ export namespace schema {
101
101
  /** Creates the raw Tempo RPC passthrough handler. */
102
102
  export function rpc() {
103
103
  return new Hono<App.Environment>().post(
104
- '/:chain{mainnet|testnet|[0-9]+}?',
104
+ '/rpc/:chain{(mainnet|testnet|[0-9]+)}?',
105
105
  Auth.policy({ apiKey: { scopes: ['data:read'] }, public: true }),
106
106
  OpenApi.describeRoute({
107
107
  description:
@@ -143,9 +143,22 @@ export function rpc() {
143
143
  summary: 'Call JSON-RPC',
144
144
  tags: ['RPC'],
145
145
  }),
146
- (c) => {
146
+ async (c) => {
147
147
  if (Auth.narrowAccess) return Auth.accessError(c)
148
148
 
149
+ if (requiresApiKey(c)) {
150
+ const body = await c.req.raw
151
+ .clone()
152
+ .json()
153
+ .catch(() => undefined)
154
+ if (!isPublicRequest(body))
155
+ return Response.error(c, {
156
+ code: 'api_key_missing',
157
+ message: 'Missing API key',
158
+ status: 401,
159
+ })
160
+ }
161
+
149
162
  const chainId = resolveChainId(c)
150
163
  if (!chainId)
151
164
  return Response.error(c, {
@@ -161,6 +174,23 @@ export function rpc() {
161
174
  )
162
175
  }
163
176
 
177
+ function requiresApiKey(c: Context<App.Environment>) {
178
+ if (!c.get('auth')) return false
179
+ const principal = Auth.getPrincipal(c)
180
+ return principal?.type !== 'api_key' && principal?.type !== 'super_admin'
181
+ }
182
+
183
+ function isPublicRequest(body: unknown): boolean {
184
+ const requests = Array.isArray(body) ? body : [body]
185
+ return requests.length > 0 && requests.every((request) => isPublicMethod(request))
186
+ }
187
+
188
+ function isPublicMethod(request: unknown): boolean {
189
+ if (!request || typeof request !== 'object') return false
190
+ const method = (request as Record<string, unknown>)['method']
191
+ return typeof method === 'string' && method.startsWith('eth_')
192
+ }
193
+
164
194
  async function passthrough(
165
195
  c: Context<App.Environment>,
166
196
  chainId: z.output<typeof Schema.ChainId>,
@@ -1,6 +1,6 @@
1
- import * as TestApp from '../../test/App.js'
2
- import * as Runtime from '../../test/runtime.js'
3
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
1
+ import * as TestApp from '../../../../test/App.js'
2
+ import * as Runtime from '../../../../test/runtime.js'
3
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
4
4
  import * as Tokenlist from './tokenlist.js'
5
5
 
6
6
  /** Reader key for the data routes. */
@@ -1,14 +1,14 @@
1
1
  import { Hono } from 'hono'
2
2
  import * as z from 'zod/mini'
3
3
 
4
- import type * as App from '../App.js'
5
- import * as Auth from '../internal/Auth.js'
6
- import * as Cache from '../internal/Cache.js'
7
- import * as OpenApi from '../internal/OpenApi.js'
8
- import * as Response from '../internal/Response.js'
9
- import * as Schema from '../internal/Schema.js'
10
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
11
- import * as Viem from '../internal/Viem.js'
4
+ import type * as App from '../../../App.js'
5
+ import * as Auth from '../../../internal/Auth.js'
6
+ import * as Cache from '../../../internal/Cache.js'
7
+ import * as OpenApi from '../../../internal/OpenApi.js'
8
+ import * as Response from '../../../internal/Response.js'
9
+ import * as Schema from '../../../internal/Schema.js'
10
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
11
+ import * as Viem from '../../../internal/Viem.js'
12
12
  import { getTokenLogo } from './tokens.js'
13
13
 
14
14
  /** Zod schemas owned by the tokenlist resource. */
@@ -124,7 +124,7 @@ export namespace schema {
124
124
  */
125
125
  export function tokenlist() {
126
126
  return new Hono<App.Environment>().get(
127
- '/',
127
+ '/v1/tokenlist',
128
128
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
129
129
  OpenApi.validate('query', schema.getTokenList.Query, {
130
130
  code: 'query_invalid',
@@ -1,7 +1,7 @@
1
1
  import { Schema } from 'tapimo'
2
2
 
3
- import * as TestApp from '../../test/App.js'
4
- import * as Runtime from '../../test/runtime.js'
3
+ import * as TestApp from '../../../../test/App.js'
4
+ import * as Runtime from '../../../../test/runtime.js'
5
5
  import * as Tokens from './tokens.js'
6
6
 
7
7
  // Verified enrichment is store-backed now that the build-time bundle is gone, so
@@ -3,20 +3,20 @@ import { AbiEvent, AbiParameters } from 'ox'
3
3
  import { type Address, ContractFunctionExecutionError } from 'viem'
4
4
  import * as z from 'zod/mini'
5
5
 
6
- import type * as App from '../App.js'
7
- import * as Auth from '../internal/Auth.js'
8
- import * as Cache from '../internal/Cache.js'
9
- import * as Cursor from '../internal/Cursor.js'
10
- import * as OpenApi from '../internal/OpenApi.js'
11
- import * as Path from '../internal/Path.js'
12
- import * as Response from '../internal/Response.js'
13
- import * as Schema from '../internal/Schema.js'
14
- import * as Store from '../internal/Store.js'
15
- import * as Tidx from '../internal/Tidx.js'
16
- import * as Timing from '../internal/Timing.js'
17
- import * as Ttl from '../internal/Ttl.js'
18
- import * as Value from '../internal/Value.js'
19
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
6
+ import type * as App from '../../../App.js'
7
+ import * as Auth from '../../../internal/Auth.js'
8
+ import * as Cache from '../../../internal/Cache.js'
9
+ import * as Cursor from '../../../internal/Cursor.js'
10
+ import * as OpenApi from '../../../internal/OpenApi.js'
11
+ import * as Path from '../../../internal/Path.js'
12
+ import * as Response from '../../../internal/Response.js'
13
+ import * as Schema from '../../../internal/Schema.js'
14
+ import * as Store from '../../../internal/Store.js'
15
+ import * as Tidx from '../../../internal/Tidx.js'
16
+ import * as Timing from '../../../internal/Timing.js'
17
+ import * as Ttl from '../../../internal/Ttl.js'
18
+ import * as Value from '../../../internal/Value.js'
19
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
20
20
  import * as Transactions from './transactions.js'
21
21
 
22
22
  const tokenCreatedSignature =
@@ -552,7 +552,7 @@ export namespace schema {
552
552
  export function tokens() {
553
553
  return new Hono<App.Environment>()
554
554
  .get(
555
- '/',
555
+ '/v1/tokens',
556
556
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
557
557
  OpenApi.validate('query', schema.getTokens.Query, {
558
558
  code: 'query_invalid',
@@ -622,7 +622,7 @@ export function tokens() {
622
622
  },
623
623
  )
624
624
  .get(
625
- `/:symbol{${schema.getTokenBySymbol.routePattern}}`,
625
+ `/v1/tokens/:symbol{${schema.getTokenBySymbol.routePattern}}`,
626
626
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
627
627
  OpenApi.validate('param', schema.getTokenBySymbol.Params, {
628
628
  code: 'symbol_invalid',
@@ -694,7 +694,7 @@ export function tokens() {
694
694
  },
695
695
  )
696
696
  .get(
697
- '/:token',
697
+ '/v1/tokens/:token',
698
698
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
699
699
  OpenApi.validate('param', schema.getToken.Params, {
700
700
  code: 'token_invalid',
@@ -749,7 +749,7 @@ export function tokens() {
749
749
  },
750
750
  )
751
751
  .get(
752
- '/:token/logo',
752
+ '/v1/tokens/:token/logo',
753
753
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
754
754
  OpenApi.validate('param', schema.getTokenLogo.Params, {
755
755
  code: 'token_invalid',
@@ -839,7 +839,7 @@ export function tokens() {
839
839
  },
840
840
  )
841
841
  .get(
842
- '/:token/holders',
842
+ '/v1/tokens/:token/holders',
843
843
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
844
844
  OpenApi.validate('param', schema.getTokenHolders.Params, {
845
845
  code: 'token_invalid',
@@ -930,7 +930,7 @@ export function tokens() {
930
930
  },
931
931
  )
932
932
  .get(
933
- '/:token/transactions',
933
+ '/v1/tokens/:token/transactions',
934
934
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
935
935
  OpenApi.validate('param', schema.getTokenTransactions.Params, {
936
936
  code: 'token_invalid',
@@ -2,9 +2,9 @@ import { Schema } from 'tapimo'
2
2
  import { Hex } from 'ox'
3
3
  import { zeroHash } from 'viem'
4
4
 
5
- import * as TestApp from '../../test/App.js'
6
- import * as Runtime from '../../test/runtime.js'
7
- import * as Viem from '../../test/Viem.js'
5
+ import * as TestApp from '../../../../test/App.js'
6
+ import * as Runtime from '../../../../test/runtime.js'
7
+ import * as Viem from '../../../../test/Viem.js'
8
8
  import * as Transactions from './transactions.js'
9
9
 
10
10
  /** The decoded `type` names a humanized transaction may report. */
@@ -2,19 +2,19 @@ import { Hono, type Context } from 'hono'
2
2
  import { Hex } from 'ox'
3
3
  import * as z from 'zod/mini'
4
4
 
5
- import type * as App from '../App.js'
6
- import * as Auth from '../internal/Auth.js'
7
- import * as Cache from '../internal/Cache.js'
8
- import * as Cursor from '../internal/Cursor.js'
9
- import * as OpenApi from '../internal/OpenApi.js'
10
- import * as Response from '../internal/Response.js'
11
- import * as Schema from '../internal/Schema.js'
12
- import * as Store from '../internal/Store.js'
13
- import type * as Tidx from '../internal/Tidx.js'
14
- import * as Timing from '../internal/Timing.js'
15
- import * as Ttl from '../internal/Ttl.js'
16
- import * as Value from '../internal/Value.js'
17
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
5
+ import type * as App from '../../../App.js'
6
+ import * as Auth from '../../../internal/Auth.js'
7
+ import * as Cache from '../../../internal/Cache.js'
8
+ import * as Cursor from '../../../internal/Cursor.js'
9
+ import * as OpenApi from '../../../internal/OpenApi.js'
10
+ import * as Response from '../../../internal/Response.js'
11
+ import * as Schema from '../../../internal/Schema.js'
12
+ import * as Store from '../../../internal/Store.js'
13
+ import type * as Tidx from '../../../internal/Tidx.js'
14
+ import * as Timing from '../../../internal/Timing.js'
15
+ import * as Ttl from '../../../internal/Ttl.js'
16
+ import * as Value from '../../../internal/Value.js'
17
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
18
18
  import * as Receipts from './receipts.js'
19
19
  import * as Tokens from './tokens.js'
20
20
 
@@ -595,7 +595,7 @@ export namespace schema {
595
595
  export function transactions() {
596
596
  return new Hono<App.Environment>()
597
597
  .get(
598
- '/',
598
+ '/v1/transactions',
599
599
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
600
600
  OpenApi.validate('query', schema.getTransactions.Query, {
601
601
  code: 'query_invalid',
@@ -692,7 +692,7 @@ export function transactions() {
692
692
  },
693
693
  )
694
694
  .get(
695
- '/:transactionHash',
695
+ '/v1/transactions/:transactionHash',
696
696
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
697
697
  OpenApi.validate('param', schema.getTransaction.Params, {
698
698
  code: 'transaction_invalid',
@@ -1,8 +1,8 @@
1
1
  import type * as z from 'zod/mini'
2
2
  import { Schema } from 'tapimo'
3
3
 
4
- import * as TestApp from '../../test/App.js'
5
- import * as Runtime from '../../test/runtime.js'
4
+ import * as TestApp from '../../../../test/App.js'
5
+ import * as Runtime from '../../../../test/runtime.js'
6
6
  import * as Transfers from './transfers.js'
7
7
 
8
8
  describe('GET /transfers', () => {
@@ -3,20 +3,20 @@ import { Address, Hex } from 'ox'
3
3
  import { Addresses } from 'viem/tempo'
4
4
  import * as z from 'zod/mini'
5
5
 
6
- import type * as App from '../App.js'
7
- import * as Auth from '../internal/Auth.js'
8
- import * as Cache from '../internal/Cache.js'
9
- import * as Cursor from '../internal/Cursor.js'
10
- import * as Mpp from '../internal/Mpp.js'
11
- import * as OpenApi from '../internal/OpenApi.js'
12
- import * as Response from '../internal/Response.js'
13
- import * as Schema from '../internal/Schema.js'
14
- import * as Store from '../internal/Store.js'
15
- import type * as Tidx from '../internal/Tidx.js'
16
- import * as Timing from '../internal/Timing.js'
17
- import * as Ttl from '../internal/Ttl.js'
18
- import * as Value from '../internal/Value.js'
19
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
6
+ import type * as App from '../../../App.js'
7
+ import * as Auth from '../../../internal/Auth.js'
8
+ import * as Cache from '../../../internal/Cache.js'
9
+ import * as Cursor from '../../../internal/Cursor.js'
10
+ import * as Mpp from '../../../internal/Mpp.js'
11
+ import * as OpenApi from '../../../internal/OpenApi.js'
12
+ import * as Response from '../../../internal/Response.js'
13
+ import * as Schema from '../../../internal/Schema.js'
14
+ import * as Store from '../../../internal/Store.js'
15
+ import type * as Tidx from '../../../internal/Tidx.js'
16
+ import * as Timing from '../../../internal/Timing.js'
17
+ import * as Ttl from '../../../internal/Ttl.js'
18
+ import * as Value from '../../../internal/Value.js'
19
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
20
20
  import * as Tokens from './tokens.js'
21
21
 
22
22
  // TIP-20 tokens emit the standard ERC-20 Transfer event. Supplying the
@@ -285,7 +285,7 @@ export namespace schema {
285
285
  /** Creates transfer handlers. */
286
286
  export function transfers() {
287
287
  return new Hono<App.Environment>().get(
288
- '/',
288
+ '/v1/transfers',
289
289
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
290
290
  OpenApi.validate('query', schema.getTransfers.Query, {
291
291
  code: 'query_invalid',
@@ -1,6 +1,6 @@
1
- import * as TestApp from '../../test/App.js'
2
- import * as Runtime from '../../test/runtime.js'
3
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
1
+ import * as TestApp from '../../../../test/App.js'
2
+ import * as Runtime from '../../../../test/runtime.js'
3
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
4
4
  import * as Verified from './verified-tokens.js'
5
5
 
6
6
  /** Reader key for the data routes. */
@@ -1,13 +1,13 @@
1
1
  import { type Context, Hono } from 'hono'
2
2
  import * as z from 'zod/mini'
3
3
 
4
- import type * as App from '../App.js'
5
- import * as Auth from '../internal/Auth.js'
6
- import * as Cache from '../internal/Cache.js'
7
- import * as OpenApi from '../internal/OpenApi.js'
8
- import * as Response from '../internal/Response.js'
9
- import * as Schema from '../internal/Schema.js'
10
- import * as VerifiedTokens from '../internal/VerifiedTokens.js'
4
+ import type * as App from '../../../App.js'
5
+ import * as Auth from '../../../internal/Auth.js'
6
+ import * as Cache from '../../../internal/Cache.js'
7
+ import * as OpenApi from '../../../internal/OpenApi.js'
8
+ import * as Response from '../../../internal/Response.js'
9
+ import * as Schema from '../../../internal/Schema.js'
10
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
11
11
 
12
12
  /** Zod schemas owned by the verified-tokens resource. */
13
13
  export namespace schema {
@@ -138,7 +138,7 @@ export namespace schema {
138
138
  export function verifiedTokens() {
139
139
  return new Hono<App.Environment>()
140
140
  .get(
141
- '/',
141
+ '/v1/verified-tokens',
142
142
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
143
143
  OpenApi.validate('query', schema.listVerifiedTokens.Query, {
144
144
  code: 'query_invalid',
@@ -183,7 +183,7 @@ export function verifiedTokens() {
183
183
  },
184
184
  )
185
185
  .get(
186
- '/currencies',
186
+ '/v1/verified-tokens/currencies',
187
187
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
188
188
  OpenApi.validate('query', schema.getVerifiedTokenCurrencies.Query, {
189
189
  code: 'query_invalid',
@@ -230,7 +230,7 @@ export function verifiedTokens() {
230
230
  },
231
231
  )
232
232
  .get(
233
- '/:address',
233
+ '/v1/verified-tokens/:address',
234
234
  Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
235
235
  OpenApi.validate('param', schema.Params, {
236
236
  code: 'address_invalid',