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
@@ -49,194 +49,217 @@ export namespace schema {
49
49
  .check(z.describe('Path parameters addressing one payment method.'))
50
50
 
51
51
  /** A per-period spend limit. */
52
- export const SpendLimit = Schema.describe(
53
- z.object({
54
- amount: z.string().check(
55
- // The lookahead rejects zero: a zero limit would refuse all
56
- // sponsorship, which `null` (clear) already expresses.
57
- z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
58
- z.describe('Limit as a positive decimal string in `currency` units.'),
59
- z.meta({ examples: ['250'] }),
60
- ),
61
- currency: z
62
- ._default(z.enum(BillingSettings.currencies), 'usd')
63
- .check(
64
- z.describe('Currency the limit is denominated in; `usd` only today.'),
65
- z.meta({ examples: ['usd'] }),
66
- ),
67
- period: z
68
- ._default(z.enum(BillingSettings.periods), 'month')
69
- .check(
70
- z.describe('Window the limit applies over; `month` (UTC calendar) only today.'),
71
- z.meta({ examples: ['month'] }),
52
+ export const SpendLimit = OpenApi.component(
53
+ Schema.describe(
54
+ z.object({
55
+ amount: z.string().check(
56
+ // The lookahead rejects zero: a zero limit would refuse all
57
+ // sponsorship, which `null` (clear) already expresses.
58
+ z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
59
+ z.describe('Limit as a positive decimal string in `currency` units.'),
60
+ z.meta({ examples: ['250'] }),
72
61
  ),
73
- }),
74
- 'A per-period spend limit.',
62
+ currency: z
63
+ ._default(z.enum(BillingSettings.currencies), 'usd')
64
+ .check(
65
+ z.describe('Currency the limit is denominated in; `usd` only today.'),
66
+ z.meta({ examples: ['usd'] }),
67
+ ),
68
+ period: z
69
+ ._default(z.enum(BillingSettings.periods), 'month')
70
+ .check(
71
+ z.describe('Window the limit applies over; `month` (UTC calendar) only today.'),
72
+ z.meta({ examples: ['month'] }),
73
+ ),
74
+ }),
75
+ 'A per-period spend limit.',
76
+ ),
77
+ 'BillingSpendLimit',
75
78
  )
76
79
 
77
80
  /** A per-transaction fee cap. */
78
- export const TxFeeLimit = Schema.describe(
79
- z.object({
80
- amount: z.string().check(
81
- // The lookahead rejects zero: a zero cap would refuse every
82
- // transaction, which is not a supported configuration.
83
- z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
84
- z.describe('Cap as a positive decimal string in `currency` units.'),
85
- z.meta({ examples: ['0.50'] }),
86
- ),
87
- currency: z
88
- ._default(z.enum(BillingSettings.currencies), 'usd')
89
- .check(
90
- z.describe('Currency the cap is denominated in; `usd` only today.'),
91
- z.meta({ examples: ['usd'] }),
81
+ export const TxFeeLimit = OpenApi.component(
82
+ Schema.describe(
83
+ z.object({
84
+ amount: z.string().check(
85
+ // The lookahead rejects zero: a zero cap would refuse every
86
+ // transaction, which is not a supported configuration.
87
+ z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
88
+ z.describe('Cap as a positive decimal string in `currency` units.'),
89
+ z.meta({ examples: ['0.50'] }),
92
90
  ),
93
- }),
94
- 'A per-transaction fee cap.',
91
+ currency: z
92
+ ._default(z.enum(BillingSettings.currencies), 'usd')
93
+ .check(
94
+ z.describe('Currency the cap is denominated in; `usd` only today.'),
95
+ z.meta({ examples: ['usd'] }),
96
+ ),
97
+ }),
98
+ 'A per-transaction fee cap.',
99
+ ),
100
+ 'BillingTransactionFeeLimit',
95
101
  )
96
102
 
97
103
  /** PATCH body; absent fields stay unchanged, null clears a limit. */
98
- export const Patch = Schema.describe(
99
- z.object({
100
- spendLimit: z
101
- .optional(z.nullable(SpendLimit))
102
- .check(
103
- z.describe('Spend limit per period; absent leaves it unchanged, null removes it.'),
104
- z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
104
+ export const Patch = OpenApi.component(
105
+ Schema.describe(
106
+ z.object({
107
+ spendLimit: z
108
+ .optional(z.nullable(SpendLimit))
109
+ .check(
110
+ z.describe('Spend limit per period; absent leaves it unchanged, null removes it.'),
111
+ z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
112
+ ),
113
+ txFeeLimit: z.optional(z.nullable(TxFeeLimit)).check(
114
+ z.describe('Per-transaction fee cap; absent leaves it unchanged, null restores the platform default.'), // prettier-ignore
115
+ z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
105
116
  ),
106
- txFeeLimit: z.optional(z.nullable(TxFeeLimit)).check(
107
- z.describe('Per-transaction fee cap; absent leaves it unchanged, null restores the platform default.'), // prettier-ignore
108
- z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
109
- ),
110
- }),
111
- 'Billing settings to apply.',
117
+ }),
118
+ 'Billing settings to apply.',
119
+ ),
120
+ 'UpdateBillingRequest',
112
121
  )
113
122
 
114
123
  /** An organization's billing state. */
115
- export const Billing = Schema.describe(
116
- z.object({
117
- enabledSources: z
118
- .array(z.enum(EnabledBillingSources.sources))
119
- .check(
120
- z.describe('Billing sources this organization may set up.'),
121
- z.meta({ examples: [['stripe']] }),
124
+ export const Billing = OpenApi.component(
125
+ Schema.describe(
126
+ z.object({
127
+ enabledSources: z
128
+ .array(z.enum(EnabledBillingSources.sources))
129
+ .check(
130
+ z.describe('Billing sources this organization may set up.'),
131
+ z.meta({ examples: [['stripe']] }),
132
+ ),
133
+ spend: z
134
+ .optional(
135
+ z.object({
136
+ amount: z.string().check(
137
+ z.describe('Committed spend as a decimal string: finalized fees plus in-flight fee caps.'), // prettier-ignore
138
+ z.meta({ examples: ['12.34'] }),
139
+ ),
140
+ currency: z
141
+ .enum(BillingSettings.currencies)
142
+ .check(z.describe('Currency of the spend figure.'), z.meta({ examples: ['usd'] })),
143
+ period: z
144
+ .enum(BillingSettings.periods)
145
+ .check(z.describe('Window the figure covers.'), z.meta({ examples: ['month'] })),
146
+ }),
147
+ )
148
+ .check(
149
+ z.describe('Billable production spend committed in the current window.'),
150
+ z.meta({ examples: [{ amount: '12.34', currency: 'usd', period: 'month' }] }),
151
+ ),
152
+ spendLimit: z
153
+ .optional(SpendLimit)
154
+ .check(
155
+ z.describe('Configured spend limit; absent when the organization has none.'),
156
+ z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
157
+ ),
158
+ status: z.enum(StripeCustomers.statuses).check(
159
+ z.describe("Billing status derived from the organization's billing source; `active` opens production fee sponsorship."), // prettier-ignore
160
+ z.meta({ examples: ['active'] }),
122
161
  ),
123
- spend: z
124
- .optional(
125
- z.object({
126
- amount: z.string().check(
127
- z.describe('Committed spend as a decimal string: finalized fees plus in-flight fee caps.'), // prettier-ignore
128
- z.meta({ examples: ['12.34'] }),
162
+ txFeeLimit: z
163
+ .optional(TxFeeLimit)
164
+ .check(
165
+ z.describe(
166
+ 'Configured per-transaction fee cap; absent when the platform default applies.',
129
167
  ),
130
- currency: z
131
- .enum(BillingSettings.currencies)
132
- .check(z.describe('Currency of the spend figure.'), z.meta({ examples: ['usd'] })),
133
- period: z
134
- .enum(BillingSettings.periods)
135
- .check(z.describe('Window the figure covers.'), z.meta({ examples: ['month'] })),
136
- }),
137
- )
138
- .check(
139
- z.describe('Billable production spend committed in the current window.'),
140
- z.meta({ examples: [{ amount: '12.34', currency: 'usd', period: 'month' }] }),
141
- ),
142
- spendLimit: z
143
- .optional(SpendLimit)
144
- .check(
145
- z.describe('Configured spend limit; absent when the organization has none.'),
146
- z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
147
- ),
148
- status: z.enum(StripeCustomers.statuses).check(
149
- z.describe("Billing status derived from the organization's billing source; `active` opens production fee sponsorship."), // prettier-ignore
150
- z.meta({ examples: ['active'] }),
151
- ),
152
- txFeeLimit: z
153
- .optional(TxFeeLimit)
154
- .check(
155
- z.describe(
156
- 'Configured per-transaction fee cap; absent when the platform default applies.',
168
+ z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
157
169
  ),
158
- z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
170
+ updatedAt: z.optional(z.iso.datetime()).check(
171
+ z.describe('When the billing status last changed (ISO 8601); absent before first checkout.'), // prettier-ignore
172
+ z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
159
173
  ),
160
- updatedAt: z.optional(z.string()).check(
161
- z.describe('When the billing status last changed (ISO 8601); absent before first checkout.'), // prettier-ignore
162
- z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
163
- ),
164
- }),
165
- "An organization's billing state.",
174
+ }),
175
+ "An organization's billing state.",
176
+ ),
177
+ 'Billing',
166
178
  )
167
179
 
168
180
  /** A hosted Stripe session link. */
169
- export const Session = Schema.describe(
170
- z.object({
171
- url: z
172
- .url()
173
- .check(
174
- z.describe('Hosted Stripe session URL; navigate the browser here.'),
175
- z.meta({ examples: ['https://checkout.stripe.com/c/pay/cs_test_a1b2c3'] }),
176
- ),
177
- }),
178
- 'A hosted Stripe session link.',
181
+ export const Session = OpenApi.component(
182
+ Schema.describe(
183
+ z.object({
184
+ url: z
185
+ .url()
186
+ .check(
187
+ z.describe('Hosted Stripe session URL; navigate the browser here.'),
188
+ z.meta({ examples: ['https://checkout.stripe.com/c/pay/cs_test_a1b2c3'] }),
189
+ ),
190
+ }),
191
+ 'A hosted Stripe session link.',
192
+ ),
193
+ 'BillingSession',
179
194
  )
180
195
 
181
196
  /** A payment method on file. */
182
- export const PaymentMethod = Schema.describe(
183
- z.object({
184
- card: z
185
- .optional(
186
- z.object({
187
- brand: z
188
- .string()
189
- .check(z.describe('Card brand (e.g. `visa`).'), z.meta({ examples: ['visa'] })),
190
- expMonth: z
191
- .number()
192
- .check(z.describe('Expiry month (1-12).'), z.meta({ examples: [12] })),
193
- expYear: z.number().check(z.describe('Expiry year.'), z.meta({ examples: [2030] })),
194
- last4: z
195
- .string()
196
- .check(z.describe('Last four digits.'), z.meta({ examples: ['4242'] })),
197
- }),
198
- )
199
- .check(
200
- z.describe('Card details; present when `type` is `card`.'),
201
- z.meta({ examples: [{ brand: 'visa', expMonth: 12, expYear: 2030, last4: '4242' }] }),
202
- ),
203
- createdAt: z
204
- .string()
205
- .check(
206
- z.describe('When the method was attached (ISO 8601).'),
207
- z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
208
- ),
209
- default: z
210
- .boolean()
211
- .check(z.describe('Whether invoices charge this method.'), z.meta({ examples: [true] })),
212
- id: z
213
- .string()
214
- .check(
215
- z.describe('The payment method id (`pm_…`).'),
216
- z.meta({ examples: ['pm_1NVChw2eZvKYlo2CHxiM5E2N'] }),
217
- ),
218
- provider: z
219
- .literal('stripe')
220
- .check(
221
- z.describe('Payment provider; `stripe` only today.'),
222
- z.meta({ examples: ['stripe'] }),
223
- ),
224
- type: z
225
- .string()
226
- .check(
227
- z.describe('Method type (e.g. `card`, `us_bank_account`).'),
228
- z.meta({ examples: ['card'] }),
229
- ),
230
- }),
231
- 'A payment method on file.',
197
+ export const PaymentMethod = OpenApi.component(
198
+ Schema.describe(
199
+ z.object({
200
+ card: z
201
+ .optional(
202
+ z.object({
203
+ brand: z
204
+ .string()
205
+ .check(z.describe('Card brand (e.g. `visa`).'), z.meta({ examples: ['visa'] })),
206
+ expMonth: z
207
+ .number()
208
+ .check(z.describe('Expiry month (1-12).'), z.meta({ examples: [12] })),
209
+ expYear: z.number().check(z.describe('Expiry year.'), z.meta({ examples: [2030] })),
210
+ last4: z
211
+ .string()
212
+ .check(z.describe('Last four digits.'), z.meta({ examples: ['4242'] })),
213
+ }),
214
+ )
215
+ .check(
216
+ z.describe('Card details; present when `type` is `card`.'),
217
+ z.meta({ examples: [{ brand: 'visa', expMonth: 12, expYear: 2030, last4: '4242' }] }),
218
+ ),
219
+ createdAt: z.iso
220
+ .datetime()
221
+ .check(
222
+ z.describe('When the method was attached (ISO 8601).'),
223
+ z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
224
+ ),
225
+ default: z
226
+ .boolean()
227
+ .check(z.describe('Whether invoices charge this method.'), z.meta({ examples: [true] })),
228
+ id: z
229
+ .string()
230
+ .check(
231
+ z.describe('The payment method id (`pm_…`).'),
232
+ z.meta({ examples: ['pm_1NVChw2eZvKYlo2CHxiM5E2N'] }),
233
+ ),
234
+ provider: z
235
+ .literal('stripe')
236
+ .check(
237
+ z.describe('Payment provider; `stripe` only today.'),
238
+ z.meta({ examples: ['stripe'] }),
239
+ ),
240
+ type: z
241
+ .string()
242
+ .check(
243
+ z.describe('Method type (e.g. `card`, `us_bank_account`).'),
244
+ z.meta({ examples: ['card'] }),
245
+ ),
246
+ }),
247
+ 'A payment method on file.',
248
+ ),
249
+ 'BillingPaymentMethod',
232
250
  )
233
251
 
234
252
  /** An organization's payment methods. */
235
- export const PaymentMethods = Schema.describe(
236
- z.object({
237
- data: z.array(PaymentMethod).check(z.describe('Payment methods on file, newest first.')),
238
- }),
239
- "An organization's payment methods.",
253
+ export const PaymentMethods = OpenApi.component(
254
+ Schema.describe(
255
+ z.object({
256
+ data: z
257
+ .array(PaymentMethod)
258
+ .check(z.describe('Payment methods on file, newest first.'), z.meta({ examples: [[]] })),
259
+ }),
260
+ "An organization's payment methods.",
261
+ ),
262
+ 'BillingPaymentMethodList',
240
263
  )
241
264
  }
242
265
 
@@ -261,7 +284,14 @@ export function billing() {
261
284
  operationId: 'getBilling',
262
285
  responses: OpenApi.responses({
263
286
  errors: {
264
- 404: 'No accessible organization was found for this id.',
287
+ 400: {
288
+ codes: ['param_invalid', 'query_invalid'],
289
+ description: 'Malformed API key, invalid path, or invalid query.',
290
+ },
291
+ 404: {
292
+ codes: ['organization_not_found'],
293
+ description: 'No accessible organization was found for this id.',
294
+ },
265
295
  },
266
296
  success: { description: "The organization's billing state.", schema: schema.Billing },
267
297
  }),
@@ -314,8 +344,14 @@ export function billing() {
314
344
  operationId: 'updateBilling',
315
345
  responses: OpenApi.responses({
316
346
  errors: {
317
- 403: 'Requires the owner role.',
318
- 404: 'No accessible organization was found for this id.',
347
+ 400: {
348
+ codes: ['body_invalid', 'param_invalid', 'query_invalid'],
349
+ description: 'Malformed API key, invalid path, invalid query, or invalid body.',
350
+ },
351
+ 404: {
352
+ codes: ['organization_not_found'],
353
+ description: 'No accessible organization was found for this id.',
354
+ },
319
355
  },
320
356
  success: {
321
357
  description: "The organization's updated billing state.",
@@ -328,6 +364,7 @@ export function billing() {
328
364
  async (c) => {
329
365
  if (Auth.narrowAccess) return Auth.accessError(c)
330
366
  if (Auth.narrowScope) return Auth.ensureOrgError(c)
367
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
331
368
  if (OpenApi.narrowValidation)
332
369
  return OpenApi.validationError(c, {
333
370
  code: 'param_invalid',
@@ -393,12 +430,22 @@ export function billing() {
393
430
  operationId: 'createStripeCheckout',
394
431
  responses: OpenApi.responses({
395
432
  errors: {
433
+ 400: {
434
+ codes: ['param_invalid', 'query_invalid'],
435
+ description: 'Malformed API key, invalid path, or invalid query.',
436
+ },
396
437
  403: {
397
- codes: ['api_key_forbidden', 'billing_source_disabled', 'forbidden'],
438
+ codes: ['billing_source_disabled'],
398
439
  description: 'Requires the owner role and Stripe billing enabled.',
399
440
  },
400
- 404: 'No accessible organization was found for this id.',
401
- 501: 'Billing is not configured on this deployment.',
441
+ 404: {
442
+ codes: ['organization_not_found'],
443
+ description: 'No accessible organization was found for this id.',
444
+ },
445
+ 501: {
446
+ codes: ['billing_unconfigured'],
447
+ description: 'Billing is not configured on this deployment.',
448
+ },
402
449
  },
403
450
  success: {
404
451
  description: 'A Stripe Checkout (setup mode) session for attaching a payment method.',
@@ -485,9 +532,18 @@ export function billing() {
485
532
  operationId: 'createStripeManage',
486
533
  responses: OpenApi.responses({
487
534
  errors: {
488
- 403: 'Requires the owner role.',
489
- 404: 'No accessible organization, or no billing to manage yet.',
490
- 501: 'Billing is not configured on this deployment.',
535
+ 400: {
536
+ codes: ['param_invalid', 'query_invalid'],
537
+ description: 'Malformed API key, invalid path, or invalid query.',
538
+ },
539
+ 404: {
540
+ codes: ['billing_not_found', 'organization_not_found'],
541
+ description: 'No accessible organization or billing account was found.',
542
+ },
543
+ 501: {
544
+ codes: ['billing_unconfigured'],
545
+ description: 'Billing is not configured on this deployment.',
546
+ },
491
547
  },
492
548
  success: {
493
549
  description: 'A Stripe billing-portal session for managing payment methods and invoices.', // prettier-ignore
@@ -500,6 +556,7 @@ export function billing() {
500
556
  async (c) => {
501
557
  if (Auth.narrowAccess) return Auth.accessError(c)
502
558
  if (Auth.narrowScope) return Auth.ensureOrgError(c)
559
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
503
560
  if (OpenApi.narrowValidation)
504
561
  return OpenApi.validationError(c, {
505
562
  code: 'param_invalid',
@@ -548,8 +605,18 @@ export function billing() {
548
605
  operationId: 'getBillingPaymentMethods',
549
606
  responses: OpenApi.responses({
550
607
  errors: {
551
- 404: 'No accessible organization was found for this id.',
552
- 501: 'Billing is not configured on this deployment.',
608
+ 400: {
609
+ codes: ['param_invalid', 'query_invalid'],
610
+ description: 'Malformed API key, invalid path, or invalid query.',
611
+ },
612
+ 404: {
613
+ codes: ['organization_not_found'],
614
+ description: 'No accessible organization was found for this id.',
615
+ },
616
+ 501: {
617
+ codes: ['billing_unconfigured'],
618
+ description: 'Billing is not configured on this deployment.',
619
+ },
553
620
  },
554
621
  success: {
555
622
  description: "The organization's payment methods.",
@@ -634,9 +701,18 @@ export function billing() {
634
701
  operationId: 'deleteBillingPaymentMethod',
635
702
  responses: OpenApi.responses({
636
703
  errors: {
637
- 403: 'Requires the owner role.',
638
- 404: 'No accessible organization, billing, or payment method for this id.',
639
- 501: 'Billing is not configured on this deployment.',
704
+ 400: {
705
+ codes: ['param_invalid', 'query_invalid'],
706
+ description: 'Malformed API key, invalid path, or invalid query.',
707
+ },
708
+ 404: {
709
+ codes: ['billing_not_found', 'organization_not_found', 'payment_method_not_found'],
710
+ description: 'No accessible organization, billing account, or payment method was found.', // prettier-ignore
711
+ },
712
+ 501: {
713
+ codes: ['billing_unconfigured'],
714
+ description: 'Billing is not configured on this deployment.',
715
+ },
640
716
  },
641
717
  success: {
642
718
  description: "The organization's updated billing state.",
@@ -649,6 +725,7 @@ export function billing() {
649
725
  async (c) => {
650
726
  if (Auth.narrowAccess) return Auth.accessError(c)
651
727
  if (Auth.narrowScope) return Auth.ensureOrgError(c)
728
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
652
729
  if (OpenApi.narrowValidation)
653
730
  return OpenApi.validationError(c, {
654
731
  code: 'param_invalid',
@@ -28,6 +28,45 @@ async function organization(app: ReturnType<typeof createApp>, cookie: string) {
28
28
  return TestApp.json(response, Orgs.schema.Organization)
29
29
  }
30
30
 
31
+ test('publishes a generator-ready OpenAPI contract', async () => {
32
+ const spec = await (await createApp().request('/openapi.json')).json()
33
+ const operation = spec.paths['/v1/orgs/{orgId}/faucet'].post
34
+
35
+ expect({
36
+ amountExamples: spec.components.schemas.FaucetFundedToken.properties.amount.examples,
37
+ components: [
38
+ 'FaucetFundedToken',
39
+ 'FaucetToken',
40
+ 'FundTestnetAccountRequest',
41
+ 'FundTestnetAccountResponse',
42
+ ].filter((name) => spec.components.schemas[name]),
43
+ errors: {
44
+ 400: operation.responses[400].content['application/json'].schema,
45
+ 404: operation.responses[404].content['application/json'].schema,
46
+ 429: operation.responses[429].content['application/json'].schema,
47
+ },
48
+ operationId: operation.operationId,
49
+ request: operation.requestBody.content['application/json'].schema,
50
+ response: operation.responses[200].content['application/json'].schema,
51
+ }).toEqual({
52
+ amountExamples: [{ baseUnits: '1000000000', currency: 'USD', decimals: 6, formatted: '1000' }],
53
+ components: [
54
+ 'FaucetFundedToken',
55
+ 'FaucetToken',
56
+ 'FundTestnetAccountRequest',
57
+ 'FundTestnetAccountResponse',
58
+ ],
59
+ errors: {
60
+ 400: { $ref: '#/components/schemas/ApiKeyMalformedOrBodyInvalidOrParamInvalidError' },
61
+ 404: { $ref: '#/components/schemas/OrganizationNotFoundError' },
62
+ 429: { $ref: '#/components/schemas/RateLimitExceededError' },
63
+ },
64
+ operationId: 'fundTestnetAccount',
65
+ request: { $ref: '#/components/schemas/FundTestnetAccountRequest' },
66
+ response: { $ref: '#/components/schemas/FundTestnetAccountResponse' },
67
+ })
68
+ })
69
+
31
70
  describe('faucet', () => {
32
71
  test('funds a member account and rate limits repeated funding', async () => {
33
72
  const app = createApp()