tapimo 0.7.1 → 0.8.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 (786) hide show
  1. package/README.md +10 -7
  2. package/dist/ApiKey.d.ts +3 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +10 -0
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +29 -8
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +24 -5
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +20680 -15487
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +250 -129
  13. package/dist/App.js.map +1 -1
  14. package/dist/Assets.d.ts +10 -0
  15. package/dist/Assets.d.ts.map +1 -1
  16. package/dist/Assets.js +17 -4
  17. package/dist/Assets.js.map +1 -1
  18. package/dist/Scope.d.ts +19 -8
  19. package/dist/Scope.d.ts.map +1 -1
  20. package/dist/Scope.js +25 -9
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/Webhooks.d.ts +1 -1
  23. package/dist/admin/App.d.ts +667 -76
  24. package/dist/admin/App.d.ts.map +1 -1
  25. package/dist/admin/App.js +12 -2
  26. package/dist/admin/App.js.map +1 -1
  27. package/dist/admin/apps/api-keys.d.ts +107 -11
  28. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  29. package/dist/admin/apps/api-keys.js +145 -32
  30. package/dist/admin/apps/api-keys.js.map +1 -1
  31. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  32. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  33. package/dist/admin/apps/earn-vaults.js +409 -0
  34. package/dist/admin/apps/earn-vaults.js.map +1 -0
  35. package/dist/admin/apps/organizations.d.ts +2 -0
  36. package/dist/admin/apps/organizations.d.ts.map +1 -1
  37. package/dist/admin/apps/verified-tokens.d.ts +74 -74
  38. package/dist/admin/ui.generated.d.ts +1 -1
  39. package/dist/admin/ui.generated.d.ts.map +1 -1
  40. package/dist/admin/ui.generated.js +99 -43
  41. package/dist/admin/ui.generated.js.map +1 -1
  42. package/dist/analytics/Analytics.d.ts +4 -0
  43. package/dist/analytics/Analytics.d.ts.map +1 -1
  44. package/dist/analytics/Analytics.js +21 -2
  45. package/dist/analytics/Analytics.js.map +1 -1
  46. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  47. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  48. package/dist/analytics/tables/requestEvents.js +59 -39
  49. package/dist/analytics/tables/requestEvents.js.map +1 -1
  50. package/dist/apps/Zones.d.ts +8335 -0
  51. package/dist/apps/Zones.d.ts.map +1 -0
  52. package/dist/apps/Zones.js +38 -0
  53. package/dist/apps/Zones.js.map +1 -0
  54. package/dist/apps/data/App.d.ts +5666 -3934
  55. package/dist/apps/data/App.d.ts.map +1 -1
  56. package/dist/apps/data/App.js +90 -22
  57. package/dist/apps/data/App.js.map +1 -1
  58. package/dist/apps/data/FxOracle.d.ts +1 -1
  59. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  60. package/dist/apps/data/index.d.ts +0 -1
  61. package/dist/apps/data/index.d.ts.map +1 -1
  62. package/dist/apps/data/index.js +0 -1
  63. package/dist/apps/data/index.js.map +1 -1
  64. package/dist/apps/data/routes/activities.d.ts +56 -56
  65. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  66. package/dist/apps/data/routes/activities.js +130 -65
  67. package/dist/apps/data/routes/activities.js.map +1 -1
  68. package/dist/apps/data/routes/addresses.d.ts +65 -65
  69. package/dist/apps/data/routes/balances.d.ts +14 -14
  70. package/dist/apps/data/routes/balances.js +5 -5
  71. package/dist/apps/data/routes/balances.js.map +1 -1
  72. package/dist/apps/data/routes/blocks.d.ts +39 -39
  73. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  74. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  75. package/dist/apps/data/routes/coingecko.js +62 -35
  76. package/dist/apps/data/routes/coingecko.js.map +1 -1
  77. package/dist/apps/data/routes/earn.d.ts +2574 -0
  78. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  79. package/dist/apps/data/routes/earn.js +1574 -0
  80. package/dist/apps/data/routes/earn.js.map +1 -0
  81. package/dist/apps/data/routes/exchanges.d.ts +1626 -719
  82. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  83. package/dist/apps/data/routes/exchanges.js +656 -193
  84. package/dist/apps/data/routes/exchanges.js.map +1 -1
  85. package/dist/apps/data/routes/fee-amm.d.ts +108 -108
  86. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  87. package/dist/apps/data/routes/fee-amm.js +59 -8
  88. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  89. package/dist/apps/data/routes/indexer.d.ts +35 -35
  90. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  91. package/dist/apps/data/routes/indexer.js +23 -3
  92. package/dist/apps/data/routes/indexer.js.map +1 -1
  93. package/dist/apps/data/routes/receipts.d.ts +33 -33
  94. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  95. package/dist/apps/data/routes/receipts.js +11 -11
  96. package/dist/apps/data/routes/receipts.js.map +1 -1
  97. package/dist/apps/data/routes/rpc.d.ts +6 -6
  98. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  99. package/dist/apps/data/routes/rpc.js +214 -22
  100. package/dist/apps/data/routes/rpc.js.map +1 -1
  101. package/dist/apps/data/routes/tokenlist.d.ts +1 -1
  102. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  103. package/dist/apps/data/routes/tokenlist.js +39 -8
  104. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  105. package/dist/apps/data/routes/tokens.d.ts +115 -87
  106. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  107. package/dist/apps/data/routes/tokens.js +194 -91
  108. package/dist/apps/data/routes/tokens.js.map +1 -1
  109. package/dist/apps/data/routes/transactions.d.ts +54 -54
  110. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  111. package/dist/apps/data/routes/transactions.js +78 -39
  112. package/dist/apps/data/routes/transactions.js.map +1 -1
  113. package/dist/apps/data/routes/transfers.d.ts +76 -27
  114. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  115. package/dist/apps/data/routes/transfers.js +165 -67
  116. package/dist/apps/data/routes/transfers.js.map +1 -1
  117. package/dist/apps/data/routes/valuation.d.ts +42 -42
  118. package/dist/apps/data/routes/valuation.js +2 -2
  119. package/dist/apps/data/routes/valuation.js.map +1 -1
  120. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  121. package/dist/apps/data/routes/webhooks.d.ts +370 -368
  122. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  123. package/dist/apps/data/routes/webhooks.js +161 -59
  124. package/dist/apps/data/routes/webhooks.js.map +1 -1
  125. package/dist/apps/data/routes/zones.d.ts +281 -0
  126. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  127. package/dist/apps/data/routes/zones.js +252 -0
  128. package/dist/apps/data/routes/zones.js.map +1 -0
  129. package/dist/apps/docs/reference.js +6 -5
  130. package/dist/apps/docs/reference.js.map +1 -1
  131. package/dist/apps/funding/Access.d.ts +16 -0
  132. package/dist/apps/funding/Access.d.ts.map +1 -0
  133. package/dist/apps/funding/Access.js +22 -0
  134. package/dist/apps/funding/Access.js.map +1 -0
  135. package/dist/apps/funding/App.d.ts +3183 -0
  136. package/dist/apps/funding/App.d.ts.map +1 -0
  137. package/dist/apps/funding/App.js +46 -0
  138. package/dist/apps/funding/App.js.map +1 -0
  139. package/dist/apps/funding/Inventory.d.ts +5 -0
  140. package/dist/apps/funding/Inventory.d.ts.map +1 -0
  141. package/dist/apps/funding/Inventory.js +25 -0
  142. package/dist/apps/funding/Inventory.js.map +1 -0
  143. package/dist/apps/funding/ProviderAttempts.d.ts +5 -0
  144. package/dist/apps/funding/ProviderAttempts.d.ts.map +1 -0
  145. package/dist/apps/funding/ProviderAttempts.js +24 -0
  146. package/dist/apps/funding/ProviderAttempts.js.map +1 -0
  147. package/dist/apps/funding/index.d.ts +2 -0
  148. package/dist/apps/funding/index.d.ts.map +1 -0
  149. package/dist/apps/funding/index.js +2 -0
  150. package/dist/apps/funding/index.js.map +1 -0
  151. package/dist/apps/funding/routes/chains.d.ts +169 -0
  152. package/dist/apps/funding/routes/chains.d.ts.map +1 -0
  153. package/dist/apps/funding/routes/chains.js +80 -0
  154. package/dist/apps/funding/routes/chains.js.map +1 -0
  155. package/dist/apps/funding/routes/deposit-addresses.d.ts +2388 -0
  156. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -0
  157. package/dist/apps/funding/routes/deposit-addresses.js +860 -0
  158. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -0
  159. package/dist/apps/funding/routes/providers.d.ts +91 -0
  160. package/dist/apps/funding/routes/providers.d.ts.map +1 -0
  161. package/dist/apps/funding/routes/providers.js +56 -0
  162. package/dist/apps/funding/routes/providers.js.map +1 -0
  163. package/dist/apps/{data/routes/funding.d.ts → funding/routes/quotes.d.ts} +26 -396
  164. package/dist/apps/funding/routes/quotes.d.ts.map +1 -0
  165. package/dist/apps/funding/routes/quotes.js +188 -0
  166. package/dist/apps/funding/routes/quotes.js.map +1 -0
  167. package/dist/apps/funding/routes/transfers.d.ts +1999 -0
  168. package/dist/apps/funding/routes/transfers.d.ts.map +1 -0
  169. package/dist/apps/funding/routes/transfers.js +614 -0
  170. package/dist/apps/funding/routes/transfers.js.map +1 -0
  171. package/dist/apps/index.d.ts +3 -1
  172. package/dist/apps/index.d.ts.map +1 -1
  173. package/dist/apps/index.js +3 -1
  174. package/dist/apps/index.js.map +1 -1
  175. package/dist/apps/management/App.d.ts +839 -574
  176. package/dist/apps/management/App.d.ts.map +1 -1
  177. package/dist/apps/management/Billing.d.ts +8 -0
  178. package/dist/apps/management/Billing.d.ts.map +1 -1
  179. package/dist/apps/management/Billing.js +12 -0
  180. package/dist/apps/management/Billing.js.map +1 -1
  181. package/dist/apps/management/Error.d.ts +12 -0
  182. package/dist/apps/management/Error.d.ts.map +1 -0
  183. package/dist/apps/management/Error.js +10 -0
  184. package/dist/apps/management/Error.js.map +1 -0
  185. package/dist/apps/management/routes/api-keys.d.ts +296 -19
  186. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  187. package/dist/apps/management/routes/api-keys.js +77 -9
  188. package/dist/apps/management/routes/api-keys.js.map +1 -1
  189. package/dist/apps/management/routes/billing.d.ts +119 -119
  190. package/dist/apps/management/routes/faucet.d.ts +35 -35
  191. package/dist/apps/management/routes/invitations.d.ts +17 -17
  192. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  193. package/dist/apps/management/routes/invitations.js +4 -10
  194. package/dist/apps/management/routes/invitations.js.map +1 -1
  195. package/dist/apps/management/routes/invite-links.d.ts +38 -38
  196. package/dist/apps/management/routes/me.d.ts +6 -6
  197. package/dist/apps/management/routes/members.d.ts +69 -69
  198. package/dist/apps/management/routes/orgs.d.ts +16 -16
  199. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  200. package/dist/apps/management/routes/orgs.js +2 -8
  201. package/dist/apps/management/routes/orgs.js.map +1 -1
  202. package/dist/apps/management/routes/projects.d.ts +19 -19
  203. package/dist/apps/management/routes/scopes.d.ts +1 -1
  204. package/dist/apps/management/routes/scopes.js +2 -2
  205. package/dist/apps/management/routes/scopes.js.map +1 -1
  206. package/dist/apps/management/routes/usage.d.ts +72 -72
  207. package/dist/apps/management/routes/verified-token-requests.d.ts +18 -18
  208. package/dist/apps/management/routes/webhooks.d.ts +122 -122
  209. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  210. package/dist/apps/management/routes/webhooks.js +15 -3
  211. package/dist/apps/management/routes/webhooks.js.map +1 -1
  212. package/dist/apps/mcp.d.ts +2 -3
  213. package/dist/apps/mcp.d.ts.map +1 -1
  214. package/dist/apps/mcp.js +16 -14
  215. package/dist/apps/mcp.js.map +1 -1
  216. package/dist/apps/metadata.d.ts +4 -0
  217. package/dist/apps/metadata.d.ts.map +1 -1
  218. package/dist/apps/metadata.js +10 -0
  219. package/dist/apps/metadata.js.map +1 -1
  220. package/dist/apps/mpp/App.d.ts +57 -58
  221. package/dist/apps/mpp/App.d.ts.map +1 -1
  222. package/dist/apps/mpp/App.js +192 -27
  223. package/dist/apps/mpp/App.js.map +1 -1
  224. package/dist/apps/mpp/Mpp.d.ts +0 -20
  225. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  226. package/dist/apps/mpp/Mpp.js +0 -24
  227. package/dist/apps/mpp/Mpp.js.map +1 -1
  228. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  229. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  230. package/dist/apps/mpp/internal/Adapter.js +66 -0
  231. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  232. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  233. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  234. package/dist/apps/mpp/internal/Error.js +41 -0
  235. package/dist/apps/mpp/internal/Error.js.map +1 -0
  236. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  237. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  238. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  239. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  240. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  241. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  242. package/dist/apps/mpp/internal/Policy.js +57 -0
  243. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  244. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  245. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  246. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  247. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  248. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  249. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  250. package/dist/apps/mpp/internal/Screening.js +20 -0
  251. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  252. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  253. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  254. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  255. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  256. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  257. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  258. package/dist/apps/mpp/internal/Utils.js +24 -0
  259. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  260. package/dist/apps/relay/App.js +183 -23
  261. package/dist/apps/relay/App.js.map +1 -1
  262. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  263. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  264. package/dist/apps/relay/Sponsorships.js +15 -6
  265. package/dist/apps/relay/Sponsorships.js.map +1 -1
  266. package/dist/cloudflare.d.ts +50 -0
  267. package/dist/cloudflare.d.ts.map +1 -1
  268. package/dist/cloudflare.js +178 -0
  269. package/dist/cloudflare.js.map +1 -1
  270. package/dist/db/Db.d.ts +22 -0
  271. package/dist/db/Db.d.ts.map +1 -1
  272. package/dist/db/Db.js +379 -0
  273. package/dist/db/Db.js.map +1 -1
  274. package/dist/db/Schema.d.ts +933 -1
  275. package/dist/db/Schema.d.ts.map +1 -1
  276. package/dist/db/Schema.js +289 -1
  277. package/dist/db/Schema.js.map +1 -1
  278. package/dist/db/tables/earnVaults.d.ts +68 -0
  279. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  280. package/dist/db/tables/earnVaults.js +72 -0
  281. package/dist/db/tables/earnVaults.js.map +1 -0
  282. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  283. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  284. package/dist/db/tables/fundingCatalog.js +85 -0
  285. package/dist/db/tables/fundingCatalog.js.map +1 -0
  286. package/dist/db/tables/fundingDepositAddresses.d.ts +172 -0
  287. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  288. package/dist/db/tables/fundingDepositAddresses.js +218 -0
  289. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  290. package/dist/db/tables/fundingDepositRequestObservations.d.ts +45 -0
  291. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +1 -0
  292. package/dist/db/tables/fundingDepositRequestObservations.js +46 -0
  293. package/dist/db/tables/fundingDepositRequestObservations.js.map +1 -0
  294. package/dist/db/tables/fundingDeposits.d.ts +171 -0
  295. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  296. package/dist/db/tables/fundingDeposits.js +182 -0
  297. package/dist/db/tables/fundingDeposits.js.map +1 -0
  298. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  299. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  300. package/dist/db/tables/fundingIdempotency.js +103 -0
  301. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  302. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  303. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  304. package/dist/db/tables/fundingTransferEvents.js +18 -0
  305. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  306. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  307. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  308. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  309. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  310. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  311. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  312. package/dist/db/tables/fundingTransfers.js +89 -0
  313. package/dist/db/tables/fundingTransfers.js.map +1 -0
  314. package/dist/db/tables/organizations.d.ts +8 -0
  315. package/dist/db/tables/organizations.d.ts.map +1 -1
  316. package/dist/db/tables/organizations.js +16 -0
  317. package/dist/db/tables/organizations.js.map +1 -1
  318. package/dist/db/tables/projects.d.ts +8 -0
  319. package/dist/db/tables/projects.d.ts.map +1 -1
  320. package/dist/db/tables/projects.js +16 -0
  321. package/dist/db/tables/projects.js.map +1 -1
  322. package/dist/db/tables/requestUsage.d.ts +13 -0
  323. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  324. package/dist/db/tables/requestUsage.js +16 -0
  325. package/dist/db/tables/requestUsage.js.map +1 -1
  326. package/dist/db/tables/sponsoredTransactions.d.ts +2 -2
  327. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  328. package/dist/db/tables/sponsoredTransactions.js +1 -1
  329. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  330. package/dist/db/tables/users.d.ts +8 -0
  331. package/dist/db/tables/users.d.ts.map +1 -1
  332. package/dist/db/tables/users.js +16 -0
  333. package/dist/db/tables/users.js.map +1 -1
  334. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  335. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  336. package/dist/db/tables/verifiedTokens.js +9 -7
  337. package/dist/db/tables/verifiedTokens.js.map +1 -1
  338. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  339. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  340. package/dist/db/tables/webhookSubscriptions.js +24 -3
  341. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  342. package/dist/handlers/relay.js +108 -108
  343. package/dist/handlers/relay.js.map +1 -1
  344. package/dist/internal/Auth.d.ts +37 -11
  345. package/dist/internal/Auth.d.ts.map +1 -1
  346. package/dist/internal/Auth.js +75 -16
  347. package/dist/internal/Auth.js.map +1 -1
  348. package/dist/internal/Cache.d.ts.map +1 -1
  349. package/dist/internal/Cache.js +17 -11
  350. package/dist/internal/Cache.js.map +1 -1
  351. package/dist/internal/Cursor.js +1 -1
  352. package/dist/internal/Cursor.js.map +1 -1
  353. package/dist/internal/EarnRates.d.ts +89 -0
  354. package/dist/internal/EarnRates.d.ts.map +1 -0
  355. package/dist/internal/EarnRates.js +266 -0
  356. package/dist/internal/EarnRates.js.map +1 -0
  357. package/dist/internal/EarnVaults.d.ts +171 -0
  358. package/dist/internal/EarnVaults.d.ts.map +1 -0
  359. package/dist/internal/EarnVaults.js +547 -0
  360. package/dist/internal/EarnVaults.js.map +1 -0
  361. package/dist/internal/EdgeCache.d.ts +10 -3
  362. package/dist/internal/EdgeCache.d.ts.map +1 -1
  363. package/dist/internal/EdgeCache.js +43 -11
  364. package/dist/internal/EdgeCache.js.map +1 -1
  365. package/dist/internal/Id.d.ts +11 -0
  366. package/dist/internal/Id.d.ts.map +1 -1
  367. package/dist/internal/Id.js +13 -0
  368. package/dist/internal/Id.js.map +1 -1
  369. package/dist/internal/Idempotency.d.ts +83 -0
  370. package/dist/internal/Idempotency.d.ts.map +1 -0
  371. package/dist/internal/Idempotency.js +113 -0
  372. package/dist/internal/Idempotency.js.map +1 -0
  373. package/dist/internal/IpAllowlist.d.ts +15 -0
  374. package/dist/internal/IpAllowlist.d.ts.map +1 -0
  375. package/dist/internal/IpAllowlist.js +27 -0
  376. package/dist/internal/IpAllowlist.js.map +1 -0
  377. package/dist/internal/Log.d.ts +64 -9
  378. package/dist/internal/Log.d.ts.map +1 -1
  379. package/dist/internal/Log.js +29 -7
  380. package/dist/internal/Log.js.map +1 -1
  381. package/dist/internal/MetricSink.d.ts.map +1 -1
  382. package/dist/internal/MetricSink.js +47 -1
  383. package/dist/internal/MetricSink.js.map +1 -1
  384. package/dist/internal/OpenApi.d.ts +2 -2
  385. package/dist/internal/OpenApi.d.ts.map +1 -1
  386. package/dist/internal/OpenApi.js +4 -1
  387. package/dist/internal/OpenApi.js.map +1 -1
  388. package/dist/internal/Provider.d.ts +14 -0
  389. package/dist/internal/Provider.d.ts.map +1 -0
  390. package/dist/internal/Provider.js +5 -0
  391. package/dist/internal/Provider.js.map +1 -0
  392. package/dist/internal/Schema.d.ts +6 -1
  393. package/dist/internal/Schema.d.ts.map +1 -1
  394. package/dist/internal/Schema.js +20 -11
  395. package/dist/internal/Schema.js.map +1 -1
  396. package/dist/internal/Store.d.ts +6 -0
  397. package/dist/internal/Store.d.ts.map +1 -1
  398. package/dist/internal/Store.js +35 -0
  399. package/dist/internal/Store.js.map +1 -1
  400. package/dist/internal/Tidx.d.ts +49 -24
  401. package/dist/internal/Tidx.d.ts.map +1 -1
  402. package/dist/internal/Tidx.js +90 -12
  403. package/dist/internal/Tidx.js.map +1 -1
  404. package/dist/internal/Viem.d.ts +90 -65
  405. package/dist/internal/Viem.d.ts.map +1 -1
  406. package/dist/internal/Viem.js +90 -12
  407. package/dist/internal/Viem.js.map +1 -1
  408. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  409. package/dist/internal/WebhookDestination.js +34 -28
  410. package/dist/internal/WebhookDestination.js.map +1 -1
  411. package/dist/internal/Webhooks.d.ts +9 -0
  412. package/dist/internal/Webhooks.d.ts.map +1 -1
  413. package/dist/internal/Webhooks.js +15 -10
  414. package/dist/internal/Webhooks.js.map +1 -1
  415. package/dist/internal/exchange/Provider.d.ts +219 -0
  416. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  417. package/dist/internal/exchange/Provider.js +117 -0
  418. package/dist/internal/exchange/Provider.js.map +1 -0
  419. package/dist/internal/exchange/index.d.ts +2 -0
  420. package/dist/internal/exchange/index.d.ts.map +1 -0
  421. package/dist/internal/exchange/index.js +2 -0
  422. package/dist/internal/exchange/index.js.map +1 -0
  423. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  424. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  425. package/dist/internal/exchange/providers/uniswap.js +553 -0
  426. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  427. package/dist/internal/funding/Action.d.ts +55 -0
  428. package/dist/internal/funding/Action.d.ts.map +1 -0
  429. package/dist/internal/funding/Action.js +74 -0
  430. package/dist/internal/funding/Action.js.map +1 -0
  431. package/dist/internal/funding/Catalog.d.ts +107 -0
  432. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  433. package/dist/internal/funding/Catalog.js +270 -0
  434. package/dist/internal/funding/Catalog.js.map +1 -0
  435. package/dist/internal/funding/Chain.d.ts +76 -0
  436. package/dist/internal/funding/Chain.d.ts.map +1 -0
  437. package/dist/internal/funding/Chain.js +38 -0
  438. package/dist/internal/funding/Chain.js.map +1 -0
  439. package/dist/internal/funding/Deposit.d.ts +408 -0
  440. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  441. package/dist/internal/funding/Deposit.js +318 -0
  442. package/dist/internal/funding/Deposit.js.map +1 -0
  443. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  444. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  445. package/dist/internal/funding/DepositAddress.js +189 -0
  446. package/dist/internal/funding/DepositAddress.js.map +1 -0
  447. package/dist/internal/funding/Evidence.d.ts +48 -0
  448. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  449. package/dist/internal/funding/Evidence.js +315 -0
  450. package/dist/internal/funding/Evidence.js.map +1 -0
  451. package/dist/internal/funding/Provider.d.ts +1288 -0
  452. package/dist/internal/funding/Provider.d.ts.map +1 -0
  453. package/dist/internal/funding/Provider.js +1086 -0
  454. package/dist/internal/funding/Provider.js.map +1 -0
  455. package/dist/internal/funding/Reconciliation.d.ts +127 -0
  456. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  457. package/dist/internal/funding/Reconciliation.js +885 -0
  458. package/dist/internal/funding/Reconciliation.js.map +1 -0
  459. package/dist/internal/funding/Route.d.ts +21 -0
  460. package/dist/internal/funding/Route.d.ts.map +1 -0
  461. package/dist/internal/funding/Route.js +5 -0
  462. package/dist/internal/funding/Route.js.map +1 -0
  463. package/dist/internal/funding/SourceObservation.d.ts +108 -0
  464. package/dist/internal/funding/SourceObservation.d.ts.map +1 -0
  465. package/dist/internal/funding/SourceObservation.js +143 -0
  466. package/dist/internal/funding/SourceObservation.js.map +1 -0
  467. package/dist/internal/funding/Subsidy.d.ts +113 -0
  468. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  469. package/dist/internal/funding/Subsidy.js +138 -0
  470. package/dist/internal/funding/Subsidy.js.map +1 -0
  471. package/dist/internal/funding/Token.d.ts +41 -0
  472. package/dist/internal/funding/Token.d.ts.map +1 -0
  473. package/dist/internal/funding/Token.js +22 -0
  474. package/dist/internal/funding/Token.js.map +1 -0
  475. package/dist/internal/funding/Transfer.d.ts +643 -0
  476. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  477. package/dist/internal/funding/Transfer.js +332 -0
  478. package/dist/internal/funding/Transfer.js.map +1 -0
  479. package/dist/internal/funding/index.d.ts +14 -0
  480. package/dist/internal/funding/index.d.ts.map +1 -0
  481. package/dist/internal/funding/index.js +14 -0
  482. package/dist/internal/funding/index.js.map +1 -0
  483. package/dist/internal/funding/providers/across.d.ts +21 -0
  484. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  485. package/dist/internal/funding/providers/across.js +117 -0
  486. package/dist/internal/funding/providers/across.js.map +1 -0
  487. package/dist/internal/funding/providers/relay.d.ts +88 -0
  488. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  489. package/dist/internal/funding/providers/relay.js +871 -0
  490. package/dist/internal/funding/providers/relay.js.map +1 -0
  491. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  492. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  493. package/dist/internal/funding/providers/rhino.js +116 -0
  494. package/dist/internal/funding/providers/rhino.js.map +1 -0
  495. package/dist/internal/funding/providers/squid.d.ts +19 -0
  496. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  497. package/dist/internal/funding/providers/squid.js +120 -0
  498. package/dist/internal/funding/providers/squid.js.map +1 -0
  499. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  500. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  501. package/dist/internal/funding/providers/symbiosis.js +176 -0
  502. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  503. package/dist/internal/index.d.ts +5 -1
  504. package/dist/internal/index.d.ts.map +1 -1
  505. package/dist/internal/index.js +5 -1
  506. package/dist/internal/index.js.map +1 -1
  507. package/dist/internal/webhookDestinations/url.js +61 -57
  508. package/dist/internal/webhookDestinations/url.js.map +1 -1
  509. package/dist/providers/index.d.ts +43 -0
  510. package/dist/providers/index.d.ts.map +1 -0
  511. package/dist/providers/index.js +19 -0
  512. package/dist/providers/index.js.map +1 -0
  513. package/package.json +10 -5
  514. package/src/ApiKey.test.ts +35 -0
  515. package/src/ApiKey.ts +27 -0
  516. package/src/ApiKeys.test.ts +40 -7
  517. package/src/ApiKeys.ts +46 -10
  518. package/src/App.test.ts +108 -15
  519. package/src/App.ts +296 -138
  520. package/src/Assets.ts +29 -4
  521. package/src/Client.test-d.ts +809 -37
  522. package/src/Scope.test.ts +19 -0
  523. package/src/Scope.ts +28 -11
  524. package/src/Webhooks.test.ts +25 -0
  525. package/src/Webhooks.ts +1 -1
  526. package/src/admin/App.test.ts +9 -2
  527. package/src/admin/App.ts +32 -9
  528. package/src/admin/apps/api-keys.test.ts +190 -22
  529. package/src/admin/apps/api-keys.ts +170 -28
  530. package/src/admin/apps/earn-vaults.test.ts +338 -0
  531. package/src/admin/apps/earn-vaults.ts +572 -0
  532. package/src/admin/apps/scopes.test.ts +16 -1
  533. package/src/admin/ui/plugin.ts +2 -2
  534. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  535. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  536. package/src/admin/ui/src/components/Page.tsx +1 -1
  537. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  538. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  539. package/src/admin/ui/src/lib/client.ts +1 -1
  540. package/src/admin/ui/src/lib/config.ts +1 -1
  541. package/src/admin/ui/src/lib/early-access.ts +8 -9
  542. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  543. package/src/admin/ui/src/lib/format.ts +13 -0
  544. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  545. package/src/admin/ui/src/lib/organizations.ts +7 -1
  546. package/src/admin/ui/src/lib/response.ts +22 -0
  547. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  548. package/src/admin/ui/src/lib/scopes.ts +28 -7
  549. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  550. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  551. package/src/admin/ui/src/router.tsx +2 -2
  552. package/src/admin/ui/src/routes/__root.tsx +9 -8
  553. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  554. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  555. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  556. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  557. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  558. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  559. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  560. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  561. package/src/admin/ui/vite.config.ts +4 -1
  562. package/src/admin/ui.generated.ts +113 -43
  563. package/src/analytics/Analytics.test.ts +69 -10
  564. package/src/analytics/Analytics.ts +24 -1
  565. package/src/analytics/tables/requestEvents.ts +79 -37
  566. package/src/apps/Zones.test.ts +33 -0
  567. package/src/apps/Zones.ts +40 -0
  568. package/src/apps/composition.test.ts +184 -3
  569. package/src/apps/data/App.test.ts +28 -23
  570. package/src/apps/data/App.ts +95 -36
  571. package/src/apps/data/FxOracle.ts +1 -1
  572. package/src/apps/data/index.ts +0 -1
  573. package/src/apps/data/routes/activities.test.ts +82 -6
  574. package/src/apps/data/routes/activities.ts +131 -71
  575. package/src/apps/data/routes/balances.test.ts +50 -37
  576. package/src/apps/data/routes/balances.ts +5 -5
  577. package/src/apps/data/routes/blocks.test.ts +2 -0
  578. package/src/apps/data/routes/coingecko.test.ts +22 -0
  579. package/src/apps/data/routes/coingecko.ts +84 -48
  580. package/src/apps/data/routes/earn.test.ts +1391 -0
  581. package/src/apps/data/routes/earn.ts +2188 -0
  582. package/src/apps/data/routes/exchanges.test.ts +82 -33
  583. package/src/apps/data/routes/exchanges.ts +842 -227
  584. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  585. package/src/apps/data/routes/fee-amm.ts +69 -12
  586. package/src/apps/data/routes/indexer.test.ts +43 -34
  587. package/src/apps/data/routes/indexer.ts +21 -3
  588. package/src/apps/data/routes/receipts.test.ts +5 -3
  589. package/src/apps/data/routes/receipts.ts +13 -11
  590. package/src/apps/data/routes/rpc.test.ts +446 -28
  591. package/src/apps/data/routes/rpc.ts +245 -25
  592. package/src/apps/data/routes/tokenlist.ts +72 -19
  593. package/src/apps/data/routes/tokens.test.ts +6 -8
  594. package/src/apps/data/routes/tokens.ts +258 -86
  595. package/src/apps/data/routes/transactions.test.ts +2 -0
  596. package/src/apps/data/routes/transactions.ts +77 -42
  597. package/src/apps/data/routes/transfers.test.ts +166 -4
  598. package/src/apps/data/routes/transfers.ts +216 -78
  599. package/src/apps/data/routes/valuation.test.ts +62 -9
  600. package/src/apps/data/routes/valuation.ts +2 -2
  601. package/src/apps/data/routes/webhooks.test.ts +386 -43
  602. package/src/apps/data/routes/webhooks.ts +172 -71
  603. package/src/apps/data/routes/zones.test.ts +473 -0
  604. package/src/apps/data/routes/zones.ts +338 -0
  605. package/src/apps/docs/reference.ts +8 -6
  606. package/src/apps/funding/Access.ts +26 -0
  607. package/src/apps/funding/App.test.ts +78 -0
  608. package/src/apps/funding/App.ts +63 -0
  609. package/src/apps/funding/Inventory.ts +30 -0
  610. package/src/apps/funding/ProviderAttempts.ts +26 -0
  611. package/src/apps/funding/index.ts +1 -0
  612. package/src/apps/funding/routes/chains.test.ts +78 -0
  613. package/src/apps/funding/routes/chains.ts +101 -0
  614. package/src/apps/funding/routes/deposit-addresses.test.ts +1628 -0
  615. package/src/apps/funding/routes/deposit-addresses.ts +1015 -0
  616. package/src/apps/funding/routes/providers.test.ts +165 -0
  617. package/src/apps/funding/routes/providers.ts +73 -0
  618. package/src/apps/funding/routes/quotes.test.ts +511 -0
  619. package/src/apps/funding/routes/quotes.ts +205 -0
  620. package/src/apps/funding/routes/transfers.test.ts +1255 -0
  621. package/src/apps/funding/routes/transfers.ts +704 -0
  622. package/src/apps/index.ts +3 -1
  623. package/src/apps/management/Billing.test.ts +29 -0
  624. package/src/apps/management/Billing.ts +23 -0
  625. package/src/apps/management/Error.ts +12 -0
  626. package/src/apps/management/routes/api-keys.test.ts +103 -3
  627. package/src/apps/management/routes/api-keys.ts +98 -10
  628. package/src/apps/management/routes/invitations.ts +4 -11
  629. package/src/apps/management/routes/orgs.ts +2 -9
  630. package/src/apps/management/routes/scopes.test.ts +7 -2
  631. package/src/apps/management/routes/scopes.ts +2 -2
  632. package/src/apps/management/routes/webhooks.test.ts +6 -1
  633. package/src/apps/management/routes/webhooks.ts +15 -3
  634. package/src/apps/mcp.test.ts +17 -2
  635. package/src/apps/mcp.ts +18 -13
  636. package/src/apps/metadata.ts +12 -0
  637. package/src/apps/mpp/App.ts +276 -29
  638. package/src/apps/mpp/Mpp.test.ts +631 -26
  639. package/src/apps/mpp/Mpp.ts +0 -42
  640. package/src/apps/mpp/internal/Adapter.ts +108 -3
  641. package/src/apps/mpp/internal/Error.test.ts +33 -0
  642. package/src/apps/mpp/internal/Error.ts +44 -6
  643. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  644. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  645. package/src/apps/mpp/internal/Policy.test.ts +128 -0
  646. package/src/apps/mpp/internal/Policy.ts +98 -0
  647. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  648. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  649. package/src/apps/mpp/internal/Screening.ts +40 -3
  650. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  651. package/src/apps/mpp/internal/Utils.ts +30 -0
  652. package/src/apps/relay/App.test.ts +493 -62
  653. package/src/apps/relay/App.ts +233 -23
  654. package/src/apps/relay/Sponsorships.test.ts +49 -0
  655. package/src/apps/relay/Sponsorships.ts +18 -6
  656. package/src/cloudflare.ts +279 -0
  657. package/src/db/Db.ts +501 -0
  658. package/src/db/Schema.ts +349 -2
  659. package/src/db/tables/earnVaults.test.ts +185 -0
  660. package/src/db/tables/earnVaults.ts +151 -0
  661. package/src/db/tables/fundingCatalog.test.ts +108 -0
  662. package/src/db/tables/fundingCatalog.ts +157 -0
  663. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  664. package/src/db/tables/fundingDepositAddresses.ts +404 -0
  665. package/src/db/tables/fundingDepositRequestObservations.test.ts +106 -0
  666. package/src/db/tables/fundingDepositRequestObservations.ts +99 -0
  667. package/src/db/tables/fundingDeposits.test.ts +399 -0
  668. package/src/db/tables/fundingDeposits.ts +373 -0
  669. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  670. package/src/db/tables/fundingIdempotency.ts +180 -0
  671. package/src/db/tables/fundingTransferEvents.ts +28 -0
  672. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  673. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  674. package/src/db/tables/fundingTransfers.test.ts +89 -0
  675. package/src/db/tables/fundingTransfers.ts +153 -0
  676. package/src/db/tables/organizations.ts +16 -0
  677. package/src/db/tables/projects.ts +16 -0
  678. package/src/db/tables/requestUsage.ts +23 -0
  679. package/src/db/tables/sponsoredTransactions.test.ts +11 -0
  680. package/src/db/tables/sponsoredTransactions.ts +3 -3
  681. package/src/db/tables/users.ts +16 -0
  682. package/src/db/tables/verifiedTokens.ts +19 -14
  683. package/src/db/tables/webhookSubscriptions.ts +58 -3
  684. package/src/handlers/relay.test.ts +2 -0
  685. package/src/handlers/relay.ts +95 -99
  686. package/src/internal/Auth.test.ts +225 -5
  687. package/src/internal/Auth.ts +109 -20
  688. package/src/internal/Cache.test.ts +37 -3
  689. package/src/internal/Cache.ts +14 -10
  690. package/src/internal/Cursor.test.ts +2 -2
  691. package/src/internal/Cursor.ts +1 -1
  692. package/src/internal/EarnRates.test.ts +125 -0
  693. package/src/internal/EarnRates.ts +409 -0
  694. package/src/internal/EarnVaults.test.ts +195 -0
  695. package/src/internal/EarnVaults.ts +876 -0
  696. package/src/internal/EdgeCache.test.ts +26 -7
  697. package/src/internal/EdgeCache.ts +48 -9
  698. package/src/internal/Id.ts +14 -0
  699. package/src/internal/Idempotency.test.ts +109 -0
  700. package/src/internal/Idempotency.ts +237 -0
  701. package/src/internal/IpAllowlist.test.ts +52 -0
  702. package/src/internal/IpAllowlist.ts +39 -0
  703. package/src/internal/Log.test-d.ts +41 -8
  704. package/src/internal/Log.test.ts +196 -9
  705. package/src/internal/Log.ts +124 -17
  706. package/src/internal/MetricSink.test.ts +244 -4
  707. package/src/internal/MetricSink.ts +51 -1
  708. package/src/internal/OpenApi.ts +4 -1
  709. package/src/internal/Provider.test.ts +17 -0
  710. package/src/internal/Provider.ts +17 -0
  711. package/src/internal/Schema.ts +27 -17
  712. package/src/internal/Store.test.ts +25 -0
  713. package/src/internal/Store.ts +46 -0
  714. package/src/internal/Tidx.local.test.ts +78 -3
  715. package/src/internal/Tidx.test.ts +240 -18
  716. package/src/internal/Tidx.ts +129 -33
  717. package/src/internal/VerifiedTokens.test.ts +15 -0
  718. package/src/internal/Viem.test.ts +198 -17
  719. package/src/internal/Viem.ts +127 -28
  720. package/src/internal/WebhookDestination.ts +25 -23
  721. package/src/internal/Webhooks.test.ts +59 -0
  722. package/src/internal/Webhooks.ts +34 -10
  723. package/src/internal/exchange/Provider.test.ts +216 -0
  724. package/src/internal/exchange/Provider.ts +326 -0
  725. package/src/internal/exchange/index.test.ts +6 -0
  726. package/src/internal/exchange/index.ts +1 -0
  727. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  728. package/src/internal/exchange/providers/uniswap.ts +682 -0
  729. package/src/internal/funding/Action.test.ts +138 -0
  730. package/src/internal/funding/Action.ts +117 -0
  731. package/src/internal/funding/Catalog.test.ts +311 -0
  732. package/src/internal/funding/Catalog.ts +347 -0
  733. package/src/internal/funding/Chain.test.ts +79 -0
  734. package/src/internal/funding/Chain.ts +120 -0
  735. package/src/internal/funding/Deposit.test.ts +26 -0
  736. package/src/internal/funding/Deposit.ts +522 -0
  737. package/src/internal/funding/DepositAddress.test.ts +18 -0
  738. package/src/internal/funding/DepositAddress.ts +312 -0
  739. package/src/internal/funding/Evidence.test.ts +297 -0
  740. package/src/internal/funding/Evidence.ts +425 -0
  741. package/src/internal/funding/Provider.test.ts +1328 -0
  742. package/src/internal/funding/Provider.ts +1911 -0
  743. package/src/internal/funding/Reconciliation.local.test.ts +511 -0
  744. package/src/internal/funding/Reconciliation.test.ts +3037 -0
  745. package/src/internal/funding/Reconciliation.ts +1202 -0
  746. package/src/internal/funding/Route.test.ts +66 -0
  747. package/src/internal/funding/Route.ts +29 -0
  748. package/src/internal/funding/SourceObservation.test.ts +301 -0
  749. package/src/internal/funding/SourceObservation.ts +267 -0
  750. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  751. package/src/internal/funding/Subsidy.test.ts +75 -0
  752. package/src/internal/funding/Subsidy.ts +260 -0
  753. package/src/internal/funding/Token.test.ts +47 -0
  754. package/src/internal/funding/Token.ts +59 -0
  755. package/src/internal/funding/Transfer.test.ts +369 -0
  756. package/src/internal/funding/Transfer.ts +522 -0
  757. package/src/internal/funding/index.test.ts +21 -0
  758. package/src/internal/funding/index.ts +13 -0
  759. package/src/internal/funding/providers/across.ts +149 -0
  760. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  761. package/src/internal/funding/providers/relay.test.ts +564 -0
  762. package/src/internal/funding/providers/relay.ts +1060 -0
  763. package/src/internal/funding/providers/rhino.ts +139 -0
  764. package/src/internal/funding/providers/squid.ts +151 -0
  765. package/src/internal/funding/providers/symbiosis.ts +221 -0
  766. package/src/internal/index.test.ts +5 -1
  767. package/src/internal/index.ts +5 -1
  768. package/src/internal/webhookDestinations/url.ts +49 -45
  769. package/src/providers/index.test.ts +14 -0
  770. package/src/providers/index.ts +54 -0
  771. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  772. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  773. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  774. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  775. package/dist/apps/data/routes/funding.d.ts.map +0 -1
  776. package/dist/apps/data/routes/funding.js +0 -410
  777. package/dist/apps/data/routes/funding.js.map +0 -1
  778. package/dist/internal/FundingQuotes.d.ts +0 -864
  779. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  780. package/dist/internal/FundingQuotes.js +0 -672
  781. package/dist/internal/FundingQuotes.js.map +0 -1
  782. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  783. package/src/apps/data/routes/funding.test.ts +0 -503
  784. package/src/apps/data/routes/funding.ts +0 -604
  785. package/src/internal/FundingQuotes.test.ts +0 -456
  786. package/src/internal/FundingQuotes.ts +0 -944
