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
@@ -2,15 +2,19 @@ export * as Auth from './Auth.js';
2
2
  export * as Cache from './Cache.js';
3
3
  export * as Cursor from './Cursor.js';
4
4
  export * as EdgeCache from './EdgeCache.js';
5
+ export * as EarnVaults from './EarnVaults.js';
5
6
  export * as Errors from './Errors.js';
7
+ export * as Exchange from './exchange/index.js';
6
8
  export * as Fees from './Fees.js';
7
- export * as FundingQuotes from './FundingQuotes.js';
9
+ export * as Funding from './funding/index.js';
8
10
  export * as Id from './Id.js';
11
+ export * as Idempotency from './Idempotency.js';
9
12
  export * as Log from './Log.js';
10
13
  export * as MetricSink from './MetricSink.js';
11
14
  export * as Mpp from './Mpp.js';
12
15
  export * as OpenApi from './OpenApi.js';
13
16
  export * as Path from './Path.js';
17
+ export * as Provider from './Provider.js';
14
18
  export * as RateLimit from './RateLimit.js';
15
19
  export * as Response from './Response.js';
16
20
  export * as RpcSchema from './RpcSchema.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA"}
@@ -66,65 +66,69 @@ export function assertDeliverableUrl(input) {
66
66
  throw new WebhookDestination.InvalidUrlError('protocol', input);
67
67
  if (url.username || url.password)
68
68
  throw new WebhookDestination.InvalidUrlError('credentials', input);
69
- if (isBlockedHost(url.hostname))
69
+ if (Hostname.isBlocked(url.hostname))
70
70
  throw new WebhookDestination.InvalidUrlError('blocked_host', input);
71
71
  return url;
72
72
  }
