tapimo 0.7.1 → 0.7.2

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 (681) hide show
  1. package/dist/ApiKeys.d.ts +24 -7
  2. package/dist/ApiKeys.d.ts.map +1 -1
  3. package/dist/ApiKeys.js +17 -5
  4. package/dist/ApiKeys.js.map +1 -1
  5. package/dist/App.d.ts +12104 -7861
  6. package/dist/App.d.ts.map +1 -1
  7. package/dist/App.js +191 -128
  8. package/dist/App.js.map +1 -1
  9. package/dist/Assets.d.ts +10 -0
  10. package/dist/Assets.d.ts.map +1 -1
  11. package/dist/Assets.js +17 -4
  12. package/dist/Assets.js.map +1 -1
  13. package/dist/Scope.d.ts +19 -8
  14. package/dist/Scope.d.ts.map +1 -1
  15. package/dist/Scope.js +25 -9
  16. package/dist/Scope.js.map +1 -1
  17. package/dist/Webhooks.d.ts +1 -1
  18. package/dist/admin/App.d.ts +601 -20
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +12 -2
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +94 -11
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +141 -32
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  28. package/dist/admin/apps/earn-vaults.js +409 -0
  29. package/dist/admin/apps/earn-vaults.js.map +1 -0
  30. package/dist/admin/apps/verified-tokens.d.ts +166 -166
  31. package/dist/admin/ui.generated.d.ts +1 -1
  32. package/dist/admin/ui.generated.d.ts.map +1 -1
  33. package/dist/admin/ui.generated.js +99 -43
  34. package/dist/admin/ui.generated.js.map +1 -1
  35. package/dist/analytics/Analytics.d.ts +2 -0
  36. package/dist/analytics/Analytics.d.ts.map +1 -1
  37. package/dist/analytics/Analytics.js +18 -2
  38. package/dist/analytics/Analytics.js.map +1 -1
  39. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  40. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  41. package/dist/analytics/tables/requestEvents.js +59 -39
  42. package/dist/analytics/tables/requestEvents.js.map +1 -1
  43. package/dist/apps/Zones.d.ts +8335 -0
  44. package/dist/apps/Zones.d.ts.map +1 -0
  45. package/dist/apps/Zones.js +38 -0
  46. package/dist/apps/Zones.js.map +1 -0
  47. package/dist/apps/data/App.d.ts +12125 -7913
  48. package/dist/apps/data/App.d.ts.map +1 -1
  49. package/dist/apps/data/App.js +91 -19
  50. package/dist/apps/data/App.js.map +1 -1
  51. package/dist/apps/data/FxOracle.d.ts +1 -1
  52. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  53. package/dist/apps/data/index.d.ts +0 -1
  54. package/dist/apps/data/index.d.ts.map +1 -1
  55. package/dist/apps/data/index.js +0 -1
  56. package/dist/apps/data/index.js.map +1 -1
  57. package/dist/apps/data/routes/activities.d.ts +32 -32
  58. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  59. package/dist/apps/data/routes/activities.js +130 -65
  60. package/dist/apps/data/routes/activities.js.map +1 -1
  61. package/dist/apps/data/routes/addresses.d.ts +312 -312
  62. package/dist/apps/data/routes/balances.d.ts +18 -18
  63. package/dist/apps/data/routes/balances.js +5 -5
  64. package/dist/apps/data/routes/balances.js.map +1 -1
  65. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  66. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  67. package/dist/apps/data/routes/coingecko.js +62 -35
  68. package/dist/apps/data/routes/coingecko.js.map +1 -1
  69. package/dist/apps/data/routes/earn.d.ts +2144 -0
  70. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  71. package/dist/apps/data/routes/earn.js +947 -0
  72. package/dist/apps/data/routes/earn.js.map +1 -0
  73. package/dist/apps/data/routes/exchanges.d.ts +1625 -718
  74. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  75. package/dist/apps/data/routes/exchanges.js +656 -193
  76. package/dist/apps/data/routes/exchanges.js.map +1 -1
  77. package/dist/apps/data/routes/fee-amm.d.ts +108 -108
  78. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  79. package/dist/apps/data/routes/fee-amm.js +59 -8
  80. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  81. package/dist/apps/data/routes/funding.d.ts +4092 -387
  82. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  83. package/dist/apps/data/routes/funding.js +1403 -256
  84. package/dist/apps/data/routes/funding.js.map +1 -1
  85. package/dist/apps/data/routes/indexer.d.ts +30 -30
  86. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  87. package/dist/apps/data/routes/indexer.js +19 -2
  88. package/dist/apps/data/routes/indexer.js.map +1 -1
  89. package/dist/apps/data/routes/receipts.d.ts +263 -263
  90. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  91. package/dist/apps/data/routes/receipts.js +11 -11
  92. package/dist/apps/data/routes/receipts.js.map +1 -1
  93. package/dist/apps/data/routes/rpc.d.ts +5 -5
  94. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  95. package/dist/apps/data/routes/rpc.js +211 -22
  96. package/dist/apps/data/routes/rpc.js.map +1 -1
  97. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  98. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  99. package/dist/apps/data/routes/tokenlist.js +39 -8
  100. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  101. package/dist/apps/data/routes/tokens.d.ts +114 -86
  102. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  103. package/dist/apps/data/routes/tokens.js +194 -91
  104. package/dist/apps/data/routes/tokens.js.map +1 -1
  105. package/dist/apps/data/routes/transactions.d.ts +53 -53
  106. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  107. package/dist/apps/data/routes/transactions.js +78 -39
  108. package/dist/apps/data/routes/transactions.js.map +1 -1
  109. package/dist/apps/data/routes/transfers.d.ts +76 -27
  110. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  111. package/dist/apps/data/routes/transfers.js +165 -67
  112. package/dist/apps/data/routes/transfers.js.map +1 -1
  113. package/dist/apps/data/routes/valuation.d.ts +42 -42
  114. package/dist/apps/data/routes/valuation.js +2 -2
  115. package/dist/apps/data/routes/valuation.js.map +1 -1
  116. package/dist/apps/data/routes/webhooks.d.ts +369 -367
  117. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  118. package/dist/apps/data/routes/webhooks.js +161 -59
  119. package/dist/apps/data/routes/webhooks.js.map +1 -1
  120. package/dist/apps/data/routes/zones.d.ts +281 -0
  121. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  122. package/dist/apps/data/routes/zones.js +252 -0
  123. package/dist/apps/data/routes/zones.js.map +1 -0
  124. package/dist/apps/docs/reference.js +6 -5
  125. package/dist/apps/docs/reference.js.map +1 -1
  126. package/dist/apps/index.d.ts +2 -1
  127. package/dist/apps/index.d.ts.map +1 -1
  128. package/dist/apps/index.js +2 -1
  129. package/dist/apps/index.js.map +1 -1
  130. package/dist/apps/management/App.d.ts +670 -670
  131. package/dist/apps/management/Billing.d.ts +8 -0
  132. package/dist/apps/management/Billing.d.ts.map +1 -1
  133. package/dist/apps/management/Billing.js +12 -0
  134. package/dist/apps/management/Billing.js.map +1 -1
  135. package/dist/apps/management/Error.d.ts +12 -0
  136. package/dist/apps/management/Error.d.ts.map +1 -0
  137. package/dist/apps/management/Error.js +10 -0
  138. package/dist/apps/management/Error.js.map +1 -0
  139. package/dist/apps/management/routes/api-keys.d.ts +5 -5
  140. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  141. package/dist/apps/management/routes/api-keys.js +2 -8
  142. package/dist/apps/management/routes/api-keys.js.map +1 -1
  143. package/dist/apps/management/routes/billing.d.ts +119 -119
  144. package/dist/apps/management/routes/faucet.d.ts +2 -2
  145. package/dist/apps/management/routes/invitations.d.ts +62 -62
  146. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  147. package/dist/apps/management/routes/invitations.js +4 -10
  148. package/dist/apps/management/routes/invitations.js.map +1 -1
  149. package/dist/apps/management/routes/invite-links.d.ts +30 -30
  150. package/dist/apps/management/routes/me.d.ts +6 -6
  151. package/dist/apps/management/routes/members.d.ts +2 -2
  152. package/dist/apps/management/routes/orgs.d.ts +48 -48
  153. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  154. package/dist/apps/management/routes/orgs.js +2 -8
  155. package/dist/apps/management/routes/orgs.js.map +1 -1
  156. package/dist/apps/management/routes/projects.d.ts +9 -9
  157. package/dist/apps/management/routes/scopes.js +2 -2
  158. package/dist/apps/management/routes/scopes.js.map +1 -1
  159. package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
  160. package/dist/apps/management/routes/webhooks.d.ts +50 -50
  161. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  162. package/dist/apps/management/routes/webhooks.js +15 -3
  163. package/dist/apps/management/routes/webhooks.js.map +1 -1
  164. package/dist/apps/mpp/App.d.ts +55 -56
  165. package/dist/apps/mpp/App.d.ts.map +1 -1
  166. package/dist/apps/mpp/App.js +192 -27
  167. package/dist/apps/mpp/App.js.map +1 -1
  168. package/dist/apps/mpp/Mpp.d.ts +0 -20
  169. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  170. package/dist/apps/mpp/Mpp.js +0 -24
  171. package/dist/apps/mpp/Mpp.js.map +1 -1
  172. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  173. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  174. package/dist/apps/mpp/internal/Adapter.js +66 -0
  175. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  176. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  177. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  178. package/dist/apps/mpp/internal/Error.js +41 -0
  179. package/dist/apps/mpp/internal/Error.js.map +1 -0
  180. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  181. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  182. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  183. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  184. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  185. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  186. package/dist/apps/mpp/internal/Policy.js +57 -0
  187. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  188. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  189. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  190. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  191. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  192. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  193. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  194. package/dist/apps/mpp/internal/Screening.js +20 -0
  195. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  196. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  197. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  198. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  199. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  200. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  201. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  202. package/dist/apps/mpp/internal/Utils.js +24 -0
  203. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  204. package/dist/apps/relay/App.js +183 -23
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  208. package/dist/apps/relay/Sponsorships.js +15 -6
  209. package/dist/apps/relay/Sponsorships.js.map +1 -1
  210. package/dist/db/Db.d.ts +20 -0
  211. package/dist/db/Db.d.ts.map +1 -1
  212. package/dist/db/Db.js +342 -0
  213. package/dist/db/Db.js.map +1 -1
  214. package/dist/db/Schema.d.ts +921 -1
  215. package/dist/db/Schema.d.ts.map +1 -1
  216. package/dist/db/Schema.js +269 -1
  217. package/dist/db/Schema.js.map +1 -1
  218. package/dist/db/tables/earnVaults.d.ts +68 -0
  219. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  220. package/dist/db/tables/earnVaults.js +72 -0
  221. package/dist/db/tables/earnVaults.js.map +1 -0
  222. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  223. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  224. package/dist/db/tables/fundingCatalog.js +85 -0
  225. package/dist/db/tables/fundingCatalog.js.map +1 -0
  226. package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
  227. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  228. package/dist/db/tables/fundingDepositAddresses.js +206 -0
  229. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  230. package/dist/db/tables/fundingDeposits.d.ts +115 -0
  231. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  232. package/dist/db/tables/fundingDeposits.js +100 -0
  233. package/dist/db/tables/fundingDeposits.js.map +1 -0
  234. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  235. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  236. package/dist/db/tables/fundingIdempotency.js +103 -0
  237. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  238. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  239. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  240. package/dist/db/tables/fundingTransferEvents.js +18 -0
  241. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  242. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  243. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  244. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  245. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  246. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  247. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  248. package/dist/db/tables/fundingTransfers.js +89 -0
  249. package/dist/db/tables/fundingTransfers.js.map +1 -0
  250. package/dist/db/tables/organizations.d.ts +8 -0
  251. package/dist/db/tables/organizations.d.ts.map +1 -1
  252. package/dist/db/tables/organizations.js +16 -0
  253. package/dist/db/tables/organizations.js.map +1 -1
  254. package/dist/db/tables/projects.d.ts +8 -0
  255. package/dist/db/tables/projects.d.ts.map +1 -1
  256. package/dist/db/tables/projects.js +16 -0
  257. package/dist/db/tables/projects.js.map +1 -1
  258. package/dist/db/tables/requestUsage.d.ts +13 -0
  259. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  260. package/dist/db/tables/requestUsage.js +16 -0
  261. package/dist/db/tables/requestUsage.js.map +1 -1
  262. package/dist/db/tables/sponsoredTransactions.d.ts +2 -2
  263. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  264. package/dist/db/tables/sponsoredTransactions.js +1 -1
  265. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  266. package/dist/db/tables/users.d.ts +8 -0
  267. package/dist/db/tables/users.d.ts.map +1 -1
  268. package/dist/db/tables/users.js +16 -0
  269. package/dist/db/tables/users.js.map +1 -1
  270. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  271. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  272. package/dist/db/tables/verifiedTokens.js +9 -7
  273. package/dist/db/tables/verifiedTokens.js.map +1 -1
  274. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  275. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  276. package/dist/db/tables/webhookSubscriptions.js +24 -3
  277. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  278. package/dist/handlers/relay.js +108 -108
  279. package/dist/handlers/relay.js.map +1 -1
  280. package/dist/internal/Auth.d.ts +26 -0
  281. package/dist/internal/Auth.d.ts.map +1 -1
  282. package/dist/internal/Auth.js +35 -2
  283. package/dist/internal/Auth.js.map +1 -1
  284. package/dist/internal/Cache.d.ts.map +1 -1
  285. package/dist/internal/Cache.js +16 -10
  286. package/dist/internal/Cache.js.map +1 -1
  287. package/dist/internal/Cursor.js +1 -1
  288. package/dist/internal/Cursor.js.map +1 -1
  289. package/dist/internal/EarnRates.d.ts +89 -0
  290. package/dist/internal/EarnRates.d.ts.map +1 -0
  291. package/dist/internal/EarnRates.js +266 -0
  292. package/dist/internal/EarnRates.js.map +1 -0
  293. package/dist/internal/EarnVaults.d.ts +171 -0
  294. package/dist/internal/EarnVaults.d.ts.map +1 -0
  295. package/dist/internal/EarnVaults.js +547 -0
  296. package/dist/internal/EarnVaults.js.map +1 -0
  297. package/dist/internal/EdgeCache.d.ts +8 -1
  298. package/dist/internal/EdgeCache.d.ts.map +1 -1
  299. package/dist/internal/EdgeCache.js +33 -7
  300. package/dist/internal/EdgeCache.js.map +1 -1
  301. package/dist/internal/Id.d.ts +11 -0
  302. package/dist/internal/Id.d.ts.map +1 -1
  303. package/dist/internal/Id.js +13 -0
  304. package/dist/internal/Id.js.map +1 -1
  305. package/dist/internal/Idempotency.d.ts +83 -0
  306. package/dist/internal/Idempotency.d.ts.map +1 -0
  307. package/dist/internal/Idempotency.js +113 -0
  308. package/dist/internal/Idempotency.js.map +1 -0
  309. package/dist/internal/Log.d.ts +64 -9
  310. package/dist/internal/Log.d.ts.map +1 -1
  311. package/dist/internal/Log.js +29 -7
  312. package/dist/internal/Log.js.map +1 -1
  313. package/dist/internal/MetricSink.d.ts.map +1 -1
  314. package/dist/internal/MetricSink.js +47 -1
  315. package/dist/internal/MetricSink.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +1 -1
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +3 -0
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/Provider.d.ts +14 -0
  321. package/dist/internal/Provider.d.ts.map +1 -0
  322. package/dist/internal/Provider.js +5 -0
  323. package/dist/internal/Provider.js.map +1 -0
  324. package/dist/internal/Schema.d.ts +6 -1
  325. package/dist/internal/Schema.d.ts.map +1 -1
  326. package/dist/internal/Schema.js +20 -11
  327. package/dist/internal/Schema.js.map +1 -1
  328. package/dist/internal/Store.d.ts +6 -0
  329. package/dist/internal/Store.d.ts.map +1 -1
  330. package/dist/internal/Store.js +35 -0
  331. package/dist/internal/Store.js.map +1 -1
  332. package/dist/internal/Tidx.d.ts +43 -24
  333. package/dist/internal/Tidx.d.ts.map +1 -1
  334. package/dist/internal/Tidx.js +79 -11
  335. package/dist/internal/Tidx.js.map +1 -1
  336. package/dist/internal/Viem.d.ts +82 -65
  337. package/dist/internal/Viem.d.ts.map +1 -1
  338. package/dist/internal/Viem.js +83 -12
  339. package/dist/internal/Viem.js.map +1 -1
  340. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  341. package/dist/internal/WebhookDestination.js +34 -28
  342. package/dist/internal/WebhookDestination.js.map +1 -1
  343. package/dist/internal/Webhooks.d.ts +9 -0
  344. package/dist/internal/Webhooks.d.ts.map +1 -1
  345. package/dist/internal/Webhooks.js +15 -10
  346. package/dist/internal/Webhooks.js.map +1 -1
  347. package/dist/internal/exchange/Provider.d.ts +219 -0
  348. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  349. package/dist/internal/exchange/Provider.js +117 -0
  350. package/dist/internal/exchange/Provider.js.map +1 -0
  351. package/dist/internal/exchange/index.d.ts +2 -0
  352. package/dist/internal/exchange/index.d.ts.map +1 -0
  353. package/dist/internal/exchange/index.js +2 -0
  354. package/dist/internal/exchange/index.js.map +1 -0
  355. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  356. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  357. package/dist/internal/exchange/providers/uniswap.js +553 -0
  358. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  359. package/dist/internal/funding/Action.d.ts +55 -0
  360. package/dist/internal/funding/Action.d.ts.map +1 -0
  361. package/dist/internal/funding/Action.js +74 -0
  362. package/dist/internal/funding/Action.js.map +1 -0
  363. package/dist/internal/funding/Catalog.d.ts +107 -0
  364. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  365. package/dist/internal/funding/Catalog.js +270 -0
  366. package/dist/internal/funding/Catalog.js.map +1 -0
  367. package/dist/internal/funding/Chain.d.ts +76 -0
  368. package/dist/internal/funding/Chain.d.ts.map +1 -0
  369. package/dist/internal/funding/Chain.js +38 -0
  370. package/dist/internal/funding/Chain.js.map +1 -0
  371. package/dist/internal/funding/Deposit.d.ts +366 -0
  372. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  373. package/dist/internal/funding/Deposit.js +286 -0
  374. package/dist/internal/funding/Deposit.js.map +1 -0
  375. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  376. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  377. package/dist/internal/funding/DepositAddress.js +189 -0
  378. package/dist/internal/funding/DepositAddress.js.map +1 -0
  379. package/dist/internal/funding/Evidence.d.ts +52 -0
  380. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  381. package/dist/internal/funding/Evidence.js +314 -0
  382. package/dist/internal/funding/Evidence.js.map +1 -0
  383. package/dist/internal/funding/Provider.d.ts +1186 -0
  384. package/dist/internal/funding/Provider.d.ts.map +1 -0
  385. package/dist/internal/funding/Provider.js +1081 -0
  386. package/dist/internal/funding/Provider.js.map +1 -0
  387. package/dist/internal/funding/Reconciliation.d.ts +113 -0
  388. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  389. package/dist/internal/funding/Reconciliation.js +676 -0
  390. package/dist/internal/funding/Reconciliation.js.map +1 -0
  391. package/dist/internal/funding/Route.d.ts +21 -0
  392. package/dist/internal/funding/Route.d.ts.map +1 -0
  393. package/dist/internal/funding/Route.js +5 -0
  394. package/dist/internal/funding/Route.js.map +1 -0
  395. package/dist/internal/funding/Subsidy.d.ts +113 -0
  396. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  397. package/dist/internal/funding/Subsidy.js +138 -0
  398. package/dist/internal/funding/Subsidy.js.map +1 -0
  399. package/dist/internal/funding/Token.d.ts +41 -0
  400. package/dist/internal/funding/Token.d.ts.map +1 -0
  401. package/dist/internal/funding/Token.js +22 -0
  402. package/dist/internal/funding/Token.js.map +1 -0
  403. package/dist/internal/funding/Transfer.d.ts +643 -0
  404. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  405. package/dist/internal/funding/Transfer.js +332 -0
  406. package/dist/internal/funding/Transfer.js.map +1 -0
  407. package/dist/internal/funding/index.d.ts +13 -0
  408. package/dist/internal/funding/index.d.ts.map +1 -0
  409. package/dist/internal/funding/index.js +13 -0
  410. package/dist/internal/funding/index.js.map +1 -0
  411. package/dist/internal/funding/providers/across.d.ts +21 -0
  412. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  413. package/dist/internal/funding/providers/across.js +117 -0
  414. package/dist/internal/funding/providers/across.js.map +1 -0
  415. package/dist/internal/funding/providers/relay.d.ts +46 -0
  416. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  417. package/dist/internal/funding/providers/relay.js +464 -0
  418. package/dist/internal/funding/providers/relay.js.map +1 -0
  419. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  420. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  421. package/dist/internal/funding/providers/rhino.js +116 -0
  422. package/dist/internal/funding/providers/rhino.js.map +1 -0
  423. package/dist/internal/funding/providers/squid.d.ts +19 -0
  424. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  425. package/dist/internal/funding/providers/squid.js +120 -0
  426. package/dist/internal/funding/providers/squid.js.map +1 -0
  427. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  428. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  429. package/dist/internal/funding/providers/symbiosis.js +176 -0
  430. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  431. package/dist/internal/index.d.ts +5 -1
  432. package/dist/internal/index.d.ts.map +1 -1
  433. package/dist/internal/index.js +5 -1
  434. package/dist/internal/index.js.map +1 -1
  435. package/dist/internal/webhookDestinations/url.js +61 -57
  436. package/dist/internal/webhookDestinations/url.js.map +1 -1
  437. package/dist/providers/index.d.ts +43 -0
  438. package/dist/providers/index.d.ts.map +1 -0
  439. package/dist/providers/index.js +19 -0
  440. package/dist/providers/index.js.map +1 -0
  441. package/package.json +9 -4
  442. package/src/ApiKeys.test.ts +11 -7
  443. package/src/ApiKeys.ts +37 -9
  444. package/src/App.test.ts +85 -10
  445. package/src/App.ts +224 -137
  446. package/src/Assets.ts +29 -4
  447. package/src/Client.test-d.ts +650 -30
  448. package/src/Scope.test.ts +19 -0
  449. package/src/Scope.ts +28 -11
  450. package/src/Webhooks.test.ts +25 -0
  451. package/src/Webhooks.ts +1 -1
  452. package/src/admin/App.test.ts +9 -2
  453. package/src/admin/App.ts +32 -9
  454. package/src/admin/apps/api-keys.test.ts +167 -23
  455. package/src/admin/apps/api-keys.ts +166 -28
  456. package/src/admin/apps/earn-vaults.test.ts +338 -0
  457. package/src/admin/apps/earn-vaults.ts +572 -0
  458. package/src/admin/apps/scopes.test.ts +16 -1
  459. package/src/admin/ui/plugin.ts +2 -2
  460. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  461. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  462. package/src/admin/ui/src/components/Page.tsx +1 -1
  463. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  464. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  465. package/src/admin/ui/src/lib/client.ts +1 -1
  466. package/src/admin/ui/src/lib/config.ts +1 -1
  467. package/src/admin/ui/src/lib/early-access.ts +8 -9
  468. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  469. package/src/admin/ui/src/lib/format.ts +13 -0
  470. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  471. package/src/admin/ui/src/lib/organizations.ts +7 -1
  472. package/src/admin/ui/src/lib/response.ts +22 -0
  473. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  474. package/src/admin/ui/src/lib/scopes.ts +28 -7
  475. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  476. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  477. package/src/admin/ui/src/router.tsx +2 -2
  478. package/src/admin/ui/src/routes/__root.tsx +9 -8
  479. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  480. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  481. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  482. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  483. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  484. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  485. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  486. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  487. package/src/admin/ui/vite.config.ts +4 -1
  488. package/src/admin/ui.generated.ts +113 -43
  489. package/src/analytics/Analytics.test.ts +69 -10
  490. package/src/analytics/Analytics.ts +20 -1
  491. package/src/analytics/tables/requestEvents.ts +79 -37
  492. package/src/apps/Zones.test.ts +33 -0
  493. package/src/apps/Zones.ts +40 -0
  494. package/src/apps/composition.test.ts +84 -1
  495. package/src/apps/data/App.test.ts +28 -11
  496. package/src/apps/data/App.ts +96 -33
  497. package/src/apps/data/FxOracle.ts +1 -1
  498. package/src/apps/data/index.ts +0 -1
  499. package/src/apps/data/routes/activities.test.ts +82 -6
  500. package/src/apps/data/routes/activities.ts +131 -71
  501. package/src/apps/data/routes/balances.test.ts +50 -37
  502. package/src/apps/data/routes/balances.ts +5 -5
  503. package/src/apps/data/routes/blocks.test.ts +2 -0
  504. package/src/apps/data/routes/coingecko.test.ts +22 -0
  505. package/src/apps/data/routes/coingecko.ts +84 -48
  506. package/src/apps/data/routes/earn.test.ts +1108 -0
  507. package/src/apps/data/routes/earn.ts +1391 -0
  508. package/src/apps/data/routes/exchanges.test.ts +82 -33
  509. package/src/apps/data/routes/exchanges.ts +842 -227
  510. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  511. package/src/apps/data/routes/fee-amm.ts +69 -12
  512. package/src/apps/data/routes/funding.test.ts +2712 -221
  513. package/src/apps/data/routes/funding.ts +1604 -387
  514. package/src/apps/data/routes/indexer.test.ts +43 -34
  515. package/src/apps/data/routes/indexer.ts +19 -2
  516. package/src/apps/data/routes/receipts.test.ts +5 -3
  517. package/src/apps/data/routes/receipts.ts +13 -11
  518. package/src/apps/data/routes/rpc.test.ts +446 -28
  519. package/src/apps/data/routes/rpc.ts +243 -25
  520. package/src/apps/data/routes/tokenlist.ts +72 -19
  521. package/src/apps/data/routes/tokens.ts +258 -86
  522. package/src/apps/data/routes/transactions.test.ts +2 -0
  523. package/src/apps/data/routes/transactions.ts +77 -42
  524. package/src/apps/data/routes/transfers.test.ts +166 -4
  525. package/src/apps/data/routes/transfers.ts +216 -78
  526. package/src/apps/data/routes/valuation.test.ts +62 -9
  527. package/src/apps/data/routes/valuation.ts +2 -2
  528. package/src/apps/data/routes/webhooks.test.ts +386 -43
  529. package/src/apps/data/routes/webhooks.ts +172 -71
  530. package/src/apps/data/routes/zones.test.ts +473 -0
  531. package/src/apps/data/routes/zones.ts +338 -0
  532. package/src/apps/docs/reference.ts +8 -6
  533. package/src/apps/index.ts +2 -1
  534. package/src/apps/management/Billing.test.ts +29 -0
  535. package/src/apps/management/Billing.ts +23 -0
  536. package/src/apps/management/Error.ts +12 -0
  537. package/src/apps/management/routes/api-keys.test.ts +5 -3
  538. package/src/apps/management/routes/api-keys.ts +2 -9
  539. package/src/apps/management/routes/invitations.ts +4 -11
  540. package/src/apps/management/routes/orgs.ts +2 -9
  541. package/src/apps/management/routes/scopes.test.ts +7 -2
  542. package/src/apps/management/routes/scopes.ts +2 -2
  543. package/src/apps/management/routes/webhooks.test.ts +6 -1
  544. package/src/apps/management/routes/webhooks.ts +15 -3
  545. package/src/apps/mpp/App.ts +276 -29
  546. package/src/apps/mpp/Mpp.test.ts +631 -26
  547. package/src/apps/mpp/Mpp.ts +0 -42
  548. package/src/apps/mpp/internal/Adapter.ts +108 -3
  549. package/src/apps/mpp/internal/Error.test.ts +33 -0
  550. package/src/apps/mpp/internal/Error.ts +44 -6
  551. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  552. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  553. package/src/apps/mpp/internal/Policy.test.ts +122 -0
  554. package/src/apps/mpp/internal/Policy.ts +98 -0
  555. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  556. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  557. package/src/apps/mpp/internal/Screening.ts +40 -3
  558. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  559. package/src/apps/mpp/internal/Utils.ts +30 -0
  560. package/src/apps/relay/App.test.ts +493 -62
  561. package/src/apps/relay/App.ts +233 -23
  562. package/src/apps/relay/Sponsorships.test.ts +49 -0
  563. package/src/apps/relay/Sponsorships.ts +18 -6
  564. package/src/db/Db.ts +439 -0
  565. package/src/db/Schema.ts +325 -2
  566. package/src/db/tables/earnVaults.test.ts +185 -0
  567. package/src/db/tables/earnVaults.ts +151 -0
  568. package/src/db/tables/fundingCatalog.test.ts +108 -0
  569. package/src/db/tables/fundingCatalog.ts +157 -0
  570. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  571. package/src/db/tables/fundingDepositAddresses.ts +376 -0
  572. package/src/db/tables/fundingDeposits.test.ts +261 -0
  573. package/src/db/tables/fundingDeposits.ts +229 -0
  574. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  575. package/src/db/tables/fundingIdempotency.ts +180 -0
  576. package/src/db/tables/fundingTransferEvents.ts +28 -0
  577. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  578. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  579. package/src/db/tables/fundingTransfers.test.ts +89 -0
  580. package/src/db/tables/fundingTransfers.ts +153 -0
  581. package/src/db/tables/organizations.ts +16 -0
  582. package/src/db/tables/projects.ts +16 -0
  583. package/src/db/tables/requestUsage.ts +23 -0
  584. package/src/db/tables/sponsoredTransactions.test.ts +11 -0
  585. package/src/db/tables/sponsoredTransactions.ts +3 -3
  586. package/src/db/tables/users.ts +16 -0
  587. package/src/db/tables/verifiedTokens.ts +19 -14
  588. package/src/db/tables/webhookSubscriptions.ts +58 -3
  589. package/src/handlers/relay.test.ts +2 -0
  590. package/src/handlers/relay.ts +95 -99
  591. package/src/internal/Auth.test.ts +48 -0
  592. package/src/internal/Auth.ts +61 -2
  593. package/src/internal/Cache.ts +13 -9
  594. package/src/internal/Cursor.test.ts +2 -2
  595. package/src/internal/Cursor.ts +1 -1
  596. package/src/internal/EarnRates.test.ts +125 -0
  597. package/src/internal/EarnRates.ts +409 -0
  598. package/src/internal/EarnVaults.test.ts +195 -0
  599. package/src/internal/EarnVaults.ts +876 -0
  600. package/src/internal/EdgeCache.test.ts +19 -0
  601. package/src/internal/EdgeCache.ts +35 -5
  602. package/src/internal/Id.ts +14 -0
  603. package/src/internal/Idempotency.test.ts +109 -0
  604. package/src/internal/Idempotency.ts +237 -0
  605. package/src/internal/Log.test-d.ts +41 -8
  606. package/src/internal/Log.test.ts +189 -8
  607. package/src/internal/Log.ts +124 -17
  608. package/src/internal/MetricSink.test.ts +244 -4
  609. package/src/internal/MetricSink.ts +51 -1
  610. package/src/internal/OpenApi.ts +3 -0
  611. package/src/internal/Provider.test.ts +17 -0
  612. package/src/internal/Provider.ts +17 -0
  613. package/src/internal/Schema.ts +27 -17
  614. package/src/internal/Store.test.ts +25 -0
  615. package/src/internal/Store.ts +46 -0
  616. package/src/internal/Tidx.local.test.ts +78 -3
  617. package/src/internal/Tidx.test.ts +212 -18
  618. package/src/internal/Tidx.ts +112 -32
  619. package/src/internal/VerifiedTokens.test.ts +15 -0
  620. package/src/internal/Viem.test.ts +170 -17
  621. package/src/internal/Viem.ts +111 -28
  622. package/src/internal/WebhookDestination.ts +25 -23
  623. package/src/internal/Webhooks.test.ts +59 -0
  624. package/src/internal/Webhooks.ts +34 -10
  625. package/src/internal/exchange/Provider.test.ts +216 -0
  626. package/src/internal/exchange/Provider.ts +326 -0
  627. package/src/internal/exchange/index.test.ts +6 -0
  628. package/src/internal/exchange/index.ts +1 -0
  629. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  630. package/src/internal/exchange/providers/uniswap.ts +682 -0
  631. package/src/internal/funding/Action.test.ts +138 -0
  632. package/src/internal/funding/Action.ts +117 -0
  633. package/src/internal/funding/Catalog.test.ts +311 -0
  634. package/src/internal/funding/Catalog.ts +347 -0
  635. package/src/internal/funding/Chain.test.ts +79 -0
  636. package/src/internal/funding/Chain.ts +120 -0
  637. package/src/internal/funding/Deposit.test.ts +26 -0
  638. package/src/internal/funding/Deposit.ts +453 -0
  639. package/src/internal/funding/DepositAddress.test.ts +18 -0
  640. package/src/internal/funding/DepositAddress.ts +312 -0
  641. package/src/internal/funding/Evidence.test.ts +297 -0
  642. package/src/internal/funding/Evidence.ts +430 -0
  643. package/src/internal/funding/Provider.test.ts +1328 -0
  644. package/src/internal/funding/Provider.ts +1796 -0
  645. package/src/internal/funding/Reconciliation.local.test.ts +504 -0
  646. package/src/internal/funding/Reconciliation.test.ts +2020 -0
  647. package/src/internal/funding/Reconciliation.ts +930 -0
  648. package/src/internal/funding/Route.test.ts +66 -0
  649. package/src/internal/funding/Route.ts +29 -0
  650. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  651. package/src/internal/funding/Subsidy.test.ts +75 -0
  652. package/src/internal/funding/Subsidy.ts +260 -0
  653. package/src/internal/funding/Token.test.ts +47 -0
  654. package/src/internal/funding/Token.ts +59 -0
  655. package/src/internal/funding/Transfer.test.ts +369 -0
  656. package/src/internal/funding/Transfer.ts +522 -0
  657. package/src/internal/funding/index.test.ts +20 -0
  658. package/src/internal/funding/index.ts +12 -0
  659. package/src/internal/funding/providers/across.ts +149 -0
  660. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  661. package/src/internal/funding/providers/relay.test.ts +474 -0
  662. package/src/internal/funding/providers/relay.ts +559 -0
  663. package/src/internal/funding/providers/rhino.ts +139 -0
  664. package/src/internal/funding/providers/squid.ts +151 -0
  665. package/src/internal/funding/providers/symbiosis.ts +221 -0
  666. package/src/internal/index.test.ts +5 -1
  667. package/src/internal/index.ts +5 -1
  668. package/src/internal/webhookDestinations/url.ts +49 -45
  669. package/src/providers/index.test.ts +14 -0
  670. package/src/providers/index.ts +54 -0
  671. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  672. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  673. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  674. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  675. package/dist/internal/FundingQuotes.d.ts +0 -864
  676. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  677. package/dist/internal/FundingQuotes.js +0 -672
  678. package/dist/internal/FundingQuotes.js.map +0 -1
  679. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  680. package/src/internal/FundingQuotes.test.ts +0 -456
  681. package/src/internal/FundingQuotes.ts +0 -944
