tapimo 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/dist/App.d.ts +6396 -4575
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +39 -4
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.d.ts +15 -0
  6. package/dist/Assets.d.ts.map +1 -1
  7. package/dist/Assets.js +7 -0
  8. package/dist/Assets.js.map +1 -1
  9. package/dist/Scope.d.ts +2 -0
  10. package/dist/Scope.d.ts.map +1 -1
  11. package/dist/Scope.js +17 -0
  12. package/dist/Scope.js.map +1 -1
  13. package/dist/admin/App.d.ts +176 -78
  14. package/dist/admin/App.d.ts.map +1 -1
  15. package/dist/admin/apps/api-keys.d.ts +84 -4
  16. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  17. package/dist/admin/apps/api-keys.js +54 -0
  18. package/dist/admin/apps/api-keys.js.map +1 -1
  19. package/dist/admin/apps/earn-vaults.d.ts +123 -9
  20. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  21. package/dist/admin/apps/earn-vaults.js +60 -7
  22. package/dist/admin/apps/earn-vaults.js.map +1 -1
  23. package/dist/admin/apps/organizations.d.ts.map +1 -1
  24. package/dist/admin/apps/organizations.js +4 -2
  25. package/dist/admin/apps/organizations.js.map +1 -1
  26. package/dist/admin/apps/verified-tokens.d.ts +90 -90
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.js +71 -71
  29. package/dist/admin/ui.generated.js.map +1 -1
  30. package/dist/apps/Zones.d.ts +16 -16
  31. package/dist/apps/Zones.js +4 -4
  32. package/dist/apps/data/App.d.ts +1699 -749
  33. package/dist/apps/data/App.d.ts.map +1 -1
  34. package/dist/apps/data/App.js +58 -9
  35. package/dist/apps/data/App.js.map +1 -1
  36. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  37. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  38. package/dist/apps/data/ZoneSelection.js +44 -0
  39. package/dist/apps/data/ZoneSelection.js.map +1 -0
  40. package/dist/apps/data/routes/activities.d.ts +2417 -50
  41. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  42. package/dist/apps/data/routes/activities.js +1896 -1293
  43. package/dist/apps/data/routes/activities.js.map +1 -1
  44. package/dist/apps/data/routes/addresses.d.ts +471 -340
  45. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  46. package/dist/apps/data/routes/balances.d.ts +12 -12
  47. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  48. package/dist/apps/data/routes/balances.js +44 -17
  49. package/dist/apps/data/routes/balances.js.map +1 -1
  50. package/dist/apps/data/routes/blocks.d.ts +42 -42
  51. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  52. package/dist/apps/data/routes/blocks.js +22 -12
  53. package/dist/apps/data/routes/blocks.js.map +1 -1
  54. package/dist/apps/data/routes/coingecko.d.ts +179 -179
  55. package/dist/apps/data/routes/earn.d.ts +144 -19
  56. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  57. package/dist/apps/data/routes/earn.js +160 -28
  58. package/dist/apps/data/routes/earn.js.map +1 -1
  59. package/dist/apps/data/routes/exchanges.d.ts +719 -13
  60. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  61. package/dist/apps/data/routes/exchanges.js +16 -13
  62. package/dist/apps/data/routes/exchanges.js.map +1 -1
  63. package/dist/apps/data/routes/fee-amm.d.ts +2 -2
  64. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  65. package/dist/apps/data/routes/fee-amm.js +9 -11
  66. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  67. package/dist/apps/data/routes/indexer.d.ts +34 -34
  68. package/dist/apps/data/routes/receipts.d.ts +363 -263
  69. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  70. package/dist/apps/data/routes/receipts.js +29 -11
  71. package/dist/apps/data/routes/receipts.js.map +1 -1
  72. package/dist/apps/data/routes/rpc.js +24 -10
  73. package/dist/apps/data/routes/rpc.js.map +1 -1
  74. package/dist/apps/data/routes/tokenlist.d.ts +13 -13
  75. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  76. package/dist/apps/data/routes/tokenlist.js +16 -15
  77. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  78. package/dist/apps/data/routes/tokens.d.ts +112 -98
  79. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  80. package/dist/apps/data/routes/tokens.js +85 -35
  81. package/dist/apps/data/routes/tokens.js.map +1 -1
  82. package/dist/apps/data/routes/transactions.d.ts +7 -2
  83. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  84. package/dist/apps/data/routes/transactions.js +38 -18
  85. package/dist/apps/data/routes/transactions.js.map +1 -1
  86. package/dist/apps/data/routes/transfers.d.ts +1 -1
  87. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  88. package/dist/apps/data/routes/transfers.js +25 -21
  89. package/dist/apps/data/routes/transfers.js.map +1 -1
  90. package/dist/apps/data/routes/valuation.d.ts +1 -1
  91. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  92. package/dist/apps/data/routes/valuation.js +12 -7
  93. package/dist/apps/data/routes/valuation.js.map +1 -1
  94. package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
  95. package/dist/apps/data/routes/webhooks.d.ts +15 -15
  96. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  97. package/dist/apps/data/routes/webhooks.js +2 -2
  98. package/dist/apps/data/routes/webhooks.js.map +1 -1
  99. package/dist/apps/data/routes/zones.d.ts +32 -32
  100. package/dist/apps/data/routes/zones.js +1 -1
  101. package/dist/apps/funding/App.d.ts +38 -27
  102. package/dist/apps/funding/App.d.ts.map +1 -1
  103. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  104. package/dist/apps/funding/routes/chains.js +5 -4
  105. package/dist/apps/funding/routes/chains.js.map +1 -1
  106. package/dist/apps/funding/routes/deposit-addresses.d.ts +16 -16
  107. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  108. package/dist/apps/funding/routes/deposit-addresses.js +24 -19
  109. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  110. package/dist/apps/funding/routes/providers.d.ts +13 -13
  111. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  112. package/dist/apps/funding/routes/providers.js +3 -2
  113. package/dist/apps/funding/routes/providers.js.map +1 -1
  114. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  115. package/dist/apps/funding/routes/quotes.js +2 -2
  116. package/dist/apps/funding/routes/quotes.js.map +1 -1
  117. package/dist/apps/funding/routes/transfers.d.ts +60 -48
  118. package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
  119. package/dist/apps/funding/routes/transfers.js +27 -19
  120. package/dist/apps/funding/routes/transfers.js.map +1 -1
  121. package/dist/apps/management/App.d.ts +4558 -3700
  122. package/dist/apps/management/App.d.ts.map +1 -1
  123. package/dist/apps/management/Billing.d.ts.map +1 -1
  124. package/dist/apps/management/Billing.js +19 -6
  125. package/dist/apps/management/Billing.js.map +1 -1
  126. package/dist/apps/management/routes/api-keys.d.ts +786 -175
  127. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  128. package/dist/apps/management/routes/api-keys.js +312 -34
  129. package/dist/apps/management/routes/api-keys.js.map +1 -1
  130. package/dist/apps/management/routes/billing.d.ts +103 -30
  131. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  132. package/dist/apps/management/routes/billing.js +91 -32
  133. package/dist/apps/management/routes/billing.js.map +1 -1
  134. package/dist/apps/management/routes/faucet.d.ts +35 -35
  135. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  136. package/dist/apps/management/routes/faucet.js +23 -12
  137. package/dist/apps/management/routes/faucet.js.map +1 -1
  138. package/dist/apps/management/routes/invitations.d.ts +46 -13
  139. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  140. package/dist/apps/management/routes/invitations.js +79 -29
  141. package/dist/apps/management/routes/invitations.js.map +1 -1
  142. package/dist/apps/management/routes/invite-links.d.ts +120 -75
  143. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  144. package/dist/apps/management/routes/invite-links.js +100 -41
  145. package/dist/apps/management/routes/invite-links.js.map +1 -1
  146. package/dist/apps/management/routes/me.d.ts +5 -5
  147. package/dist/apps/management/routes/me.d.ts.map +1 -1
  148. package/dist/apps/management/routes/me.js +14 -10
  149. package/dist/apps/management/routes/me.js.map +1 -1
  150. package/dist/apps/management/routes/members.d.ts +99 -78
  151. package/dist/apps/management/routes/members.d.ts.map +1 -1
  152. package/dist/apps/management/routes/members.js +37 -18
  153. package/dist/apps/management/routes/members.js.map +1 -1
  154. package/dist/apps/management/routes/orgs.d.ts +48 -8
  155. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  156. package/dist/apps/management/routes/orgs.js +48 -19
  157. package/dist/apps/management/routes/orgs.js.map +1 -1
  158. package/dist/apps/management/routes/projects.d.ts +108 -46
  159. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  160. package/dist/apps/management/routes/projects.js +72 -21
  161. package/dist/apps/management/routes/projects.js.map +1 -1
  162. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  163. package/dist/apps/management/routes/scopes.js +8 -5
  164. package/dist/apps/management/routes/scopes.js.map +1 -1
  165. package/dist/apps/management/routes/usage.d.ts +82 -82
  166. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  167. package/dist/apps/management/routes/usage.js +41 -31
  168. package/dist/apps/management/routes/usage.js.map +1 -1
  169. package/dist/apps/management/routes/verified-token-requests.d.ts +35 -7
  170. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  171. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  172. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  173. package/dist/apps/management/routes/webhooks.d.ts +200 -183
  174. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  175. package/dist/apps/management/routes/webhooks.js +80 -35
  176. package/dist/apps/management/routes/webhooks.js.map +1 -1
  177. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  178. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  179. package/dist/apps/mpp/internal/Adapter.js +12 -0
  180. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  181. package/dist/db/Db.d.ts +2 -0
  182. package/dist/db/Db.d.ts.map +1 -1
  183. package/dist/db/Db.js +52 -1
  184. package/dist/db/Db.js.map +1 -1
  185. package/dist/db/Schema.d.ts +26 -3
  186. package/dist/db/Schema.d.ts.map +1 -1
  187. package/dist/db/Schema.js +24 -5
  188. package/dist/db/Schema.js.map +1 -1
  189. package/dist/db/tables/earnVaults.d.ts +5 -1
  190. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  191. package/dist/db/tables/earnVaults.js +5 -0
  192. package/dist/db/tables/earnVaults.js.map +1 -1
  193. package/dist/db/tables/fundingCatalog.d.ts +4 -2
  194. package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
  195. package/dist/db/tables/fundingCatalog.js +5 -1
  196. package/dist/db/tables/fundingCatalog.js.map +1 -1
  197. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  198. package/dist/db/tables/webhookDeliveries.js +10 -0
  199. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  200. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  201. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  202. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  203. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  204. package/dist/db/tables/webhookQueueEvents.d.ts +14 -20
  205. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  206. package/dist/db/tables/webhookQueueEvents.js +68 -47
  207. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  208. package/dist/db/tables/webhookSubscriptions.d.ts +16 -5
  209. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  210. package/dist/db/tables/webhookSubscriptions.js +29 -5
  211. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  212. package/dist/handlers/internal/utils.d.ts.map +1 -1
  213. package/dist/handlers/internal/utils.js +9 -0
  214. package/dist/handlers/internal/utils.js.map +1 -1
  215. package/dist/internal/Auth.d.ts +11 -2
  216. package/dist/internal/Auth.d.ts.map +1 -1
  217. package/dist/internal/Auth.js +19 -6
  218. package/dist/internal/Auth.js.map +1 -1
  219. package/dist/internal/Cache.d.ts.map +1 -1
  220. package/dist/internal/Cache.js +11 -7
  221. package/dist/internal/Cache.js.map +1 -1
  222. package/dist/internal/EarnVaults.d.ts +43 -4
  223. package/dist/internal/EarnVaults.d.ts.map +1 -1
  224. package/dist/internal/EarnVaults.js +167 -0
  225. package/dist/internal/EarnVaults.js.map +1 -1
  226. package/dist/internal/Fetch.d.ts +23 -0
  227. package/dist/internal/Fetch.d.ts.map +1 -0
  228. package/dist/internal/Fetch.js +26 -0
  229. package/dist/internal/Fetch.js.map +1 -0
  230. package/dist/internal/Log.d.ts +3 -1
  231. package/dist/internal/Log.d.ts.map +1 -1
  232. package/dist/internal/Log.js +16 -3
  233. package/dist/internal/Log.js.map +1 -1
  234. package/dist/internal/OpenApi.d.ts +30 -24
  235. package/dist/internal/OpenApi.d.ts.map +1 -1
  236. package/dist/internal/OpenApi.js +140 -41
  237. package/dist/internal/OpenApi.js.map +1 -1
  238. package/dist/internal/Response.d.ts +14 -9
  239. package/dist/internal/Response.d.ts.map +1 -1
  240. package/dist/internal/Response.js +16 -5
  241. package/dist/internal/Response.js.map +1 -1
  242. package/dist/internal/Schema.d.ts +11 -10
  243. package/dist/internal/Schema.d.ts.map +1 -1
  244. package/dist/internal/Schema.js +14 -9
  245. package/dist/internal/Schema.js.map +1 -1
  246. package/dist/internal/Store.d.ts +28 -6
  247. package/dist/internal/Store.d.ts.map +1 -1
  248. package/dist/internal/Store.js +121 -25
  249. package/dist/internal/Store.js.map +1 -1
  250. package/dist/internal/Tidx.d.ts +2 -0
  251. package/dist/internal/Tidx.d.ts.map +1 -1
  252. package/dist/internal/Tidx.js +23 -6
  253. package/dist/internal/Tidx.js.map +1 -1
  254. package/dist/internal/Timeout.d.ts +36 -0
  255. package/dist/internal/Timeout.d.ts.map +1 -0
  256. package/dist/internal/Timeout.js +37 -0
  257. package/dist/internal/Timeout.js.map +1 -0
  258. package/dist/internal/Timing.d.ts +9 -0
  259. package/dist/internal/Timing.d.ts.map +1 -1
  260. package/dist/internal/Timing.js +7 -0
  261. package/dist/internal/Timing.js.map +1 -1
  262. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  263. package/dist/internal/WebhookDestination.js +3 -0
  264. package/dist/internal/WebhookDestination.js.map +1 -1
  265. package/dist/internal/Webhooks.d.ts +29 -12
  266. package/dist/internal/Webhooks.d.ts.map +1 -1
  267. package/dist/internal/Webhooks.js +37 -20
  268. package/dist/internal/Webhooks.js.map +1 -1
  269. package/dist/internal/funding/Action.d.ts +9 -0
  270. package/dist/internal/funding/Action.d.ts.map +1 -1
  271. package/dist/internal/funding/Action.js +16 -8
  272. package/dist/internal/funding/Action.js.map +1 -1
  273. package/dist/internal/funding/Catalog.d.ts +9 -2
  274. package/dist/internal/funding/Catalog.d.ts.map +1 -1
  275. package/dist/internal/funding/Catalog.js +19 -8
  276. package/dist/internal/funding/Catalog.js.map +1 -1
  277. package/dist/internal/funding/Deposit.d.ts +2 -2
  278. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  279. package/dist/internal/funding/Deposit.js +9 -8
  280. package/dist/internal/funding/Deposit.js.map +1 -1
  281. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  282. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  283. package/dist/internal/funding/DepositAddress.js +9 -8
  284. package/dist/internal/funding/DepositAddress.js.map +1 -1
  285. package/dist/internal/funding/Provider.d.ts +68 -13
  286. package/dist/internal/funding/Provider.d.ts.map +1 -1
  287. package/dist/internal/funding/Provider.js +42 -20
  288. package/dist/internal/funding/Provider.js.map +1 -1
  289. package/dist/internal/funding/Transfer.d.ts +13 -12
  290. package/dist/internal/funding/Transfer.d.ts.map +1 -1
  291. package/dist/internal/funding/Transfer.js +23 -21
  292. package/dist/internal/funding/Transfer.js.map +1 -1
  293. package/dist/internal/funding/providers/stargate.d.ts +38 -0
  294. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  295. package/dist/internal/funding/providers/stargate.js +277 -0
  296. package/dist/internal/funding/providers/stargate.js.map +1 -0
  297. package/dist/internal/index.d.ts +1 -0
  298. package/dist/internal/index.d.ts.map +1 -1
  299. package/dist/internal/index.js +1 -0
  300. package/dist/internal/index.js.map +1 -1
  301. package/dist/providers/index.d.ts +7 -0
  302. package/dist/providers/index.d.ts.map +1 -1
  303. package/dist/providers/index.js +3 -0
  304. package/dist/providers/index.js.map +1 -1
  305. package/package.json +3 -3
  306. package/src/App.test.ts +148 -0
  307. package/src/App.ts +45 -4
  308. package/src/Assets.test.ts +18 -0
  309. package/src/Assets.ts +22 -0
  310. package/src/Client.test-d.ts +311 -16
  311. package/src/Scope.test.ts +20 -0
  312. package/src/Scope.ts +16 -0
  313. package/src/admin/apps/api-keys.test.ts +75 -0
  314. package/src/admin/apps/api-keys.ts +64 -0
  315. package/src/admin/apps/earn-vaults.test.ts +143 -0
  316. package/src/admin/apps/earn-vaults.ts +84 -7
  317. package/src/admin/apps/organizations.ts +6 -2
  318. package/src/admin/ui/src/lib/api-keys.ts +19 -0
  319. package/src/admin/ui/src/routes/api-keys.tsx +125 -2
  320. package/src/admin/ui.generated.ts +71 -71
  321. package/src/apps/Zones.test.ts +4 -4
  322. package/src/apps/Zones.ts +4 -4
  323. package/src/apps/composition.test.ts +1 -1
  324. package/src/apps/data/App.test.ts +72 -0
  325. package/src/apps/data/App.ts +58 -10
  326. package/src/apps/data/ZoneSelection.test.ts +196 -0
  327. package/src/apps/data/ZoneSelection.ts +108 -0
  328. package/src/apps/data/routes/activities.test.ts +1843 -2
  329. package/src/apps/data/routes/activities.ts +2211 -1388
  330. package/src/apps/data/routes/balances.ts +134 -98
  331. package/src/apps/data/routes/blocks.test.ts +533 -0
  332. package/src/apps/data/routes/blocks.ts +36 -17
  333. package/src/apps/data/routes/earn.test.ts +187 -25
  334. package/src/apps/data/routes/earn.ts +228 -32
  335. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  336. package/src/apps/data/routes/exchanges.test.ts +31 -1
  337. package/src/apps/data/routes/exchanges.ts +19 -15
  338. package/src/apps/data/routes/fee-amm.ts +18 -11
  339. package/src/apps/data/routes/receipts.ts +48 -17
  340. package/src/apps/data/routes/rpc.test.ts +75 -0
  341. package/src/apps/data/routes/rpc.ts +23 -9
  342. package/src/apps/data/routes/tokenlist.ts +21 -18
  343. package/src/apps/data/routes/tokens.test.ts +607 -0
  344. package/src/apps/data/routes/tokens.ts +312 -231
  345. package/src/apps/data/routes/transactions.ts +69 -30
  346. package/src/apps/data/routes/transfers.test.ts +424 -3
  347. package/src/apps/data/routes/transfers.ts +57 -36
  348. package/src/apps/data/routes/valuation.ts +94 -78
  349. package/src/apps/data/routes/webhooks.ts +6 -2
  350. package/src/apps/data/routes/zones.test.ts +21 -15
  351. package/src/apps/data/routes/zones.ts +1 -1
  352. package/src/apps/funding/routes/chains.test.ts +211 -7
  353. package/src/apps/funding/routes/chains.ts +19 -12
  354. package/src/apps/funding/routes/deposit-addresses.test.ts +416 -0
  355. package/src/apps/funding/routes/deposit-addresses.ts +101 -84
  356. package/src/apps/funding/routes/providers.ts +9 -5
  357. package/src/apps/funding/routes/quotes.test.ts +42 -0
  358. package/src/apps/funding/routes/quotes.ts +8 -5
  359. package/src/apps/funding/routes/transfers.test.ts +430 -40
  360. package/src/apps/funding/routes/transfers.ts +76 -59
  361. package/src/apps/management/Billing.test.ts +26 -0
  362. package/src/apps/management/Billing.ts +24 -7
  363. package/src/apps/management/routes/api-keys.test.ts +398 -0
  364. package/src/apps/management/routes/api-keys.ts +481 -145
  365. package/src/apps/management/routes/billing.test.ts +209 -0
  366. package/src/apps/management/routes/billing.ts +254 -177
  367. package/src/apps/management/routes/faucet.test.ts +39 -0
  368. package/src/apps/management/routes/faucet.ts +75 -41
  369. package/src/apps/management/routes/invitations.test.ts +216 -0
  370. package/src/apps/management/routes/invitations.ts +186 -109
  371. package/src/apps/management/routes/invite-links.test.ts +263 -1
  372. package/src/apps/management/routes/invite-links.ts +295 -214
  373. package/src/apps/management/routes/me.test.ts +49 -0
  374. package/src/apps/management/routes/me.ts +42 -32
  375. package/src/apps/management/routes/members.test.ts +124 -1
  376. package/src/apps/management/routes/members.ts +81 -51
  377. package/src/apps/management/routes/orgs.test.ts +176 -0
  378. package/src/apps/management/routes/orgs.ts +101 -59
  379. package/src/apps/management/routes/projects.test.ts +183 -0
  380. package/src/apps/management/routes/projects.ts +124 -60
  381. package/src/apps/management/routes/scopes.test.ts +44 -0
  382. package/src/apps/management/routes/scopes.ts +37 -28
  383. package/src/apps/management/routes/usage.test.ts +92 -0
  384. package/src/apps/management/routes/usage.ts +186 -151
  385. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  386. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  387. package/src/apps/management/routes/webhooks.test.ts +234 -0
  388. package/src/apps/management/routes/webhooks.ts +191 -78
  389. package/src/apps/mpp/internal/Adapter.ts +13 -1
  390. package/src/db/Db.test.ts +41 -0
  391. package/src/db/Db.ts +75 -1
  392. package/src/db/Schema.ts +33 -5
  393. package/src/db/tables/earnVaults.test.ts +22 -0
  394. package/src/db/tables/earnVaults.ts +11 -1
  395. package/src/db/tables/fundingCatalog.test.ts +16 -2
  396. package/src/db/tables/fundingCatalog.ts +9 -3
  397. package/src/db/tables/webhookDeliveries.ts +13 -0
  398. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  399. package/src/db/tables/webhookQueueEvents.ts +95 -61
  400. package/src/db/tables/webhookSubscriptions.ts +45 -6
  401. package/src/handlers/internal/utils.test.ts +53 -0
  402. package/src/handlers/internal/utils.ts +15 -0
  403. package/src/internal/Auth.ts +35 -9
  404. package/src/internal/Cache.ts +14 -7
  405. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  406. package/src/internal/EarnVaults.test.ts +79 -0
  407. package/src/internal/EarnVaults.ts +277 -0
  408. package/src/internal/Fetch.test.ts +46 -0
  409. package/src/internal/Fetch.ts +56 -0
  410. package/src/internal/Log.test.ts +21 -0
  411. package/src/internal/Log.ts +20 -5
  412. package/src/internal/OpenApi.ts +177 -51
  413. package/src/internal/Response.test.ts +95 -0
  414. package/src/internal/Response.ts +41 -3
  415. package/src/internal/Schema.test.ts +18 -0
  416. package/src/internal/Schema.ts +19 -9
  417. package/src/internal/Store.test.ts +364 -0
  418. package/src/internal/Store.ts +153 -27
  419. package/src/internal/Tidx.test.ts +21 -1
  420. package/src/internal/Tidx.ts +23 -6
  421. package/src/internal/Timeout.test.ts +35 -0
  422. package/src/internal/Timeout.ts +73 -0
  423. package/src/internal/Timing.ts +16 -0
  424. package/src/internal/WebhookDestination.ts +3 -0
  425. package/src/internal/Webhooks.test.ts +122 -8
  426. package/src/internal/Webhooks.ts +59 -29
  427. package/src/internal/funding/Action.test.ts +41 -1
  428. package/src/internal/funding/Action.ts +69 -41
  429. package/src/internal/funding/Catalog.test.ts +34 -0
  430. package/src/internal/funding/Catalog.ts +28 -11
  431. package/src/internal/funding/Deposit.ts +71 -64
  432. package/src/internal/funding/DepositAddress.ts +50 -43
  433. package/src/internal/funding/Provider.test.ts +73 -0
  434. package/src/internal/funding/Provider.ts +246 -170
  435. package/src/internal/funding/Transfer.ts +133 -110
  436. package/src/internal/funding/providers/index.test.ts +22 -0
  437. package/src/internal/funding/providers/relay.test.ts +2 -2
  438. package/src/internal/funding/providers/stargate.test.ts +163 -0
  439. package/src/internal/funding/providers/stargate.ts +409 -0
  440. package/src/internal/index.test.ts +1 -0
  441. package/src/internal/index.ts +1 -0
  442. package/src/providers/index.test.ts +1 -0
  443. package/src/providers/index.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/apps/management/routes/api-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../../../src/apps/management/routes/api-keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAM7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAMzD,kDAAkD;AAClD,yBAAiB,MAAM,CAAC;IACtB,oEAAoE;IAC7D,MAAM,GAAG;;;;;;;;;;;;;;;;qBAyEf,CAAA;IAED,6DAA6D;IACtD,MAAM,MAAM;;;qBAe8C,CAAA;IAEjE,mEAAmE;IAC5D,MAAM,SAAS;;qBASiD,CAAA;IAEvE,8CAA8C;IACvC,MAAM,SAAS;;;;qBAqBkC,CAAA;IAExD,iEAAiE;IAC1D,MAAM,YAAY;;;qBAekD,CAAA;IAE3E,2EAA2E;IACpE,MAAM,mBAAmB;;;;;;;;qBA+B/B,CAAA;IAED,8CAA8C;IAC9C,UAAiB,YAAY,CAAC;QAC5B,8CAA8C;QACvC,MAAM,QAAQ;;;;;;;;;;;;;;;;;yBAapB,CAAA;KACF;IAED,8CAA8C;IACvC,MAAM,UAAU;;;;;;;;;;;;;;;;;;qBAQtB,CAAA;IAED,6CAA6C;IAC7C,UAAiB,WAAW,CAAC;QAC3B,mDAAmD;QAC5C,MAAM,KAAK;;;;;0BAEgD,CAAA;QAElE,8CAA8C;QACvC,MAAM,QAAQ;;;;;;;;;;;;;;;;;;yBAAa,CAAA;KACnC;IAED,gDAAgD;IAChD,UAAiB,cAAc,CAAC;QAC9B,0DAA0D;QACnD,MAAM,KAAK;;;;;0BAEsD,CAAA;QAExE,2DAA2D;QACpD,MAAM,QAAQ;;;;;;;;;;;;;;;;;;yBAAa,CAAA;KACnC;IAED,8CAA8C;IAC9C,UAAiB,YAAY,CAAC;QAC5B,6CAA6C;QACtC,MAAM,QAAQ;;yBAYpB,CAAA;KACF;IAED,8CAA8C;IAC9C,UAAiB,YAAY,CAAC;QAC5B,mDAAmD;QAC5C,MAAM,QAAQ;;;;;;;;;;;;;;;;;yBAapB,CAAA;KACF;IAED,8CAA8C;IAC9C,UAAiB,YAAY,CAAC;QAC5B,+DAA+D;QACxD,MAAM,IAAI;;yBAYhB,CAAA;KACF;CACF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,OAAO,CAAC,OAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2HA4jBpD;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,kDAAkD;IAClD,KAAK,OAAO,GAAG;QACb,oHAAoH;QACpH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC9B,CAAA;CACF"}
