tapimo 0.10.2 → 0.12.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 (386) hide show
  1. package/dist/App.d.ts +4896 -2166
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +2 -2
  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/Webhooks.d.ts +0 -75
  10. package/dist/Webhooks.d.ts.map +1 -1
  11. package/dist/Webhooks.js +1 -143
  12. package/dist/Webhooks.js.map +1 -1
  13. package/dist/admin/App.d.ts +127 -78
  14. package/dist/admin/App.d.ts.map +1 -1
  15. package/dist/admin/apps/earn-vaults.d.ts +115 -1
  16. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  17. package/dist/admin/apps/earn-vaults.js +59 -6
  18. package/dist/admin/apps/earn-vaults.js.map +1 -1
  19. package/dist/admin/apps/organizations.d.ts +3 -3
  20. package/dist/admin/apps/organizations.d.ts.map +1 -1
  21. package/dist/admin/apps/organizations.js +4 -2
  22. package/dist/admin/apps/organizations.js.map +1 -1
  23. package/dist/admin/apps/verified-tokens.d.ts +83 -83
  24. package/dist/admin/ui.generated.d.ts +1 -1
  25. package/dist/admin/ui.generated.d.ts.map +1 -1
  26. package/dist/admin/ui.generated.js +151 -151
  27. package/dist/admin/ui.generated.js.map +1 -1
  28. package/dist/apps/data/App.d.ts +5924 -4310
  29. package/dist/apps/data/App.d.ts.map +1 -1
  30. package/dist/apps/data/App.js +61 -9
  31. package/dist/apps/data/App.js.map +1 -1
  32. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  33. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  34. package/dist/apps/data/ZoneSelection.js +44 -0
  35. package/dist/apps/data/ZoneSelection.js.map +1 -0
  36. package/dist/apps/data/routes/activities.d.ts +2368 -5
  37. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  38. package/dist/apps/data/routes/activities.js +423 -114
  39. package/dist/apps/data/routes/activities.js.map +1 -1
  40. package/dist/apps/data/routes/addresses.d.ts +131 -0
  41. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  42. package/dist/apps/data/routes/balances.d.ts +25 -25
  43. package/dist/apps/data/routes/balances.js +1 -1
  44. package/dist/apps/data/routes/balances.js.map +1 -1
  45. package/dist/apps/data/routes/blocks.d.ts +1 -1
  46. package/dist/apps/data/routes/blocks.js +1 -1
  47. package/dist/apps/data/routes/blocks.js.map +1 -1
  48. package/dist/apps/data/routes/earn.d.ts +135 -10
  49. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  50. package/dist/apps/data/routes/earn.js +157 -25
  51. package/dist/apps/data/routes/earn.js.map +1 -1
  52. package/dist/apps/data/routes/exchanges.d.ts +829 -123
  53. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  54. package/dist/apps/data/routes/exchanges.js +16 -13
  55. package/dist/apps/data/routes/exchanges.js.map +1 -1
  56. package/dist/apps/data/routes/fee-amm.d.ts +26 -26
  57. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  58. package/dist/apps/data/routes/fee-amm.js +9 -11
  59. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  60. package/dist/apps/data/routes/receipts.d.ts +54 -54
  61. package/dist/apps/data/routes/receipts.js +1 -1
  62. package/dist/apps/data/routes/receipts.js.map +1 -1
  63. package/dist/apps/data/routes/rpc.js +24 -10
  64. package/dist/apps/data/routes/rpc.js.map +1 -1
  65. package/dist/apps/data/routes/tokenlist.d.ts +12 -12
  66. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  67. package/dist/apps/data/routes/tokenlist.js +16 -15
  68. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  69. package/dist/apps/data/routes/tokens.d.ts +17 -3
  70. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  71. package/dist/apps/data/routes/tokens.js +34 -15
  72. package/dist/apps/data/routes/tokens.js.map +1 -1
  73. package/dist/apps/data/routes/transactions.d.ts +1 -1
  74. package/dist/apps/data/routes/transactions.js +1 -1
  75. package/dist/apps/data/routes/transactions.js.map +1 -1
  76. package/dist/apps/data/routes/transfers.d.ts +13 -13
  77. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  78. package/dist/apps/data/routes/transfers.js +7 -9
  79. package/dist/apps/data/routes/transfers.js.map +1 -1
  80. package/dist/apps/data/routes/valuation.d.ts +21 -21
  81. package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
  82. package/dist/apps/data/routes/webhooks.d.ts +1011 -151
  83. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  84. package/dist/apps/data/routes/webhooks.js +126 -739
  85. package/dist/apps/data/routes/webhooks.js.map +1 -1
  86. package/dist/apps/data/routes/zones.d.ts +15 -15
  87. package/dist/apps/funding/App.d.ts +27 -27
  88. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  89. package/dist/apps/funding/routes/chains.js +5 -4
  90. package/dist/apps/funding/routes/chains.js.map +1 -1
  91. package/dist/apps/funding/routes/deposit-addresses.d.ts +18 -18
  92. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  93. package/dist/apps/funding/routes/deposit-addresses.js +8 -8
  94. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  95. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  96. package/dist/apps/funding/routes/providers.js +3 -2
  97. package/dist/apps/funding/routes/providers.js.map +1 -1
  98. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  99. package/dist/apps/funding/routes/quotes.js +2 -2
  100. package/dist/apps/funding/routes/quotes.js.map +1 -1
  101. package/dist/apps/funding/routes/transfers.d.ts +33 -33
  102. package/dist/apps/management/App.d.ts +1433 -322
  103. package/dist/apps/management/App.d.ts.map +1 -1
  104. package/dist/apps/management/Billing.d.ts.map +1 -1
  105. package/dist/apps/management/Billing.js +19 -6
  106. package/dist/apps/management/Billing.js.map +1 -1
  107. package/dist/apps/management/routes/api-keys.d.ts +154 -94
  108. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  109. package/dist/apps/management/routes/api-keys.js +76 -30
  110. package/dist/apps/management/routes/api-keys.js.map +1 -1
  111. package/dist/apps/management/routes/billing.d.ts +103 -30
  112. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  113. package/dist/apps/management/routes/billing.js +91 -32
  114. package/dist/apps/management/routes/billing.js.map +1 -1
  115. package/dist/apps/management/routes/faucet.d.ts +12 -12
  116. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  117. package/dist/apps/management/routes/faucet.js +23 -12
  118. package/dist/apps/management/routes/faucet.js.map +1 -1
  119. package/dist/apps/management/routes/invitations.d.ts +46 -13
  120. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  121. package/dist/apps/management/routes/invitations.js +79 -29
  122. package/dist/apps/management/routes/invitations.js.map +1 -1
  123. package/dist/apps/management/routes/invite-links.d.ts +128 -83
  124. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  125. package/dist/apps/management/routes/invite-links.js +100 -41
  126. package/dist/apps/management/routes/invite-links.js.map +1 -1
  127. package/dist/apps/management/routes/me.d.ts +5 -5
  128. package/dist/apps/management/routes/me.d.ts.map +1 -1
  129. package/dist/apps/management/routes/me.js +14 -10
  130. package/dist/apps/management/routes/me.js.map +1 -1
  131. package/dist/apps/management/routes/members.d.ts +68 -47
  132. package/dist/apps/management/routes/members.d.ts.map +1 -1
  133. package/dist/apps/management/routes/members.js +37 -18
  134. package/dist/apps/management/routes/members.js.map +1 -1
  135. package/dist/apps/management/routes/orgs.d.ts +48 -8
  136. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  137. package/dist/apps/management/routes/orgs.js +48 -19
  138. package/dist/apps/management/routes/orgs.js.map +1 -1
  139. package/dist/apps/management/routes/projects.d.ts +130 -68
  140. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  141. package/dist/apps/management/routes/projects.js +72 -21
  142. package/dist/apps/management/routes/projects.js.map +1 -1
  143. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  144. package/dist/apps/management/routes/scopes.js +8 -5
  145. package/dist/apps/management/routes/scopes.js.map +1 -1
  146. package/dist/apps/management/routes/usage.d.ts +38 -38
  147. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  148. package/dist/apps/management/routes/usage.js +41 -31
  149. package/dist/apps/management/routes/usage.js.map +1 -1
  150. package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
  151. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  152. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  153. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  154. package/dist/apps/management/routes/webhooks.d.ts +1186 -197
  155. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  156. package/dist/apps/management/routes/webhooks.js +106 -38
  157. package/dist/apps/management/routes/webhooks.js.map +1 -1
  158. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  159. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  160. package/dist/apps/mpp/internal/Adapter.js +12 -0
  161. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  162. package/dist/db/Db.d.ts +2 -0
  163. package/dist/db/Db.d.ts.map +1 -1
  164. package/dist/db/Db.js +61 -0
  165. package/dist/db/Db.js.map +1 -1
  166. package/dist/db/Schema.d.ts +30 -2
  167. package/dist/db/Schema.d.ts.map +1 -1
  168. package/dist/db/Schema.js +28 -3
  169. package/dist/db/Schema.js.map +1 -1
  170. package/dist/db/tables/earnVaults.d.ts +5 -1
  171. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  172. package/dist/db/tables/earnVaults.js +5 -0
  173. package/dist/db/tables/earnVaults.js.map +1 -1
  174. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  175. package/dist/db/tables/webhookDeliveries.js +10 -0
  176. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  177. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  178. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  179. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  180. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  181. package/dist/db/tables/webhookQueueEvents.d.ts +16 -20
  182. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  183. package/dist/db/tables/webhookQueueEvents.js +68 -43
  184. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  185. package/dist/db/tables/webhookSubscriptions.d.ts +47 -72
  186. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  187. package/dist/db/tables/webhookSubscriptions.js +92 -105
  188. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  189. package/dist/internal/Auth.d.ts +8 -1
  190. package/dist/internal/Auth.d.ts.map +1 -1
  191. package/dist/internal/Auth.js +13 -3
  192. package/dist/internal/Auth.js.map +1 -1
  193. package/dist/internal/Cache.d.ts.map +1 -1
  194. package/dist/internal/Cache.js +11 -7
  195. package/dist/internal/Cache.js.map +1 -1
  196. package/dist/internal/EarnVaults.d.ts +41 -2
  197. package/dist/internal/EarnVaults.d.ts.map +1 -1
  198. package/dist/internal/EarnVaults.js +167 -0
  199. package/dist/internal/EarnVaults.js.map +1 -1
  200. package/dist/internal/MetricSink.d.ts +35 -125
  201. package/dist/internal/MetricSink.d.ts.map +1 -1
  202. package/dist/internal/MetricSink.js +50 -121
  203. package/dist/internal/MetricSink.js.map +1 -1
  204. package/dist/internal/OpenApi.d.ts +26 -22
  205. package/dist/internal/OpenApi.d.ts.map +1 -1
  206. package/dist/internal/OpenApi.js +128 -39
  207. package/dist/internal/OpenApi.js.map +1 -1
  208. package/dist/internal/Response.d.ts +13 -8
  209. package/dist/internal/Response.d.ts.map +1 -1
  210. package/dist/internal/Response.js +16 -5
  211. package/dist/internal/Response.js.map +1 -1
  212. package/dist/internal/Schema.d.ts +8 -8
  213. package/dist/internal/Schema.d.ts.map +1 -1
  214. package/dist/internal/Schema.js +10 -9
  215. package/dist/internal/Schema.js.map +1 -1
  216. package/dist/internal/Store.d.ts +15 -6
  217. package/dist/internal/Store.d.ts.map +1 -1
  218. package/dist/internal/Store.js +45 -15
  219. package/dist/internal/Store.js.map +1 -1
  220. package/dist/internal/Tidx.d.ts +2 -0
  221. package/dist/internal/Tidx.d.ts.map +1 -1
  222. package/dist/internal/Tidx.js +16 -4
  223. package/dist/internal/Tidx.js.map +1 -1
  224. package/dist/internal/WebhookTransfer.d.ts +1 -55
  225. package/dist/internal/WebhookTransfer.d.ts.map +1 -1
  226. package/dist/internal/WebhookTransfer.js +1 -239
  227. package/dist/internal/WebhookTransfer.js.map +1 -1
  228. package/dist/internal/Webhooks.d.ts +112 -56
  229. package/dist/internal/Webhooks.d.ts.map +1 -1
  230. package/dist/internal/Webhooks.js +124 -93
  231. package/dist/internal/Webhooks.js.map +1 -1
  232. package/dist/internal/funding/Deposit.d.ts +2 -2
  233. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  234. package/dist/internal/funding/Deposit.js +9 -8
  235. package/dist/internal/funding/Deposit.js.map +1 -1
  236. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  237. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  238. package/dist/internal/funding/DepositAddress.js +9 -8
  239. package/dist/internal/funding/DepositAddress.js.map +1 -1
  240. package/dist/internal/funding/DepositWebhook.d.ts +25 -0
  241. package/dist/internal/funding/DepositWebhook.d.ts.map +1 -0
  242. package/dist/internal/funding/DepositWebhook.js +74 -0
  243. package/dist/internal/funding/DepositWebhook.js.map +1 -0
  244. package/dist/internal/funding/Provider.d.ts.map +1 -1
  245. package/dist/internal/funding/Provider.js +13 -12
  246. package/dist/internal/funding/Provider.js.map +1 -1
  247. package/dist/internal/funding/Reconciliation.d.ts +6 -0
  248. package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
  249. package/dist/internal/funding/Reconciliation.js +42 -10
  250. package/dist/internal/funding/Reconciliation.js.map +1 -1
  251. package/dist/internal/funding/index.d.ts +1 -0
  252. package/dist/internal/funding/index.d.ts.map +1 -1
  253. package/dist/internal/funding/index.js +1 -0
  254. package/dist/internal/funding/index.js.map +1 -1
  255. package/dist/internal/funding/providers/stargate.d.ts +19 -0
  256. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  257. package/dist/internal/funding/providers/stargate.js +143 -0
  258. package/dist/internal/funding/providers/stargate.js.map +1 -0
  259. package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
  260. package/dist/internal/webhookDestinations/slack.js +16 -0
  261. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  262. package/dist/providers/index.d.ts +7 -0
  263. package/dist/providers/index.d.ts.map +1 -1
  264. package/dist/providers/index.js +3 -0
  265. package/dist/providers/index.js.map +1 -1
  266. package/package.json +2 -2
  267. package/src/App.test.ts +48 -0
  268. package/src/App.ts +7 -2
  269. package/src/Assets.test.ts +18 -0
  270. package/src/Assets.ts +22 -0
  271. package/src/Client.test-d.ts +287 -17
  272. package/src/Webhooks.ts +1 -220
  273. package/src/admin/apps/earn-vaults.test.ts +143 -0
  274. package/src/admin/apps/earn-vaults.ts +83 -6
  275. package/src/admin/apps/organizations.ts +6 -2
  276. package/src/admin/ui/src/routes/api-keys.tsx +36 -0
  277. package/src/admin/ui.generated.ts +151 -189
  278. package/src/apps/data/App.test.ts +31 -0
  279. package/src/apps/data/App.ts +64 -10
  280. package/src/apps/data/ZoneSelection.test.ts +196 -0
  281. package/src/apps/data/ZoneSelection.ts +108 -0
  282. package/src/apps/data/routes/activities.test.ts +435 -12
  283. package/src/apps/data/routes/activities.ts +562 -125
  284. package/src/apps/data/routes/balances.ts +1 -1
  285. package/src/apps/data/routes/blocks.ts +1 -1
  286. package/src/apps/data/routes/earn.test.ts +183 -23
  287. package/src/apps/data/routes/earn.ts +225 -29
  288. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  289. package/src/apps/data/routes/exchanges.test.ts +31 -1
  290. package/src/apps/data/routes/exchanges.ts +19 -15
  291. package/src/apps/data/routes/fee-amm.ts +18 -11
  292. package/src/apps/data/routes/receipts.ts +1 -1
  293. package/src/apps/data/routes/rpc.test.ts +75 -0
  294. package/src/apps/data/routes/rpc.ts +23 -9
  295. package/src/apps/data/routes/tokenlist.ts +21 -18
  296. package/src/apps/data/routes/tokens.test.ts +29 -0
  297. package/src/apps/data/routes/tokens.ts +38 -15
  298. package/src/apps/data/routes/transactions.ts +1 -1
  299. package/src/apps/data/routes/transfers.test.ts +3 -3
  300. package/src/apps/data/routes/transfers.ts +12 -9
  301. package/src/apps/data/routes/webhooks.test.ts +179 -1497
  302. package/src/apps/data/routes/webhooks.ts +156 -976
  303. package/src/apps/data/routes/zones.test.ts +19 -13
  304. package/src/apps/funding/routes/chains.test.ts +211 -7
  305. package/src/apps/funding/routes/chains.ts +19 -12
  306. package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
  307. package/src/apps/funding/routes/deposit-addresses.ts +84 -72
  308. package/src/apps/funding/routes/providers.ts +9 -5
  309. package/src/apps/funding/routes/quotes.test.ts +46 -0
  310. package/src/apps/funding/routes/quotes.ts +8 -5
  311. package/src/apps/funding/routes/transfers.test.ts +35 -32
  312. package/src/apps/management/Billing.test.ts +26 -0
  313. package/src/apps/management/Billing.ts +24 -7
  314. package/src/apps/management/routes/api-keys.test.ts +178 -0
  315. package/src/apps/management/routes/api-keys.ts +203 -144
  316. package/src/apps/management/routes/billing.test.ts +209 -0
  317. package/src/apps/management/routes/billing.ts +254 -177
  318. package/src/apps/management/routes/faucet.test.ts +39 -0
  319. package/src/apps/management/routes/faucet.ts +75 -41
  320. package/src/apps/management/routes/invitations.test.ts +216 -0
  321. package/src/apps/management/routes/invitations.ts +186 -109
  322. package/src/apps/management/routes/invite-links.test.ts +263 -1
  323. package/src/apps/management/routes/invite-links.ts +295 -214
  324. package/src/apps/management/routes/me.test.ts +49 -0
  325. package/src/apps/management/routes/me.ts +42 -32
  326. package/src/apps/management/routes/members.test.ts +124 -1
  327. package/src/apps/management/routes/members.ts +81 -51
  328. package/src/apps/management/routes/orgs.test.ts +176 -0
  329. package/src/apps/management/routes/orgs.ts +101 -59
  330. package/src/apps/management/routes/projects.test.ts +183 -0
  331. package/src/apps/management/routes/projects.ts +124 -60
  332. package/src/apps/management/routes/scopes.test.ts +44 -0
  333. package/src/apps/management/routes/scopes.ts +37 -28
  334. package/src/apps/management/routes/usage.test.ts +92 -0
  335. package/src/apps/management/routes/usage.ts +186 -151
  336. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  337. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  338. package/src/apps/management/routes/webhooks.test.ts +313 -1
  339. package/src/apps/management/routes/webhooks.ts +220 -71
  340. package/src/apps/mpp/internal/Adapter.ts +13 -1
  341. package/src/db/Db.test.ts +42 -5
  342. package/src/db/Db.ts +85 -0
  343. package/src/db/Schema.ts +41 -3
  344. package/src/db/tables/earnVaults.test.ts +22 -0
  345. package/src/db/tables/earnVaults.ts +11 -1
  346. package/src/db/tables/organizations.test.ts +5 -2
  347. package/src/db/tables/webhookDeliveries.ts +13 -0
  348. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  349. package/src/db/tables/webhookQueueEvents.ts +97 -57
  350. package/src/db/tables/webhookSubscriptions.ts +134 -144
  351. package/src/internal/Auth.ts +23 -5
  352. package/src/internal/Cache.ts +14 -7
  353. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  354. package/src/internal/EarnVaults.test.ts +79 -0
  355. package/src/internal/EarnVaults.ts +277 -0
  356. package/src/internal/MetricSink.test.ts +41 -373
  357. package/src/internal/MetricSink.ts +92 -273
  358. package/src/internal/OpenApi.ts +165 -49
  359. package/src/internal/Response.test.ts +95 -0
  360. package/src/internal/Response.ts +40 -2
  361. package/src/internal/Schema.test.ts +34 -0
  362. package/src/internal/Schema.ts +20 -9
  363. package/src/internal/Store.test.ts +186 -0
  364. package/src/internal/Store.ts +57 -17
  365. package/src/internal/Tidx.test.ts +19 -0
  366. package/src/internal/Tidx.ts +16 -4
  367. package/src/internal/WebhookTransfer.ts +1 -351
  368. package/src/internal/Webhooks.test.ts +222 -145
  369. package/src/internal/Webhooks.ts +234 -135
  370. package/src/internal/funding/Deposit.ts +71 -64
  371. package/src/internal/funding/DepositAddress.ts +50 -43
  372. package/src/internal/funding/DepositWebhook.test.ts +131 -0
  373. package/src/internal/funding/DepositWebhook.ts +101 -0
  374. package/src/internal/funding/Provider.ts +164 -142
  375. package/src/internal/funding/Reconciliation.test.ts +14 -0
  376. package/src/internal/funding/Reconciliation.ts +161 -86
  377. package/src/internal/funding/index.test.ts +1 -0
  378. package/src/internal/funding/index.ts +1 -0
  379. package/src/internal/funding/providers/index.test.ts +185 -0
  380. package/src/internal/funding/providers/stargate.ts +184 -0
  381. package/src/internal/webhookDestinations/slack.ts +15 -0
  382. package/src/providers/index.test.ts +1 -0
  383. package/src/providers/index.ts +9 -0
  384. package/src/Webhooks.bench.ts +0 -714
  385. package/src/Webhooks.memory.bench.ts +0 -250
  386. package/src/Webhooks.test.ts +0 -146