73
- function isBlockedHost(hostname) {
74
- // URL hostnames preserve IPv6 brackets and are already lowercased for names.
75
- const host = hostname.replace(/^\[|\]$/g, '').toLowerCase();
76
- if (host === 'localhost' || host.endsWith('.localhost'))
77
- return true;
78
- if (host === 'metadata.google.internal')
79
- return true;
80
- if (host.length === 0)
81
- return true;
82
- if (isIpv4(host))
83
- return isBlockedIpv4(host);
84
- if (host.includes(':'))
85
- return isBlockedIpv6(host);
86
- return false;
87
- }
88
- function isIpv4(host) {
89
- const parts = host.split('.');
90
- return parts.length === 4 && parts.every((part) => /^\d{1,3}$/.test(part) && Number(part) <= 255);
91
- }
92
- function isBlockedIpv4(host) {
93
- const [a, b] = host.split('.').map(Number);
94
- if (a === 0 || a === 10 || a === 127)
95
- return true; // unspecified, private, loopback
96
- if (a === 169 && b === 254)
97
- return true; // link-local (incl. cloud metadata)
98
- if (a === 172 && b >= 16 && b <= 31)
99
- return true; // private
100
- if (a === 192 && b === 168)
101
- return true; // private
102
- if (a === 100 && b >= 64 && b <= 127)
103
- return true; // carrier-grade NAT
104
- return false;
105
- }
106
- function isBlockedIpv6(host) {
107
- if (host === '::' || host === '::1')
108
- return true; // unspecified, loopback
109
- if (host.startsWith('fe8') ||
110
- host.startsWith('fe9') ||
111
- host.startsWith('fea') ||
112
- host.startsWith('feb'))
113
- return true; // link-local fe80::/10
114
- if (host.startsWith('fc') || host.startsWith('fd'))
115
- return true; // unique local fc00::/7
116
- // IPv4-mapped (::ffff:a.b.c.d) — re-check the embedded v4.
117
- const dotted = host.match(/::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
118
- if (dotted?.[1] && isIpv4(dotted[1]))
119
- return isBlockedIpv4(dotted[1]);
120
- // The URL parser compresses ::ffff:a.b.c.d to two hex groups (e.g. 7f00:1).
121
- const hex = host.match(/::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
122
- if (hex?.[1] && hex[2]) {
123
- const high = Number.parseInt(hex[1], 16);
124
- const low = Number.parseInt(hex[2], 16);
125
- const v4 = `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
126
- return isBlockedIpv4(v4);
73
+ var Hostname;
74
+ (function (Hostname) {
75
+ function isBlocked(hostname) {
76
+ // URL hostnames preserve IPv6 brackets and are already lowercased for names.
77
+ const host = hostname.replace(/^\[|\]$/g, '').toLowerCase();
78
+ if (host === 'localhost' || host.endsWith('.localhost'))
79
+ return true;
80
+ if (host === 'metadata.google.internal')
81
+ return true;
82
+ if (host.length === 0)
83
+ return true;
84
+ if (isIpv4(host))
85
+ return isBlockedIpv4(host);
86
+ if (host.includes(':'))
87
+ return isBlockedIpv6(host);
88
+ return false;
127
89
  }
128
- return false;
129
- }
90
+ Hostname.isBlocked = isBlocked;
91
+ function isIpv4(host) {
92
+ const parts = host.split('.');
93
+ return (parts.length === 4 && parts.every((part) => /^\d{1,3}$/.test(part) && Number(part) <= 255));
94
+ }
95
+ function isBlockedIpv4(host) {
96
+ const [a, b] = host.split('.').map(Number);
97
+ if (a === 0 || a === 10 || a === 127)
98
+ return true; // unspecified, private, loopback
99
+ if (a === 169 && b === 254)
100
+ return true; // link-local (incl. cloud metadata)
101
+ if (a === 172 && b >= 16 && b <= 31)
102
+ return true; // private
103
+ if (a === 192 && b === 168)
104
+ return true; // private
105
+ if (a === 100 && b >= 64 && b <= 127)
106
+ return true; // carrier-grade NAT
107
+ return false;
108
+ }
109
+ function isBlockedIpv6(host) {
110
+ if (host === '::' || host === '::1')
111
+ return true; // unspecified, loopback
112
+ if (host.startsWith('fe8') ||
113
+ host.startsWith('fe9') ||
114
+ host.startsWith('fea') ||
115
+ host.startsWith('feb'))
116
+ return true; // link-local fe80::/10
117
+ if (host.startsWith('fc') || host.startsWith('fd'))
118
+ return true; // unique local fc00::/7
119
+ // IPv4-mapped (::ffff:a.b.c.d) — re-check the embedded v4.
120
+ const dotted = host.match(/::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
121
+ if (dotted?.[1] && isIpv4(dotted[1]))
122
+ return isBlockedIpv4(dotted[1]);
123
+ // The URL parser compresses ::ffff:a.b.c.d to two hex groups (e.g. 7f00:1).
124
+ const hex = host.match(/::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
125
+ if (hex?.[1] && hex[2]) {
126
+ const high = Number.parseInt(hex[1], 16);
127
+ const low = Number.parseInt(hex[2], 16);
128
+ const ipv4 = `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
129
+ return isBlockedIpv4(ipv4);
130
+ }
131
+ return false;
132
+ }
133
+ })(Hostname || (Hostname = {}));
130
134
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/internal/webhookDestinations/url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/internal/webhookDestinations/url.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import * as Uniswap from '../internal/exchange/providers/uniswap.js';
2
+ import * as Across from '../internal/funding/providers/across.js';
3
+ import * as Relay from '../internal/funding/providers/relay.js';
4
+ import * as Rhino from '../internal/funding/providers/rhino.js';
5
+ import * as Squid from '../internal/funding/providers/squid.js';
6
+ import * as Symbiosis from '../internal/funding/providers/symbiosis.js';
7
+ /** Creates an Across funding provider. */
8
+ export declare const across: typeof Across.across;
9
+ export declare namespace across {
10
+ /** Across provider configuration. */
11
+ type Options = Across.across.Options;
12
+ }
13
+ /** Creates a Relay funding provider. */
14
+ export declare const relay: typeof Relay.relay;
15
+ export declare namespace relay {
16
+ /** Relay provider configuration. */
17
+ type Options = Relay.relay.Options;
18
+ }
19
+ /** Creates a Rhino funding provider. */
20
+ export declare const rhino: typeof Rhino.rhino;
21
+ export declare namespace rhino {
22
+ /** Rhino provider configuration. */
23
+ type Options = Rhino.rhino.Options;
24
+ }
25
+ /** Creates a Squid funding provider. */
26
+ export declare const squid: typeof Squid.squid;
27
+ export declare namespace squid {
28
+ /** Squid provider configuration. */
29
+ type Options = Squid.squid.Options;
30
+ }
31
+ /** Creates a Symbiosis funding provider. */
32
+ export declare const symbiosis: typeof Symbiosis.symbiosis;
33
+ export declare namespace symbiosis {
34
+ /** Symbiosis provider configuration. */
35
+ type Options = Symbiosis.symbiosis.Options;
36
+ }
37
+ /** Creates a Uniswap exchange provider. */
38
+ export declare const uniswap: typeof Uniswap.uniswap;
39
+ export declare namespace uniswap {
40
+ /** Uniswap provider configuration. */
41
+ type Options = Uniswap.uniswap.Options;
42
+ }
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2CAA2C,CAAA;AACpE,OAAO,KAAK,MAAM,MAAM,yCAAyC,CAAA;AACjE,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,SAAS,MAAM,4CAA4C,CAAA;AAEvE,0CAA0C;AAC1C,eAAO,MAAM,MAAM,sBAAgB,CAAA;AAEnC,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,qCAAqC;IACrC,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAA;CACrC;AAED,wCAAwC;AACxC,eAAO,MAAM,KAAK,oBAAc,CAAA;AAEhC,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,oCAAoC;IACpC,KAAK,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAA;CACnC;AAED,wCAAwC;AACxC,eAAO,MAAM,KAAK,oBAAc,CAAA;AAEhC,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,oCAAoC;IACpC,KAAK,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAA;CACnC;AAED,wCAAwC;AACxC,eAAO,MAAM,KAAK,oBAAc,CAAA;AAEhC,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,oCAAoC;IACpC,KAAK,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAA;CACnC;AAED,4CAA4C;AAC5C,eAAO,MAAM,SAAS,4BAAsB,CAAA;AAE5C,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,wCAAwC;IACxC,KAAK,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAA;CAC3C;AAED,2CAA2C;AAC3C,eAAO,MAAM,OAAO,wBAAkB,CAAA;AAEtC,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,sCAAsC;IACtC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAA;CACvC"}
@@ -0,0 +1,19 @@
1
+ import * as Uniswap from '../internal/exchange/providers/uniswap.js';
2
+ import * as Across from '../internal/funding/providers/across.js';
3
+ import * as Relay from '../internal/funding/providers/relay.js';
4
+ import * as Rhino from '../internal/funding/providers/rhino.js';
5
+ import * as Squid from '../internal/funding/providers/squid.js';
6
+ import * as Symbiosis from '../internal/funding/providers/symbiosis.js';
7
+ /** Creates an Across funding provider. */
8
+ export const across = Across.across;
9
+ /** Creates a Relay funding provider. */
10
+ export const relay = Relay.relay;
11
+ /** Creates a Rhino funding provider. */
12
+ export const rhino = Rhino.rhino;
13
+ /** Creates a Squid funding provider. */
14
+ export const squid = Squid.squid;
15
+ /** Creates a Symbiosis funding provider. */
16
+ export const symbiosis = Symbiosis.symbiosis;
17
+ /** Creates a Uniswap exchange provider. */
18
+ export const uniswap = Uniswap.uniswap;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2CAA2C,CAAA;AACpE,OAAO,KAAK,MAAM,MAAM,yCAAyC,CAAA;AACjE,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,wCAAwC,CAAA;AAC/D,OAAO,KAAK,SAAS,MAAM,4CAA4C,CAAA;AAEvE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;AAOnC,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AAOhC,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AAOhC,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AAOhC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAA;AAO5C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tapimo",
3
3
  "type": "module",
