tapimo 0.0.2 → 0.2.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 (517) hide show
  1. package/README.md +38 -16
  2. package/dist/ApiKey.d.ts +14 -11
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +11 -12
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +207 -0
  7. package/dist/ApiKeys.d.ts.map +1 -0
  8. package/dist/ApiKeys.js +282 -0
  9. package/dist/ApiKeys.js.map +1 -0
  10. package/dist/App.d.ts +6771 -3819
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +145 -317
  13. package/dist/App.js.map +1 -1
  14. package/dist/Handler.d.ts +86 -0
  15. package/dist/Handler.d.ts.map +1 -0
  16. package/dist/Handler.js +83 -0
  17. package/dist/Handler.js.map +1 -0
  18. package/dist/Scope.d.ts +14 -4
  19. package/dist/Scope.d.ts.map +1 -1
  20. package/dist/Scope.js +16 -4
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/Webhooks.d.ts +5 -7
  23. package/dist/Webhooks.d.ts.map +1 -1
  24. package/dist/Webhooks.js +11 -4
  25. package/dist/Webhooks.js.map +1 -1
  26. package/dist/admin/Access.d.ts +1 -3
  27. package/dist/admin/Access.d.ts.map +1 -1
  28. package/dist/admin/Access.js +1 -3
  29. package/dist/admin/Access.js.map +1 -1
  30. package/dist/admin/App.d.ts +167 -205
  31. package/dist/admin/App.d.ts.map +1 -1
  32. package/dist/admin/App.js +2 -4
  33. package/dist/admin/App.js.map +1 -1
  34. package/dist/admin/apps/api-keys.d.ts +105 -5
  35. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  36. package/dist/admin/apps/api-keys.js +75 -9
  37. package/dist/admin/apps/api-keys.js.map +1 -1
  38. package/dist/admin/apps/scopes.d.ts +6 -0
  39. package/dist/admin/apps/scopes.d.ts.map +1 -1
  40. package/dist/admin/apps/verified-tokens.d.ts +35 -149
  41. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  42. package/dist/admin/apps/verified-tokens.js +18 -39
  43. package/dist/admin/apps/verified-tokens.js.map +1 -1
  44. package/dist/admin/ui.generated.d.ts +1 -1
  45. package/dist/admin/ui.generated.js +1 -1
  46. package/dist/apps/data/App.d.ts +19176 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +236 -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} +49 -49
  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} +183 -183
  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} +460 -460
  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} +94 -94
  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/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  83. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  84. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  85. package/dist/apps/data/routes/indexer.js.map +1 -0
  86. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +6 -6
  87. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  88. package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
  89. package/dist/apps/data/routes/receipts.js.map +1 -0
  90. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
  91. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  92. package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
  93. package/dist/apps/data/routes/rpc.js.map +1 -0
  94. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
  95. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  96. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  97. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  98. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +11 -11
  99. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  100. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  101. package/dist/apps/data/routes/tokens.js.map +1 -0
  102. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +288 -288
  103. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  104. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  105. package/dist/apps/data/routes/transactions.js.map +1 -0
  106. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +35 -35
  107. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  108. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  109. package/dist/apps/data/routes/transfers.js.map +1 -0
  110. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +42 -42
  111. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  112. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  113. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  114. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +66 -63
  115. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  116. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +67 -59
  117. package/dist/apps/data/routes/webhooks.js.map +1 -0
  118. package/dist/apps/docs/App.d.ts +27 -0
  119. package/dist/apps/docs/App.d.ts.map +1 -0
  120. package/dist/apps/docs/App.js +122 -0
  121. package/dist/apps/docs/App.js.map +1 -0
  122. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  123. package/dist/apps/docs/fonts.d.ts.map +1 -0
  124. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  125. package/dist/apps/docs/fonts.js.map +1 -0
  126. package/dist/apps/docs/index.d.ts +2 -0
  127. package/dist/apps/docs/index.d.ts.map +1 -0
  128. package/dist/apps/docs/index.js +2 -0
  129. package/dist/apps/docs/index.js.map +1 -0
  130. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  131. package/dist/apps/docs/logo.d.ts.map +1 -0
  132. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  133. package/dist/apps/docs/logo.js.map +1 -0
  134. package/dist/apps/index.d.ts +4 -0
  135. package/dist/apps/index.d.ts.map +1 -0
  136. package/dist/apps/index.js +4 -0
  137. package/dist/apps/index.js.map +1 -0
  138. package/dist/apps/metadata.d.ts +7 -0
  139. package/dist/apps/metadata.d.ts.map +1 -0
  140. package/dist/apps/metadata.js +15 -0
  141. package/dist/apps/metadata.js.map +1 -0
  142. package/dist/apps/platform/App.d.ts +2985 -0
  143. package/dist/apps/platform/App.d.ts.map +1 -0
  144. package/dist/apps/platform/App.js +74 -0
  145. package/dist/apps/platform/App.js.map +1 -0
  146. package/dist/apps/platform/index.d.ts +2 -0
  147. package/dist/apps/platform/index.d.ts.map +1 -0
  148. package/dist/apps/platform/index.js +2 -0
  149. package/dist/apps/platform/index.js.map +1 -0
  150. package/dist/apps/platform/routes/api-keys.d.ts +681 -0
  151. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  152. package/dist/apps/platform/routes/api-keys.js +328 -0
  153. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  154. package/dist/apps/platform/routes/invitations.d.ts +733 -0
  155. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  156. package/dist/apps/platform/routes/invitations.js +413 -0
  157. package/dist/apps/platform/routes/invitations.js.map +1 -0
  158. package/dist/apps/platform/routes/me.d.ts +95 -0
  159. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  160. package/dist/apps/platform/routes/me.js +81 -0
  161. package/dist/apps/platform/routes/me.js.map +1 -0
  162. package/dist/apps/platform/routes/members.d.ts +554 -0
  163. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  164. package/dist/apps/platform/routes/members.js +251 -0
  165. package/dist/apps/platform/routes/members.js.map +1 -0
  166. package/dist/apps/platform/routes/orgs.d.ts +582 -0
  167. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/orgs.js +265 -0
  169. package/dist/apps/platform/routes/orgs.js.map +1 -0
  170. package/dist/apps/platform/routes/projects.d.ts +740 -0
  171. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/projects.js +286 -0
  173. package/dist/apps/platform/routes/projects.js.map +1 -0
  174. package/dist/apps/relay/App.d.ts +41 -0
  175. package/dist/apps/relay/App.d.ts.map +1 -0
  176. package/dist/apps/relay/App.js +103 -0
  177. package/dist/apps/relay/App.js.map +1 -0
  178. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  179. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  180. package/dist/apps/relay/Sponsorships.js +193 -0
  181. package/dist/apps/relay/Sponsorships.js.map +1 -0
  182. package/dist/apps/relay/index.d.ts +3 -0
  183. package/dist/apps/relay/index.d.ts.map +1 -0
  184. package/dist/apps/relay/index.js +3 -0
  185. package/dist/apps/relay/index.js.map +1 -0
  186. package/dist/{Cli.d.ts → cli/Cli.d.ts} +13 -2
  187. package/dist/cli/Cli.d.ts.map +1 -0
  188. package/dist/cli/Cli.js +19 -0
  189. package/dist/cli/Cli.js.map +1 -0
  190. package/dist/cli/bin.d.ts +3 -0
  191. package/dist/cli/bin.d.ts.map +1 -0
  192. package/dist/cli/bin.js +4 -0
  193. package/dist/cli/bin.js.map +1 -0
  194. package/dist/cli/commands/admin.d.ts +15 -0
  195. package/dist/cli/commands/admin.d.ts.map +1 -0
  196. package/dist/cli/commands/admin.js +60 -0
  197. package/dist/cli/commands/admin.js.map +1 -0
  198. package/dist/cloudflare.d.ts +7 -0
  199. package/dist/cloudflare.d.ts.map +1 -1
  200. package/dist/cloudflare.js +9 -0
  201. package/dist/cloudflare.js.map +1 -1
  202. package/dist/db/Db.d.ts +113 -0
  203. package/dist/db/Db.d.ts.map +1 -0
  204. package/dist/db/Db.js +402 -0
  205. package/dist/db/Db.js.map +1 -0
  206. package/dist/db/Schema.d.ts +168 -0
  207. package/dist/db/Schema.d.ts.map +1 -0
  208. package/dist/db/Schema.js +229 -0
  209. package/dist/db/Schema.js.map +1 -0
  210. package/dist/db/tables/invitations.d.ts +84 -0
  211. package/dist/db/tables/invitations.d.ts.map +1 -0
  212. package/dist/db/tables/invitations.js +165 -0
  213. package/dist/db/tables/invitations.js.map +1 -0
  214. package/dist/db/tables/memberships.d.ts +108 -0
  215. package/dist/db/tables/memberships.d.ts.map +1 -0
  216. package/dist/db/tables/memberships.js +153 -0
  217. package/dist/db/tables/memberships.js.map +1 -0
  218. package/dist/db/tables/organizations.d.ts +123 -0
  219. package/dist/db/tables/organizations.d.ts.map +1 -0
  220. package/dist/db/tables/organizations.js +170 -0
  221. package/dist/db/tables/organizations.js.map +1 -0
  222. package/dist/db/tables/projects.d.ts +65 -0
  223. package/dist/db/tables/projects.d.ts.map +1 -0
  224. package/dist/db/tables/projects.js +75 -0
  225. package/dist/db/tables/projects.js.map +1 -0
  226. package/dist/db/tables/sponsoredTransactions.d.ts +120 -0
  227. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  228. package/dist/db/tables/sponsoredTransactions.js +161 -0
  229. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  230. package/dist/db/tables/users.d.ts +48 -0
  231. package/dist/db/tables/users.d.ts.map +1 -0
  232. package/dist/db/tables/users.js +65 -0
  233. package/dist/db/tables/users.js.map +1 -0
  234. package/dist/db/tables/verifiedTokens.d.ts +53 -0
  235. package/dist/db/tables/verifiedTokens.d.ts.map +1 -0
  236. package/dist/db/tables/verifiedTokens.js +74 -0
  237. package/dist/db/tables/verifiedTokens.js.map +1 -0
  238. package/dist/db/tables/webhookDeliveries.d.ts +71 -0
  239. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -0
  240. package/dist/db/tables/webhookDeliveries.js +119 -0
  241. package/dist/db/tables/webhookDeliveries.js.map +1 -0
  242. package/dist/db/tables/webhookSubscriptions.d.ts +158 -0
  243. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -0
  244. package/dist/db/tables/webhookSubscriptions.js +272 -0
  245. package/dist/db/tables/webhookSubscriptions.js.map +1 -0
  246. package/dist/handlers/internal/executionError.d.ts +25 -0
  247. package/dist/handlers/internal/executionError.d.ts.map +1 -0
  248. package/dist/handlers/internal/executionError.js +186 -0
  249. package/dist/handlers/internal/executionError.js.map +1 -0
  250. package/dist/handlers/internal/multisig.d.ts +233 -0
  251. package/dist/handlers/internal/multisig.d.ts.map +1 -0
  252. package/dist/handlers/internal/multisig.js +542 -0
  253. package/dist/handlers/internal/multisig.js.map +1 -0
  254. package/dist/handlers/internal/requestListener.d.ts +124 -0
  255. package/dist/handlers/internal/requestListener.d.ts.map +1 -0
  256. package/dist/handlers/internal/requestListener.js +173 -0
  257. package/dist/handlers/internal/requestListener.js.map +1 -0
  258. package/dist/handlers/internal/sponsorship.d.ts +113 -0
  259. package/dist/handlers/internal/sponsorship.d.ts.map +1 -0
  260. package/dist/handlers/internal/sponsorship.js +128 -0
  261. package/dist/handlers/internal/sponsorship.js.map +1 -0
  262. package/dist/handlers/internal/types.d.ts +284 -0
  263. package/dist/handlers/internal/types.d.ts.map +1 -0
  264. package/dist/handlers/internal/types.js +2 -0
  265. package/dist/handlers/internal/types.js.map +1 -0
  266. package/dist/handlers/internal/utils.d.ts +34 -0
  267. package/dist/handlers/internal/utils.d.ts.map +1 -0
  268. package/dist/handlers/internal/utils.js +131 -0
  269. package/dist/handlers/internal/utils.js.map +1 -0
  270. package/dist/handlers/relay.d.ts +123 -0
  271. package/dist/handlers/relay.d.ts.map +1 -0
  272. package/dist/handlers/relay.js +1278 -0
  273. package/dist/handlers/relay.js.map +1 -0
  274. package/dist/index.d.ts +4 -2
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +4 -2
  277. package/dist/index.js.map +1 -1
  278. package/dist/internal/Auth.d.ts +224 -16
  279. package/dist/internal/Auth.d.ts.map +1 -1
  280. package/dist/internal/Auth.js +572 -33
  281. package/dist/internal/Auth.js.map +1 -1
  282. package/dist/internal/Log.d.ts +7 -3
  283. package/dist/internal/Log.d.ts.map +1 -1
  284. package/dist/internal/Log.js +4 -0
  285. package/dist/internal/Log.js.map +1 -1
  286. package/dist/internal/OpenApi.d.ts +0 -19
  287. package/dist/internal/OpenApi.d.ts.map +1 -1
  288. package/dist/internal/OpenApi.js +0 -57
  289. package/dist/internal/OpenApi.js.map +1 -1
  290. package/dist/internal/RpcSchema.d.ts +10 -0
  291. package/dist/internal/RpcSchema.d.ts.map +1 -0
  292. package/dist/internal/RpcSchema.js +2 -0
  293. package/dist/internal/RpcSchema.js.map +1 -0
  294. package/dist/internal/Store.d.ts +49 -4
  295. package/dist/internal/Store.d.ts.map +1 -1
  296. package/dist/internal/Store.js +81 -5
  297. package/dist/internal/Store.js.map +1 -1
  298. package/dist/internal/VerifiedTokens.d.ts +15 -34
  299. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  300. package/dist/internal/VerifiedTokens.js +115 -159
  301. package/dist/internal/VerifiedTokens.js.map +1 -1
  302. package/dist/internal/Viem.d.ts +84 -0
  303. package/dist/internal/Viem.d.ts.map +1 -1
  304. package/dist/internal/Webhooks.d.ts +50 -36
  305. package/dist/internal/Webhooks.d.ts.map +1 -1
  306. package/dist/internal/Webhooks.js +92 -205
  307. package/dist/internal/Webhooks.js.map +1 -1
  308. package/package.json +37 -6
  309. package/src/ApiKey.test.ts +3 -3
  310. package/src/ApiKey.ts +11 -12
  311. package/src/ApiKeys.test.ts +278 -0
  312. package/src/ApiKeys.ts +358 -0
  313. package/src/App.test-d.ts +1 -1
  314. package/src/App.test.ts +40508 -19083
  315. package/src/App.ts +239 -416
  316. package/src/Client.test-d.ts +307 -16
  317. package/src/Handler.ts +154 -0
  318. package/src/Scope.ts +17 -4
  319. package/src/Webhooks.test.ts +8 -7
  320. package/src/Webhooks.ts +13 -7
  321. package/src/admin/Access.ts +1 -3
  322. package/src/admin/App.ts +19 -24
  323. package/src/admin/apps/api-keys.test.ts +70 -18
  324. package/src/admin/apps/api-keys.ts +92 -9
  325. package/src/admin/apps/scopes.test.ts +8 -0
  326. package/src/admin/apps/verified-tokens.test.ts +3 -30
  327. package/src/admin/apps/verified-tokens.ts +18 -37
  328. package/src/admin/ui.generated.ts +1 -1
  329. package/src/apps/composition.test.ts +66 -0
  330. package/src/apps/data/App.ts +295 -0
  331. package/src/apps/data/index.ts +2 -0
  332. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  333. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  334. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  335. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +6 -5
  336. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  337. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +4 -4
  338. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  339. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  340. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  341. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +2 -2
  342. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  343. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  344. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  345. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +27 -6
  346. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  347. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +4 -4
  348. package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
  349. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +142 -13
  350. package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
  351. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +8 -10
  352. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  353. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +6 -5
  354. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  355. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +4 -4
  356. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  357. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +3 -3
  358. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  359. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +27 -15
  360. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  361. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +137 -150
  362. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +83 -81
  363. package/src/apps/docs/App.ts +136 -0
  364. package/src/apps/docs/index.ts +1 -0
  365. package/src/apps/index.ts +3 -0
  366. package/src/apps/metadata.ts +23 -0
  367. package/src/apps/platform/App.ts +130 -0
  368. package/src/apps/platform/index.ts +1 -0
  369. package/src/apps/platform/routes/api-keys.test.ts +330 -0
  370. package/src/apps/platform/routes/api-keys.ts +427 -0
  371. package/src/apps/platform/routes/invitations.test.ts +361 -0
  372. package/src/apps/platform/routes/invitations.ts +519 -0
  373. package/src/apps/platform/routes/me.test.ts +121 -0
  374. package/src/apps/platform/routes/me.ts +106 -0
  375. package/src/apps/platform/routes/members.test.ts +195 -0
  376. package/src/apps/platform/routes/members.ts +313 -0
  377. package/src/apps/platform/routes/orgs.test.ts +313 -0
  378. package/src/apps/platform/routes/orgs.ts +343 -0
  379. package/src/apps/platform/routes/projects.test.ts +181 -0
  380. package/src/apps/platform/routes/projects.ts +367 -0
  381. package/src/apps/relay/App.test.ts +484 -0
  382. package/src/apps/relay/App.ts +128 -0
  383. package/src/apps/relay/Sponsorships.test.ts +375 -0
  384. package/src/apps/relay/Sponsorships.ts +305 -0
  385. package/src/apps/relay/index.ts +2 -0
  386. package/src/{Cli.test.ts → cli/Cli.test.ts} +10 -9
  387. package/src/{Cli.ts → cli/Cli.ts} +16 -9
  388. package/src/cli/bin.ts +4 -0
  389. package/src/cli/commands/admin.test.ts +71 -0
  390. package/src/cli/commands/admin.ts +60 -0
  391. package/src/cloudflare.ts +10 -0
  392. package/src/db/Db.test.ts +84 -0
  393. package/src/db/Db.ts +542 -0
  394. package/src/db/Schema.ts +301 -0
  395. package/src/db/tables/invitations.ts +198 -0
  396. package/src/db/tables/memberships.ts +208 -0
  397. package/src/db/tables/organizations.test.ts +160 -0
  398. package/src/db/tables/organizations.ts +232 -0
  399. package/src/db/tables/projects.ts +107 -0
  400. package/src/db/tables/sponsoredTransactions.test.ts +218 -0
  401. package/src/db/tables/sponsoredTransactions.ts +236 -0
  402. package/src/db/tables/users.ts +85 -0
  403. package/src/db/tables/verifiedTokens.ts +111 -0
  404. package/src/db/tables/webhookDeliveries.ts +159 -0
  405. package/src/db/tables/webhookSubscriptions.ts +358 -0
  406. package/src/handlers/internal/executionError.ts +207 -0
  407. package/src/handlers/internal/multisig.test.ts +818 -0
  408. package/src/handlers/internal/multisig.ts +823 -0
  409. package/src/handlers/internal/requestListener.ts +273 -0
  410. package/src/handlers/internal/sponsorship.ts +245 -0
  411. package/src/handlers/internal/types.ts +378 -0
  412. package/src/handlers/internal/utils.ts +153 -0
  413. package/src/handlers/relay.test.ts +2035 -0
  414. package/src/handlers/relay.ts +1623 -0
  415. package/src/index.ts +4 -2
  416. package/src/internal/Auth.test.ts +337 -21
  417. package/src/internal/Auth.ts +783 -44
  418. package/src/internal/Cursor.test.ts +3 -2
  419. package/src/internal/Log.test.ts +1 -1
  420. package/src/internal/Log.ts +11 -3
  421. package/src/internal/MetricSink.ts +1 -1
  422. package/src/internal/OpenApi.ts +0 -59
  423. package/src/internal/RateLimit.test.ts +1 -1
  424. package/src/internal/RpcSchema.ts +10 -0
  425. package/src/internal/Store.test.ts +150 -10
  426. package/src/internal/Store.ts +136 -11
  427. package/src/internal/Tidx.local.test.ts +1 -1
  428. package/src/internal/VerifiedTokens.test.ts +99 -115
  429. package/src/internal/VerifiedTokens.ts +123 -175
  430. package/src/internal/WebhookDestination.test.ts +1 -1
  431. package/src/internal/Webhooks.test.ts +111 -111
  432. package/src/internal/Webhooks.ts +103 -221
  433. package/dist/ApiKeySource.d.ts +0 -166
  434. package/dist/ApiKeySource.d.ts.map +0 -1
  435. package/dist/ApiKeySource.js +0 -234
  436. package/dist/ApiKeySource.js.map +0 -1
  437. package/dist/Cli.d.ts.map +0 -1
  438. package/dist/Cli.js +0 -13
  439. package/dist/Cli.js.map +0 -1
  440. package/dist/apps/activities.js.map +0 -1
  441. package/dist/apps/addresses.js.map +0 -1
  442. package/dist/apps/balances.d.ts.map +0 -1
  443. package/dist/apps/balances.js.map +0 -1
  444. package/dist/apps/blocks.d.ts.map +0 -1
  445. package/dist/apps/blocks.js.map +0 -1
  446. package/dist/apps/coingecko.d.ts.map +0 -1
  447. package/dist/apps/coingecko.js.map +0 -1
  448. package/dist/apps/exchanges.d.ts.map +0 -1
  449. package/dist/apps/exchanges.js.map +0 -1
  450. package/dist/apps/fee-amm.d.ts.map +0 -1
  451. package/dist/apps/fee-amm.js.map +0 -1
  452. package/dist/apps/indexer.d.ts.map +0 -1
  453. package/dist/apps/indexer.js.map +0 -1
  454. package/dist/apps/receipts.d.ts.map +0 -1
  455. package/dist/apps/receipts.js.map +0 -1
  456. package/dist/apps/rpc.d.ts.map +0 -1
  457. package/dist/apps/rpc.js.map +0 -1
  458. package/dist/apps/tokenlist.d.ts.map +0 -1
  459. package/dist/apps/tokenlist.js.map +0 -1
  460. package/dist/apps/tokens.d.ts.map +0 -1
  461. package/dist/apps/tokens.js.map +0 -1
  462. package/dist/apps/transactions.d.ts.map +0 -1
  463. package/dist/apps/transactions.js.map +0 -1
  464. package/dist/apps/transfers.d.ts.map +0 -1
  465. package/dist/apps/transfers.js.map +0 -1
  466. package/dist/apps/verified-tokens.d.ts.map +0 -1
  467. package/dist/apps/verified-tokens.js.map +0 -1
  468. package/dist/apps/webhooks.js.map +0 -1
  469. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  470. package/dist/internal/OpenApi.fonts.js.map +0 -1
  471. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  472. package/dist/internal/OpenApi.logo.js.map +0 -1
  473. package/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +0 -1
  474. package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  475. package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  476. package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  477. package/seeds/31318/verified-tokens.json +0 -30
  478. package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  479. package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +0 -1
  480. package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +0 -1
  481. package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +0 -4
  482. package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +0 -30
  483. package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +0 -1
  484. package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +0 -1
  485. package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +0 -1
  486. package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +0 -11
  487. package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +0 -1
  488. package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +0 -1
  489. package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
  490. package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +0 -1
  491. package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
  492. package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +0 -1
  493. package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +0 -5
  494. package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +0 -1
  495. package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +0 -1
  496. package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +0 -1
  497. package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +0 -1
  498. package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +0 -1
  499. package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +0 -1
  500. package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +0 -1
  501. package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +0 -1
  502. package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
  503. package/seeds/4217/verified-tokens.json +0 -177
  504. package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  505. package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  506. package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  507. package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  508. package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +0 -1
  509. package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +0 -1
  510. package/seeds/42431/verified-tokens.json +0 -44
  511. package/seeds/openrpc/README.md +0 -27
  512. package/seeds/openrpc/execution-apis.json +0 -8989
  513. package/src/ApiKeySource.test-d.ts +0 -11
  514. package/src/ApiKeySource.test.ts +0 -295
  515. package/src/ApiKeySource.ts +0 -303
  516. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  517. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -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
 
