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
@@ -25,41 +25,44 @@ export namespace schema {
25
25
  )
26
26
 
27
27
  /** One project: an app or integration within an organization. */
28
- export const Project = Schema.describe(
29
- z.object({
30
- createdAt: z
31
- .string()
32
- .check(
33
- z.describe('When the project was created (ISO 8601).'),
34
- z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
35
- ),
36
- environments: z.array(z.enum(environments)).check(
37
- z.describe('Environments available to this project: sandbox (testnet) and production (mainnet).'), // prettier-ignore
38
- z.meta({ examples: [[...environments]] }),
39
- ),
40
- id: z
41
- .string()
42
- .check(
43
- z.describe('Opaque project id (`prj_…`).'),
44
- z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
45
- ),
46
- name: z
47
- .string()
48
- .check(z.describe('Human-readable project name.'), z.meta({ examples: ['Checkout'] })),
49
- orgId: z
50
- .string()
51
- .check(
52
- z.describe('Owning organization id (`org_…`).'),
53
- z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
54
- ),
55
- updatedAt: z
56
- .string()
57
- .check(
58
- z.describe('When the project was last updated (ISO 8601).'),
59
- z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
28
+ export const Project = OpenApi.component(
29
+ Schema.describe(
30
+ z.object({
31
+ createdAt: z.iso
32
+ .datetime()
33
+ .check(
34
+ z.describe('When the project was created (ISO 8601).'),
35
+ z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
36
+ ),
37
+ environments: z.array(z.enum(environments)).check(
38
+ z.describe('Environments available to this project: sandbox (testnet) and production (mainnet).'), // prettier-ignore
39
+ z.meta({ examples: [[...environments]] }),
60
40
  ),
61
- }),
62
- 'A project: an app or integration within an organization.',
41
+ id: z
42
+ .string()
43
+ .check(
44
+ z.describe('Opaque project id (`prj_…`).'),
45
+ z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
46
+ ),
47
+ name: z
48
+ .string()
49
+ .check(z.describe('Human-readable project name.'), z.meta({ examples: ['Checkout'] })),
50
+ orgId: z
51
+ .string()
52
+ .check(
53
+ z.describe('Owning organization id (`org_…`).'),
54
+ z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
55
+ ),
56
+ updatedAt: z.iso
57
+ .datetime()
58
+ .check(
59
+ z.describe('When the project was last updated (ISO 8601).'),
60
+ z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
61
+ ),
62
+ }),
63
+ 'A project: an app or integration within an organization.',
64
+ ),
65
+ 'Project',
63
66
  )
64
67
 
65
68
  /** Path parameters addressing an organization's project collection. */
@@ -92,34 +95,47 @@ export namespace schema {
92
95
  })
93
96
  .check(z.describe('Path parameters for one project.'))
94
97
 
95
- /** Request body creating or renaming a project. */
96
- export const ProjectBody = z
97
- .object({ name })
98
- .check(z.describe('Fields for creating or renaming a project.'))
98
+ /** Request body creating a project. */
99
+ export const CreateProjectRequest = OpenApi.component(
100
+ z.object({ name }).check(z.describe('Fields for creating a project.')),
101
+ 'CreateProjectRequest',
102
+ )
103
+
104
+ /** Request body updating a project. */
105
+ export const UpdateProjectRequest = OpenApi.component(
106
+ z.object({ name }).check(z.describe('Fields for updating a project.')),
107
+ 'UpdateProjectRequest',
108
+ )
99
109
 
100
110
  /** Schemas for the deleteProject operation. */
101
111
  export namespace deleteProject {
102
112
  /** Confirmation that the project was deleted. */
103
- export const Response = z
104
- .object({
105
- id: z
106
- .string()
107
- .check(
108
- z.describe('ID of the project that was deleted.'),
109
- z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
110
- ),
111
- })
112
- .check(z.describe('Confirmation that the project was deleted.'))
113
+ export const Response = OpenApi.component(
114
+ z
115
+ .object({
116
+ id: z
117
+ .string()
118
+ .check(
119
+ z.describe('ID of the project that was deleted.'),
120
+ z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
121
+ ),
122
+ })
123
+ .check(z.describe('Confirmation that the project was deleted.')),
124
+ 'DeleteProjectResponse',
125
+ )
113
126
  }
114
127
 
115
128
  /** Schemas for the listProjects operation. */
116
129
  export namespace listProjects {
117
130
  /** Non-paginated list of an organization's projects. */
118
- export const Response = Schema.describe(
119
- z.object({
120
- data: z.array(Project).check(z.describe('The projects, newest first.')),
121
- }),
122
- "A non-paginated list of an organization's projects.",
131
+ export const Response = OpenApi.component(
132
+ Schema.describe(
133
+ z.object({
134
+ data: z.array(Project).check(z.describe('The projects, newest first.')),
135
+ }),
136
+ "A non-paginated list of an organization's projects.",
137
+ ),
138
+ 'ProjectList',
123
139
  )
124
140
  }
125
141
  }
@@ -140,7 +156,16 @@ export function projects() {
140
156
  OpenApi.describeRoute({
141
157
  operationId: 'listProjects',
142
158
  responses: OpenApi.responses({
143
- errors: { 404: 'No accessible organization was found for this id.' },
159
+ errors: {
160
+ 400: {
161
+ codes: ['param_invalid'],
162
+ description: 'Malformed API key or invalid path parameters.',
163
+ },
164
+ 404: {
165
+ codes: ['organization_not_found'],
166
+ description: 'No accessible organization was found for this id.',
167
+ },
168
+ },
144
169
  success: {
145
170
  description: "The organization's projects, newest first.",
146
171
  schema: schema.listProjects.Response,
@@ -180,14 +205,23 @@ export function projects() {
180
205
  code: 'param_invalid',
181
206
  message: 'Check the path parameters and try again.',
182
207
  }),
183
- OpenApi.validate('json', schema.ProjectBody, {
208
+ OpenApi.validate('json', schema.CreateProjectRequest, {
184
209
  code: 'body_invalid',
185
210
  message: 'Check the request body and try again.',
186
211
  }),
187
212
  OpenApi.describeRoute({
188
213
  operationId: 'createProject',
189
214
  responses: OpenApi.responses({
190
- errors: { 404: 'No accessible organization was found for this id.' },
215
+ errors: {
216
+ 400: {
217
+ codes: ['body_invalid', 'param_invalid'],
218
+ description: 'Malformed API key, invalid path parameters, or invalid request body.',
219
+ },
220
+ 404: {
221
+ codes: ['organization_not_found'],
222
+ description: 'No accessible organization was found for this id.',
223
+ },
224
+ },
191
225
  success: { description: 'The created project.', schema: schema.Project },
192
226
  }),
193
227
  summary: 'Create project',
@@ -196,6 +230,7 @@ export function projects() {
196
230
  async (c) => {
197
231
  if (Auth.narrowAccess) return Auth.accessError(c)
198
232
  if (Auth.narrowScope) return Auth.ensureOrgError(c)
233
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
199
234
  if (OpenApi.narrowValidation)
200
235
  return OpenApi.validationError(c, {
201
236
  code: 'param_invalid',
@@ -229,7 +264,16 @@ export function projects() {
229
264
  OpenApi.describeRoute({
230
265
  operationId: 'getProject',
231
266
  responses: OpenApi.responses({
232
- errors: { 404: 'No accessible project was found for this id.' },
267
+ errors: {
268
+ 400: {
269
+ codes: ['param_invalid'],
270
+ description: 'Malformed API key or invalid path parameters.',
271
+ },
272
+ 404: {
273
+ codes: ['organization_not_found', 'project_not_found'],
274
+ description: 'No accessible project was found for this id.',
275
+ },
276
+ },
233
277
  success: { description: 'One project.', schema: schema.Project },
234
278
  }),
235
279
  summary: 'Get project',
@@ -256,14 +300,23 @@ export function projects() {
256
300
  code: 'param_invalid',
257
301
  message: 'Check the path parameters and try again.',
258
302
  }),
259
- OpenApi.validate('json', schema.ProjectBody, {
303
+ OpenApi.validate('json', schema.UpdateProjectRequest, {
260
304
  code: 'body_invalid',
261
305
  message: 'Check the request body and try again.',
262
306
  }),
263
307
  OpenApi.describeRoute({
264
308
  operationId: 'updateProject',
265
309
  responses: OpenApi.responses({
266
- errors: { 404: 'No accessible project was found for this id.' },
310
+ errors: {
311
+ 400: {
312
+ codes: ['body_invalid', 'param_invalid'],
313
+ description: 'Malformed API key, invalid path parameters, or invalid request body.',
314
+ },
315
+ 404: {
316
+ codes: ['organization_not_found', 'project_not_found'],
317
+ description: 'No accessible project was found for this id.',
318
+ },
319
+ },
267
320
  success: { description: 'The updated project.', schema: schema.Project },
268
321
  }),
269
322
  summary: 'Update project',
@@ -282,6 +335,7 @@ export function projects() {
282
335
  message: 'Check the request body and try again.',
283
336
  })
284
337
  if (Auth.narrowScope) return Auth.ensureProjectError(c)
338
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
285
339
 
286
340
  const body = c.req.valid('json')
287
341
  const db = Db.get(c.get('db'))
@@ -306,7 +360,16 @@ export function projects() {
306
360
  OpenApi.describeRoute({
307
361
  operationId: 'deleteProject',
308
362
  responses: OpenApi.responses({
309
- errors: { 404: 'No accessible project was found for this id.' },
363
+ errors: {
364
+ 400: {
365
+ codes: ['param_invalid'],
366
+ description: 'Malformed API key or invalid path parameters.',
367
+ },
368
+ 404: {
369
+ codes: ['organization_not_found', 'project_not_found'],
370
+ description: 'No accessible project was found for this id.',
371
+ },
372
+ },
310
373
  success: {
311
374
  description: 'Confirmation that the project was deleted.',
312
375
  schema: schema.deleteProject.Response,
@@ -318,6 +381,7 @@ export function projects() {
318
381
  async (c) => {
319
382
  if (Auth.narrowAccess) return Auth.accessError(c)
320
383
  if (Auth.narrowScope) return Auth.ensureProjectError(c)
384
+ if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
321
385
  if (OpenApi.narrowValidation)
322
386
  return OpenApi.validationError(c, {
323
387
  code: 'param_invalid',
@@ -2,7 +2,51 @@ import * as Scope from '../../../Scope.js'
2
2
  import * as TestApp from '../../../../test/App.js'
3
3
  import * as Scopes from './scopes.js'
4
4
 
5
+ test('publishes a generator-ready OpenAPI contract', async () => {
6
+ const spec = await (await TestApp.create().request('/openapi.json')).json()
7
+ const operation = spec.paths['/v1/scopes'].get
8
+
9
+ expect(spec.components.schemas.ScopeList.properties.data.examples).toEqual([[]])
10
+
11
+ expect({
12
+ components: ['Scope', 'ScopeList'].filter((name) => spec.components.schemas[name]),
13
+ errors: {
14
+ 400: operation.responses[400].content['application/json'].schema,
15
+ 403: operation.responses[403].content['application/json'].schema,
16
+ },
17
+ operationId: operation.operationId,
18
+ response: operation.responses[200].content['application/json'].schema,
19
+ }).toMatchInlineSnapshot(`
20
+ {
21
+ "components": [
22
+ "Scope",
23
+ "ScopeList",
24
+ ],
25
+ "errors": {
26
+ "400": {
27
+ "$ref": "#/components/schemas/ApiKeyMalformedError",
28
+ },
29
+ "403": {
30
+ "$ref": "#/components/schemas/ForbiddenError",
31
+ },
32
+ },
33
+ "operationId": "getScopes",
34
+ "response": {
35
+ "$ref": "#/components/schemas/ScopeList",
36
+ },
37
+ }
38
+ `)
39
+ })
40
+
5
41
  describe('scopes', () => {
42
+ test('rejects malformed API key credentials', async () => {
43
+ const response = await TestApp.create().request('/v1/scopes', {
44
+ headers: { authorization: 'Basic wrong' },
45
+ })
46
+ expect(response.status).toBe(400)
47
+ expect(await response.json()).toMatchObject({ error: { code: 'api_key_malformed' } })
48
+ })
49
+
6
50
  test('lists the scope catalog without authentication (public catalog)', async () => {
7
51
  const app = TestApp.create()
8
52
  const response = await app.request('/v1/scopes')
@@ -12,37 +12,45 @@ export namespace schema {
12
12
  /** Schemas for the getScopes operation. */
13
13
  export namespace getScopes {
14
14
  /** A single issuable API-key scope. */
15
- export const Entry = z
16
- .object({
17
- description: z
18
- .string()
19
- .check(
20
- z.describe('Human-readable explanation of what the scope grants.'),
21
- z.meta({ examples: ['Read webhook subscriptions.'] }),
22
- ),
23
- scope: z
24
- .string()
25
- .check(
26
- z.describe(
27
- 'Scope identifier used in API-key grants and route policies. Zone templates carry a concrete chain id and access level in grants.',
15
+ export const Entry = OpenApi.component(
16
+ z
17
+ .object({
18
+ description: z
19
+ .string()
20
+ .check(
21
+ z.describe('Human-readable explanation of what the scope grants.'),
22
+ z.meta({ examples: ['Read webhook subscriptions.'] }),
28
23
  ),
29
- z.meta({ examples: ['data:read'] }),
30
- ),
31
- selfServe: z
32
- .boolean()
33
- .check(
34
- z.describe('Whether an eligible session may self-mint this scope.'),
35
- z.meta({ examples: [true] }),
36
- ),
37
- })
38
- .check(z.describe('A single issuable API-key scope.'))
24
+ scope: z
25
+ .string()
26
+ .check(
27
+ z.describe(
28
+ 'Scope identifier used in API-key grants and route policies. Zone templates carry a concrete chain id and access level in grants.',
29
+ ),
30
+ z.meta({ examples: ['data:read'] }),
31
+ ),
32
+ selfServe: z
33
+ .boolean()
34
+ .check(
35
+ z.describe('Whether an eligible session may self-mint this scope.'),
36
+ z.meta({ examples: [true] }),
37
+ ),
38
+ })
39
+ .check(z.describe('A single issuable API-key scope.')),
40
+ 'Scope',
41
+ )
39
42
 
40
43
  /** Response body for the scope catalog. */
41
- export const Response = z
42
- .object({
43
- data: z.array(Entry).check(z.describe('Issuable API-key scopes.')),
44
- })
45
- .check(z.describe('Response body for the scope catalog.'))
44
+ export const Response = OpenApi.component(
45
+ z
46
+ .object({
47
+ data: z
48
+ .array(Entry)
49
+ .check(z.describe('Issuable API-key scopes.'), z.meta({ examples: [[]] })),
50
+ })
51
+ .check(z.describe('Response body for the scope catalog.')),
52
+ 'ScopeList',
53
+ )
46
54
  }
47
55
  }
48
56
 
@@ -59,6 +67,7 @@ export function scopes() {
59
67
  description: 'See which scopes can be granted to API keys.',
60
68
  operationId: 'getScopes',
61
69
  responses: OpenApi.responses({
70
+ errors: { 400: { codes: [], description: 'Malformed API key.' } },
62
71
  success: { description: 'Issuable scope catalog.', schema: schema.getScopes.Response },
63
72
  }),
64
73
  summary: 'List scopes',
@@ -124,6 +124,98 @@ const emptyUsage = {
124
124
 
125
125
  afterEach(() => vi.useRealTimers())
126
126
 
127
+ test('publishes generator-ready OpenAPI contracts', async () => {
128
+ const spec = await (await createApp().request('/openapi.json')).json()
129
+ const requests = spec.paths['/v1/orgs/{orgId}/usage/requests'].get
130
+ const sponsorships = spec.paths['/v1/orgs/{orgId}/usage/sponsorships'].get
131
+
132
+ expect({
133
+ components: [
134
+ 'RequestUsage',
135
+ 'RequestUsageByKey',
136
+ 'RequestUsageByRoute',
137
+ 'RequestUsageByStatus',
138
+ 'RequestUsageSeriesPoint',
139
+ 'RequestUsageTotals',
140
+ 'SponsorshipUsage',
141
+ 'SponsorshipUsageBucket',
142
+ ].filter((name) => spec.components.schemas[name]),
143
+ requests: {
144
+ errors: {
145
+ 400: requests.responses[400].content['application/json'].schema,
146
+ 404: requests.responses[404].content['application/json'].schema,
147
+ 501: requests.responses[501].content['application/json'].schema,
148
+ },
149
+ operationId: requests.operationId,
150
+ response: requests.responses[200].content['application/json'].schema,
151
+ },
152
+ sponsorships: {
153
+ errors: {
154
+ 400: sponsorships.responses[400].content['application/json'].schema,
155
+ 404: sponsorships.responses[404].content['application/json'].schema,
156
+ },
157
+ operationId: sponsorships.operationId,
158
+ response: sponsorships.responses[200].content['application/json'].schema,
159
+ },
160
+ timestamps: {
161
+ requestFrom: spec.components.schemas.RequestUsage.properties.from.format,
162
+ requestPoint: spec.components.schemas.RequestUsageSeriesPoint.properties.time.format,
163
+ requestTo: spec.components.schemas.RequestUsage.properties.to.format,
164
+ sponsorship: spec.components.schemas.SponsorshipUsageBucket.properties.timestamp.format,
165
+ },
166
+ }).toMatchInlineSnapshot(`
167
+ {
168
+ "components": [
169
+ "RequestUsage",
170
+ "RequestUsageByKey",
171
+ "RequestUsageByRoute",
172
+ "RequestUsageByStatus",
173
+ "RequestUsageSeriesPoint",
174
+ "RequestUsageTotals",
175
+ "SponsorshipUsage",
176
+ "SponsorshipUsageBucket",
177
+ ],
178
+ "requests": {
179
+ "errors": {
180
+ "400": {
181
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
182
+ },
183
+ "404": {
184
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
185
+ },
186
+ "501": {
187
+ "$ref": "#/components/schemas/AnalyticsUnconfiguredError",
188
+ },
189
+ },
190
+ "operationId": "getRequestUsage",
191
+ "response": {
192
+ "$ref": "#/components/schemas/RequestUsage",
193
+ },
194
+ },
195
+ "sponsorships": {
196
+ "errors": {
197
+ "400": {
198
+ "$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
199
+ },
200
+ "404": {
201
+ "$ref": "#/components/schemas/OrganizationNotFoundError",
202
+ },
203
+ },
204
+ "operationId": "getSponsorshipUsage",
205
+ "response": {
206
+ "$ref": "#/components/schemas/SponsorshipUsage",
207
+ },
208
+ },
209
+ "timestamps": {
210
+ "requestFrom": "date-time",
211
+ "requestPoint": "date-time",
212
+ "requestTo": "date-time",
213
+ "sponsorship": "date-time",
214
+ },
215
+ }
216
+ `)
217
+ })
218
+
127
219
  describe('GET /orgs/:orgId/usage/requests', () => {
128
220
  test('scopes to one project with environment-filtered attribution and legacy key ids', async () => {
129
221
  vi.useFakeTimers({ now: new Date('2026-02-01T00:00:00.000Z') })