@@ -0,0 +1,137 @@
1
+ import { Link } from '@tanstack/react-router'
2
+ import type { ComponentProps, FormEventHandler, ReactNode, TextareaHTMLAttributes } from 'react'
3
+ import { Button, Fields, Input, Select } from 'regen-ui'
4
+ import { TriangleAlert } from 'lucide-react'
5
+
6
+ import * as EarnVaults from '../lib/earn-vaults.js'
7
+
8
+ /** Shared form shell for creating and editing verified Earn vaults. */
9
+ export function EarnVaultForm(options: EarnVaultForm.Props) {
10
+ return (
11
+ <form
12
+ className="flex w-full max-w-2xl flex-col border border-border bg-surface"
13
+ onChange={options.onChange}
14
+ onSubmit={options.onSubmit}
15
+ >
16
+ <div className="flex flex-col gap-5 p-5">
17
+ <Fields className="gap-6" variant="default">
18
+ {options.children}
19
+ </Fields>
20
+ {options.error ? <EarnVaultForm.Error>{options.error}</EarnVaultForm.Error> : null}
21
+ </div>
22
+ <div className="flex justify-end gap-2 border-t border-border px-5 py-3">
23
+ <Button render={<Link search={{ chainId: options.chainId }} to="/earn/vaults" />}>
24
+ Cancel
25
+ </Button>
26
+ {options.action}
27
+ </div>
28
+ </form>
29
+ )
30
+ }
31
+
32
+ export namespace EarnVaultForm {
33
+ /** Props for the verified-vault form shell. */
34
+ export type Props = {
35
+ /** Primary form action. */
36
+ action: ReactNode
37
+ /** Selected parent Tempo chain. */
38
+ chainId: EarnVaults.ChainId
39
+ /** Form fields. */
40
+ children: ReactNode
41
+ /** Mutation error shown above the footer. */
42
+ error?: string | undefined
43
+ /** Form change handler. */
44
+ onChange: FormEventHandler<HTMLFormElement>
45
+ /** Form submit handler. */
46
+ onSubmit: FormEventHandler<HTMLFormElement>
47
+ }
48
+
49
+ /** Address input with native Ethereum address validation. */
50
+ export function AddressInput(options: AddressInput.Props) {
51
+ return (
52
+ <Input
53
+ {...options}
54
+ autoCapitalize="off"
55
+ autoComplete="off"
56
+ pattern="0x[a-fA-F0-9]{40}"
57
+ placeholder={options.placeholder ?? '0x…'}
58
+ spellCheck={false}
59
+ />
60
+ )
61
+ }
62
+
63
+ export namespace AddressInput {
64
+ /** Props accepted by an Earn address input. */
65
+ export type Props = ComponentProps<typeof Input>
66
+ }
67
+
68
+ /** Tempo chain selector for verified Earn vaults. */
69
+ export function ChainSelect(options: ChainSelect.Props) {
70
+ return (
71
+ <Select
72
+ aria-label="Earn vault chain"
73
+ className={options.className}
74
+ items={EarnVaults.chains.map((chain) => ({
75
+ label: chain.label,
76
+ value: String(chain.id),
77
+ }))}
78
+ onChange={(value) => options.onChange(Number(value) as EarnVaults.ChainId)}
79
+ value={String(options.value)}
80
+ />
81
+ )
82
+ }
83
+
84
+ export namespace ChainSelect {
85
+ /** Props accepted by the Earn chain selector. */
86
+ export type Props = {
87
+ /** Optional selector width or placement styles. */
88
+ className?: string | undefined
89
+ /** Called when the selected chain changes. */
90
+ onChange: (chainId: EarnVaults.ChainId) => void
91
+ /** Selected parent Tempo chain. */
92
+ value: EarnVaults.ChainId
93
+ }
94
+ }
95
+
96
+ /** Inline mutation error shown above form actions. */
97
+ export function Error(options: Error.Props) {
98
+ return (
99
+ <div
100
+ className="flex items-start gap-3 border border-negative bg-negative-subtle p-3 text-copy-13 text-negative"
101
+ role="alert"
102
+ >
103
+ <TriangleAlert className="mt-0.5 size-4 shrink-0" />
104
+ <p className="whitespace-pre-line">{options.children}</p>
105
+ </div>
106
+ )
107
+ }
108
+
109
+ export namespace Error {
110
+ /** Props accepted by an Earn form error. */
111
+ export type Props = {
112
+ /** Error message. */
113
+ children: ReactNode
114
+ }
115
+ }
116
+
117
+ /** Multi-line field used for descriptions and token lists. */
118
+ export function Textarea({ label, ...options }: Textarea.Props) {
119
+ return (
120
+ <label className="flex min-w-0 flex-col gap-2 text-label-13 text-foreground-secondary">
121
+ {label}
122
+ <textarea
123
+ {...options}
124
+ className="w-full resize-y rounded-body border-2 border-transparent bg-secondary px-3 py-2.5 text-copy-13 text-foreground outline-none placeholder:text-foreground-secondary/50 hover:bg-secondary-hover focus-visible:border-focus focus-visible:bg-secondary-hover"
125
+ />
126
+ </label>
127
+ )
128
+ }
129
+
130
+ export namespace Textarea {
131
+ /** Props accepted by an Earn form textarea. */
132
+ export type Props = TextareaHTMLAttributes<HTMLTextAreaElement> & {
133
+ /** Visible field label. */
134
+ label: string
135
+ }
136
+ }
137
+ }
@@ -2,8 +2,8 @@ import { Bytes, Hash, type Address } from 'ox'
2
2
  import { Identicon } from 'regen-ui'