@@ -10,16 +10,17 @@ import * as Billing from '../Billing.js';
10
10
  import * as OpenApi from '../../../internal/OpenApi.js';
11
11
  import * as Response from '../../../internal/Response.js';
12
12
  import * as Schema from '../../../internal/Schema.js';
13
+ import * as Store from '../../../internal/Store.js';
13
14
  import * as Scope from '../../../Scope.js';
14
15
  import * as ManagementError from '../Error.js';
15
16
  /** Zod schemas owned by the API-keys resource. */
16
17
  export var schema;
17
18
  (function (schema) {
18
19
  /** One API key: metadata only — the token appears once, at mint. */
19
- schema.Key = Schema.describe(z.object({
20
+ schema.Key = OpenApi.component(Schema.describe(z.object({
20
21
  allowedIps: ApiKey.schema.AllowedIps.check(z.describe('Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted.'), z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] })),
21
- createdAt: z
22
- .string()
22
+ createdAt: z.iso
23
+ .datetime()
23
24
  .check(z.describe('When the key was minted (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
24
25
  createdBy: z
25
26
  .optional(z.string())
@@ -28,13 +29,13 @@ export var schema;
28
29
  .enum(['production', 'sandbox'])
29
30
  .check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
30
31
  expiresAt: z
31
- .optional(z.string())
32
+ .optional(z.iso.datetime())
32
33
  .check(z.describe('When the key expires (ISO 8601). Absent for a non-expiring key.'), z.meta({ examples: ['2027-01-01T00:00:00.000Z'] })),
33
34
  id: z
34
35
  .string()
35
36
  .check(z.describe('Opaque key id (`key_…`).'), z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
36
37
  lastUsedAt: z
37
- .optional(z.string())
38
+ .optional(z.iso.datetime())
38
39
  .check(z.describe('When the key last authenticated a request (ISO 8601).'), z.meta({ examples: ['2026-07-21T12:34:56.000Z'] })),
39
40
  name: z
40
41
  .optional(z.string())
@@ -50,7 +51,7 @@ export var schema;
50
51
  tokenLast4: z
51
52
  .string()
52
53
  .check(z.describe('Last 4 characters of the plaintext token.'), z.meta({ examples: ['a1b2'] })),
53
- }), 'An API key: metadata only — the token appears once, at mint.');
54
+ }), 'An API key: metadata only — the token appears once, at mint.'), 'ApiKey');
54
55
  /** Path parameters addressing a project's key collection. */
55
56
  schema.Params = z
56
57
  .object({
@@ -84,8 +85,19 @@ export var schema;
84
85
  .check(z.describe('The project id (`prj_…`).'), z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
85
86
  })
86
87
  .check(z.describe('Path parameters for one API key.'));
88
+ /** Path parameters addressing one organization-level API key. */
89
+ schema.OrgKeyParams = z
90
+ .object({
91
+ keyId: z
92
+ .string()
93
+ .check(z.describe('The key id (`key_…`).'), z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
94
+ orgId: z
95
+ .string()
96
+ .check(z.describe('The organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
97
+ })
98
+ .check(z.describe('Path parameters for one organization-level API key.'));
87
99
  /** Request body minting a key. The wildcard scope is not issuable here. */
88
- schema.KeyBody = z
100
+ schema.CreateApiKeyRequest = OpenApi.component(z
89
101
  .object({
90
102
  allowedIps: z
91
103
  .optional(ApiKey.schema.AllowedIps)
@@ -100,17 +112,21 @@ export var schema;
100
112
  ._default(z.array(z.string().check(z.minLength(1), z.refine((scope) => scope !== Scope.wildcard))), [])
101
113
  .check(z.describe('Scopes to grant.'), z.meta({ examples: [['data:read']] })),
102
114
  })
103
- .check(z.describe('Fields for minting an API key.'));
115
+ .check(z.describe('Fields for minting an API key.')), 'CreateApiKeyRequest');
104
116
  /** Schemas for the createApiKey operation. */
105
117
  let createApiKey;
106
118
  (function (createApiKey) {
107
119
  /** The minted key plus its one-time token. */
108
- createApiKey.Response = Schema.describe(z.extend(schema.Key, {
120
+ createApiKey.Response = OpenApi.component(Schema.describe(z.extend(schema.Key, {
109
121
  token: z
110
122
  .string()
111
123
  .check(z.describe('The plaintext token — shown once, unrecoverable afterward.'), z.meta({ examples: ['tempo_sandbox:sk:…'] })),
112
- }), 'The minted key, including its one-time token.');
124
+ }), 'The minted key, including its one-time token.'), 'CreateApiKeyResponse');
113
125
  })(createApiKey = schema.createApiKey || (schema.createApiKey = {}));
126
+ /** Non-paginated list of API key metadata. */
127
+ schema.ApiKeyList = OpenApi.component(Schema.describe(z.object({
128
+ data: z.array(schema.Key).check(z.describe('The API keys, newest first.')),
129
+ }), 'A non-paginated list of API key metadata.'), 'ApiKeyList');
114
130
  /** Schemas for the listApiKeys operation. */
115
131
  let listApiKeys;
116
132
  (function (listApiKeys) {
@@ -119,9 +135,7 @@ export var schema;
119
135
  .strictObject({ environment: Schema.Environment })
120
136
  .check(z.describe("Query parameters for a project's API keys."));
121
137
  /** Non-paginated list of a project's keys. */
122
- listApiKeys.Response = Schema.describe(z.object({
123
- data: z.array(schema.Key).check(z.describe("The project's keys, newest first.")),
124
- }), "A non-paginated list of a project's API keys (metadata only).");
138
+ listApiKeys.Response = schema.ApiKeyList;
125
139
  })(listApiKeys = schema.listApiKeys || (schema.listApiKeys = {}));
126
140
  /** Schemas for the listOrgApiKeys operation. */
127
141
  let listOrgApiKeys;
@@ -131,33 +145,39 @@ export var schema;
131
145
  .strictObject({ environment: Schema.Environment })
132
146
  .check(z.describe("Query parameters for an organization's API keys."));
133
147
  /** Non-paginated list of every key in the organization. */
134
- listOrgApiKeys.Response = Schema.describe(z.object({
135
- data: z
136
- .array(schema.Key)
137
- .check(z.describe("The organization's keys across all projects, newest first.")),
138
- }), "A non-paginated list of an organization's API keys (metadata only).");
148
+ listOrgApiKeys.Response = schema.ApiKeyList;
139
149
  })(listOrgApiKeys = schema.listOrgApiKeys || (schema.listOrgApiKeys = {}));
140
150
  /** Schemas for the revokeApiKey operation. */
141
151
  let revokeApiKey;
142
152
  (function (revokeApiKey) {
143
153
  /** Confirmation that the key was revoked. */
144
- revokeApiKey.Response = z
154
+ revokeApiKey.Response = OpenApi.component(z
145
155
  .object({
146
156
  id: z
147
157
  .string()
148
158
  .check(z.describe('ID of the key that was revoked.'), z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
149
159
  })
150
- .check(z.describe('Confirmation that the key was revoked.'));
160
+ .check(z.describe('Confirmation that the key was revoked.')), 'RevokeApiKeyResponse');
151
161
  })(revokeApiKey = schema.revokeApiKey || (schema.revokeApiKey = {}));
162
+ /** Schemas for the rotateApiKey operation. */
163
+ let rotateApiKey;
164
+ (function (rotateApiKey) {
165
+ /** The replacement key plus its one-time token. */
166
+ rotateApiKey.Response = OpenApi.component(Schema.describe(z.extend(schema.Key, {
167
+ token: z
168
+ .string()
169
+ .check(z.describe('The plaintext token — shown once, unrecoverable afterward.'), z.meta({ examples: ['tempo_sandbox:sk:…'] })),
170
+ }), 'The replacement key, including its one-time token.'), 'RotateApiKeyResponse');
171
+ })(rotateApiKey = schema.rotateApiKey || (schema.rotateApiKey = {}));
152
172
  /** Schemas for the updateApiKey operation. */
153
173
  let updateApiKey;
154
174
  (function (updateApiKey) {
155
175
  /** Request body replacing or clearing a key's IP allowlist. */
156
- updateApiKey.Body = z
176
+ updateApiKey.Body = OpenApi.component(z
157
177
  .object({
158
178
  allowedIps: ApiKey.schema.AllowedIps.check(z.describe('Replacement client IP/CIDR allowlist. Use an empty list for unrestricted access.'), z.meta({ examples: [['203.0.113.0/24']] })),
159
179
  })
160
- .check(z.describe("Fields for updating an API key's network access."));
180
+ .check(z.describe("Fields for updating an API key's network access.")), 'UpdateApiKeyRequest');
161
181
  })(updateApiKey = schema.updateApiKey || (schema.updateApiKey = {}));
162
182
  })(schema || (schema = {}));
163
183
  /**
@@ -169,7 +189,7 @@ export function apiKeys(options = {}) {
169
189
  .post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}/api-keys', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.Params, {
170
190
  code: 'param_invalid',
171
191
  message: 'Check the path parameters and try again.',
172
- }), OpenApi.validate('json', schema.KeyBody, {
192
+ }), OpenApi.validate('json', schema.CreateApiKeyRequest, {
173
193
  code: 'body_invalid',
174
194
  message: 'Check the request body and try again.',
175
195
  }), OpenApi.describeRoute({
@@ -178,11 +198,18 @@ export function apiKeys(options = {}) {
178
198
  operationId: 'createApiKey',
179
199
  responses: OpenApi.responses({
180
200
  errors: {
201
+ 400: {
202
+ codes: ['body_invalid', 'param_invalid'],
203
+ description: 'Malformed API key, invalid path, or invalid body.',
204
+ },
181
205
  403: {
182
206
  codes: ['scope_not_issuable'],
183
207
  description: 'The requested scopes are not issuable.',
184
208
  },
185
- 404: 'No accessible project was found for this id.',
209
+ 404: {
210
+ codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
211
+ description: 'No accessible project or API key surface was found.',
212
+ },
186
213
  },
187
214
  success: {
188
215
  description: 'The minted key, including its one-time token.',
@@ -196,6 +223,8 @@ export function apiKeys(options = {}) {
196
223
  return Auth.superAdminAccessError(c);
197
224
  if (Auth.narrowScope)
198
225
  return Auth.ensureProjectError(c);
226
+ if (Auth.narrowOrgRole)
227
+ return Auth.ensureOrgRoleError(c);
199
228
  if (OpenApi.narrowValidation)
200
229
  return OpenApi.validationError(c, {
201
230
  code: 'param_invalid',
@@ -260,8 +289,14 @@ export function apiKeys(options = {}) {
260
289
  operationId: 'listApiKeys',
261
290
  responses: OpenApi.responses({
262
291
  errors: {
263
- 400: { codes: ['query_invalid'], description: 'Invalid query parameters.' },
264
- 404: 'No accessible project was found for this id.',
292
+ 400: {
293
+ codes: ['param_invalid', 'query_invalid'],
294
+ description: 'Malformed API key, invalid path, or invalid query.',
295
+ },
296
+ 404: {
297
+ codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
298
+ description: 'No accessible project or API key surface was found.',
299
+ },
265
300
  },
266
301
  success: {
267
302
  description: "The project's keys, newest first (metadata only).",
@@ -314,8 +349,14 @@ export function apiKeys(options = {}) {
314
349
  operationId: 'listOrgApiKeys',
315
350
  responses: OpenApi.responses({
316
351
  errors: {
317
- 400: { codes: ['query_invalid'], description: 'Invalid query parameters.' },
318
- 404: 'No accessible organization was found for this id.',
352
+ 400: {
353
+ codes: ['param_invalid', 'query_invalid'],
354
+ description: 'Malformed API key, invalid path, or invalid query.',
355
+ },
356
+ 404: {
357
+ codes: ['api_keys_not_enabled', 'organization_not_found'],
358
+ description: 'No accessible organization or API key surface was found.',
359
+ },
319
360
  },
320
361
  success: {
321
362
  description: "The organization's keys across all projects, newest first (metadata only).", // prettier-ignore
@@ -354,6 +395,115 @@ export function apiKeys(options = {}) {
354
395
  catch (cause) {
355
396
  return Response.upstream(c, cause);
356
397
  }
398
+ })
399
+ .post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/api-keys/:keyId{key_[A-Za-z0-9_-]+}/rotate', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.OrgKeyParams, {
400
+ code: 'param_invalid',
401
+ message: 'Check the path parameters and try again.',
402
+ }), OpenApi.describeRoute({
403
+ description: 'Create a replacement organization-level API key with the same access as an existing key. The existing key remains active until revoked.',
404
+ hide: hidden,
405
+ operationId: 'rotateOrgApiKey',
406
+ responses: OpenApi.responses({
407
+ errors: {
408
+ 400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
409
+ 403: {
410
+ codes: ['scope_not_issuable'],
411
+ description: 'The source key contains scopes the caller cannot rotate.',
412
+ },
413
+ 404: {
414
+ codes: ['api_key_not_found', 'api_keys_not_enabled', 'organization_not_found'],
415
+ description: 'No accessible API key or API key surface was found.',
416
+ },
417
+ },
418
+ success: {
419
+ description: 'The replacement key, including its one-time token.',
420
+ schema: schema.rotateApiKey.Response,
421
+ },
422
+ }),
423
+ summary: 'Rotate organization API key',
424
+ tags: ['API Keys'],
425
+ }), async (c) => {
426
+ if (Auth.narrowAccess)
427
+ return Auth.superAdminAccessError(c);
428
+ if (Auth.narrowOrgRole)
429
+ return Auth.ensureOrgRoleError(c);
430
+ if (OpenApi.narrowValidation)
431
+ return OpenApi.validationError(c, {
432
+ code: 'param_invalid',
433
+ message: 'Check the path parameters and try again.',
434
+ });
435
+ const kv = c.get('kv');
436
+ if (!kv)
437
+ return notEnabled(c);
438
+ const createdBy = mintedBy(c);
439
+ if (!createdBy)
440
+ return ManagementError.sessionRequired(c);
441
+ const { keyId } = c.req.valid('param');
442
+ try {
443
+ const source = await ApiKeys.get(kv.store, keyId, {
444
+ scopeCatalog: c.get('scopeCatalog'),
445
+ });
446
+ if (!source || source.orgId !== Auth.org(c).id || source.projectId !== undefined)
447
+ return keyNotFound(c);
448
+ if (!canRotate(c, source.scopes))
449
+ return Response.error(c, {
450
+ code: 'scope_not_issuable',
451
+ message: 'The source key contains scopes the caller cannot rotate.',
452
+ status: 403,
453
+ });
454
+ return rotate(c, kv.store, source, createdBy);
455
+ }
456
+ catch (cause) {
457
+ return Response.upstream(c, cause);
458
+ }
459
+ })
460
+ .delete('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/api-keys/:keyId{key_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['management:write'] }, session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.OrgKeyParams, {
461
+ code: 'param_invalid',
462
+ message: 'Check the path parameters and try again.',
463
+ }), OpenApi.describeRoute({
464
+ description: 'Revoke an organization-level API key. Requests presenting its token stop resolving.',
465
+ hide: hidden,
466
+ operationId: 'revokeOrgApiKey',
467
+ responses: OpenApi.responses({
468
+ errors: {
469
+ 400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
470
+ 404: {
471
+ codes: ['api_key_not_found', 'api_keys_not_enabled', 'organization_not_found'],
472
+ description: 'No accessible API key or API key surface was found.',
473
+ },
474
+ },
475
+ success: {
476
+ description: 'Confirmation that the key was revoked.',
477
+ schema: schema.revokeApiKey.Response,
478
+ },
479
+ }),
480
+ summary: 'Revoke organization API key',
481
+ tags: ['API Keys'],
482
+ }), async (c) => {
483
+ if (Auth.narrowAccess)
484
+ return Auth.accessError(c);
485
+ if (Auth.narrowOrgRole)
486
+ return Auth.ensureOrgRoleError(c);
487
+ if (OpenApi.narrowValidation)
488
+ return OpenApi.validationError(c, {
489
+ code: 'param_invalid',
490
+ message: 'Check the path parameters and try again.',
491
+ });
492
+ const kv = c.get('kv');
493
+ if (!kv)
494
+ return notEnabled(c);
495
+ const { keyId } = c.req.valid('param');
496
+ try {
497
+ const record = await ApiKeys.get(kv.store, keyId, {
498
+ scopeCatalog: c.get('scopeCatalog'),
499
+ });
500
+ if (!record || record.orgId !== Auth.org(c).id || record.projectId !== undefined)
501
+ return keyNotFound(c);
502
+ return revoke(c, kv.store, keyId);
503
+ }
504
+ catch (cause) {
505
+ return Response.upstream(c, cause);
506
+ }
357
507
  })
358
508
  .patch('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}/api-keys/:keyId{key_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['management:write'] }, session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.KeyParams, {
359
509
  code: 'param_invalid',
@@ -367,7 +517,19 @@ export function apiKeys(options = {}) {
367
517
  operationId: 'updateApiKey',
368
518
  responses: OpenApi.responses({
369
519
  errors: {
370
- 404: 'No accessible API key was found for this id.',
520
+ 400: {
521
+ codes: ['body_invalid', 'param_invalid'],
522
+ description: 'Malformed API key, invalid path, or invalid body.',
523
+ },
524
+ 404: {
525
+ codes: [
526
+ 'api_key_not_found',
527
+ 'api_keys_not_enabled',
528
+ 'organization_not_found',
529
+ 'project_not_found',
530
+ ],
531
+ description: 'No accessible API key or API key surface was found.',
532
+ },
371
533
  },
372
534
  success: {
373
535
  description: 'The updated API key metadata.',
@@ -381,6 +543,8 @@ export function apiKeys(options = {}) {
381
543
  return Auth.accessError(c);
382
544
  if (Auth.narrowScope)
383
545
  return Auth.ensureProjectError(c);
546
+ if (Auth.narrowOrgRole)
547
+ return Auth.ensureOrgRoleError(c);
384
548
  if (OpenApi.narrowValidation)
385
549
  return OpenApi.validationError(c, {
386
550
  code: 'param_invalid',
@@ -411,6 +575,74 @@ export function apiKeys(options = {}) {
411
575
  catch (cause) {
412
576
  return Response.upstream(c, cause);
413
577
  }
578
+ })
579
+ .post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}/api-keys/:keyId{key_[A-Za-z0-9_-]+}/rotate', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.KeyParams, {
580
+ code: 'param_invalid',
581
+ message: 'Check the path parameters and try again.',
582
+ }), OpenApi.describeRoute({
583
+ description: 'Create a replacement API key with the same access as an existing key. The existing key remains active until revoked.',
584
+ hide: hidden,
585
+ operationId: 'rotateApiKey',
586
+ responses: OpenApi.responses({
587
+ errors: {
588
+ 400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
589
+ 403: {
590
+ codes: ['scope_not_issuable'],
591
+ description: 'The source key contains scopes the caller cannot rotate.',
592
+ },
593
+ 404: {
594
+ codes: [
595
+ 'api_key_not_found',
596
+ 'api_keys_not_enabled',
597
+ 'organization_not_found',
598
+ 'project_not_found',
599
+ ],
600
+ description: 'No accessible API key or API key surface was found.',
601
+ },
602
+ },
603
+ success: {
604
+ description: 'The replacement key, including its one-time token.',
605
+ schema: schema.rotateApiKey.Response,
606
+ },
607
+ }),
608
+ summary: 'Rotate API key',
609
+ tags: ['API Keys'],
610
+ }), async (c) => {
611
+ if (Auth.narrowAccess)
612
+ return Auth.superAdminAccessError(c);
613
+ if (Auth.narrowScope)
614
+ return Auth.ensureProjectError(c);
615
+ if (Auth.narrowOrgRole)
616
+ return Auth.ensureOrgRoleError(c);
617
+ if (OpenApi.narrowValidation)
618
+ return OpenApi.validationError(c, {
619
+ code: 'param_invalid',
620
+ message: 'Check the path parameters and try again.',
621
+ });
622
+ const kv = c.get('kv');
623
+ if (!kv)
624
+ return notEnabled(c);
625
+ const createdBy = mintedBy(c);
626
+ if (!createdBy)
627
+ return ManagementError.sessionRequired(c);
628
+ const { keyId } = c.req.valid('param');
629
+ try {
630
+ const source = await ApiKeys.get(kv.store, keyId, {
631
+ scopeCatalog: c.get('scopeCatalog'),
632
+ });
633
+ if (!source || source.orgId !== Auth.org(c).id || source.projectId !== Auth.project(c).id)
634
+ return keyNotFound(c);
635
+ if (!canRotate(c, source.scopes))
636
+ return Response.error(c, {
637
+ code: 'scope_not_issuable',
638
+ message: 'The source key contains scopes the caller cannot rotate.',
639
+ status: 403,
640
+ });
641
+ return rotate(c, kv.store, source, createdBy);
642
+ }
643
+ catch (cause) {
644
+ return Response.upstream(c, cause);
645
+ }
414
646
  })
415
647
  .delete('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}/api-keys/:keyId{key_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['management:write'] }, session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.KeyParams, {
416
648
  code: 'param_invalid',
@@ -420,7 +652,18 @@ export function apiKeys(options = {}) {
420
652
  hide: hidden,
421
653
  operationId: 'revokeApiKey',
422
654
  responses: OpenApi.responses({
423
- errors: { 404: 'No accessible API key was found for this id.' },
655
+ errors: {
656
+ 400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
657
+ 404: {
658
+ codes: [
659
+ 'api_key_not_found',
660
+ 'api_keys_not_enabled',
661
+ 'organization_not_found',
662
+ 'project_not_found',
663
+ ],
664
+ description: 'No accessible API key or API key surface was found.',
665
+ },
666
+ },
424
667
  success: {
425
668
  description: 'Confirmation that the key was revoked.',
426
669
  schema: schema.revokeApiKey.Response,
@@ -433,6 +676,8 @@ export function apiKeys(options = {}) {
433
676
  return Auth.accessError(c);
434
677
  if (Auth.narrowScope)
435
678
  return Auth.ensureProjectError(c);
679
+ if (Auth.narrowOrgRole)
680
+ return Auth.ensureOrgRoleError(c);
436
681
  if (OpenApi.narrowValidation)
437
682
  return OpenApi.validationError(c, {
438
683
  code: 'param_invalid',
@@ -450,10 +695,7 @@ export function apiKeys(options = {}) {
450
695
  });
451
696
  if (!record || record.orgId !== Auth.org(c).id || record.projectId !== Auth.project(c).id)
452
697
  return keyNotFound(c);
453
- const revoked = await ApiKeys.revoke(kv.store, keyId);
454
- if (!revoked)
455
- return keyNotFound(c);
456
- return c.json(Response.validated(schema.revokeApiKey.Response, { id: keyId }), 200);
698
+ return revoke(c, kv.store, keyId);
457
699
  }
458
700
  catch (cause) {
459
701
  return Response.upstream(c, cause);
@@ -506,6 +748,42 @@ function canIssue(c, scopes) {
506
748
  }
507
749
  return false;
508
750
  }
751
+ /** Checks caller-specific restrictions that still apply when copying existing grants. */
752
+ function canRotate(c, scopes) {
753
+ const principal = Auth.getPrincipal(c);
754
+ if (principal?.type === 'super_admin')
755
+ return true;
756
+ if (principal?.type !== 'session')
757
+ return false;
758
+ return ((!scopes.includes('management:write') && !scopes.includes(Scope.wildcard)) ||
759
+ Auth.membership(c)?.role === 'owner');
760
+ }
761
+ /** Mints a replacement that preserves the source key's access and attribution. */
762
+ async function rotate(c, store, source, createdBy) {
763
+ const billingActive = source.environment === 'sandbox'
764
+ ? await Billing.active(Db.get(c.get('db')), source.orgId, 'sandbox')
765
+ : undefined;
766
+ const { record, token } = await ApiKeys.mint(store, {
767
+ allowedIps: source.allowedIps,
768
+ createdBy,
769
+ environment: source.environment,
770
+ orgId: source.orgId,
771
+ ...(source.projectId === undefined ? {} : { projectId: source.projectId }),
772
+ scopes: source.scopes,
773
+ ...(billingActive === undefined ? {} : { billingActive }),
774
+ ...(source.expiresAt === undefined ? {} : { expiresAt: source.expiresAt }),
775
+ ...(source.name === undefined ? {} : { name: source.name }),
776
+ ...(source.rateLimits === undefined ? {} : { rateLimits: source.rateLimits }),
777
+ }, { scopeCatalog: c.get('scopeCatalog') });
778
+ return c.json(Response.validated(schema.rotateApiKey.Response, { ...serializeKey(record), token }), 200);
779
+ }
780
+ /** Revokes an API key after its route has verified ownership. */
781
+ async function revoke(c, store, keyId) {
782
+ const revoked = await ApiKeys.revoke(store, keyId);
783
+ if (!revoked)
784
+ return keyNotFound(c);
785
+ return c.json(Response.validated(schema.revokeApiKey.Response, { id: keyId }), 200);
786
+ }
509
787
  function keyNotFound(c) {
510
788
  return Response.error(c, {
511
789
  code: 'api_key_not_found',