4
- "version": "0.7.1",
4
+ "version": "0.8.0",
5
5
  "main": "./dist/index.js",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -21,14 +21,14 @@
21
21
  "incur": "^0.4.19",
22
22
  "jose": "^6.2.3",
23
23
  "kysely": "^0.29.2",
24
- "mppx": "0.8.9",
24
+ "mppx": "^0.8.15",
25
25
  "nanoid": "^5.1.11",
26
- "ox": "0.14.30",
26
+ "ox": "0.14.33",
27
27
  "pg": "^8.22.0",
28
28
  "stripe": "^19.1.0",
29
29
  "tidx.ts": "^0.1.2",
30
- "viem": "2.54.6",
31
- "vocs": "^2.3.3",
30
+ "viem": "2.55.10",
31
+ "vocs": "^2.8.3",
32
32
  "zod": "^4.4.3"
33
33
  },
34
34
  "sideEffects": false,
@@ -85,6 +85,11 @@
85
85
  "types": "./dist/apps/mpp/index.d.ts",
86
86
  "default": "./dist/apps/mpp/index.js"
87
87
  },
88
+ "./providers": {
89
+ "src": "./src/providers/index.ts",
90
+ "types": "./dist/providers/index.d.ts",
91
+ "default": "./dist/providers/index.js"
92
+ },
88
93
  "./relay": {
89
94
  "src": "./src/apps/relay/index.ts",
90
95
  "types": "./dist/apps/relay/index.d.ts",
@@ -10,6 +10,7 @@ describe('schema.ApiKey', () => {
10
10
  scopes: ['data:read'],
11
11
  })
12
12
  expect(parsed.environment).toMatchInlineSnapshot(`"production"`)
13
+ expect(parsed.allowedIps).toEqual([])
13
14
  })
