tapimo 0.1.0 → 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 (385) hide show
  1. package/README.md +28 -15
  2. package/dist/ApiKey.d.ts +3 -1
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +1 -0
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +71 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +117 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7139 -4197
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +133 -329
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +11 -4
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +12 -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 +126 -53
  23. package/dist/admin/App.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.d.ts +104 -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 +4 -1
  29. package/dist/admin/apps/scopes.d.ts.map +1 -1
  30. package/dist/admin/apps/verified-tokens.d.ts +115 -115
  31. package/dist/admin/apps/verified-tokens.js +1 -1
  32. package/dist/admin/apps/verified-tokens.js.map +1 -1
  33. package/dist/admin/ui.generated.d.ts +1 -1
  34. package/dist/admin/ui.generated.js +1 -1
  35. package/dist/apps/data/App.d.ts +19176 -0
  36. package/dist/apps/data/App.d.ts.map +1 -0
  37. package/dist/apps/data/App.js +236 -0
  38. package/dist/apps/data/App.js.map +1 -0
  39. package/dist/apps/data/index.d.ts +3 -0
  40. package/dist/apps/data/index.d.ts.map +1 -0
  41. package/dist/apps/data/index.js +3 -0
  42. package/dist/apps/data/index.js.map +1 -0
  43. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  44. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  45. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  46. package/dist/apps/data/routes/activities.js.map +1 -0
  47. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  48. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  49. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  50. package/dist/apps/data/routes/addresses.js.map +1 -0
  51. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +49 -49
  52. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  53. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  54. package/dist/apps/data/routes/balances.js.map +1 -0
  55. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  56. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  57. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  58. package/dist/apps/data/routes/blocks.js.map +1 -0
  59. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +183 -183
  60. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  61. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  62. package/dist/apps/data/routes/coingecko.js.map +1 -0
  63. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +460 -460
  64. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  65. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  66. package/dist/apps/data/routes/exchanges.js.map +1 -0
  67. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +94 -94
  68. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  69. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  70. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  71. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  72. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  73. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  74. package/dist/apps/data/routes/indexer.js.map +1 -0
  75. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
  76. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  77. package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
  78. package/dist/apps/data/routes/receipts.js.map +1 -0
  79. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
  80. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  81. package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
  82. package/dist/apps/data/routes/rpc.js.map +1 -0
  83. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
  84. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  85. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  86. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  87. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
  88. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  89. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  90. package/dist/apps/data/routes/tokens.js.map +1 -0
  91. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
  92. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  93. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  94. package/dist/apps/data/routes/transactions.js.map +1 -0
  95. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +6 -6
  96. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  97. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  98. package/dist/apps/data/routes/transfers.js.map +1 -0
  99. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +42 -42
  100. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  101. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  102. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  103. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +62 -62
  104. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  105. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +30 -26
  106. package/dist/apps/data/routes/webhooks.js.map +1 -0
  107. package/dist/apps/docs/App.d.ts +27 -0
  108. package/dist/apps/docs/App.d.ts.map +1 -0
  109. package/dist/apps/docs/App.js +122 -0
  110. package/dist/apps/docs/App.js.map +1 -0
  111. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  112. package/dist/apps/docs/fonts.d.ts.map +1 -0
  113. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  114. package/dist/apps/docs/fonts.js.map +1 -0
  115. package/dist/apps/docs/index.d.ts +2 -0
  116. package/dist/apps/docs/index.d.ts.map +1 -0
  117. package/dist/apps/docs/index.js +2 -0
  118. package/dist/apps/docs/index.js.map +1 -0
  119. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  120. package/dist/apps/docs/logo.d.ts.map +1 -0
  121. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  122. package/dist/apps/docs/logo.js.map +1 -0
  123. package/dist/apps/index.d.ts +4 -0
  124. package/dist/apps/index.d.ts.map +1 -0
  125. package/dist/apps/index.js +4 -0
  126. package/dist/apps/index.js.map +1 -0
  127. package/dist/apps/metadata.d.ts +7 -0
  128. package/dist/apps/metadata.d.ts.map +1 -0
  129. package/dist/apps/metadata.js +15 -0
  130. package/dist/apps/metadata.js.map +1 -0
  131. package/dist/apps/platform/App.d.ts +2985 -0
  132. package/dist/apps/platform/App.d.ts.map +1 -0
  133. package/dist/apps/platform/App.js +74 -0
  134. package/dist/apps/platform/App.js.map +1 -0
  135. package/dist/apps/platform/index.d.ts +2 -0
  136. package/dist/apps/platform/index.d.ts.map +1 -0
  137. package/dist/apps/platform/index.js +2 -0
  138. package/dist/apps/platform/index.js.map +1 -0
  139. package/dist/apps/platform/routes/api-keys.d.ts +681 -0
  140. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  141. package/dist/apps/platform/routes/api-keys.js +328 -0
  142. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  143. package/dist/apps/platform/routes/invitations.d.ts +733 -0
  144. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  145. package/dist/apps/platform/routes/invitations.js +413 -0
  146. package/dist/apps/platform/routes/invitations.js.map +1 -0
  147. package/dist/apps/platform/routes/me.d.ts +95 -0
  148. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  149. package/dist/apps/platform/routes/me.js +81 -0
  150. package/dist/apps/platform/routes/me.js.map +1 -0
  151. package/dist/apps/platform/routes/members.d.ts +554 -0
  152. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  153. package/dist/apps/platform/routes/members.js +251 -0
  154. package/dist/apps/platform/routes/members.js.map +1 -0
  155. package/dist/apps/platform/routes/orgs.d.ts +582 -0
  156. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  157. package/dist/apps/platform/routes/orgs.js +265 -0
  158. package/dist/apps/platform/routes/orgs.js.map +1 -0
  159. package/dist/apps/platform/routes/projects.d.ts +740 -0
  160. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  161. package/dist/apps/platform/routes/projects.js +286 -0
  162. package/dist/apps/platform/routes/projects.js.map +1 -0
  163. package/dist/apps/relay/App.d.ts +41 -0
  164. package/dist/apps/relay/App.d.ts.map +1 -0
  165. package/dist/apps/relay/App.js +103 -0
  166. package/dist/apps/relay/App.js.map +1 -0
  167. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  168. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  169. package/dist/apps/relay/Sponsorships.js +193 -0
  170. package/dist/apps/relay/Sponsorships.js.map +1 -0
  171. package/dist/apps/relay/index.d.ts +3 -0
  172. package/dist/apps/relay/index.d.ts.map +1 -0
  173. package/dist/apps/relay/index.js +3 -0
  174. package/dist/apps/relay/index.js.map +1 -0
  175. package/dist/cli/Cli.d.ts +1 -1
  176. package/dist/cli/Cli.js +1 -1
  177. package/dist/cli/commands/admin.d.ts +1 -1
  178. package/dist/cli/commands/admin.js +2 -2
  179. package/dist/cli/commands/admin.js.map +1 -1
  180. package/dist/db/Db.d.ts +10 -0
  181. package/dist/db/Db.d.ts.map +1 -1
  182. package/dist/db/Db.js +128 -0
  183. package/dist/db/Db.js.map +1 -1
  184. package/dist/db/Schema.d.ts +80 -0
  185. package/dist/db/Schema.d.ts.map +1 -1
  186. package/dist/db/Schema.js +99 -0
  187. package/dist/db/Schema.js.map +1 -1
  188. package/dist/db/tables/invitations.d.ts +84 -0
  189. package/dist/db/tables/invitations.d.ts.map +1 -0
  190. package/dist/db/tables/invitations.js +165 -0
  191. package/dist/db/tables/invitations.js.map +1 -0
  192. package/dist/db/tables/memberships.d.ts +108 -0
  193. package/dist/db/tables/memberships.d.ts.map +1 -0
  194. package/dist/db/tables/memberships.js +153 -0
  195. package/dist/db/tables/memberships.js.map +1 -0
  196. package/dist/db/tables/organizations.d.ts +44 -0
  197. package/dist/db/tables/organizations.d.ts.map +1 -1
  198. package/dist/db/tables/organizations.js +89 -0
  199. package/dist/db/tables/organizations.js.map +1 -1
  200. package/dist/db/tables/projects.d.ts +65 -0
  201. package/dist/db/tables/projects.d.ts.map +1 -0
  202. package/dist/db/tables/projects.js +75 -0
  203. package/dist/db/tables/projects.js.map +1 -0
  204. package/dist/db/tables/sponsoredTransactions.d.ts +120 -0
  205. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  206. package/dist/db/tables/sponsoredTransactions.js +161 -0
  207. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  208. package/dist/db/tables/users.d.ts +48 -0
  209. package/dist/db/tables/users.d.ts.map +1 -0
  210. package/dist/db/tables/users.js +65 -0
  211. package/dist/db/tables/users.js.map +1 -0
  212. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  213. package/dist/handlers/internal/executionError.js +2 -0
  214. package/dist/handlers/internal/executionError.js.map +1 -1
  215. package/dist/handlers/internal/multisig.d.ts +2 -6
  216. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  217. package/dist/handlers/internal/multisig.js +11 -36
  218. package/dist/handlers/internal/multisig.js.map +1 -1
  219. package/dist/handlers/internal/sponsorship.d.ts +32 -2
  220. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  221. package/dist/handlers/internal/sponsorship.js +34 -9
  222. package/dist/handlers/internal/sponsorship.js.map +1 -1
  223. package/dist/handlers/relay.d.ts +6 -2
  224. package/dist/handlers/relay.d.ts.map +1 -1
  225. package/dist/handlers/relay.js +16 -2
  226. package/dist/handlers/relay.js.map +1 -1
  227. package/dist/internal/Auth.d.ts +208 -6
  228. package/dist/internal/Auth.d.ts.map +1 -1
  229. package/dist/internal/Auth.js +500 -21
  230. package/dist/internal/Auth.js.map +1 -1
  231. package/dist/internal/Log.d.ts +7 -3
  232. package/dist/internal/Log.d.ts.map +1 -1
  233. package/dist/internal/Log.js +4 -0
  234. package/dist/internal/Log.js.map +1 -1
  235. package/dist/internal/OpenApi.d.ts +0 -19
  236. package/dist/internal/OpenApi.d.ts.map +1 -1
  237. package/dist/internal/OpenApi.js +0 -57
  238. package/dist/internal/OpenApi.js.map +1 -1
  239. package/dist/internal/Store.d.ts +7 -1
  240. package/dist/internal/Store.d.ts.map +1 -1
  241. package/dist/internal/Store.js +16 -2
  242. package/dist/internal/Store.js.map +1 -1
  243. package/dist/internal/Viem.d.ts +84 -0
  244. package/dist/internal/Viem.d.ts.map +1 -1
  245. package/dist/internal/Webhooks.d.ts +1 -1
  246. package/dist/internal/Webhooks.d.ts.map +1 -1
  247. package/package.json +31 -5
  248. package/src/ApiKey.ts +1 -0
  249. package/src/ApiKeys.test.ts +104 -1
  250. package/src/ApiKeys.ts +154 -1
  251. package/src/App.test.ts +11187 -179
  252. package/src/App.ts +200 -420
  253. package/src/Client.test-d.ts +306 -15
  254. package/src/Scope.ts +13 -4
  255. package/src/Webhooks.ts +2 -2
  256. package/src/admin/apps/api-keys.test.ts +51 -0
  257. package/src/admin/apps/api-keys.ts +84 -0
  258. package/src/admin/apps/scopes.test.ts +5 -1
  259. package/src/admin/apps/verified-tokens.ts +1 -1
  260. package/src/admin/ui.generated.ts +1 -1
  261. package/src/apps/composition.test.ts +66 -0
  262. package/src/apps/data/App.ts +295 -0
  263. package/src/apps/data/index.ts +2 -0
  264. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  265. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  266. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  267. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
  268. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  269. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
  270. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  271. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  272. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  273. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
  274. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  275. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  276. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  277. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
  278. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  279. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
  280. package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
  281. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +44 -5
  282. package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
  283. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
  284. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  285. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
  286. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  287. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
  288. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  289. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
  290. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  291. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
  292. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  293. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +6 -6
  294. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +39 -35
  295. package/src/apps/docs/App.ts +136 -0
  296. package/src/apps/docs/index.ts +1 -0
  297. package/src/apps/index.ts +3 -0
  298. package/src/apps/metadata.ts +23 -0
  299. package/src/apps/platform/App.ts +130 -0
  300. package/src/apps/platform/index.ts +1 -0
  301. package/src/apps/platform/routes/api-keys.test.ts +330 -0
  302. package/src/apps/platform/routes/api-keys.ts +427 -0
  303. package/src/apps/platform/routes/invitations.test.ts +361 -0
  304. package/src/apps/platform/routes/invitations.ts +519 -0
  305. package/src/apps/platform/routes/me.test.ts +121 -0
  306. package/src/apps/platform/routes/me.ts +106 -0
  307. package/src/apps/platform/routes/members.test.ts +195 -0
  308. package/src/apps/platform/routes/members.ts +313 -0
  309. package/src/apps/platform/routes/orgs.test.ts +313 -0
  310. package/src/apps/platform/routes/orgs.ts +343 -0
  311. package/src/apps/platform/routes/projects.test.ts +181 -0
  312. package/src/apps/platform/routes/projects.ts +367 -0
  313. package/src/apps/relay/App.test.ts +484 -0
  314. package/src/apps/relay/App.ts +128 -0
  315. package/src/apps/relay/Sponsorships.test.ts +375 -0
  316. package/src/apps/relay/Sponsorships.ts +305 -0
  317. package/src/apps/relay/index.ts +2 -0
  318. package/src/cli/Cli.ts +1 -1
  319. package/src/cli/commands/admin.ts +2 -2
  320. package/src/db/Db.ts +159 -0
  321. package/src/db/Schema.ts +137 -0
  322. package/src/db/tables/invitations.ts +198 -0
  323. package/src/db/tables/memberships.ts +208 -0
  324. package/src/db/tables/organizations.test.ts +37 -1
  325. package/src/db/tables/organizations.ts +105 -0
  326. package/src/db/tables/projects.ts +107 -0
  327. package/src/db/tables/sponsoredTransactions.test.ts +218 -0
  328. package/src/db/tables/sponsoredTransactions.ts +236 -0
  329. package/src/db/tables/users.ts +85 -0
  330. package/src/handlers/internal/executionError.ts +2 -0
  331. package/src/handlers/internal/multisig.test.ts +84 -10
  332. package/src/handlers/internal/multisig.ts +15 -50
  333. package/src/handlers/internal/sponsorship.ts +74 -15
  334. package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
  335. package/src/handlers/relay.ts +23 -5
  336. package/src/internal/Auth.test.ts +316 -0
  337. package/src/internal/Auth.ts +691 -25
  338. package/src/internal/Cursor.test.ts +3 -2
  339. package/src/internal/Log.test.ts +1 -1
  340. package/src/internal/Log.ts +11 -3
  341. package/src/internal/MetricSink.ts +1 -1
  342. package/src/internal/OpenApi.ts +0 -59
  343. package/src/internal/Store.test.ts +52 -0
  344. package/src/internal/Store.ts +24 -5
  345. package/src/internal/Tidx.local.test.ts +1 -1
  346. package/src/internal/VerifiedTokens.test.ts +1 -1
  347. package/src/internal/WebhookDestination.test.ts +1 -1
  348. package/src/internal/Webhooks.test.ts +4 -4
  349. package/src/internal/Webhooks.ts +1 -1
  350. package/dist/apps/activities.js.map +0 -1
  351. package/dist/apps/addresses.js.map +0 -1
  352. package/dist/apps/balances.d.ts.map +0 -1
  353. package/dist/apps/balances.js.map +0 -1
  354. package/dist/apps/blocks.d.ts.map +0 -1
  355. package/dist/apps/blocks.js.map +0 -1
  356. package/dist/apps/coingecko.d.ts.map +0 -1
  357. package/dist/apps/coingecko.js.map +0 -1
  358. package/dist/apps/exchanges.d.ts.map +0 -1
  359. package/dist/apps/exchanges.js.map +0 -1
  360. package/dist/apps/fee-amm.d.ts.map +0 -1
  361. package/dist/apps/fee-amm.js.map +0 -1
  362. package/dist/apps/indexer.d.ts.map +0 -1
  363. package/dist/apps/indexer.js.map +0 -1
  364. package/dist/apps/receipts.d.ts.map +0 -1
  365. package/dist/apps/receipts.js.map +0 -1
  366. package/dist/apps/rpc.d.ts.map +0 -1
  367. package/dist/apps/rpc.js.map +0 -1
  368. package/dist/apps/tokenlist.d.ts.map +0 -1
  369. package/dist/apps/tokenlist.js.map +0 -1
  370. package/dist/apps/tokens.d.ts.map +0 -1
  371. package/dist/apps/tokens.js.map +0 -1
  372. package/dist/apps/transactions.d.ts.map +0 -1
  373. package/dist/apps/transactions.js.map +0 -1
  374. package/dist/apps/transfers.d.ts.map +0 -1
  375. package/dist/apps/transfers.js.map +0 -1
  376. package/dist/apps/verified-tokens.d.ts.map +0 -1
  377. package/dist/apps/verified-tokens.js.map +0 -1
  378. package/dist/apps/webhooks.js.map +0 -1
  379. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  380. package/dist/internal/OpenApi.fonts.js.map +0 -1
  381. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  382. package/dist/internal/OpenApi.logo.js.map +0 -1
  383. package/src/handlers/internal/multisig.localnet.test.ts +0 -146
  384. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  385. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -0,0 +1,330 @@