@@ -18,76 +18,79 @@ import * as ManagementError from '../Error.js'
18
18
  /** Zod schemas owned by the API-keys resource. */
19
19
  export namespace schema {
20
20
  /** One API key: metadata only — the token appears once, at mint. */
21
- export const Key = Schema.describe(
22
- z.object({
23
- allowedIps: ApiKey.schema.AllowedIps.check(
24
- z.describe(
25
- 'Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted.',
26
- ),
27
- z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] }),
28
- ),
29
- createdAt: z
30
- .string()
31
- .check(
32
- z.describe('When the key was minted (ISO 8601).'),
33
- z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
34
- ),
35
- createdBy: z
36
- .optional(z.string())
37
- .check(
38
- z.describe('Identity that minted the key (`usr_…`, or `super_admin`).'),
39
- z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
40
- ),
41
- environment: z
42
- .enum(['production', 'sandbox'])
43
- .check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
44
- expiresAt: z
45
- .optional(z.string())
46
- .check(
47
- z.describe('When the key expires (ISO 8601). Absent for a non-expiring key.'),
48
- z.meta({ examples: ['2027-01-01T00:00:00.000Z'] }),
49
- ),
50
- id: z
51
- .string()
52
- .check(
53
- z.describe('Opaque key id (`key_…`).'),
54
- z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
55
- ),
56
- lastUsedAt: z
57
- .optional(z.string())
58
- .check(
59
- z.describe('When the key last authenticated a request (ISO 8601).'),
60
- z.meta({ examples: ['2026-07-21T12:34:56.000Z'] }),
61
- ),
62
- name: z
63
- .optional(z.string())
64
- .check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
65
- orgId: z
66
- .string()
67
- .check(
68
- z.describe('Owning organization id (`org_…`).'),
69
- z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
70
- ),
71
- projectId: z.optional(z.string()).check(
72
- z.describe('Attributed project id (`prj_…`).'), // prettier-ignore
73
- z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
74
- ),
75
- scopes: z
76
- .array(z.string().check(z.minLength(1)))
77
- .check(
21
+ export const Key = OpenApi.component(
22
+ Schema.describe(
23
+ z.object({
24
+ allowedIps: ApiKey.schema.AllowedIps.check(
78
25
  z.describe(
79
- "Granted scopes. '*' and non-self-serve scopes appear only on keys minted by the super admin.",
26
+ 'Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted.',
80
27
  ),
81
- z.meta({ examples: [['data:read']] }),
28
+ z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] }),
82
29
  ),
83
- tokenLast4: z
84
- .string()
85
- .check(
86
- z.describe('Last 4 characters of the plaintext token.'),
87
- z.meta({ examples: ['a1b2'] }),
30
+ createdAt: z.iso
31
+ .datetime()
32
+ .check(
33
+ z.describe('When the key was minted (ISO 8601).'),
34
+ z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
35
+ ),
36
+ createdBy: z
37
+ .optional(z.string())
38
+ .check(
39
+ z.describe('Identity that minted the key (`usr_…`, or `super_admin`).'),
40
+ z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
41
+ ),
42
+ environment: z
43
+ .enum(['production', 'sandbox'])
44
+ .check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
45
+ expiresAt: z
46
+ .optional(z.iso.datetime())
47
+ .check(
48
+ z.describe('When the key expires (ISO 8601). Absent for a non-expiring key.'),
49
+ z.meta({ examples: ['2027-01-01T00:00:00.000Z'] }),
50
+ ),
51
+ id: z
52
+ .string()
53
+ .check(
54
+ z.describe('Opaque key id (`key_…`).'),
55
+ z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
56
+ ),
57
+ lastUsedAt: z
58
+ .optional(z.iso.datetime())
59
+ .check(
60
+ z.describe('When the key last authenticated a request (ISO 8601).'),
61
+ z.meta({ examples: ['2026-07-21T12:34:56.000Z'] }),
62
+ ),
63
+ name: z
64
+ .optional(z.string())
65
+ .check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
66
+ orgId: z
67
+ .string()
68
+ .check(
69
+ z.describe('Owning organization id (`org_…`).'),
70
+ z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
71
+ ),
72
+ projectId: z.optional(z.string()).check(
73
+ z.describe('Attributed project id (`prj_…`).'), // prettier-ignore
74
+ z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
88
75
  ),
89
- }),
90
- 'An API key: metadata only — the token appears once, at mint.',
76
+ scopes: z
77
+ .array(z.string().check(z.minLength(1)))
78
+ .check(
79
+ z.describe(
80
+ "Granted scopes. '*' and non-self-serve scopes appear only on keys minted by the super admin.",
81
+ ),
82
+ z.meta({ examples: [['data:read']] }),
83
+ ),
84
+ tokenLast4: z
85
+ .string()
86
+ .check(
87
+ z.describe('Last 4 characters of the plaintext token.'),
88
+ z.meta({ examples: ['a1b2'] }),
89
+ ),
90
+ }),
91
+ 'An API key: metadata only — the token appears once, at mint.',
92
+ ),
93
+ 'ApiKey',
91
94
  )