14
15
 
15
16
  test('accepts an explicit sandbox environment', () => {
@@ -32,6 +33,40 @@ describe('schema.ApiKey', () => {
32
33
  }).success,
33
34
  ).toBe(false)
34
35
  })
36
+
37
+ test('accepts exact IP and CIDR allowlist rules', () => {
38
+ const parsed = ApiKey.schema.ApiKey.parse({
39
+ allowedIps: ['203.0.113.7', '203.0.113.0/24', '2001:db8::/32'],
40
+ id: 'key_test',
41
+ orgId: 'org_test',
42
+ scopes: ['data:read'],
43
+ })
44
+ expect(parsed.allowedIps).toEqual(['203.0.113.7', '203.0.113.0/24', '2001:db8::/32'])
45
+ })
46
+
47
+ test.each(['203.0.113.0/33', '2001:db8::/129', '*', 'not-an-ip'])(
48
+ 'rejects invalid allowlist rule %s',
49
+ (rule) => {
50
+ expect(
51
+ ApiKey.schema.ApiKey.safeParse({
52
+ allowedIps: [rule],
53
+ id: 'key_test',
54
+ orgId: 'org_test',
55
+ scopes: ['data:read'],
56
+ }).success,
57
+ ).toBe(false)
58
+ },
59
+ )
60
+
61
+ test('accepts 100 allowlist rules and rejects 101', () => {
62
+ const base = { id: 'key_test', orgId: 'org_test', scopes: ['data:read'] }
63
+ const rules = Array.from({ length: 101 }, (_, index) => `203.0.113.${index}`)
64
+
65
+ expect(
66
+ ApiKey.schema.ApiKey.safeParse({ ...base, allowedIps: rules.slice(0, 100) }).success,
67
+ ).toBe(true)
68
+ expect(ApiKey.schema.ApiKey.safeParse({ ...base, allowedIps: rules }).success).toBe(false)
69
+ })
35
70
  })