1
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
2
+
3
+ import * as TestApp from '../../../../test/App.js'
4
+ import * as Keys from './api-keys.js'
5
+ import * as Orgs from './orgs.js'
6
+ import * as Projects from './projects.js'
7
+
8
+ /** Origin pinned for SIWE domain binding; Hono test requests use this host. */
9
+ const origin = 'http://localhost'
10
+
11
+ /** Super admin secret configured on the test app. */
12
+ const secret = 'tempo:sk:c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2'
13
+
14
+ /** RequestInit for a JSON mutation carrying the session cookie. */
15
+ function json(method: 'PATCH' | 'POST', cookie: string, body: unknown) {
16
+ return {
17
+ body: JSON.stringify(body),
18
+ headers: { 'content-type': 'application/json', cookie },
19
+ method,
20
+ }
21
+ }
22
+
23
+ /** RequestInit for a JSON mutation authenticated as the super admin. */
24
+ function superAdminJson(method: 'PATCH' | 'POST', body: unknown) {
25
+ return {
26
+ body: JSON.stringify(body),
27
+ headers: { 'content-type': 'application/json', 'tempo-api-key': secret },
28
+ method,
29
+ }
30
+ }
31
+
32
+ // Resolve-cache disabled so revocation assertions observe the store directly.
33
+ type State = ReturnType<typeof TestApp.kvStore>
34
+
35
+ function createApp(options: { kv?: { store: State } } = {}) {
36
+ return TestApp.create({
37
+ auth: { cache: false, superAdmin: { secret } },
38
+ ...(options.kv ? { kv: options.kv } : {}),
39
+ session: { wallet: { origin } },
40
+ })
41
+ }
42
+
43
+ function failRecordDeletes(store: State) {
44
+ const delete_ = store.delete.bind(store)
45
+ store.delete = async (key) => {
46
+ if (key.startsWith('apikey:')) throw new Error('KV delete failed.')
47
+ await delete_(key)
48
+ }
49
+ }
50
+
51
+ /** Signs in a fresh scripted account; returns its session cookie. */
52
+ async function session(app: TestApp.signIn.App) {
53
+ const account = privateKeyToAccount(generatePrivateKey())
54
+ const { cookie } = await TestApp.signIn(app, account)
55
+ return cookie!
56
+ }
57
+
58
+ /** Creates an org and a project owned by the session. */
59
+ async function fixture(app: ReturnType<typeof createApp>, cookie: string) {
60
+ const org = await TestApp.json(
61
+ await app.request('/v1/orgs', json('POST', cookie, { name: 'Acme' })),
62
+ Orgs.schema.Organization,
63
+ )
64
+ const project = await TestApp.json(
65
+ await app.request(`/v1/orgs/${org.id}/projects`, json('POST', cookie, { name: 'Checkout' })),
66
+ Projects.schema.Project,
67
+ )
68
+ return { org, project }
69
+ }
70
+
71
+ describe('keys', () => {
72
+ test('mints, lists, authenticates, and revokes a project key', async () => {
73
+ const app = createApp()
74
+ const cookie = await session(app)
75
+ const { org, project } = await fixture(app, cookie)
76
+ const base = `/v1/orgs/${org.id}/projects/${project.id}/api-keys`
77
+
78
+ // Scoped keys mint through the super admin: no scope is self-issuable.
79
+ const minted = await app.request(
80
+ base,
81
+ superAdminJson('POST', { environment: 'sandbox', name: 'CI', scopes: ['data:read'] }),
82
+ )
83
+ expect(minted.status).toBe(200)
84
+ const created = await TestApp.json(minted, Keys.schema.createApiKey.Response)
85
+ expect(created.id).toMatch(/^key_/)
86
+ expect(created.token).toMatch(/^tempo_sandbox:sk:[a-f0-9]{48}$/)
87
+ expect(created.orgId).toBe(org.id)
88
+ expect(created.projectId).toBe(project.id)
89
+ expect(created.createdBy).toBe('super_admin')
90
+
91
+ // The minted key authenticates data API requests. `no-store` forces an
92
+ // origin pass — an edge-cache hit would skip auth and mask the assertion.
93
+ const data = await app.request('/v1/tokens', {
94
+ headers: { 'cache-control': 'no-store', 'tempo-api-key': created.token },
95
+ })
96
+ expect(data.status).toBe(200)
97
+
98
+ // Listing exposes metadata only — never the token.
99
+ const listed = await app.request(base, { headers: { cookie } })
100
+ expect(listed.status).toBe(200)
101
+ const list = await TestApp.json(listed, Keys.schema.listApiKeys.Response)
102
+ expect(list.data.map(({ id }) => id)).toEqual([created.id])
103
+ expect(JSON.stringify(list)).not.toContain(created.token)
104
+ expect(list.data[0]!.tokenLast4).toBe(created.token.slice(-4))
105
+
106
+ const revoked = await app.request(`${base}/${created.id}`, {
107
+ headers: { cookie },
108
+ method: 'DELETE',
109
+ })
110
+ expect(revoked.status).toBe(200)
111
+ expect(await TestApp.json(revoked, Keys.schema.revokeApiKey.Response)).toEqual({
112
+ id: created.id,
113
+ })
114
+
115
+ // With the resolve cache disabled, revocation is immediate.
116
+ const after = await app.request('/v1/tokens', {
117
+ headers: { 'cache-control': 'no-store', 'tempo-api-key': created.token },
118
+ })
119
+ expect(after.status).toBe(401)
120
+ const empty = await TestApp.json(
121
+ await app.request(base, { headers: { cookie } }),
122
+ Keys.schema.listApiKeys.Response,
123
+ )
124
+ expect(empty).toEqual({ data: [] })
125
+ })
126
+
127
+ test('rejects the wildcard scope at mint', async () => {
128
+ const app = createApp()
129
+ const cookie = await session(app)
130
+ const { org, project } = await fixture(app, cookie)
131
+
132
+ const response = await app.request(
133
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
134
+ json('POST', cookie, { scopes: ['*'] }),
135
+ )
136
+ expect(response.status).toBe(400)
137
+ })
138
+
139
+ test('rejects session mints while no scope is self-issuable', async () => {
140
+ const app = createApp()
141
+ const cookie = await session(app)
142
+ const { org, project } = await fixture(app, cookie)
143
+
144
+ const response = await app.request(
145
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
146
+ json('POST', cookie, { scopes: ['data:read'] }),
147
+ )
148
+ expect(response.status).toBe(403)
149
+ const { requestId, ...body } = (await response.json()) as { requestId?: string }
150
+ expect(requestId).toBeDefined()
151
+ expect(body).toMatchInlineSnapshot(`
152
+ {
153
+ "error": {
154
+ "code": "scope_not_issuable",
155
+ "message": "The requested scopes are not issuable.",
156
+ },
157
+ }
158
+ `)
159
+ })
160
+
161
+ test('binds keys to their project on every verb', async () => {
162
+ const app = createApp()
163
+ const owner = await session(app)
164
+ const { org, project } = await fixture(app, owner)
165
+ const other = await TestApp.json(
166
+ await app.request(`/v1/orgs/${org.id}/projects`, json('POST', owner, { name: 'Payments' })),
167
+ Projects.schema.Project,
168
+ )
169
+ const minted = await TestApp.json(
170
+ await app.request(
171
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
172
+ superAdminJson('POST', { scopes: ['data:read'] }),
173
+ ),
174
+ Keys.schema.createApiKey.Response,
175
+ )
176
+
177
+ // Same org, sibling project: the key id must not resolve through it.
178
+ const crossList = await app.request(`/v1/orgs/${org.id}/projects/${other.id}/api-keys`, {
179
+ headers: { cookie: owner },
180
+ })
181
+ expect((await TestApp.json(crossList, Keys.schema.listApiKeys.Response)).data).toEqual([])
182
+ const crossRevoke = await app.request(
183
+ `/v1/orgs/${org.id}/projects/${other.id}/api-keys/${minted.id}`,
184
+ { headers: { cookie: owner }, method: 'DELETE' },
185
+ )
186
+ expect(crossRevoke.status).toBe(404)
187
+
188
+ // Foreign session: the whole surface 404s at the org-ownership link.
189
+ const stranger = await session(app)
190
+ const foreignMint = await app.request(
191
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
192
+ json('POST', stranger, { scopes: ['data:read'] }),
193
+ )
194
+ expect(foreignMint.status).toBe(404)
195
+ const foreignRevoke = await app.request(
196
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys/${minted.id}`,
197
+ { headers: { cookie: stranger }, method: 'DELETE' },
198
+ )
199
+ expect(foreignRevoke.status).toBe(404)
200
+
201
+ // The key survives every attempt, still listed for the owner.
202
+ const listed = await app.request(`/v1/orgs/${org.id}/projects/${project.id}/api-keys`, {
203
+ headers: { cookie: owner },
204
+ })
205
+ const list = await TestApp.json(listed, Keys.schema.listApiKeys.Response)
206
+ expect(list.data.map(({ id }) => id)).toEqual([minted.id])
207
+ })
208
+
209
+ test('revokes keys when their project or organization is deleted', async () => {
210
+ const app = createApp()
211
+ const cookie = await session(app)
212
+ const { org, project } = await fixture(app, cookie)
213
+ const minted = await TestApp.json(
214
+ await app.request(
215
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
216
+ superAdminJson('POST', { scopes: ['data:read'] }),
217
+ ),
218
+ Keys.schema.createApiKey.Response,
219
+ )
220
+
221
+ const deletedProject = await app.request(`/v1/orgs/${org.id}/projects/${project.id}`, {
222
+ headers: { cookie },
223
+ method: 'DELETE',
224
+ })
225
+ expect(deletedProject.status).toBe(200)
226
+ const afterProject = await app.request('/v1/tokens', {
227
+ headers: { 'cache-control': 'no-store', 'tempo-api-key': minted.token },
228
+ })
229
+ expect(afterProject.status).toBe(401)
230
+
231
+ // Org deletion revokes keys of every remaining project.
232
+ const other = await TestApp.json(
233
+ await app.request(`/v1/orgs/${org.id}/projects`, json('POST', cookie, { name: 'Payments' })),
234
+ Projects.schema.Project,
235
+ )
236
+ const survivor = await TestApp.json(
237
+ await app.request(
238
+ `/v1/orgs/${org.id}/projects/${other.id}/api-keys`,
239
+ superAdminJson('POST', { scopes: ['data:read'] }),
240
+ ),
241
+ Keys.schema.createApiKey.Response,
242
+ )
243
+ const deletedOrg = await app.request(`/v1/orgs/${org.id}`, {
244
+ headers: { cookie },
245
+ method: 'DELETE',
246
+ })
247
+ expect(deletedOrg.status).toBe(200)
248
+ const afterOrg = await app.request('/v1/tokens', {
249
+ headers: { 'cache-control': 'no-store', 'tempo-api-key': survivor.token },
250
+ })
251
+ expect(afterOrg.status).toBe(401)
252
+ })
253
+
254
+ test('keeps the project when key revocation fails during project deletion', async () => {
255
+ const store = TestApp.kvStore({ keys: [] })
256
+ const app = createApp({ kv: { store } })
257
+ const cookie = await session(app)
258
+ const { org, project } = await fixture(app, cookie)
259
+ await TestApp.json(
260
+ await app.request(
261
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
262
+ superAdminJson('POST', { scopes: ['data:read'] }),
263
+ ),
264
+ Keys.schema.createApiKey.Response,
265
+ )
266
+ failRecordDeletes(store)
267
+
268
+ const deletedProject = await app.request(`/v1/orgs/${org.id}/projects/${project.id}`, {
269
+ headers: { cookie },
270
+ method: 'DELETE',
271
+ })
272
+ expect(deletedProject.status).toBe(502)
273
+
274
+ const projectStill = await app.request(`/v1/orgs/${org.id}/projects/${project.id}`, {
275
+ headers: { cookie },
276
+ })
277
+ expect(projectStill.status).toBe(200)
278
+ })
279
+
280
+ test('keeps the organization when key revocation fails during organization deletion', async () => {
281
+ const store = TestApp.kvStore({ keys: [] })
282
+ const app = createApp({ kv: { store } })
283
+ const cookie = await session(app)
284
+ const { org, project } = await fixture(app, cookie)
285
+ await TestApp.json(
286
+ await app.request(
287
+ `/v1/orgs/${org.id}/projects/${project.id}/api-keys`,
288
+ superAdminJson('POST', { scopes: ['data:read'] }),
289
+ ),
290
+ Keys.schema.createApiKey.Response,
291
+ )
292
+ failRecordDeletes(store)
293
+
294
+ const deletedOrg = await app.request(`/v1/orgs/${org.id}`, {
295
+ headers: { cookie },
296
+ method: 'DELETE',
297
+ })
298
+ expect(deletedOrg.status).toBe(502)
299
+
300
+ const orgStill = await app.request(`/v1/orgs/${org.id}`, { headers: { cookie } })
301
+ expect(orgStill.status).toBe(200)
302
+ })
303
+
304
+ test('mints as the super admin with super admin attribution', async () => {
305
+ const app = createApp()
306
+ const cookie = await session(app)
307
+ const { org, project } = await fixture(app, cookie)
308
+
309
+ const minted = await app.request(`/v1/orgs/${org.id}/projects/${project.id}/api-keys`, {
310
+ body: JSON.stringify({ scopes: ['data:read'] }),
311
+ headers: { 'content-type': 'application/json', 'tempo-api-key': secret },
312
+ method: 'POST',
313
+ })
314
+ expect(minted.status).toBe(200)
315
+ const created = await TestApp.json(minted, Keys.schema.createApiKey.Response)
316
+ expect(created.createdBy).toBe('super_admin')
317
+ expect(created.environment).toBe('production')
318
+ })
319
+
320
+ test('rejects API keys on the keys surface', async () => {
321
+ const app = createApp()
322
+ const cookie = await session(app)
323
+ const { org, project } = await fixture(app, cookie)
324
+
325
+ const response = await app.request(`/v1/orgs/${org.id}/projects/${project.id}/api-keys`, {
326
+ headers: { 'tempo-api-key': TestApp.key.token },
327
+ })
328
+ expect(response.status).toBe(403)
329
+ })
330
+ })