@@ -227,16 +227,14 @@ describe('POST /rpc', () => {
227
227
  try {
228
228
  const app = TestApp.create({
229
229
  auth: {
230
- source: TestApp.source({
231
- keys: [
232
- {
233
- id: 'key_indexer_only',
234
- orgId: 'org_test',
235
- scopes: ['indexer:query'],
236
- token: 'secret_indexer_key',
237
- },
238
- ],
239
- }),
230
+ keys: [
231
+ {
232
+ id: 'key_indexer_only',
233
+ orgId: 'org_test',
234
+ scopes: ['indexer:query'],
235
+ token: 'secret_indexer_key',
236
+ },
237
+ ],
240
238
  },
241
239
  })
242
240
  const response = await app.fetch(
@@ -266,6 +264,137 @@ describe('POST /rpc', () => {
266
264
  })
267
265
  })
268
266
 
267
+ describe('POST /rpc/relay', () => {
268
+ test('rejects anonymous callers', async () => {
269
+ const app = TestApp.create()
270
+
271
+ const response = await app.fetch(
272
+ new Request('http://tempo-api.test/rpc/relay', {
273
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
274
+ method: 'POST',
275
+ }),
276
+ )
277
+ const body = (await response.json()) as Record<string, unknown>
278
+ const { requestId, ...stable } = body
279
+
280
+ expect(response.status).toMatchInlineSnapshot(`401`)
281
+ expect(typeof requestId).toMatchInlineSnapshot(`"string"`)
282
+ expect(stable).toMatchInlineSnapshot(`
283
+ {
284
+ "error": {
285
+ "code": "api_key_missing",
286
+ "message": "Missing API key",
287
+ },
288
+ }
289
+ `)
290
+ })
291
+
292
+ test('rejects keys missing the relay scope', async () => {
293
+ // The shared test key holds the data/indexer scopes only.
294
+ const app = TestApp.create()
295
+
296
+ const response = await app.fetch(
297
+ new Request('http://tempo-api.test/rpc/relay', {
298
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
299
+ headers: { 'tempo-api-key': TestApp.key.token },
300
+ method: 'POST',
301
+ }),
302
+ )
303
+ const body = (await response.json()) as Record<string, unknown>
304
+ const { requestId, ...stable } = body
305
+
306
+ expect(response.status).toMatchInlineSnapshot(`403`)
307
+ expect(typeof requestId).toMatchInlineSnapshot(`"string"`)
308
+ expect(stable).toMatchInlineSnapshot(`
309
+ {
310
+ "error": {
311
+ "code": "api_key_forbidden",
312
+ "message": "API key missing required scope",
313
+ },
314
+ }
315
+ `)
316
+ })
317
+
318
+ test('routes chain-scoped mounts to the relay pipeline', async () => {
319
+ const fetch = mockRpc()
320
+
321
+ try {
322
+ const app = TestApp.create({
323
+ auth: {
324
+ keys: [
325
+ {
326
+ id: 'key_relay',
327
+ orgId: 'org_test',
328
+ scopes: ['rpc-relay:read'],
329
+ token: 'secret_relay_key',
330
+ },
331
+ ],
332
+ },
333
+ rpc: { url: () => 'https://internal.rpc.test/json-rpc' },
334
+ })
335
+
336
+ // Without a fee payer configured the relay pipeline answers this method
337
+ // itself; a proxied request would return the mock upstream's result.
338
+ const response = await app.fetch(
339
+ new Request('http://tempo-api.test/rpc/relay/42431', {
340
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_signRawTransaction', params: ['0x76'] }), // prettier-ignore
341
+ headers: { 'tempo-api-key': 'secret_relay_key' },
342
+ method: 'POST',
343
+ }),
344
+ )
345
+
346
+ expect(response.status).toMatchInlineSnapshot(`200`)
347
+ const body = (await response.json()) as { error?: { message: string } | undefined }
348
+ expect(body.error?.message).toMatchInlineSnapshot(
349
+ `"eth_signRawTransaction requires a fee payer to be configured on the relay. Set the \`feePayer\` option in \`Handler.relay()\` to enable transaction sponsorship."`,
350
+ )
351
+ expect(fetch.calls).toMatchInlineSnapshot(`[]`)
352
+ } finally {
353
+ fetch.restore()
354
+ }
355
+ })
356
+
357
+ test('proxies for keys holding rpc-relay:read', async () => {
358
+ const fetch = mockRpc()
359
+
360
+ try {
361
+ const app = TestApp.create({
362
+ auth: {
363
+ keys: [
364
+ {
365
+ id: 'key_relay',
366
+ orgId: 'org_test',
367
+ scopes: ['rpc-relay:read'],
368
+ token: 'secret_relay_key',
369
+ },
370
+ ],
371
+ },
372
+ rpc: { url: () => 'https://internal.rpc.test/json-rpc' },
373
+ })
374
+
375
+ const response = await app.fetch(
376
+ new Request('http://tempo-api.test/rpc/relay', {
377
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
378
+ headers: { 'tempo-api-key': 'secret_relay_key' },
379
+ method: 'POST',
380
+ }),
381
+ )
382
+
383
+ expect(response.status).toMatchInlineSnapshot(`200`)
384
+ expect(await response.json()).toMatchInlineSnapshot(`
385
+ {
386
+ "id": 1,
387
+ "jsonrpc": "2.0",
388
+ "result": "0xa5bf",
389
+ }
390
+ `)
391
+ expect(fetch.calls[0]?.url).toMatchInlineSnapshot(`"https://internal.rpc.test/json-rpc"`)
392
+ } finally {
393
+ fetch.restore()
394
+ }
395
+ })
396
+ })
397
+
269
398
  function mockRpc() {
270
399
  const original = globalThis.fetch
271
400
  const calls: {
@@ -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:
@@ -1,8 +1,6 @@
1
- import { Store } from 'cadent'
2
-
3
- import * as TestApp from '../../test/App.js'
4
- import * as Runtime from '../../test/runtime.js'
5
- 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'
6
4
  import * as Tokenlist from './tokenlist.js'
7
5
 
8
6
  /** Reader key for the data routes. */
@@ -11,7 +9,7 @@ const reader = {
11
9
  orgId: 'org_test',
12
10
  scopes: ['data:read'],
13
11
  token: 'secret_reader',
14
- } satisfies TestApp.source.Key
12
+ } satisfies TestApp.kvStore.Key
15
13
 
16
14
  /** A known list published into the store before exercising the read endpoint. */
17
15
  const seedList = [
@@ -27,11 +25,11 @@ function as(key: { token: string }) {
27
25
 
28
26
  /** Client whose verified-token store holds a published {@link seedList} snapshot. */
29
27
  async function seeded() {
30
- const store = Store.memory()
31
- await VerifiedTokens.replace(store, chainId, seedList)
28
+ const db = TestApp.database()
29
+ await VerifiedTokens.replace(db, chainId, seedList)
32
30
  return TestApp.client({
33
- auth: { source: TestApp.source({ keys: [reader] }) },
34
- verifiedTokens: { store },
31
+ auth: { keys: [reader] },
32
+ db,
35
33
  })
36
34
  }
37
35
 
@@ -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
- import { Schema } from 'cadent'
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
@@ -10,9 +10,10 @@ import * as Tokens from './tokens.js'
10
10
  // verified tokens the bundle used to provide; a test can still override
11
11
  // `verifiedTokens`.
12
12
  const runtime = Runtime.get()
13
- const verified = TestApp.verifiedStore(runtime.chainId)
13
+ const db = TestApp.database()
14
+ await TestApp.verifiedSeed(db, runtime.chainId)
14
15
  function app(options: TestApp.create.Options = {}) {
15
- return TestApp.client({ verifiedTokens: { store: verified }, ...options })
16
+ return TestApp.client({ db, ...options })
16
17
  }
17
18
 
18
19
  const verifiedTokenCount = 6
@@ -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',
@@ -1,10 +1,10 @@
1
- import { Schema } from 'cadent'
1
+ 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
- import { Schema } from 'cadent'
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,22 +1,15 @@
1
- import { Store } from 'cadent'
2
-
3
- import * as TestApp from '../../test/App.js'
4
- import * as Runtime from '../../test/runtime.js'
5
- 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'
6
4
  import * as Verified from './verified-tokens.js'
7
5
 
8
- // Mutations live in the admin API (`cadent/admin`) and are covered in
9
- // `../admin/apps/verified-tokens.test.ts`; these tests cover the public reads,
10
- // seeded by publishing a snapshot through the same core module the admin
11
- // writes use.
12
-
13
6
  /** Reader key for the data routes. */
14
7
  const reader = {
15
8
  id: 'key_reader',
16
9
  orgId: 'org_test',
17
10
  scopes: ['data:read'],
18
11
  token: 'secret_reader',
19
- } satisfies TestApp.source.Key
12
+ } satisfies TestApp.kvStore.Key
20
13
 
21
14
  /** An address not present in the seed list. */
22
15
  const unknownAddress = '0x20c00000000000000000000000000000000000ff'
@@ -36,11 +29,11 @@ function as(key: { token: string }) {
36
29
 
37
30
  /** Client whose verified-token store holds a published {@link seedList} snapshot. */
38
31
  async function seeded() {
39
- const store = Store.memory()
40
- await VerifiedTokens.replace(store, chainId, seedList)
32
+ const db = TestApp.database()
33
+ await VerifiedTokens.replace(db, chainId, seedList)
41
34
  return TestApp.client({
42
- auth: { source: TestApp.source({ keys: [reader] }) },
43
- verifiedTokens: { store },
35
+ auth: { keys: [reader] },
36
+ db,
44
37
  })
45
38
  }
46
39
 
@@ -55,6 +48,25 @@ describe('GET /verified-tokens', () => {
55
48
  expect(body.data[1]?.logoUri).toBeUndefined()
56
49
  })
57
50
 
51
+ test('reads through `db.cached` when configured', async () => {
52
+ // Seed only the cached source: the list serving from it proves the
53
+ // snapshot path resolves `cached`, not `source`. `refreshMs: 0` forces a
54
+ // head check against this app's database (the per-isolate snapshot cell
55
+ // is keyed by chain id, so a prior test's cell could otherwise satisfy
56
+ // the read).
57
+ const cached = TestApp.database()
58
+ await VerifiedTokens.replace(cached, chainId, seedList)
59
+ const client = TestApp.client({
60
+ auth: { keys: [reader] },
61
+ db: { cached, source: TestApp.database() },
62
+ verifiedTokens: { refreshMs: 0 },
63
+ })
64
+ const response = await client.v1['verified-tokens'].$get({ query: {} }, as(reader))
65
+ expect(response.status).toBe(200)
66
+ const body = await TestApp.json(response, Verified.schema.listVerifiedTokens.Response)
67
+ expect(body.data.map((token) => token.address)).toEqual(seedList.map((token) => token.address))
68
+ })
69
+
58
70
  test('filters by currency (case-insensitive)', async () => {
59
71
  const response = await (
60
72
  await seeded()
@@ -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',