92
95
 
93
96
  /** Path parameters addressing a project's key collection. */
@@ -145,52 +148,69 @@ export namespace schema {
145
148
  .check(z.describe('Path parameters for one API key.'))
146
149
 
147
150
  /** Request body minting a key. The wildcard scope is not issuable here. */
148
- export const KeyBody = z
149
- .object({
150
- allowedIps: z
151
- .optional(ApiKey.schema.AllowedIps)
152
- .check(
153
- z.describe(
154
- 'Client IP addresses and CIDR ranges allowed to use the key. Omit or use an empty list for unrestricted access.',
155
- ),
156
- z.meta({ examples: [['203.0.113.0/24']] }),
157
- ),
158
- environment: z
159
- ._default(z.enum(['production', 'sandbox']), 'production')
160
- .check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
161
- name: z
162
- .optional(z.string().check(z.minLength(1), z.maxLength(100)))
163
- .check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
164
- scopes: z
165
- ._default(
166
- z.array(
167
- z.string().check(
168
- z.minLength(1),
169
- z.refine((scope) => scope !== Scope.wildcard),
151
+ export const CreateApiKeyRequest = OpenApi.component(
152
+ z
153
+ .object({
154
+ allowedIps: z
155
+ .optional(ApiKey.schema.AllowedIps)
156
+ .check(
157
+ z.describe(
158
+ 'Client IP addresses and CIDR ranges allowed to use the key. Omit or use an empty list for unrestricted access.',
170
159
  ),
160
+ z.meta({ examples: [['203.0.113.0/24']] }),
171
161
  ),
172
- [],
173
- )
174
- .check(z.describe('Scopes to grant.'), z.meta({ examples: [['data:read']] })),
175
- })
176
- .check(z.describe('Fields for minting an API key.'))
162
+ environment: z
163
+ ._default(z.enum(['production', 'sandbox']), 'production')
164
+ .check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
165
+ name: z
166
+ .optional(z.string().check(z.minLength(1), z.maxLength(100)))
167
+ .check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
168
+ scopes: z
169
+ ._default(
170
+ z.array(
171
+ z.string().check(
172
+ z.minLength(1),
173
+ z.refine((scope) => scope !== Scope.wildcard),
174
+ ),
175
+ ),
176
+ [],
177
+ )
178
+ .check(z.describe('Scopes to grant.'), z.meta({ examples: [['data:read']] })),
179
+ })
180
+ .check(z.describe('Fields for minting an API key.')),
181
+ 'CreateApiKeyRequest',
182
+ )
177
183
 
178
184
  /** Schemas for the createApiKey operation. */
179
185
  export namespace createApiKey {
180
186
  /** The minted key plus its one-time token. */
181
- export const Response = Schema.describe(
182
- z.extend(Key, {
183
- token: z
184
- .string()
185
- .check(
186
- z.describe('The plaintext token — shown once, unrecoverable afterward.'),
187
- z.meta({ examples: ['tempo_sandbox:sk:…'] }),
188
- ),
189
- }),
190
- 'The minted key, including its one-time token.',
187
+ export const Response = OpenApi.component(
188
+ Schema.describe(
189
+ z.extend(Key, {
190
+ token: z
191
+ .string()
192
+ .check(
193
+ z.describe('The plaintext token — shown once, unrecoverable afterward.'),
194
+ z.meta({ examples: ['tempo_sandbox:sk:…'] }),
195
+ ),
196
+ }),
197
+ 'The minted key, including its one-time token.',
198
+ ),
199
+ 'CreateApiKeyResponse',
191
200
  )
192
201
  }
193
202
 
203
+ /** Non-paginated list of API key metadata. */
204
+ export const ApiKeyList = OpenApi.component(
205
+ Schema.describe(
206
+ z.object({
207
+ data: z.array(Key).check(z.describe('The API keys, newest first.')),
208
+ }),
209
+ 'A non-paginated list of API key metadata.',
210
+ ),
211
+ 'ApiKeyList',
212
+ )
213
+
194
214
  /** Schemas for the listApiKeys operation. */
195
215
  export namespace listApiKeys {
196
216
  /** Query parameters filtering a project's keys. */
@@ -199,12 +219,7 @@ export namespace schema {
199
219
  .check(z.describe("Query parameters for a project's API keys."))
200
220
 
201
221
  /** Non-paginated list of a project's keys. */
202
- export const Response = Schema.describe(
203
- z.object({
204
- data: z.array(Key).check(z.describe("The project's keys, newest first.")),
205
- }),
206
- "A non-paginated list of a project's API keys (metadata only).",
207
- )
222
+ export const Response = ApiKeyList
208
223
  }
209
224
 
210
225
  /** Schemas for the listOrgApiKeys operation. */
@@ -215,44 +230,43 @@ export namespace schema {
215
230
  .check(z.describe("Query parameters for an organization's API keys."))
216
231
 
217
232
  /** Non-paginated list of every key in the organization. */
218
- export const Response = Schema.describe(
219
- z.object({
220
- data: z
221
- .array(Key)
222
- .check(z.describe("The organization's keys across all projects, newest first.")),
223
- }),
224
- "A non-paginated list of an organization's API keys (metadata only).",
225
- )
233
+ export const Response = ApiKeyList
226
234
  }
227
235
 
228
236
  /** Schemas for the revokeApiKey operation. */
229
237
  export namespace revokeApiKey {
230
238
  /** Confirmation that the key was revoked. */
231
- export const Response = z
232
- .object({
233
- id: z
234
- .string()
235
- .check(
236
- z.describe('ID of the key that was revoked.'),
237
- z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
238
- ),
239
- })
240
- .check(z.describe('Confirmation that the key was revoked.'))
239
+ export const Response = OpenApi.component(
240
+ z
241
+ .object({
242
+ id: z
243
+ .string()
244
+ .check(
245
+ z.describe('ID of the key that was revoked.'),
246
+ z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
247
+ ),
248
+ })
249
+ .check(z.describe('Confirmation that the key was revoked.')),
250
+ 'RevokeApiKeyResponse',
251
+ )
241
252
  }
242
253
 
243
254
  /** Schemas for the updateApiKey operation. */
244
255
  export namespace updateApiKey {
245
256
  /** Request body replacing or clearing a key's IP allowlist. */
246
- export const Body = z
247
- .object({
248
- allowedIps: ApiKey.schema.AllowedIps.check(
249
- z.describe(
250
- 'Replacement client IP/CIDR allowlist. Use an empty list for unrestricted access.',
257
+ export const Body = OpenApi.component(
258
+ z
259
+ .object({
260
+ allowedIps: ApiKey.schema.AllowedIps.check(
261
+ z.describe(
262
+ 'Replacement client IP/CIDR allowlist. Use an empty list for unrestricted access.',
263
+ ),
264
+ z.meta({ examples: [['203.0.113.0/24']] }),
251
265
  ),
252
- z.meta({ examples: [['203.0.113.0/24']] }),
253
- ),
254
- })
255
- .check(z.describe("Fields for updating an API key's network access."))
266
+ })
267
+ .check(z.describe("Fields for updating an API key's network access.")),
268
+ 'UpdateApiKeyRequest',
269
+ )
256
270
  }
257
271
  }
258
272
 
@@ -271,7 +285,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
271
285
  code: 'param_invalid',
272
286
  message: 'Check the path parameters and try again.',
273
287
  }),
274
- OpenApi.validate('json', schema.KeyBody, {
288
+ OpenApi.validate('json', schema.CreateApiKeyRequest, {
275
289
  code: 'body_invalid',
276
290
  message: 'Check the request body and try again.',
277
291
  }),
@@ -281,11 +295,18 @@ export function apiKeys(options: apiKeys.Options = {}) {
281
295
  operationId: 'createApiKey',
282
296
  responses: OpenApi.responses({
283
297
  errors: {
298
+ 400: {
299
+ codes: ['body_invalid', 'param_invalid'],
300
+ description: 'Malformed API key, invalid path, or invalid body.',
301
+ },
284
302
  403: {
285
303
  codes: ['scope_not_issuable'],
286
304
  description: 'The requested scopes are not issuable.',
287
305
  },
288
- 404: 'No accessible project was found for this id.',
306
+ 404: {
307
+ codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
308
+ description: 'No accessible project or API key surface was found.',
309
+ },
289
310
  },
290
311
  success: {
291
312
  description: 'The minted key, including its one-time token.',
@@ -298,6 +319,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
298
319
  async (c) => {
299
320
  if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
300
321
  if (Auth.narrowScope) return Auth.ensureProjectError(c)
322
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
301
323
  if (OpenApi.narrowValidation)
302
324
  return OpenApi.validationError(c, {
303
325
  code: 'param_invalid',
@@ -379,8 +401,14 @@ export function apiKeys(options: apiKeys.Options = {}) {
379
401
  operationId: 'listApiKeys',
380
402
  responses: OpenApi.responses({
381
403
  errors: {
382
- 400: { codes: ['query_invalid'], description: 'Invalid query parameters.' },
383
- 404: 'No accessible project was found for this id.',
404
+ 400: {
405
+ codes: ['param_invalid', 'query_invalid'],
406
+ description: 'Malformed API key, invalid path, or invalid query.',
407
+ },
408
+ 404: {
409
+ codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
410
+ description: 'No accessible project or API key surface was found.',
411
+ },
384
412
  },
385
413
  success: {
386
414
  description: "The project's keys, newest first (metadata only).",
@@ -441,8 +469,14 @@ export function apiKeys(options: apiKeys.Options = {}) {
441
469
  operationId: 'listOrgApiKeys',
442
470
  responses: OpenApi.responses({
443
471
  errors: {
444
- 400: { codes: ['query_invalid'], description: 'Invalid query parameters.' },
445
- 404: 'No accessible organization was found for this id.',
472
+ 400: {
473
+ codes: ['param_invalid', 'query_invalid'],
474
+ description: 'Malformed API key, invalid path, or invalid query.',
475
+ },
476
+ 404: {
477
+ codes: ['api_keys_not_enabled', 'organization_not_found'],
478
+ description: 'No accessible organization or API key surface was found.',
479
+ },
446
480
  },
447
481
  success: {
448
482
  description: "The organization's keys across all projects, newest first (metadata only).", // prettier-ignore
@@ -504,7 +538,19 @@ export function apiKeys(options: apiKeys.Options = {}) {
504
538
  operationId: 'updateApiKey',
505
539
  responses: OpenApi.responses({
506
540
  errors: {
507
- 404: 'No accessible API key was found for this id.',
541
+ 400: {
542
+ codes: ['body_invalid', 'param_invalid'],
543
+ description: 'Malformed API key, invalid path, or invalid body.',
544
+ },
545
+ 404: {
546
+ codes: [
547
+ 'api_key_not_found',
548
+ 'api_keys_not_enabled',
549
+ 'organization_not_found',
550
+ 'project_not_found',
551
+ ],
552
+ description: 'No accessible API key or API key surface was found.',
553
+ },
508
554
  },
509
555
  success: {
510
556
  description: 'The updated API key metadata.',
@@ -517,6 +563,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
517
563
  async (c) => {
518
564
  if (Auth.narrowAccess) return Auth.accessError(c)
519
565
  if (Auth.narrowScope) return Auth.ensureProjectError(c)
566
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
520
567
  if (OpenApi.narrowValidation)
521
568
  return OpenApi.validationError(c, {
522
569
  code: 'param_invalid',
@@ -561,7 +608,18 @@ export function apiKeys(options: apiKeys.Options = {}) {
561
608
  hide: hidden,
562
609
  operationId: 'revokeApiKey',
563
610
  responses: OpenApi.responses({
564
- errors: { 404: 'No accessible API key was found for this id.' },
611
+ errors: {
612
+ 400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
613
+ 404: {
614
+ codes: [
615
+ 'api_key_not_found',
616
+ 'api_keys_not_enabled',
617
+ 'organization_not_found',
618
+ 'project_not_found',
619
+ ],
620
+ description: 'No accessible API key or API key surface was found.',
621
+ },
622
+ },
565
623
  success: {
566
624
  description: 'Confirmation that the key was revoked.',
567
625
  schema: schema.revokeApiKey.Response,
@@ -573,6 +631,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
573
631
  async (c) => {
574
632
  if (Auth.narrowAccess) return Auth.accessError(c)
575
633
  if (Auth.narrowScope) return Auth.ensureProjectError(c)
634
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
576
635
  if (OpenApi.narrowValidation)
577
636
  return OpenApi.validationError(c, {
578
637
  code: 'param_invalid',
@@ -77,6 +77,215 @@ function createApp(
77
77
  })
78
78
  }
79
79
 
80
+ test('publishes generator-ready OpenAPI contracts', async () => {
81
+ const spec = await (await createApp().request('/openapi.json')).json()
82
+ const billing = spec.paths['/v1/orgs/{orgId}/billing']
83
+ const checkout = spec.paths['/v1/orgs/{orgId}/billing/stripe/checkout'].post
84
+ const manage = spec.paths['/v1/orgs/{orgId}/billing/stripe/manage'].post
85
+ const methods = spec.paths['/v1/orgs/{orgId}/billing/payment-methods'].get
86
+ const remove = spec.paths['/v1/orgs/{orgId}/billing/payment-methods/{methodId}'].delete
87
+
88
+ expect({
89
+ checkout: {
90
+ errors: {
91
+ 400: checkout.responses[400].content['application/json'].schema,
92
+ 403: checkout.responses[403].content['application/json'].schema,
93
+ 404: checkout.responses[404].content['application/json'].schema,
94
+ 501: checkout.responses[501].content['application/json'].schema,
95
+ },
96
+ operationId: checkout.operationId,
97
+ response: checkout.responses[200].content['application/json'].schema,
98
+ },
99
+ components: [
100
+ 'Billing',
101
+ 'BillingPaymentMethod',
102
+ 'BillingPaymentMethodList',
103
+ 'BillingSession',
104
+ 'BillingSpendLimit',
105
+ 'BillingTransactionFeeLimit',
106
+ 'UpdateBillingRequest',
107
+ ].filter((name) => spec.components.schemas[name]),
108
+ get: {
109
+ errors: {
110
+ 400: billing.get.responses[400].content['application/json'].schema,
111
+ 404: billing.get.responses[404].content['application/json'].schema,
112
+ },
113
+ operationId: billing.get.operationId,
114
+ response: billing.get.responses[200].content['application/json'].schema,
115
+ },
116
+ manage: {
117
+ errors: {
118
+ 400: manage.responses[400].content['application/json'].schema,
119
+ 403: manage.responses[403].content['application/json'].schema,
120
+ 404: manage.responses[404].content['application/json'].schema,
121
+ 501: manage.responses[501].content['application/json'].schema,
122
+ },
123
+ operationId: manage.operationId,
124
+ response: manage.responses[200].content['application/json'].schema,
125
+ },
126
+ methods: {
127
+ errors: {
128
+ 400: methods.responses[400].content['application/json'].schema,
129
+ 404: methods.responses[404].content['application/json'].schema,
130
+ 501: methods.responses[501].content['application/json'].schema,
131
+ },
132
+ operationId: methods.operationId,
133
+ response: methods.responses[200].content['application/json'].schema,
134
+ },
135
+ remove: {
136
+ errors: {
137
+ 400: remove.responses[400].content['application/json'].schema,
138
+ 403: remove.responses[403].content['application/json'].schema,
139
+ 404: remove.responses[404].content['application/json'].schema,
140
+ 501: remove.responses[501].content['application/json'].schema,
141
+ },
142
+ operationId: remove.operationId,
143
+ response: remove.responses[200].content['application/json'].schema,
144
+ },
145
+ timestamps: {
146
+ billing: spec.components.schemas.Billing.properties.updatedAt.format,
147
+ paymentMethod: spec.components.schemas.BillingPaymentMethod.properties.createdAt.format,
148
+ },
149
+ update: {
150
+ errors: {
151
+ 400: billing.patch.responses[400].content['application/json'].schema,
152
+ 403: billing.patch.responses[403].content['application/json'].schema,
153
+ 404: billing.patch.responses[404].content['application/json'].schema,
154
+ },
155
+ operationId: billing.patch.operationId,
156
+ request: billing.patch.requestBody.content['application/json'].schema,
157
+ response: billing.patch.responses[200].content['application/json'].schema,
158
+ },
159
+ }).toMatchInlineSnapshot(`
160
+ {
161
+ "checkout": {
162
+ "errors": {
163
+ "400": {
164
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
165
+ },
166
+ "403": {
167
+ "$ref": "#/components/schemas/ApiKeyForbiddenOrApiKeyIpForbiddenOrBillingSourceDisabledOrForbiddenError",
168
+ },
169
+ "404": {
170
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
171
+ },
172
+ "501": {
173
+ "$ref": "#/components/schemas/NotImplementedError",
174
+ },
175
+ },
176
+ "operationId": "createStripeCheckout",
177
+ "response": {
178
+ "$ref": "#/components/schemas/BillingSession",
179
+ },
180
+ },
181
+ "components": [
182
+ "Billing",
183
+ "BillingPaymentMethod",
184
+ "BillingPaymentMethodList",
185
+ "BillingSession",
186
+ "BillingSpendLimit",
187
+ "BillingTransactionFeeLimit",
188
+ "UpdateBillingRequest",
189
+ ],
190
+ "get": {
191
+ "errors": {
192
+ "400": {
193
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
194
+ },
195
+ "404": {
196
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
197
+ },
198
+ },
199
+ "operationId": "getBilling",
200
+ "response": {
201
+ "$ref": "#/components/schemas/Billing",
202
+ },
203
+ },
204
+ "manage": {
205
+ "errors": {
206
+ "400": {
207
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
208
+ },
209
+ "403": {
210
+ "$ref": "#/components/schemas/ForbiddenError",
211
+ },
212
+ "404": {
213
+ "$ref": "#/components/schemas/BillingNotFoundOrOrganizationNotFoundError",
214
+ },
215
+ "501": {
216
+ "$ref": "#/components/schemas/NotImplementedError",
217
+ },
218
+ },
219
+ "operationId": "createStripeManage",
220
+ "response": {
221
+ "$ref": "#/components/schemas/BillingSession",
222
+ },
223
+ },
224
+ "methods": {
225
+ "errors": {
226
+ "400": {
227
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
228
+ },
229
+ "404": {
230
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
231
+ },
232
+ "501": {
233
+ "$ref": "#/components/schemas/NotImplementedError",
234
+ },
235
+ },
236
+ "operationId": "getBillingPaymentMethods",
237
+ "response": {
238
+ "$ref": "#/components/schemas/BillingPaymentMethodList",
239
+ },
240
+ },
241
+ "remove": {
242
+ "errors": {
243
+ "400": {
244
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
245
+ },
246
+ "403": {
247
+ "$ref": "#/components/schemas/ForbiddenError",
248
+ },
249
+ "404": {
250
+ "$ref": "#/components/schemas/BillingNotFoundOrOrganizationNotFoundOrPaymentMethodNotFoundError",
251
+ },
252
+ "501": {
253
+ "$ref": "#/components/schemas/NotImplementedError",
254
+ },
255
+ },
256
+ "operationId": "deleteBillingPaymentMethod",
257
+ "response": {
258
+ "$ref": "#/components/schemas/Billing",
259
+ },
260
+ },
261
+ "timestamps": {
262
+ "billing": "date-time",
263
+ "paymentMethod": "date-time",
264
+ },
265
+ "update": {
266
+ "errors": {
267
+ "400": {
268
+ "$ref": "#/components/schemas/ApiKeyMalformedOrBodyInvalidOrParamInvalidOrQueryInvalidError",
269
+ },
270
+ "403": {
271
+ "$ref": "#/components/schemas/ForbiddenError",
272
+ },
273
+ "404": {
274
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
275
+ },
276
+ },
277
+ "operationId": "updateBilling",
278
+ "request": {
279
+ "$ref": "#/components/schemas/UpdateBillingRequest",
280
+ },
281
+ "response": {
282
+ "$ref": "#/components/schemas/Billing",
283
+ },
284
+ },
285
+ }
286
+ `)
287
+ })
288
+
80
289
  /** RequestInit presenting the given token. */
81
290
  function as(token: string) {
82
291
  return { headers: { 'tempo-api-key': token } } as const