@@ -0,0 +1,376 @@
1
+ import { sql, type JSONColumnType, type Selectable } from 'kysely'
2
+ import * as pg from 'pg'
3
+
4
+ import type * as Db from '../Db.js'
5
+ import type * as db_Schema from '../Schema.js'
6
+
7
+ /** Columns of the `funding_deposit_addresses` table. */
8
+ export type Table = Omit<db_Schema.FundingDepositAddress, 'providerRequestIds'> & {
9
+ /** Private provider request identifiers stored as JSON. */
10
+ providerRequestIds: JSONColumnType<readonly string[], string, string>
11
+ }
12
+
13
+ /** A stored funding deposit address. */
14
+ export type Record = Selectable<Table>
15
+
16
+ /** Ownership filter derived from the authenticated API key. */
17
+ export type Owner = {
18
+ /** Key environment. */
19
+ environment: Record['environment']
20
+ /** Owning organization id (`org_…`). */
21
+ orgId: string
22
+ /** Attributed project id for project-scoped API keys. */
23
+ projectId?: string | undefined
24
+ }
25
+
26
+ /** Identity fields that make one reusable address match a caller request. */
27
+ export type Match = Owner & {
28
+ /** Customer destination token key. */
29
+ destinationTokenKey: string
30
+ /** Tempo account that receives completed deposits. */
31
+ recipient: string
32
+ /** Source-chain account that receives refunds. */
33
+ refundAddress: string
34
+ /** Source chain CAIP-2 id. */
35
+ sourceChainId: string
36
+ /** Source token key. */
37
+ sourceTokenKey: string
38
+ /** Whether Tempo guarantees normalized 1:1 delivery. */
39
+ subsidize: boolean
40
+ }
41
+
42
+ /** Inserts a provisioned funding deposit address. */
43
+ export function insert(db: Db.Db, record: Record): Promise<Record> {
44
+ return db.kysely
45
+ .insertInto('funding_deposit_addresses')
46
+ .values({
47
+ ...record,
48
+ providerRequestIds: JSON.stringify(record.providerRequestIds),
49
+ })
50
+ .returningAll()
51
+ .executeTakeFirstOrThrow()
52
+ }
53
+
54
+ /** Inserts an address or returns the concurrently-created matching resource. */
55
+ export async function insertOrGet(db: Db.Db, options: insertOrGet.Options): Promise<Record> {
56
+ const record = await db.kysely
57
+ .insertInto('funding_deposit_addresses')
58
+ .values({
59
+ ...options.record,
60
+ providerRequestIds: JSON.stringify(options.record.providerRequestIds),
61
+ })
62
+ .onConflict((oc) =>
63
+ oc
64
+ .columns([
65
+ 'orgId',
66
+ 'environment',
67
+ 'projectId',
68
+ 'sourceChainId',
69
+ 'sourceTokenKey',
70
+ 'destinationTokenKey',
71
+ 'recipient',
72
+ 'refundAddress',
73
+ 'subsidize',
74
+ ])
75
+ .doNothing(),
76
+ )
77
+ .returningAll()
78
+ .executeTakeFirst()
79
+ .catch((cause) => {
80
+ if (
81
+ cause instanceof pg.DatabaseError &&
82
+ cause.code === '23505' &&
83
+ cause.constraint === 'funding_deposit_addresses_provider_address_key'
84
+ )
85
+ throw new ConflictError()
86
+ throw cause
87
+ })
88
+ if (record) return record
89
+ const existing = await getMatching(db, options.match)
90
+ if (existing) return existing
91
+ throw new ConflictError()
92
+ }
93
+
94
+ export declare namespace insertOrGet {
95
+ /** Record and stable identity used by create-or-get. */
96
+ type Options = {
97
+ /** Stable customer-visible address identity. */
98
+ match: Match
99
+ /** Provisioned address record to insert. */
100
+ record: Record
101
+ }
102
+ }
103
+
104
+ /** Gets a funding deposit address without ownership scoping. */
105
+ export function get(db: Db.Db, id: string): Promise<Record | undefined> {
106
+ return db.kysely
107
+ .selectFrom('funding_deposit_addresses')
108
+ .selectAll()
109
+ .where('id', '=', id)
110
+ .executeTakeFirst()
111
+ }
112
+
113
+ /** Gets a funding deposit address by its provider-owned address. */
114
+ export function getByProviderAddress(
115
+ db: Db.Db,
116
+ options: getByProviderAddress.Options,
117
+ ): Promise<Record | undefined> {
118
+ const address = /^0x[0-9a-fA-F]{40}$/.test(options.address)
119
+ ? options.address.toLowerCase()
120
+ : options.address
121
+ return db.kysely
122
+ .selectFrom('funding_deposit_addresses')
123
+ .selectAll()
124
+ .where('address', '=', address)
125
+ .where('providerId', '=', options.providerId)
126
+ .executeTakeFirst()
127
+ }
128
+
129
+ export declare namespace getByProviderAddress {
130
+ /** Provider address identity received from a reconciliation trigger. */
131
+ type Options = {
132
+ /** Provider-owned reusable deposit address. */
133
+ address: string
134
+ /** Funding provider id. */
135
+ providerId: string
136
+ }
137
+ }
138
+
139
+ /** Gets an owner-visible funding deposit address. */
140
+ export function getOwned(db: Db.Db, owner: Owner, id: string): Promise<Record | undefined> {
141
+ let query = db.kysely
142
+ .selectFrom('funding_deposit_addresses')
143
+ .selectAll()
144
+ .where('environment', '=', owner.environment)
145
+ .where('id', '=', id)
146
+ .where('orgId', '=', owner.orgId)
147
+ if (owner.projectId !== undefined) query = query.where('projectId', '=', owner.projectId)
148
+ return query.executeTakeFirst()
149
+ }
150
+
151
+ /** Gets the reusable address that matches one owner and route identity. */
152
+ export function getMatching(db: Db.Db, match: Match): Promise<Record | undefined> {
153
+ let query = db.kysely
154
+ .selectFrom('funding_deposit_addresses')
155
+ .selectAll()
156
+ .where('destinationTokenKey', '=', match.destinationTokenKey)
157
+ .where('environment', '=', match.environment)
158
+ .where('orgId', '=', match.orgId)
159
+ .where('recipient', '=', match.recipient)
160
+ .where('refundAddress', '=', match.refundAddress)
161
+ .where('sourceChainId', '=', match.sourceChainId)
162
+ .where('sourceTokenKey', '=', match.sourceTokenKey)
163
+ .where('subsidize', '=', match.subsidize)
164
+ query =
165
+ match.projectId === undefined
166
+ ? query.where('projectId', 'is', null)
167
+ : query.where('projectId', '=', match.projectId)
168
+ return query.executeTakeFirst()
169
+ }
170
+
171
+ /** Claims a bounded batch of active addresses due for provider reconciliation. */
172
+ export function claimDue(db: Db.Db, options: claimDue.Options): Promise<readonly Record[]> {
173
+ return db.transaction(async (tx) => {
174
+ const due = await tx.kysely
175
+ .selectFrom('funding_deposit_addresses')
176
+ .select('id')
177
+ .where('nextPollAt', '<=', options.now)
178
+ .where('providerId', '=', options.providerId)
179
+ .where('status', '=', 'active')
180
+ .where((eb) =>
181
+ eb.or([eb('pollLeaseUntil', 'is', null), eb('pollLeaseUntil', '<=', options.now)]),
182
+ )
183
+ .orderBy('nextPollAt', 'asc')
184
+ .orderBy('id', 'asc')
185
+ .limit(options.limit)
186
+ .forUpdate()
187
+ .skipLocked()
188
+ .execute()
189
+ if (due.length === 0) return []
190
+ return tx.kysely
191
+ .updateTable('funding_deposit_addresses')
192
+ .set({
193
+ pollLeaseUntil: options.leaseUntil,
194
+ pollLeaseVersion: sql<number>`poll_lease_version + 1`,
195
+ })
196
+ .where(
197
+ 'id',
198
+ 'in',
199
+ due.map((record) => record.id),
200
+ )
201
+ .returningAll()
202
+ .execute()
203
+ })
204
+ }
205
+
206
+ export declare namespace claimDue {
207
+ /** Provider and lease bounds for one reconciliation claim. */
208
+ type Options = {
209
+ /** Exclusive upper bound on rows claimed in one tick. */
210
+ limit: number
211
+ /** Expiry time assigned to each claimed lease. */
212
+ leaseUntil: string
213
+ /** Current time used for due and expired-lease comparisons. */
214
+ now: string
215
+ /** Funding provider whose addresses should be claimed. */
216
+ providerId: string
217
+ }
218
+ }
219
+
220
+ /** Claims one active address unless another reconciliation owns its lease. */
221
+ export function claim(db: Db.Db, options: claim.Options): Promise<Record | undefined> {
222
+ return db.kysely
223
+ .updateTable('funding_deposit_addresses')
224
+ .set({
225
+ pollLeaseUntil: options.leaseUntil,
226
+ pollLeaseVersion: sql<number>`poll_lease_version + 1`,
227
+ })
228
+ .where('id', '=', options.id)
229
+ .where('status', '=', 'active')
230
+ .where((eb) =>
231
+ eb.or([eb('pollLeaseUntil', 'is', null), eb('pollLeaseUntil', '<=', options.now)]),
232
+ )
233
+ .returningAll()
234
+ .executeTakeFirst()
235
+ }
236
+
237
+ export declare namespace claim {
238
+ /** Identity and lease bounds for one reconciliation claim. */
239
+ type Options = {
240
+ /** Funding deposit address id (`fda_…`). */
241
+ id: string
242
+ /** Expiry time assigned to the claimed lease. */
243
+ leaseUntil: string
244
+ /** Current time used for expired-lease comparison. */
245
+ now: string
246
+ }
247
+ }
248
+
249
+ /** Extends an active reconciliation lease without changing its fence. */
250
+ export async function renewPoll(db: Db.Db, options: renewPoll.Options): Promise<boolean> {
251
+ return Boolean(
252
+ await db.kysely
253
+ .updateTable('funding_deposit_addresses')
254
+ .set({ pollLeaseUntil: options.leaseUntil })
255
+ .where('id', '=', options.id)
256
+ .where('pollLeaseUntil', 'is not', null)
257
+ .where('pollLeaseVersion', '=', options.pollLeaseVersion)
258
+ .where('status', '=', 'active')
259
+ .returning('id')
260
+ .executeTakeFirst(),
261
+ )
262
+ }
263
+
264
+ export declare namespace renewPoll {
265
+ /** Lease identity and renewed expiry guarded by the current fence. */
266
+ type Options = {
267
+ /** Funding deposit address id (`fda_…`). */
268
+ id: string
269
+ /** Replacement reconciliation lease expiry. */
270
+ leaseUntil: string
271
+ /** Fencing token returned by the claim operation. */
272
+ pollLeaseVersion: number
273
+ }
274
+ }
275
+
276
+ /** Completes an owned reconciliation lease and schedules the address again. */
277
+ export function completePoll(
278
+ db: Db.Db,
279
+ options: completePoll.Options,
280
+ ): Promise<Record | undefined> {
281
+ return db.kysely
282
+ .updateTable('funding_deposit_addresses')
283
+ .set({
284
+ lastPolledAt: options.lastPolledAt,
285
+ nextPollAt: options.nextPollAt,
286
+ pollFailureCount: 0,
287
+ pollLeaseUntil: null,
288
+ providerRequestIds: JSON.stringify(options.providerRequestIds),
289
+ providerState: options.providerState,
290
+ })
291
+ .where('id', '=', options.id)
292
+ .where('pollLeaseVersion', '=', options.pollLeaseVersion)
293
+ .returningAll()
294
+ .executeTakeFirst()
295
+ }
296
+
297
+ export declare namespace completePoll {
298
+ /** Successful reconciliation result guarded by the claimed lease version. */
299
+ type Options = {
300
+ /** Funding deposit address id (`fda_…`). */
301
+ id: string
302
+ /** Time when provider reconciliation completed. */
303
+ lastPolledAt: string
304
+ /** Time when this address becomes due again. */
305
+ nextPollAt: string
306
+ /** Fencing token returned by {@link claimDue}. */
307
+ pollLeaseVersion: number
308
+ /** Provider request identifiers retained from address provisioning. */
309
+ providerRequestIds: readonly string[]
310
+ /** Bounded provider reconciliation state. */
311
+ providerState: Record['providerState']
312
+ }
313
+ }
314
+
315
+ /** Releases an owned reconciliation lease after failure and schedules a retry. */
316
+ export function failPoll(db: Db.Db, options: failPoll.Options): Promise<Record | undefined> {
317
+ return db.kysely
318
+ .updateTable('funding_deposit_addresses')
319
+ .set({
320
+ nextPollAt: options.nextPollAt,
321
+ pollFailureCount: sql<number>`poll_failure_count + 1`,
322
+ pollLeaseUntil: null,
323
+ })
324
+ .where('id', '=', options.id)
325
+ .where('pollLeaseVersion', '=', options.pollLeaseVersion)
326
+ .returningAll()
327
+ .executeTakeFirst()
328
+ }
329
+
330
+ export declare namespace failPoll {
331
+ /** Failed reconciliation result guarded by the claimed lease version. */
332
+ type Options = {
333
+ /** Funding deposit address id (`fda_…`). */
334
+ id: string
335
+ /** Time when this address becomes eligible for retry. */
336
+ nextPollAt: string
337
+ /** Fencing token returned by {@link claimDue}. */
338
+ pollLeaseVersion: number
339
+ }
340
+ }
341
+
342
+ /** Applies a version-guarded deposit address status update. */
343
+ export function update(db: Db.Db, options: update.Options): Promise<Record | undefined> {
344
+ return db.kysely
345
+ .updateTable('funding_deposit_addresses')
346
+ .set({
347
+ status: options.status,
348
+ updatedAt: options.updatedAt,
349
+ version: options.version,
350
+ })
351
+ .where('id', '=', options.id)
352
+ .where('version', '=', options.expectedVersion)
353
+ .returningAll()
354
+ .executeTakeFirst()
355
+ }
356
+
357
+ export declare namespace update {
358
+ /** Guarded address update fields. */
359
+ type Options = {
360
+ /** Stored version required for the update. */
361
+ expectedVersion: number
362
+ /** Funding deposit address id (`fda_…`). */
363
+ id: string
364
+ /** Replacement lifecycle status. */
365
+ status: Record['status']
366
+ /** New material update time. */
367
+ updatedAt: string
368
+ /** New material version. */
369
+ version: number
370
+ }
371
+ }
372
+
373
+ /** Provider address conflicted with a different customer-visible identity. */
374
+ export class ConflictError extends Error {
375
+ override name = 'FundingDepositAddresses.ConflictError'
376
+ }
@@ -0,0 +1,261 @@
1
+ import * as Deposit from '../../internal/funding/Deposit.js'
2
+ import * as DepositAddress from '../../internal/funding/DepositAddress.js'
3
+ import * as TestApp from '../../../test/App.js'
4
+ import * as TestFunding from '../../../test/Funding.js'
5
+ import * as FundingDeposits from './fundingDeposits.js'
6
+
7
+ const db = TestApp.database()
8
+ const owner = { environment: 'production', orgId: 'org_deposits' } as const
9
+
10
+ let addressCounter = 0
11
+ async function seedAddress(input: Partial<DepositAddress.create.Input> = {}) {
12
+ const index = addressCounter++
13
+ const now = new Date(Date.UTC(2026, 0, 1, 0, 0, index))
14
+ return DepositAddress.create(db, {
15
+ apiKeyId: 'key_test',
16
+ deliveryStrategy: 'provider',
17
+ environment: owner.environment,
18
+ id: DepositAddress.generateId(now),
19
+ now,
20
+ orgId: owner.orgId,
21
+ providerOutputToken: TestFunding.providerOutputToken(),
22
+ snapshot: TestFunding.depositAddressSnapshot({
23
+ provider: { id: `relay_${index}`, name: 'Relay' },
24
+ recipient: `0x${index.toString(16).padStart(40, '0')}`,
25
+ }),
26
+ ...input,
27
+ })
28
+ }
29
+
30
+ let depositCounter = 0
31
+ function seedDeposit(
32
+ address: Awaited<ReturnType<typeof seedAddress>>,
33
+ input: Partial<Deposit.create.Input> = {},
34
+ ) {
35
+ const index = depositCounter++
36
+ const now = new Date(Date.UTC(2026, 0, 2, 0, 0, index))
37
+ const sourceTransactionHash = index.toString(16).padStart(64, '0')
38
+ return Deposit.create(db, {
39
+ now,
40
+ providerRequestId: `relay_request_${index}`,
41
+ snapshot: TestFunding.depositSnapshot(address.id, {
42
+ provider: address.snapshot.provider,
43
+ sourceTransactionHashes: [sourceTransactionHash],
44
+ }),
45
+ sourceTransactionHash,
46
+ sourceTransferIndex: 0,
47
+ ...input,
48
+ })
49
+ }
50
+
51
+ describe('listByAddress', () => {
52
+ test('pages one owner-visible address newest-first', async () => {
53
+ const address = await seedAddress()
54
+ const first = await seedDeposit(address)
55
+ const second = await seedDeposit(address)
56
+ const third = await seedDeposit(address)
57
+ const foreign = await seedAddress({ orgId: 'org_other' })
58
+ await seedDeposit(foreign)
59
+
60
+ const page = await FundingDeposits.listByAddress(db, owner, address.id, { limit: 2 })
61
+ expect(page.map((row) => row.id)).toEqual([third.id, second.id])
62
+ const rest = await FundingDeposits.listByAddress(db, owner, address.id, {
63
+ cursor: { createdAt: second.createdAt, id: second.id },
64
+ limit: 2,
65
+ })
66
+ expect(rest.map((row) => row.id)).toEqual([first.id])
67
+ })
68
+
69
+ test('narrows project-attributed owners to their project', async () => {
70
+ const address = await seedAddress({ projectId: 'prj_deposit' })
71
+ await seedDeposit(address)
72
+ expect(
73
+ await FundingDeposits.listByAddress(db, { ...owner, projectId: 'prj_other' }, address.id, {
74
+ limit: 10,
75
+ }),
76
+ ).toEqual([])
77
+ })
78
+ })
79
+
80
+ describe('getOwned', () => {
81
+ test('returns owned deposits and hides foreign ownership', async () => {
82
+ const address = await seedAddress()
83
+ const record = await seedDeposit(address)
84
+ expect((await FundingDeposits.getOwned(db, owner, record.id))?.id).toBe(record.id)
85
+ expect(
86
+ await FundingDeposits.getOwned(db, { ...owner, orgId: 'org_other' }, record.id),
87
+ ).toBeUndefined()
88
+ })
89
+ })
90
+
91
+ describe('insert', () => {
92
+ test('derives identity, ownership, and route from the deposit address', async () => {
93
+ const address = await seedAddress({ projectId: 'prj_deposit' })
94
+ const foreign = await seedAddress({ orgId: 'org_other' })
95
+ const sourceTransactionHash = 'bb'.repeat(32)
96
+ const record = await Deposit.create(db, {
97
+ providerRequestId: 'relay_request_insert',
98
+ snapshot: TestFunding.depositSnapshot(address.id, {
99
+ destinationChain: foreign.snapshot.destinationChain,
100
+ destinationToken: foreign.snapshot.destinationToken,
101
+ provider: foreign.snapshot.provider,
102
+ recipient: foreign.snapshot.recipient,
103
+ refundAddress: foreign.snapshot.refundAddress,
104
+ sourceChain: { addressFormat: 'hex', id: 'eip155:1', kind: 'evm', name: 'Ethereum' },
105
+ sourceToken: foreign.snapshot.sourceToken,
106
+ }),
107
+ sourceTransactionHash,
108
+ sourceTransferIndex: 7,
109
+ })
110
+
111
+ expect(record).toMatchObject({
112
+ depositAddressId: address.id,
113
+ environment: address.environment,
114
+ id: expect.stringMatching(/^fdp_/),
115
+ orgId: address.orgId,
116
+ projectId: address.projectId,
117
+ providerOutputToken: address.providerOutputToken,
118
+ snapshot: {
119
+ destinationChain: address.snapshot.destinationChain,
120
+ destinationToken: address.snapshot.destinationToken,
121
+ provider: address.snapshot.provider,
122
+ recipient: address.snapshot.recipient,
123
+ refundAddress: address.snapshot.refundAddress,
124
+ sourceChain: address.snapshot.sourceChain,
125
+ sourceToken: address.snapshot.sourceToken,
126
+ sourceTransactionHashes: [sourceTransactionHash],
127
+ },
128
+ })
129
+ })
130
+
131
+ test('deduplicates one source transfer across deposit addresses', async () => {
132
+ const firstAddress = await seedAddress()
133
+ const secondAddress = await seedAddress()
134
+ const sourceTransactionHash = 'aa'.repeat(32)
135
+ await seedDeposit(firstAddress, { sourceTransactionHash, sourceTransferIndex: 7 })
136
+ await expect(
137
+ seedDeposit(secondAddress, { sourceTransactionHash, sourceTransferIndex: 7 }),
138
+ ).rejects.toMatchObject({ code: '23505' })
139
+ })
140
+ })
141
+
142
+ describe('update', () => {
143
+ test('applies allowed transitions and rejects terminal exits', async () => {
144
+ const address = await seedAddress()
145
+ const record = await seedDeposit(address)
146
+ const bridging = await Deposit.transition(db, {
147
+ expectedVersion: 1,
148
+ id: record.id,
149
+ status: 'bridging',
150
+ })
151
+ expect(bridging.type).toBe('applied')
152
+ const completed = await Deposit.transition(db, {
153
+ expectedVersion: 2,
154
+ id: record.id,
155
+ status: 'completed',
156
+ })
157
+ expect(completed.type).toBe('applied')
158
+ expect(
159
+ await Deposit.transition(db, {
160
+ expectedVersion: 3,
161
+ id: record.id,
162
+ status: 'refunding',
163
+ }),
164
+ ).toMatchObject({ type: 'invalid' })
165
+ })
166
+
167
+ test('persists reconciliation state without changing source identity', async () => {
168
+ const address = await seedAddress()
169
+ const foreign = await seedAddress({ orgId: 'org_other' })
170
+ const record = await seedDeposit(address)
171
+ const destinationTransactionHash = `0x${'cc'.repeat(32)}`
172
+ const providerTransactionHash = `0x${'dd'.repeat(32)}`
173
+ const result = await Deposit.transition(db, {
174
+ expectedVersion: 1,
175
+ id: record.id,
176
+ providerOutputAmount: {
177
+ baseUnits: '98889820',
178
+ currency: 'USD',
179
+ decimals: 6,
180
+ formatted: '98.88982',
181
+ },
182
+ providerRequestIds: ['relay-request'],
183
+ providerState: { request: 'provider-state' },
184
+ providerTransactionHashes: [providerTransactionHash],
185
+ retryState: { attempts: 1 },
186
+ settlementTransaction: `0x${'ab'.repeat(32)}`,
187
+ settlementTransactionHash: `0x${'ee'.repeat(32)}`,
188
+ snapshot: {
189
+ ...record.snapshot,
190
+ depositAddressId: foreign.id,
191
+ destinationTransactionHashes: [destinationTransactionHash],
192
+ sourceChain: { addressFormat: 'hex', id: 'eip155:1', kind: 'evm', name: 'Ethereum' },
193
+ sourceTransactionHashes: ['changed-source-transaction'],
194
+ },
195
+ status: 'bridging',
196
+ subsidyAmount: {
197
+ baseUnits: '1110180',
198
+ currency: 'USD',
199
+ decimals: 6,
200
+ formatted: '1.11018',
201
+ },
202
+ tempoGasPaid: '21000',
203
+ })
204
+
205
+ expect(result).toMatchObject({
206
+ record: {
207
+ depositAddressId: record.depositAddressId,
208
+ providerOutputAmount: { baseUnits: '98889820' },
209
+ providerRequestIds: ['relay-request'],
210
+ providerState: { request: 'provider-state' },
211
+ providerTransactionHashes: [providerTransactionHash],
212
+ retryState: { attempts: 1 },
213
+ settlementTransaction: `0x${'ab'.repeat(32)}`,
214
+ settlementTransactionHash: `0x${'ee'.repeat(32)}`,
215
+ snapshot: {
216
+ depositAddressId: record.snapshot.depositAddressId,
217
+ destinationTransactionHashes: [destinationTransactionHash],
218
+ sourceChain: record.snapshot.sourceChain,
219
+ sourceTransactionHashes: record.snapshot.sourceTransactionHashes,
220
+ },
221
+ status: 'bridging',
222
+ subsidyAmount: { baseUnits: '1110180' },
223
+ tempoGasPaid: '21000',
224
+ },
225
+ type: 'applied',
226
+ })
227
+ })
228
+ })
229
+
230
+ describe('toPublic', () => {
231
+ test('omits private reconciliation and settlement state', async () => {
232
+ const address = await seedAddress()
233
+ const record = await seedDeposit(address, {
234
+ providerOutputAmount: {
235
+ baseUnits: '98889820',
236
+ currency: 'USD',
237
+ decimals: 6,
238
+ formatted: '98.88982',
239
+ },
240
+ providerRequestIds: ['relay-request'],
241
+ providerState: { correlation: 'private' },
242
+ settlementTransaction: `0x${'ab'.repeat(32)}`,
243
+ subsidyAmount: {
244
+ baseUnits: '1110180',
245
+ currency: 'USD',
246
+ decimals: 6,
247
+ formatted: '1.11018',
248
+ },
249
+ })
250
+ const public_ = Deposit.toPublic(record)
251
+ expect(public_.sourceTransferIndex).toBe(record.sourceTransferIndex)
252
+ expect(public_).not.toMatchObject({
253
+ providerOutputAmount: expect.anything(),
254
+ providerOutputToken: expect.anything(),
255
+ providerRequestIds: expect.anything(),
256
+ providerState: expect.anything(),
257
+ settlementTransaction: expect.anything(),
258
+ subsidyAmount: expect.anything(),
259
+ })
260
+ })
261
+ })