3
3
  import { LogOut } from 'lucide-react'
4
4
 
5
- import * as Config from '../lib/config'
6
- import { ThemeToggle } from './ThemeToggle'
5
+ import * as Config from '../lib/config.js'
6
+ import { ThemeToggle } from './ThemeToggle.js'
7
7
 
8
8
  /** Mobile-only header profile: identicon + sign-out, shown when the sidebar is hidden. */
9
9
  export function MobileProfile() {
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from 'react'
2
2
  import { cx } from 'regen-ui'
3
3
 
4
- import { MobileProfile } from './MobileProfile'
4
+ import { MobileProfile } from './MobileProfile.js'
5
5
 
6
6
  /** Page header: title, optional description, and an optional right-aligned action. */
7
7
  export function Page(props: {
@@ -1,6 +1,6 @@
1
1
  import { Moon, Sun } from 'lucide-react'
2
2
 
3
- import * as Theme from '../lib/theme'
3
+ import * as Theme from '../lib/theme.js'
4
4
 
5
5
  /** Button that switches between the light and dark color themes. */
6
6
  export function ThemeToggle() {
@@ -2,15 +2,18 @@ import * as ReactQuery from '@tanstack/react-query'
2
2
  import type { InferRequestType, InferResponseType } from 'hono/client'
3
3
  import * as z from 'zod/mini'
4
4
 
5
- import { client } from './client'
5
+ import { client } from './client.js'
6
+ import * as Response from './response.js'
6
7
 
7
8
  /** A single API key record from the list endpoint. */
8
9
  export type ApiKey = InferResponseType<(typeof client)['api-keys']['$get'], 200>['data'][number]
9
10
 
10
11
  /** URL-backed API key filters. */
11
12
  export const search = z.object({
13
+ environment: z.catch(z.optional(z.enum(['production', 'sandbox'])), undefined),
12
14
  orgId: z.catch(z.optional(z.string()), undefined),
13
15
  projectId: z.catch(z.optional(z.string()), undefined),
16
+ query: z.catch(z.optional(z.string()), undefined),
14
17
  })
15
18
 
16
19
  /** API key list filters. */
@@ -50,11 +53,36 @@ export namespace get {
50
53
  /** Provision a new API key. */
51
54
  export namespace provision {
52
55
  export type Input = InferRequestType<(typeof client)['api-keys']['$post']>['json']
53
- export function fn(json: Input) {
54
- return client['api-keys'].$post({ json }).then((r) => {
55
- if (!r.ok) throw new Error('Failed to provision key.')
56
- return r.json()
56
+ export async function fn(json: Input) {
57
+ const response = await client['api-keys'].$post({ json })
58
+ if (!response.ok)
59
+ throw new Error(
60
+ await Response.errorMessage(response, { fallback: 'Failed to provision key.' }),
61
+ )
62
+ return response.json()
63
+ }
64
+ export function useMutation() {
65
+ const queryClient = ReactQuery.useQueryClient()
66
+ return ReactQuery.useMutation({
67
+ mutationFn: fn,
68
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: get.baseKey }),
69
+ })
70
+ }
71
+ }
72
+
73
+ /** Updates API-key display metadata. */
74
+ export namespace update {
75
+ export type Input = InferRequestType<(typeof client)['api-keys'][':id']['$patch']>['json']
76
+ export async function fn(options: { id: string; input: Input }) {
77
+ const response = await client['api-keys'][':id'].$patch({
78
+ json: options.input,
79
+ param: { id: options.id },
57
80
  })
81
+ if (!response.ok)
82
+ throw new Error(
83
+ await Response.errorMessage(response, { fallback: 'Failed to update the API key.' }),
84
+ )
85
+ return response.json()
58
86
  }
59
87
  export function useMutation() {
60
88
  const queryClient = ReactQuery.useQueryClient()
@@ -67,8 +95,10 @@ export namespace provision {
67
95
 
68
96
  /** Revoke an API key by id. */
69
97
  export namespace revoke {
70
- export function fn(id: string) {
71
- return client['api-keys'][':id'].$delete({ param: { id } })
98
+ export async function fn(id: string) {
99
+ const response = await client['api-keys'][':id'].$delete({ param: { id } })
100
+ if (!response.ok) throw new Error('Failed to revoke the API key.')
101
+ return response.json()
72
102
  }
73
103
  export function useMutation() {
74
104
  const queryClient = ReactQuery.useQueryClient()
@@ -1,6 +1,6 @@
1
1
  import { hc } from 'hono/client'
2
2
 
3
- import type { App } from '../../../App'
3
+ import type { App } from '../../../App.js'
4
4
 
5
5
  // Mount root for API calls: the shell injects `<base href="<mount>/">`, so use
6
6
  // it when present. The Vite dev shell has none, so `document.baseURI` would be
@@ -1,6 +1,6 @@
1
1
  import { queryOptions, useQuery } from '@tanstack/react-query'
2
2
 
3
- import { client } from './client'
3
+ import { client } from './client.js'
4
4
 
5
5
  /** The auth contract the SPA reads from `GET config.json` once loaded. */
6
6
  export type Config = {
@@ -1,7 +1,8 @@
1
1
  import * as ReactQuery from '@tanstack/react-query'
2
2
  import type { InferResponseType } from 'hono/client'
3
3
 
4
- import { client } from './client'
4
+ import { client } from './client.js'
5
+ import * as Response from './response.js'
5
6
 
6
7
  /** A stored allowlist entry (domain or exact email) from the list endpoint. */
7
8
  export type Entry = InferResponseType<(typeof client)['early-access']['$get'], 200>['data'][number]
@@ -27,7 +28,8 @@ export namespace add {
27
28
  export type Input = { entry: string }
28
29
  export async function fn(input: Input) {
29
30
  const response = await client['early-access'].$post({ json: input })
30
- if (!response.ok) throw new Error(await errorMessage(response, 'Failed to add entry.'))
31
+ if (!response.ok)
32
+ throw new Error(await Response.errorMessage(response, { fallback: 'Failed to add entry.' }))
31
33
  return response.json()
32
34
  }
33
35
  export function useMutation() {
@@ -44,7 +46,10 @@ export namespace remove {
44
46
  export type Input = { entry: string }
45
47
  export async function fn({ entry }: Input) {
46
48
  const response = await client['early-access'].$delete({ json: { entry } })
47
- if (!response.ok) throw new Error(await errorMessage(response, 'Failed to remove entry.'))
49
+ if (!response.ok)
50
+ throw new Error(
51
+ await Response.errorMessage(response, { fallback: 'Failed to remove entry.' }),
52
+ )
48
53
  return response.json()
49
54
  }
50
55
  export function useMutation() {
@@ -55,9 +60,3 @@ export namespace remove {
55
60
  })
56
61
  }
57
62
  }
58
-
59
- /** Server error-envelope message, with a fallback for non-JSON bodies. */
60
- async function errorMessage(response: { json(): Promise<unknown> }, fallback: string) {
61
- const body = (await response.json().catch(() => null)) as { error?: { message?: string } } | null
62
- return body?.error?.message ?? fallback
63
- }
@@ -0,0 +1,207 @@
1
+ import * as ReactQuery from '@tanstack/react-query'
2
+ import type { InferRequestType, InferResponseType } from 'hono/client'
3
+ import { tempo as mainnet, tempoTestnet as testnet } from 'viem/tempo/chains'
4
+ import * as z from 'zod/mini'
5
+
6
+ import { client } from './client.js'
7
+
8
+ type BaseListResponse = InferResponseType<(typeof client)['earn']['verified-vaults']['$get'], 200>
9
+ type DetailResponse = InferResponseType<
10
+ (typeof client)['earn']['verified-vaults'][':vaultId']['$get'],
11
+ 200
12
+ >
13
+
14
+ /** One Earn vault resolved from current chain state. */
15
+ export type Vault = DetailResponse &
16
+ Required<Pick<DetailResponse, 'access' | 'capabilities' | 'zone'>>
17
+
18
+ type ListResponse = Omit<BaseListResponse, 'data'> & { data: readonly Vault[] }
19
+
20
+ type InsertRequest = InferRequestType<(typeof client)['earn']['verified-vaults']['$put']>['json']
21
+ const include = 'access,capabilities,zone' as const
22
+
23
+ /** A chain id managed by the Earn registry UI. */
24
+ export type ChainId = typeof mainnet.id | typeof testnet.id
25
+
26
+ /** Moderato is the first chain with a curated Earn deployment. */
27
+ export const defaultChain: ChainId = testnet.id
28
+
29
+ /** Tempo chains managed by the Earn registry UI. */
30
+ export const chains = [
31
+ { id: mainnet.id, label: 'Mainnet' },
32
+ { id: testnet.id, label: 'Testnet' },
33
+ ] as const
34
+
35
+ /** Formats an Earn engine type for display. */
36
+ export function engineLabel(type: NonNullable<Vault['engine']['type']>) {
37
+ return type === 'erc4626' ? 'ERC-4626' : 'Veda'
38
+ }
39
+
40
+ /** Curated vault fields accepted by the verification endpoint. */
41
+ export type InsertInput = Omit<InsertRequest, 'chainId'> & {
42
+ /** Parent Tempo chain containing the vault. */
43
+ chainId: number
44
+ }
45
+
46
+ /** Schemas shared by Earn vault routes. */
47
+ export namespace schema {
48
+ /** Search parameters selecting an Earn registry chain. */
49
+ export const Search = z.object({
50
+ chainId: z.catch(
51
+ z.optional(
52
+ z.pipe(z.coerce.number(), z.union([z.literal(mainnet.id), z.literal(testnet.id)])),
53
+ ),
54
+ undefined,
55
+ ),
56
+ })
57
+ }
58
+
59
+ /** Resolve one Earn vault from current chain state. */
60
+ export namespace get {
61
+ /** Chain and vault identity used for resolution. */
62
+ export type Input = {
63
+ /** Parent Tempo chain containing the vault. */
64
+ chainId: number
65
+ /** Earn vault contract address. */
66
+ vaultId: InsertInput['vaultAddress']
67
+ }
68
+
69
+ /** Stable query key for one resolved vault. */
70
+ export function key(input: Input) {
71
+ return ['earn-verified-vaults', 'detail', input.chainId, input.vaultId.toLowerCase()] as const
72
+ }
73
+
74
+ /** Resolves one vault through the admin API. */
75
+ export async function fn(input: Input) {
76
+ const response = await client.earn['verified-vaults'][':vaultId'].$get({
77
+ param: { vaultId: input.vaultId },
78
+ query: { chainId: String(input.chainId), include },
79
+ })
80
+ if (!response.ok) throw new Error(await errorMessage(response, 'Vault not found.'))
81
+ return response.json() as Promise<Vault>
82
+ }
83
+
84
+ /** TanStack Query options for one resolved vault. */
85
+ export function options(input: Input, options: options.Options = {}) {
86
+ return ReactQuery.queryOptions({
87
+ enabled: options.enabled,
88
+ queryFn: () => fn(input),
89
+ queryKey: key(input),
90
+ staleTime: 30_000,
91
+ })
92
+ }
93
+
94
+ export namespace options {
95
+ /** Controls whether the resolution query may run. */
96
+ export type Options = {
97
+ /** Whether the query has a valid vault address. */
98
+ enabled?: boolean | undefined
99
+ }
100
+ }
101
+ }
102
+
103
+ /** List verified Earn vaults for one chain. */
104
+ export namespace list {
105
+ /** Input selecting the chain registry. */
106
+ export type Input = { chainId: number }
107
+
108
+ /** Stable query key for one chain registry. */
109
+ export function key(options: Input) {
110
+ return ['earn-verified-vaults', options.chainId] as const
111
+ }
112
+
113
+ /** Fetches one page of verified Earn vaults. */
114
+ export async function fn(options: Input & { cursor?: string | undefined }) {
115
+ const response = await client.earn['verified-vaults'].$get({
116
+ query: {
117
+ chainId: String(options.chainId),
118
+ ...(options.cursor ? { cursor: options.cursor } : {}),
119
+ include,
120
+ limit: '25',
121
+ },
122
+ })
123
+ if (!response.ok) throw new Error(await errorMessage(response, 'Failed to load Earn vaults.'))
124
+ return response.json() as Promise<ListResponse>
125
+ }
126
+
127
+ /** Infinite-query options for one chain registry. */
128
+ export function options(options: Input) {
129
+ return ReactQuery.infiniteQueryOptions({
130
+ getNextPageParam: (page: ListResponse) => page.nextCursor,
131
+ initialPageParam: null as string | null,
132
+ queryFn: ({ pageParam }) => fn({ ...options, cursor: pageParam ?? undefined }),
133
+ queryKey: key(options),
134
+ staleTime: 30_000,
135
+ })
136
+ }
137
+ }
138
+
139
+ /** Verify and save one Earn vault. */
140
+ export namespace insert {
141
+ /** Saves curated fields through the admin API. */
142
+ export async function fn(input: InsertInput) {
143
+ const response = await client.earn['verified-vaults'].$put({ json: input })
144
+ if (!response.ok) throw new Error(await errorMessage(response, 'Failed to verify Earn vault.'))
145
+ return response.json() as Promise<Vault>
146
+ }
147
+
148
+ /** Mutation that refreshes the affected vault and registry. */
149
+ export function useMutation() {
150
+ const queryClient = ReactQuery.useQueryClient()
151
+ return ReactQuery.useMutation({
152
+ mutationFn: fn,
153
+ onSuccess: (vault, input) => {
154
+ queryClient.setQueryData(
155
+ get.key({ chainId: input.chainId, vaultId: input.vaultAddress }),
156
+ vault,
157
+ )
158
+ return queryClient.invalidateQueries({ queryKey: list.key({ chainId: input.chainId }) })
159
+ },
160
+ })
161
+ }
162
+ }
163
+
164
+ /** Remove one vault from the verified registry. */
165
+ export namespace remove {
166
+ /** Identity of the verified vault to remove. */
167
+ export type Input = {
168
+ /** Parent Tempo chain containing the vault. */
169
+ chainId: number
170
+ /** Earn vault contract address. */
171
+ vaultId: InsertInput['vaultAddress']
172
+ }
173
+
174
+ /** Removes a vault through the admin API. */
175
+ export async function fn(input: Input) {
176
+ const response = await client.earn['verified-vaults'][':vaultId'].$delete({
177
+ param: { vaultId: input.vaultId },
178
+ query: { chainId: String(input.chainId) },
179
+ })
180
+ if (!response.ok) throw new Error(await errorMessage(response, 'Failed to remove Earn vault.'))
181
+ }
182
+
183
+ /** Mutation that refreshes the affected chain registry. */
184
+ export function useMutation() {
185
+ const queryClient = ReactQuery.useQueryClient()
186
+ return ReactQuery.useMutation({
187
+ mutationFn: fn,
188
+ onSuccess: (_data, input) =>
189
+ Promise.all([
190
+ queryClient.invalidateQueries({ queryKey: list.key({ chainId: input.chainId }) }),
191
+ queryClient.invalidateQueries({
192
+ queryKey: get.key({ chainId: input.chainId, vaultId: input.vaultId }),
193
+ }),
194
+ ]),
195
+ })
196
+ }
197
+ }
198
+
199
+ async function errorMessage(response: { json(): Promise<unknown> }, fallback: string) {
200
+ type Body = { error?: { details?: readonly { message?: string }[]; message?: string } }
201
+ const body = (await response.json().catch(() => null)) as Body | null
202
+ const message = body?.error?.message ?? fallback
203
+ const details = body?.error?.details?.flatMap((detail) =>
204
+ detail.message ? [detail.message] : [],
205
+ )
206
+ return details?.length ? `${message}\n${details.join('\n')}` : message
207
+ }
@@ -0,0 +1,13 @@
1
+ /** Formats a localized medium date. */
2
+ export function date(value: string): string {
3
+ return new Date(value).toLocaleDateString(undefined, {
4
+ day: 'numeric',
5
+ month: 'short',
6
+ year: 'numeric',
7
+ })
8
+ }
9
+
10
+ /** Formats a medium English date. */
11
+ export function mediumDate(value: string): string {
12
+ return new Intl.DateTimeFormat('en', { dateStyle: 'medium' }).format(new Date(value))
13
+ }
@@ -4,10 +4,10 @@ import { createElement } from 'react'
4
4
  import { renderToStaticMarkup } from 'react-dom/server'
5
5
  import { describe, expect, it, vi } from 'vite-plus/test'
6
6
 
7
- import { routeTree } from '../routeTree.gen'
8
- import { BillingSourcesCard, Route as DetailRoute } from '../routes/organizations_.$orgId'
9
- import { Route as ListRoute } from '../routes/organizations'
10
- import * as Organizations from './organizations'
7
+ import { routeTree } from '../routeTree.gen.js'
8
+ import { BillingSourcesCard, Route as DetailRoute } from '../routes/organizations_.$orgId.js'
9
+ import { Route as ListRoute } from '../routes/organizations.js'
10
+ import * as Organizations from './organizations.js'
11
11
 
12
12
  describe('schema.Search', () => {
13
13
  it('normalizes valid lookup state', () => {
@@ -51,6 +51,16 @@ describe('searchParameters', () => {
51
51
  })
52
52
  })
53
53
 
54
+ describe('lookupQuery', () => {
55
+ it('waits for the API search minimum', () => {
56
+ expect(Organizations.lookupQuery(' ac ')).toBeUndefined()
57
+ })
58
+
59
+ it('trims a searchable value', () => {
60
+ expect(Organizations.lookupQuery(' acme ')).toBe('acme')
61
+ })
62
+ })
63
+
54
64
  describe('withEnabledSources', () => {
55
65
  it('replaces only organization-wide billing availability', () => {
56
66
  const detail = {
@@ -2,7 +2,7 @@ import * as ReactQuery from '@tanstack/react-query'
2
2
  import type { InferResponseType } from 'hono/client'
3
3
  import * as z from 'zod/mini'
4
4
 
5
- import { client } from './client'
5
+ import { client } from './client.js'
6
6
 
7
7
  type ListResponse = InferResponseType<(typeof client)['organizations']['$get'], 200>
8
8
  type DetailResponse = InferResponseType<(typeof client)['organizations'][':orgId']['$get'], 200>
@@ -91,6 +91,12 @@ export declare namespace searchParameters {
91
91
  type Options = { query?: string | undefined }
92
92
  }
93
93
 
94
+ /** Normalizes autocomplete input once it meets the organization search minimum. */
95
+ export function lookupQuery(value: string) {
96
+ const query = value.trim()
97
+ return query.length >= 3 ? query : undefined
98
+ }
99
+
94
100
  /** List organizations, optionally filtered by id, name, or member email. */
95
101
  export namespace list {
96
102
  /** Organization lookup filters. */
@@ -0,0 +1,22 @@
1
+ /** Extracts a standard API error-envelope message with a fallback. */
2
+ export async function errorMessage(
3
+ response: errorMessage.Response,
4
+ options: errorMessage.Options,
5
+ ): Promise<string> {
6
+ const body = (await response.json().catch(() => null)) as { error?: { message?: string } } | null
7
+ return body?.error?.message ?? options.fallback
8
+ }
9
+
10
+ /** Types for {@link errorMessage}. */
11
+ export declare namespace errorMessage {
12
+ /** Options for extracting an API error message. */
13
+ type Options = {
14
+ /** Message returned when the response has no standard error message. */
15
+ fallback: string
16
+ }
17
+ /** Response shape consumed by {@link errorMessage}. */
18
+ type Response = {
19
+ /** Parses the response body. */
20
+ json(): Promise<unknown>
21
+ }
22
+ }
@@ -1,19 +1,27 @@
1
- import { describe, expect, it } from 'vite-plus/test'
1
+ import { describe, expect, expectTypeOf, it } from 'vite-plus/test'
2
2
 
3
- import { fromZoneChainId } from './scopes'
3
+ import * as Scopes from './scopes.js'
4
4
 
5
5
  describe('fromZoneChainId', () => {
6
- it('builds a canonical Zone read scope', () => {
7
- expect(fromZoneChainId(' 000421700001 ')).toBe('zone:421700001:read')
6
+ it('builds canonical Zone scopes', () => {
7
+ const read = Scopes.fromZoneChainId(' 000421700001 ')
8
+ const write = Scopes.fromZoneChainId(' 000421700001 ', 'write')
9
+
10
+ expect(read).toBe('zone:421700001:read')
11
+ expect(write).toBe('zone:421700001:write')
12
+ expectTypeOf(read).toEqualTypeOf<`zone:${string}:read` | undefined>()
13
+ expectTypeOf(write).toEqualTypeOf<`zone:${string}:write` | undefined>()
8
14
  })
9
15
 
10
16
  it('rejects non-positive and malformed chain ids', () => {
11
- expect(['', '0', '-1', '1.5', 'mainnet'].map(fromZoneChainId)).toEqual([
12
- undefined,
13
- undefined,
14
- undefined,
15
- undefined,
16
- undefined,
17
- ])
17
+ expect(['', '0', '-1', '1.5', 'mainnet'].map((value) => Scopes.fromZoneChainId(value))).toEqual(
18
+ [undefined, undefined, undefined, undefined, undefined],
19
+ )
20
+ })
21
+ })
22
+
23
+ describe('get', () => {
24
+ it('versions persisted scope catalogs', () => {
25
+ expect(Scopes.get.key).toEqual(['scopes', 'v2'])
18
26
  })
19
27
  })