36
71
 
37
72
  describe('redact', () => {
package/src/ApiKey.ts CHANGED
@@ -15,10 +15,29 @@ import { Hash, Hex } from 'ox'
15
15
  import * as z from 'zod/mini'
16
16
 
17
17
  import * as Id from './internal/Id.js'
18
+ import * as IpAllowlist from './internal/IpAllowlist.js'
18
19
  import * as RateLimit from './internal/RateLimit.js'
19
20
 
20
21
  /** Zod schemas owned by the API-key module. */
21
22
  export namespace schema {
23
+ /** Client IP/CIDR rules restricting where a key may be used. */
24
+ export const AllowedIps = z
25
+ .readonly(
26
+ z.array(
27
+ z
28
+ .string()
29
+ .check(
30
+ z.maxLength(64),
31
+ z.refine(IpAllowlist.isRule),
32
+ z.describe('An exact IPv4/IPv6 address or CIDR range.'),
33
+ ),
34
+ ),
35
+ )
36
+ .check(
37
+ z.maxLength(100),
38
+ z.describe('Client IP addresses and CIDR ranges restricting where a key may be used.'),
39
+ )
40
+
22
41
  /**
23
42
  * Canonical schema for resolved API-key metadata, and the single source of
24
43
  * truth for the {@link ApiKey} type. `ApiKeys` derives its persisted
@@ -26,6 +45,14 @@ export namespace schema {
26
45
  * persisted shapes cannot drift.
27
46
  */
28
47
  export const ApiKey = z.object({
48
+ allowedIps: z
49
+ ._default(AllowedIps, [])
50
+ .check(
51
+ z.describe(
52
+ 'Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted access.',
53
+ ),
54
+ z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] }),
55
+ ),
29
56
  billingActive: z
30
57
  .optional(z.boolean())
31
58
  .check(
@@ -73,6 +73,7 @@ describe('mint', () => {
73
73
  expect(record.tokenLast4).toBe(token.slice(-4))
74
74
  expect({ ...record, id: '<id>', tokenLast4: '<last4>' }).toMatchInlineSnapshot(`
75
75
  {
76
+ "allowedIps": [],
76
77
  "createdAt": "2026-01-01T00:00:00.000Z",
77
78
  "createdBy": "admin@tempo.xyz",
78
79
  "environment": "production",
@@ -98,14 +99,14 @@ describe('mint', () => {
98
99
  ).rejects.toThrowError(/invalid API key input/)
99
100
  })
100
101
 
101
- test('mints a per-zone read scope', async () => {
102
+ test('mints per-zone read and write scopes', async () => {
102
103
  const state = Store.memory()
103
104
  const { token } = await ApiKeys.mint(state, {
104
105
  orgId: 'org_a',
105
- scopes: ['zone:421700001:read'],
106
+ scopes: ['zone:421700001:read', 'zone:421700001:write'],
106
107
  })
107
108
  const resolved = await ApiKeys.resolve(state, token)
108
- expect(resolved?.scopes).toEqual(['zone:421700001:read'])
109
+ expect(resolved?.scopes).toEqual(['zone:421700001:read', 'zone:421700001:write'])
109
110
  })
110
111
 
111
112
  test('rejects malformed zone scopes', async () => {
@@ -115,8 +116,9 @@ describe('mint', () => {
115
116
  'zone:1.5:read',
116
117
  'zone:-1:read',
117
118
  'zone:0:read',
119
+ 'zone:0:write',
118
120
  'zone:000421700001:read',
119
- 'zone:1:write',
121
+ 'zone:1:admin',
120
122
  ])
121
123
  await expect(
122
124
  ApiKeys.mint(Store.memory(), { orgId: 'org_a', scopes: [scope as never] }),
@@ -257,15 +259,17 @@ describe('listByOrg', () => {
257
259
  })
258
260
  })
259
261
 
260
- describe('attribute', () => {
261
- test('re-attributes org and project, moving the org index', async () => {
262
+ describe('update', () => {
263
+ test('updates the name, org, and project while moving the org index', async () => {
262
264
  const state = Store.memory()
263
265
  const { record, token } = await ApiKeys.mint(state, { orgId: 'org_a', scopes: ['data:read'] })
264
266
 
265
- const updated = await ApiKeys.attribute(state, record.id, {
267
+ const updated = await ApiKeys.update(state, record.id, {
268
+ name: 'Explorer',
266
269
  orgId: 'org_b',
267
270
  projectId: 'prj_b',
268
271
  })
272
+ expect(updated?.name).toBe('Explorer')
269
273
  expect(updated?.orgId).toBe('org_b')
270
274
  expect(updated?.projectId).toBe('prj_b')
271
275
 
@@ -277,8 +281,37 @@ describe('attribute', () => {
277
281
  expect(await ApiKeys.listByOrg(state, 'org_a')).toEqual([])
278
282
  expect((await ApiKeys.listByOrg(state, 'org_b')).map(({ id }) => id)).toEqual([record.id])
279
283
 
284
+ expect(await ApiKeys.update(state, 'key_missing', { projectId: 'prj_x' })).toBeNull()
280
285
  expect(await ApiKeys.attribute(state, 'key_missing', { projectId: 'prj_x' })).toBeNull()
281
286
  })
287
+
288
+ test('replaces and clears the IP allowlist without changing the token', async () => {
289
+ const state = Store.memory()
290
+ const { record, token } = await ApiKeys.mint(state, {
291
+ allowedIps: ['203.0.113.0/24'],
292
+ orgId: 'org_a',
293
+ scopes: ['data:read'],
294
+ })
295
+
296
+ const updated = await ApiKeys.update(state, record.id, {
297
+ allowedIps: ['2001:db8::/32'],
298
+ })
299
+ expect(updated?.allowedIps).toEqual(['2001:db8::/32'])
300
+ expect((await ApiKeys.resolve(state, token))?.allowedIps).toEqual(['2001:db8::/32'])
301
+
302
+ const cleared = await ApiKeys.update(state, record.id, { allowedIps: [] })
303
+ expect(cleared?.allowedIps).toEqual([])
304
+ expect((await ApiKeys.resolve(state, token))?.allowedIps).toEqual([])
305
+ })
306
+
307
+ test('rejects invalid IP allowlist rules at the write boundary', async () => {
308
+ const state = Store.memory()
309
+ const { record } = await ApiKeys.mint(state, { orgId: 'org_a', scopes: ['data:read'] })
310
+
311
+ await expect(
312
+ ApiKeys.update(state, record.id, { allowedIps: ['203.0.113.0/33'] }),
313
+ ).rejects.toThrowError(/invalid API key input/)
314
+ })
282
315
  })
283
316
 
284
317
  describe('setBillingActive', () => {
package/src/ApiKeys.ts CHANGED
@@ -97,6 +97,7 @@ export async function mint(
97
97
  const recordKey = ApiKey.keyFor(token)
98
98
  const id = ApiKey.generateId()
99
99
  const record: Record = {
100
+ allowedIps: data.allowedIps,
100
101
  createdAt: time.toISOString(),
101
102
  environment: data.environment,
102
103
  id,
@@ -291,22 +292,25 @@ export async function revoke(state: Store.State, id: string): Promise<boolean> {
291
292
  }
292
293
 
293
294
  /**
294
- * Re-attributes a key to an organization and/or project, rewriting its record
295
- * in place (same token hash) and moving the org index entry when the org
296
- * changes. The backfill path for legacy keys.
295
+ * Updates a key's IP allowlist, display name, and attribution, rewriting its
296
+ * record in place and moving the org index entry when the org changes.
297
297
  *
298
298
  * @param state - The KV state store holding key records.
299
299
  * @param id - The key id (`key_…`).
300
- * @param input - The attribution to apply.
300
+ * @param input - Key metadata to apply.
301
301
  * @param options - Scope catalog used for validation.
302
302
  * @returns The updated record, or `null` when the key is absent.
303
303
  */
304
- export async function attribute(
304
+ export async function update(
305
305
  state: Store.State,
306
306
  id: string,
307
- input: attribute.Input,
308
- options: attribute.Options = {},
307
+ input: update.Input,
308
+ options: update.Options = {},
309
309
  ): Promise<Record | null> {
310
+ if (input.allowedIps !== undefined) {
311
+ const valid = ApiKey.schema.AllowedIps.safeParse(input.allowedIps)
312
+ if (!valid.success) throw new Error(`invalid API key input: ${z.prettifyError(valid.error)}`)
313
+ }
310
314
  const recordKey = await state.get(idKeyFor(id))
311
315
  if (!recordKey) return null
312
316
  const record = await read(state, recordKey, Date.now(), options.scopeCatalog ?? Scope.catalog)
@@ -314,6 +318,8 @@ export async function attribute(
314
318
 
315
319
  const updated: Record = {
316
320
  ...record,
321
+ ...(input.allowedIps === undefined ? {} : { allowedIps: input.allowedIps }),
322
+ ...(input.name === undefined ? {} : { name: input.name }),
317
323
  ...(input.orgId === undefined ? {} : { orgId: input.orgId }),
318
324
  ...(input.projectId === undefined ? {} : { projectId: input.projectId }),
319
325
  }
@@ -327,22 +333,52 @@ export async function attribute(
327
333
  return updated
328
334
  }
329
335
 
330
- export declare namespace attribute {
331
- /** Attribution applied by {@link attribute}; omitted fields keep their current value. */
336
+ export declare namespace update {
337
+ /** Metadata applied by {@link update}; omitted fields keep their current value. */
332
338
  type Input = {
339
+ /** Replacement client IP/CIDR allowlist. An empty list clears the restriction. */
340
+ allowedIps?: readonly string[] | undefined
341
+ /** New human-readable key name. */
342
+ name?: string | undefined
333
343
  /** New owning organization id (`org_…`). */
334
344
  orgId?: string | undefined
335
345
  /** New attributed project id (`prj_…`). */
336
346
  projectId?: string | undefined
337
347
  }
338
348
 
339
- /** Options for {@link attribute}. */
349
+ /** Options for {@link update}. */
340
350
  type Options = {
341
351
  /** Scope catalog accepted while reading the key. */
342
352
  scopeCatalog?: Scope.Catalog | undefined
343
353
  }
344
354
  }
345
355
 
356
+ /**
357
+ * Re-attributes a key while preserving the existing public API.
358
+ *
359
+ * @param state - The KV state store holding key records.
360
+ * @param id - The key id (`key_…`).
361
+ * @param input - Attribution to apply.
362
+ * @param options - Scope catalog used for validation.
363
+ * @returns The updated record, or `null` when the key is absent.
364
+ */
365
+ export function attribute(
366
+ state: Store.State,
367
+ id: string,
368
+ input: attribute.Input,
369
+ options: attribute.Options = {},
370
+ ): Promise<Record | null> {
371
+ return update(state, id, input, options)
372
+ }
373
+
374
+ export declare namespace attribute {
375
+ /** Attribution applied by {@link attribute}; omitted fields keep their current value. */
376
+ type Input = Pick<update.Input, 'orgId' | 'projectId'>
377
+
378
+ /** Options for reading and updating the key record. */
379
+ type Options = update.Options
380
+ }
381
+
346
382
  /**
347
383
  * Stamps `billingActive` onto every key an organization owns in an environment,
348
384
  * re-syncing the snapshot the auth path reads when billing flips (activation or