tapimo 0.15.0 → 0.18.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 (734) hide show
  1. package/README.md +137 -0
  2. package/dist/ApiKey.d.ts +1 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +4 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +37 -11
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +163 -10
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +13085 -11974
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +46 -15
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +1 -1
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +1 -1
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +896 -191
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +5 -1
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +33 -33
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +8 -3
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +66 -27
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  28. package/dist/admin/apps/earn-vaults.js +36 -7
  29. package/dist/admin/apps/earn-vaults.js.map +1 -1
  30. package/dist/admin/apps/organizations.d.ts +25 -25
  31. package/dist/admin/apps/organizations.d.ts.map +1 -1
  32. package/dist/admin/apps/organizations.js +5 -4
  33. package/dist/admin/apps/organizations.js.map +1 -1
  34. package/dist/admin/apps/route-policies.d.ts +632 -0
  35. package/dist/admin/apps/route-policies.d.ts.map +1 -0
  36. package/dist/admin/apps/route-policies.js +257 -0
  37. package/dist/admin/apps/route-policies.js.map +1 -0
  38. package/dist/admin/apps/routes-support.js +39 -3
  39. package/dist/admin/apps/routes-support.js.map +1 -1
  40. package/dist/admin/apps/routes.d.ts +454 -1
  41. package/dist/admin/apps/routes.d.ts.map +1 -1
  42. package/dist/admin/apps/routes.js +82 -1
  43. package/dist/admin/apps/routes.js.map +1 -1
  44. package/dist/admin/apps/verified-tokens.d.ts +10 -4
  45. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  46. package/dist/admin/apps/verified-tokens.js +24 -4
  47. package/dist/admin/apps/verified-tokens.js.map +1 -1
  48. package/dist/admin/index.d.ts +0 -1
  49. package/dist/admin/index.d.ts.map +1 -1
  50. package/dist/admin/index.js +0 -1
  51. package/dist/admin/index.js.map +1 -1
  52. package/dist/admin/ui.generated.d.ts +1 -1
  53. package/dist/admin/ui.generated.d.ts.map +1 -1
  54. package/dist/admin/ui.generated.js +99 -103
  55. package/dist/admin/ui.generated.js.map +1 -1
  56. package/dist/analytics/Analytics.d.ts.map +1 -1
  57. package/dist/analytics/Analytics.js +65 -1
  58. package/dist/analytics/Analytics.js.map +1 -1
  59. package/dist/analytics/tables/requestEvents.d.ts +1 -1
  60. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  61. package/dist/analytics/tables/requestEvents.js +58 -59
  62. package/dist/analytics/tables/requestEvents.js.map +1 -1
  63. package/dist/apps/data/App.d.ts +2709 -2670
  64. package/dist/apps/data/App.d.ts.map +1 -1
  65. package/dist/apps/data/routes/activities.d.ts +5 -5
  66. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  67. package/dist/apps/data/routes/activities.js +50 -0
  68. package/dist/apps/data/routes/activities.js.map +1 -1
  69. package/dist/apps/data/routes/addresses.d.ts +248 -248
  70. package/dist/apps/data/routes/balances.d.ts +22 -22
  71. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  72. package/dist/apps/data/routes/balances.js +5 -7
  73. package/dist/apps/data/routes/balances.js.map +1 -1
  74. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  75. package/dist/apps/data/routes/earn.d.ts +103 -12
  76. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  77. package/dist/apps/data/routes/earn.js +456 -220
  78. package/dist/apps/data/routes/earn.js.map +1 -1
  79. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  80. package/dist/apps/data/routes/exchanges.js +267 -97
  81. package/dist/apps/data/routes/exchanges.js.map +1 -1
  82. package/dist/apps/data/routes/fee-amm.d.ts +1 -19
  83. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  84. package/dist/apps/data/routes/fee-amm.js +93 -56
  85. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  86. package/dist/apps/data/routes/indexer.d.ts +10 -10
  87. package/dist/apps/data/routes/rpc.d.ts +30 -30
  88. package/dist/apps/data/routes/rpc.js +45 -11
  89. package/dist/apps/data/routes/rpc.js.map +1 -1
  90. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  91. package/dist/apps/data/routes/tokens.js +11 -6
  92. package/dist/apps/data/routes/tokens.js.map +1 -1
  93. package/dist/apps/data/routes/transactions.d.ts +2 -0
  94. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  95. package/dist/apps/data/routes/transactions.js +30 -22
  96. package/dist/apps/data/routes/transactions.js.map +1 -1
  97. package/dist/apps/data/routes/transfers.d.ts +12 -12
  98. package/dist/apps/data/routes/valuation.d.ts +30 -30
  99. package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
  100. package/dist/apps/data/routes/webhooks.d.ts +1 -1
  101. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  102. package/dist/apps/data/routes/webhooks.js +18 -11
  103. package/dist/apps/data/routes/webhooks.js.map +1 -1
  104. package/dist/apps/data/routes/zones.d.ts +3 -3
  105. package/dist/apps/management/App.d.ts +3043 -2198
  106. package/dist/apps/management/App.d.ts.map +1 -1
  107. package/dist/apps/management/App.js +2 -0
  108. package/dist/apps/management/App.js.map +1 -1
  109. package/dist/apps/management/Billing.d.ts +2 -4
  110. package/dist/apps/management/Billing.d.ts.map +1 -1
  111. package/dist/apps/management/Billing.js +65 -26
  112. package/dist/apps/management/Billing.js.map +1 -1
  113. package/dist/apps/management/routes/api-keys.d.ts +16 -4
  114. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  115. package/dist/apps/management/routes/api-keys.js +70 -11
  116. package/dist/apps/management/routes/api-keys.js.map +1 -1
  117. package/dist/apps/management/routes/billing.d.ts +84 -84
  118. package/dist/apps/management/routes/cli.d.ts +912 -0
  119. package/dist/apps/management/routes/cli.d.ts.map +1 -0
  120. package/dist/apps/management/routes/cli.js +416 -0
  121. package/dist/apps/management/routes/cli.js.map +1 -0
  122. package/dist/apps/management/routes/faucet.d.ts +8 -8
  123. package/dist/apps/management/routes/invitations.d.ts +24 -24
  124. package/dist/apps/management/routes/invite-links.d.ts +66 -66
  125. package/dist/apps/management/routes/members.d.ts +16 -16
  126. package/dist/apps/management/routes/orgs.d.ts +20 -20
  127. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  128. package/dist/apps/management/routes/orgs.js +8 -2
  129. package/dist/apps/management/routes/orgs.js.map +1 -1
  130. package/dist/apps/management/routes/projects.d.ts +76 -76
  131. package/dist/apps/management/routes/usage.d.ts +8 -8
  132. package/dist/apps/management/routes/verified-token-requests.d.ts +42 -42
  133. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  134. package/dist/apps/management/routes/verified-token-requests.js +7 -9
  135. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  136. package/dist/apps/management/routes/webhooks.d.ts +119 -119
  137. package/dist/apps/mcp.d.ts.map +1 -1
  138. package/dist/apps/mcp.js +16 -3
  139. package/dist/apps/mcp.js.map +1 -1
  140. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  141. package/dist/apps/mpp/internal/Policy.js +4 -2
  142. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  143. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  144. package/dist/apps/mpp/internal/Sponsorship.js +6 -4
  145. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  146. package/dist/apps/relay/App.d.ts +8 -0
  147. package/dist/apps/relay/App.d.ts.map +1 -1
  148. package/dist/apps/relay/App.js +16 -4
  149. package/dist/apps/relay/App.js.map +1 -1
  150. package/dist/apps/relay/Sponsorships.d.ts +4 -6
  151. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  152. package/dist/apps/relay/Sponsorships.js +71 -60
  153. package/dist/apps/relay/Sponsorships.js.map +1 -1
  154. package/dist/apps/routes/Access.d.ts +53 -0
  155. package/dist/apps/routes/Access.d.ts.map +1 -1
  156. package/dist/apps/routes/Access.js +121 -0
  157. package/dist/apps/routes/Access.js.map +1 -1
  158. package/dist/apps/routes/App.d.ts +397 -158
  159. package/dist/apps/routes/App.d.ts.map +1 -1
  160. package/dist/apps/routes/App.js.map +1 -1
  161. package/dist/apps/routes/routes/deposit-addresses.d.ts +169 -61
  162. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -1
  163. package/dist/apps/routes/routes/deposit-addresses.js +217 -32
  164. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -1
  165. package/dist/apps/routes/routes/quotes.d.ts +90 -0
  166. package/dist/apps/routes/routes/quotes.d.ts.map +1 -1
  167. package/dist/apps/routes/routes/quotes.js +101 -27
  168. package/dist/apps/routes/routes/quotes.js.map +1 -1
  169. package/dist/apps/routes/routes/transfers.d.ts +187 -135
  170. package/dist/apps/routes/routes/transfers.d.ts.map +1 -1
  171. package/dist/apps/routes/routes/transfers.js +182 -37
  172. package/dist/apps/routes/routes/transfers.js.map +1 -1
  173. package/dist/cli/ApiKeys.d.ts +120 -0
  174. package/dist/cli/ApiKeys.d.ts.map +1 -0
  175. package/dist/cli/ApiKeys.js +138 -0
  176. package/dist/cli/ApiKeys.js.map +1 -0
  177. package/dist/cli/Cli.d.ts +92 -34
  178. package/dist/cli/Cli.d.ts.map +1 -1
  179. package/dist/cli/Cli.js +188 -11
  180. package/dist/cli/Cli.js.map +1 -1
  181. package/dist/cli/Credentials.d.ts +95 -0
  182. package/dist/cli/Credentials.d.ts.map +1 -0
  183. package/dist/cli/Credentials.js +110 -0
  184. package/dist/cli/Credentials.js.map +1 -0
  185. package/dist/cli/Spec.d.ts +59 -0
  186. package/dist/cli/Spec.d.ts.map +1 -0
  187. package/dist/cli/Spec.js +77 -0
  188. package/dist/cli/Spec.js.map +1 -0
  189. package/dist/cli/bin.js +5 -1
  190. package/dist/cli/bin.js.map +1 -1
  191. package/dist/cli/commands/admin.d.ts +5 -5
  192. package/dist/cli/commands/admin.d.ts.map +1 -1
  193. package/dist/cli/commands/auth.d.ts +73 -0
  194. package/dist/cli/commands/auth.d.ts.map +1 -0
  195. package/dist/cli/commands/auth.js +204 -0
  196. package/dist/cli/commands/auth.js.map +1 -0
  197. package/dist/cli/commands/keys.d.ts +17 -0
  198. package/dist/cli/commands/keys.d.ts.map +1 -0
  199. package/dist/cli/commands/keys.js +109 -0
  200. package/dist/cli/commands/keys.js.map +1 -0
  201. package/dist/cloudflare.d.ts +27 -2
  202. package/dist/cloudflare.d.ts.map +1 -1
  203. package/dist/cloudflare.js +144 -17
  204. package/dist/cloudflare.js.map +1 -1
  205. package/dist/db/Db.d.ts +23 -0
  206. package/dist/db/Db.d.ts.map +1 -1
  207. package/dist/db/Db.js +418 -1
  208. package/dist/db/Db.js.map +1 -1
  209. package/dist/db/Schema.d.ts +44 -1
  210. package/dist/db/Schema.d.ts.map +1 -1
  211. package/dist/db/Schema.js +56 -3
  212. package/dist/db/Schema.js.map +1 -1
  213. package/dist/db/tables/apiKeyAdmissions.d.ts +28 -2
  214. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -1
  215. package/dist/db/tables/apiKeyAdmissions.js +65 -9
  216. package/dist/db/tables/apiKeyAdmissions.js.map +1 -1
  217. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +2 -0
  218. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -1
  219. package/dist/db/tables/apiKeyOwnerTombstones.js +2 -2
  220. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -1
  221. package/dist/db/tables/authAccounts.d.ts.map +1 -1
  222. package/dist/db/tables/authAccounts.js +1 -0
  223. package/dist/db/tables/authAccounts.js.map +1 -1
  224. package/dist/db/tables/earnVaults.d.ts +5 -1
  225. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  226. package/dist/db/tables/earnVaults.js +12 -1
  227. package/dist/db/tables/earnVaults.js.map +1 -1
  228. package/dist/db/tables/organizations.d.ts +4 -2
  229. package/dist/db/tables/organizations.d.ts.map +1 -1
  230. package/dist/db/tables/organizations.js +8 -34
  231. package/dist/db/tables/organizations.js.map +1 -1
  232. package/dist/db/tables/requestUsage.d.ts +5 -1
  233. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  234. package/dist/db/tables/requestUsage.js +10 -2
  235. package/dist/db/tables/requestUsage.js.map +1 -1
  236. package/dist/db/tables/rewardEligibilityAssociations.d.ts +13 -0
  237. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -1
  238. package/dist/db/tables/rewardEligibilityAssociations.js +11 -0
  239. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -1
  240. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  241. package/dist/db/tables/rewardRuns.js +4 -0
  242. package/dist/db/tables/rewardRuns.js.map +1 -1
  243. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -1
  244. package/dist/db/tables/rewardTransactionAttempts.js +2 -0
  245. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -1
  246. package/dist/db/tables/routesDepositAddresses.d.ts +29 -0
  247. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -1
  248. package/dist/db/tables/routesDepositAddresses.js +84 -31
  249. package/dist/db/tables/routesDepositAddresses.js.map +1 -1
  250. package/dist/db/tables/routesDeposits.d.ts.map +1 -1
  251. package/dist/db/tables/routesDeposits.js +31 -21
  252. package/dist/db/tables/routesDeposits.js.map +1 -1
  253. package/dist/db/tables/routesIdempotency.d.ts.map +1 -1
  254. package/dist/db/tables/routesIdempotency.js +2 -0
  255. package/dist/db/tables/routesIdempotency.js.map +1 -1
  256. package/dist/db/tables/routesPolicies.d.ts +58 -0
  257. package/dist/db/tables/routesPolicies.d.ts.map +1 -0
  258. package/dist/db/tables/routesPolicies.js +198 -0
  259. package/dist/db/tables/routesPolicies.js.map +1 -0
  260. package/dist/db/tables/routesTransferSubsidies.d.ts +22 -0
  261. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -1
  262. package/dist/db/tables/routesTransferSubsidies.js +41 -0
  263. package/dist/db/tables/routesTransferSubsidies.js.map +1 -1
  264. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -1
  265. package/dist/db/tables/routesTransferSubsidyNonces.js +12 -4
  266. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -1
  267. package/dist/db/tables/routesTransfers.d.ts +26 -1
  268. package/dist/db/tables/routesTransfers.d.ts.map +1 -1
  269. package/dist/db/tables/routesTransfers.js +36 -6
  270. package/dist/db/tables/routesTransfers.js.map +1 -1
  271. package/dist/db/tables/sponsoredTransactions.d.ts +45 -13
  272. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  273. package/dist/db/tables/sponsoredTransactions.js +144 -33
  274. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  275. package/dist/db/tables/users.d.ts +2 -0
  276. package/dist/db/tables/users.d.ts.map +1 -1
  277. package/dist/db/tables/users.js +11 -0
  278. package/dist/db/tables/users.js.map +1 -1
  279. package/dist/db/tables/verifiedTokenRequests.d.ts +21 -4
  280. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
  281. package/dist/db/tables/verifiedTokenRequests.js +65 -44
  282. package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
  283. package/dist/handlers/internal/multisig.d.ts +1 -1
  284. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  285. package/dist/handlers/internal/multisig.js +3 -2
  286. package/dist/handlers/internal/multisig.js.map +1 -1
  287. package/dist/handlers/relay.d.ts +2 -0
  288. package/dist/handlers/relay.d.ts.map +1 -1
  289. package/dist/handlers/relay.js +34 -15
  290. package/dist/handlers/relay.js.map +1 -1
  291. package/dist/internal/Auth.d.ts +73 -6
  292. package/dist/internal/Auth.d.ts.map +1 -1
  293. package/dist/internal/Auth.js +212 -85
  294. package/dist/internal/Auth.js.map +1 -1
  295. package/dist/internal/BetterAuth.d.ts +22 -0
  296. package/dist/internal/BetterAuth.d.ts.map +1 -1
  297. package/dist/internal/BetterAuth.js +17 -14
  298. package/dist/internal/BetterAuth.js.map +1 -1
  299. package/dist/internal/Cache.d.ts +5 -0
  300. package/dist/internal/Cache.d.ts.map +1 -1
  301. package/dist/internal/Cache.js +3 -1
  302. package/dist/internal/Cache.js.map +1 -1
  303. package/dist/internal/CliAuth.d.ts +243 -0
  304. package/dist/internal/CliAuth.d.ts.map +1 -0
  305. package/dist/internal/CliAuth.js +249 -0
  306. package/dist/internal/CliAuth.js.map +1 -0
  307. package/dist/internal/EarnSharePrices.d.ts +1 -1
  308. package/dist/internal/EarnSharePrices.d.ts.map +1 -1
  309. package/dist/internal/EarnSharePrices.js +7 -3
  310. package/dist/internal/EarnSharePrices.js.map +1 -1
  311. package/dist/internal/EarnVaults.d.ts +47 -0
  312. package/dist/internal/EarnVaults.d.ts.map +1 -1
  313. package/dist/internal/EarnVaults.js +188 -4
  314. package/dist/internal/EarnVaults.js.map +1 -1
  315. package/dist/internal/EarnWithdrawals.d.ts +73 -0
  316. package/dist/internal/EarnWithdrawals.d.ts.map +1 -0
  317. package/dist/internal/EarnWithdrawals.js +189 -0
  318. package/dist/internal/EarnWithdrawals.js.map +1 -0
  319. package/dist/internal/ExecutionContext.d.ts +21 -0
  320. package/dist/internal/ExecutionContext.d.ts.map +1 -0
  321. package/dist/internal/ExecutionContext.js +16 -0
  322. package/dist/internal/ExecutionContext.js.map +1 -0
  323. package/dist/internal/Log.d.ts +7 -3
  324. package/dist/internal/Log.d.ts.map +1 -1
  325. package/dist/internal/Log.js +163 -130
  326. package/dist/internal/Log.js.map +1 -1
  327. package/dist/internal/MetricSink.d.ts.map +1 -1
  328. package/dist/internal/MetricSink.js +26 -1
  329. package/dist/internal/MetricSink.js.map +1 -1
  330. package/dist/internal/RateLimit.d.ts +67 -0
  331. package/dist/internal/RateLimit.d.ts.map +1 -1
  332. package/dist/internal/RateLimit.js +174 -27
  333. package/dist/internal/RateLimit.js.map +1 -1
  334. package/dist/internal/Store.d.ts +6 -0
  335. package/dist/internal/Store.d.ts.map +1 -1
  336. package/dist/internal/Store.js +4 -5
  337. package/dist/internal/Store.js.map +1 -1
  338. package/dist/internal/Timing.d.ts +6 -0
  339. package/dist/internal/Timing.d.ts.map +1 -1
  340. package/dist/internal/Timing.js +21 -1
  341. package/dist/internal/Timing.js.map +1 -1
  342. package/dist/internal/Tron.d.ts +124 -0
  343. package/dist/internal/Tron.d.ts.map +1 -0
  344. package/dist/internal/Tron.js +202 -0
  345. package/dist/internal/Tron.js.map +1 -0
  346. package/dist/internal/Viem.d.ts +4 -0
  347. package/dist/internal/Viem.d.ts.map +1 -1
  348. package/dist/internal/Viem.js +25 -6
  349. package/dist/internal/Viem.js.map +1 -1
  350. package/dist/internal/rewards/Read.d.ts +2 -2
  351. package/dist/internal/rewards/Read.d.ts.map +1 -1
  352. package/dist/internal/rewards/Read.js +11 -2
  353. package/dist/internal/rewards/Read.js.map +1 -1
  354. package/dist/internal/routes/Action.d.ts +27 -0
  355. package/dist/internal/routes/Action.d.ts.map +1 -1
  356. package/dist/internal/routes/Action.js +49 -1
  357. package/dist/internal/routes/Action.js.map +1 -1
  358. package/dist/internal/routes/Chain.d.ts +2 -0
  359. package/dist/internal/routes/Chain.d.ts.map +1 -1
  360. package/dist/internal/routes/Chain.js +4 -0
  361. package/dist/internal/routes/Chain.js.map +1 -1
  362. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  363. package/dist/internal/routes/DepositAddress.js +5 -0
  364. package/dist/internal/routes/DepositAddress.js.map +1 -1
  365. package/dist/internal/routes/Evidence.d.ts.map +1 -1
  366. package/dist/internal/routes/Evidence.js +6 -2
  367. package/dist/internal/routes/Evidence.js.map +1 -1
  368. package/dist/internal/routes/EvmTransferSettlement.d.ts +17 -0
  369. package/dist/internal/routes/EvmTransferSettlement.d.ts.map +1 -0
  370. package/dist/internal/routes/EvmTransferSettlement.js +196 -0
  371. package/dist/internal/routes/EvmTransferSettlement.js.map +1 -0
  372. package/dist/internal/routes/Policy.d.ts +161 -0
  373. package/dist/internal/routes/Policy.d.ts.map +1 -0
  374. package/dist/internal/routes/Policy.js +249 -0
  375. package/dist/internal/routes/Policy.js.map +1 -0
  376. package/dist/internal/routes/Provider.d.ts +66 -3
  377. package/dist/internal/routes/Provider.d.ts.map +1 -1
  378. package/dist/internal/routes/Provider.js +106 -27
  379. package/dist/internal/routes/Provider.js.map +1 -1
  380. package/dist/internal/routes/Quota.d.ts +57 -0
  381. package/dist/internal/routes/Quota.d.ts.map +1 -0
  382. package/dist/internal/routes/Quota.js +144 -0
  383. package/dist/internal/routes/Quota.js.map +1 -0
  384. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  385. package/dist/internal/routes/Reconciliation.js +163 -47
  386. package/dist/internal/routes/Reconciliation.js.map +1 -1
  387. package/dist/internal/routes/SolanaTransferSettlement.d.ts +12 -0
  388. package/dist/internal/routes/SolanaTransferSettlement.d.ts.map +1 -0
  389. package/dist/internal/routes/SolanaTransferSettlement.js +220 -0
  390. package/dist/internal/routes/SolanaTransferSettlement.js.map +1 -0
  391. package/dist/internal/routes/SolanaTransferSubsidy.d.ts +172 -0
  392. package/dist/internal/routes/SolanaTransferSubsidy.d.ts.map +1 -0
  393. package/dist/internal/routes/SolanaTransferSubsidy.js +564 -0
  394. package/dist/internal/routes/SolanaTransferSubsidy.js.map +1 -0
  395. package/dist/internal/routes/Subsidy.d.ts +2 -2
  396. package/dist/internal/routes/Subsidy.d.ts.map +1 -1
  397. package/dist/internal/routes/Subsidy.js +2 -2
  398. package/dist/internal/routes/Subsidy.js.map +1 -1
  399. package/dist/internal/routes/Transfer.d.ts +229 -1
  400. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  401. package/dist/internal/routes/Transfer.js +644 -7
  402. package/dist/internal/routes/Transfer.js.map +1 -1
  403. package/dist/internal/routes/TransferReconciliation.d.ts +6 -0
  404. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -1
  405. package/dist/internal/routes/TransferReconciliation.js +83 -159
  406. package/dist/internal/routes/TransferReconciliation.js.map +1 -1
  407. package/dist/internal/routes/TransferSettlement.d.ts +45 -0
  408. package/dist/internal/routes/TransferSettlement.d.ts.map +1 -0
  409. package/dist/internal/routes/TransferSettlement.js +2 -0
  410. package/dist/internal/routes/TransferSettlement.js.map +1 -0
  411. package/dist/internal/routes/TransferSubsidy.d.ts +23 -8
  412. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -1
  413. package/dist/internal/routes/TransferSubsidy.js +64 -5
  414. package/dist/internal/routes/TransferSubsidy.js.map +1 -1
  415. package/dist/internal/routes/TronTransferSettlement.d.ts +12 -0
  416. package/dist/internal/routes/TronTransferSettlement.d.ts.map +1 -0
  417. package/dist/internal/routes/TronTransferSettlement.js +201 -0
  418. package/dist/internal/routes/TronTransferSettlement.js.map +1 -0
  419. package/dist/internal/routes/TronTransferSubsidy.d.ts +174 -0
  420. package/dist/internal/routes/TronTransferSubsidy.d.ts.map +1 -0
  421. package/dist/internal/routes/TronTransferSubsidy.js +439 -0
  422. package/dist/internal/routes/TronTransferSubsidy.js.map +1 -0
  423. package/dist/internal/routes/index.d.ts +3 -0
  424. package/dist/internal/routes/index.d.ts.map +1 -1
  425. package/dist/internal/routes/index.js +3 -0
  426. package/dist/internal/routes/index.js.map +1 -1
  427. package/dist/internal/routes/providers/across.d.ts +3 -0
  428. package/dist/internal/routes/providers/across.d.ts.map +1 -1
  429. package/dist/internal/routes/providers/across.js +11 -0
  430. package/dist/internal/routes/providers/across.js.map +1 -1
  431. package/dist/internal/routes/providers/legacyMesh.d.ts +29 -0
  432. package/dist/internal/routes/providers/legacyMesh.d.ts.map +1 -0
  433. package/dist/internal/routes/providers/legacyMesh.js +474 -0
  434. package/dist/internal/routes/providers/legacyMesh.js.map +1 -0
  435. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts +59 -0
  436. package/dist/internal/routes/providers/legacyMeshDelivery.d.ts.map +1 -0
  437. package/dist/internal/routes/providers/legacyMeshDelivery.js +229 -0
  438. package/dist/internal/routes/providers/legacyMeshDelivery.js.map +1 -0
  439. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts +19 -0
  440. package/dist/internal/routes/providers/legacyMeshOutbound.d.ts.map +1 -0
  441. package/dist/internal/routes/providers/legacyMeshOutbound.js +457 -0
  442. package/dist/internal/routes/providers/legacyMeshOutbound.js.map +1 -0
  443. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts +123 -0
  444. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts.map +1 -0
  445. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js +333 -0
  446. package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js.map +1 -0
  447. package/dist/internal/routes/providers/propAmm.d.ts +70 -0
  448. package/dist/internal/routes/providers/propAmm.d.ts.map +1 -0
  449. package/dist/internal/routes/providers/propAmm.js +524 -0
  450. package/dist/internal/routes/providers/propAmm.js.map +1 -0
  451. package/dist/internal/routes/providers/relay.d.ts +4 -1
  452. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  453. package/dist/internal/routes/providers/relay.js +353 -42
  454. package/dist/internal/routes/providers/relay.js.map +1 -1
  455. package/dist/internal/routes/providers/rhino.d.ts +3 -0
  456. package/dist/internal/routes/providers/rhino.d.ts.map +1 -1
  457. package/dist/internal/routes/providers/rhino.js +11 -0
  458. package/dist/internal/routes/providers/rhino.js.map +1 -1
  459. package/dist/internal/routes/providers/squid.d.ts +3 -0
  460. package/dist/internal/routes/providers/squid.d.ts.map +1 -1
  461. package/dist/internal/routes/providers/squid.js +19 -0
  462. package/dist/internal/routes/providers/squid.js.map +1 -1
  463. package/dist/internal/routes/providers/stargate.d.ts.map +1 -1
  464. package/dist/internal/routes/providers/stargate.js +22 -9
  465. package/dist/internal/routes/providers/stargate.js.map +1 -1
  466. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -1
  467. package/dist/internal/routes/providers/symbiosis.js +13 -17
  468. package/dist/internal/routes/providers/symbiosis.js.map +1 -1
  469. package/dist/providers/index.d.ts +14 -0
  470. package/dist/providers/index.d.ts.map +1 -1
  471. package/dist/providers/index.js +6 -0
  472. package/dist/providers/index.js.map +1 -1
  473. package/package.json +16 -6
  474. package/src/ApiKey.ts +7 -3
  475. package/src/ApiKeys.test.ts +652 -8
  476. package/src/ApiKeys.ts +191 -11
  477. package/src/App.test.ts +405 -18
  478. package/src/App.ts +51 -15
  479. package/src/Client.test-d.ts +157 -10
  480. package/src/Client.test.ts +4 -4
  481. package/src/Scope.ts +1 -2
  482. package/src/admin/App.ts +11 -5
  483. package/src/admin/apps/api-keys.test.ts +98 -2
  484. package/src/admin/apps/api-keys.ts +21 -12
  485. package/src/admin/apps/earn-vaults.test.ts +76 -7
  486. package/src/admin/apps/earn-vaults.ts +47 -8
  487. package/src/admin/apps/organizations.test.ts +147 -31
  488. package/src/admin/apps/organizations.ts +5 -4
  489. package/src/admin/apps/route-policies.test.ts +220 -0
  490. package/src/admin/apps/route-policies.ts +322 -0
  491. package/src/admin/apps/routes-support.test.ts +107 -2
  492. package/src/admin/apps/routes-support.ts +43 -3
  493. package/src/admin/apps/routes.test.ts +150 -0
  494. package/src/admin/apps/routes.ts +97 -1
  495. package/src/admin/apps/scopes.test.ts +1 -1
  496. package/src/admin/apps/verified-tokens.test.ts +32 -0
  497. package/src/admin/apps/verified-tokens.ts +30 -4
  498. package/src/admin/index.ts +0 -1
  499. package/src/admin/ui/plugin.ts +2 -1
  500. package/src/admin/ui/src/components/Dialog.tsx +1 -1
  501. package/src/admin/ui/src/components/EarnVaultForm.tsx +45 -0
  502. package/src/admin/ui/src/components/RoutePicker.tsx +79 -0
  503. package/src/admin/ui/src/lib/earn-vaults.ts +1 -1
  504. package/src/admin/ui/src/lib/route-policies.test.ts +452 -0
  505. package/src/admin/ui/src/lib/route-policies.ts +232 -0
  506. package/src/admin/ui/src/lib/routes.ts +34 -0
  507. package/src/admin/ui/src/lib/verified-tokens.ts +24 -9
  508. package/src/admin/ui/src/routeTree.gen.ts +21 -0
  509. package/src/admin/ui/src/routes/__root.tsx +1 -1
  510. package/src/admin/ui/src/routes/api-keys.tsx +21 -2
  511. package/src/admin/ui/src/routes/early-access.tsx +1 -0
  512. package/src/admin/ui/src/routes/earn.vaults.tsx +1 -0
  513. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +22 -0
  514. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +10 -0
  515. package/src/admin/ui/src/routes/organizations.tsx +35 -4
  516. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +18 -3
  517. package/src/admin/ui/src/routes/route-policies.tsx +678 -0
  518. package/src/admin/ui/src/routes/routes.tsx +85 -2
  519. package/src/admin/ui/src/routes/routes_.support.tsx +6 -22
  520. package/src/admin/ui/src/routes/subsidies.tsx +1 -0
  521. package/src/admin/ui/src/routes/verified-tokens.tsx +65 -20
  522. package/src/admin/ui.generated.ts +99 -104
  523. package/src/analytics/Analytics.test.ts +4 -50
  524. package/src/analytics/Analytics.ts +65 -1
  525. package/src/analytics/tables/requestEvents.test.ts +402 -1
  526. package/src/analytics/tables/requestEvents.ts +62 -93
  527. package/src/apps/data/App.test.ts +26 -0
  528. package/src/apps/data/routes/activities.test.ts +315 -14
  529. package/src/apps/data/routes/activities.ts +60 -0
  530. package/src/apps/data/routes/balances.ts +5 -7
  531. package/src/apps/data/routes/earn.bench.ts +18 -0
  532. package/src/apps/data/routes/earn.local.test.ts +507 -0
  533. package/src/apps/data/routes/earn.test.ts +405 -127
  534. package/src/apps/data/routes/earn.ts +660 -270
  535. package/src/apps/data/routes/exchanges.bench.ts +3 -1
  536. package/src/apps/data/routes/exchanges.test.ts +166 -2
  537. package/src/apps/data/routes/exchanges.ts +308 -101
  538. package/src/apps/data/routes/fee-amm.test.ts +153 -2
  539. package/src/apps/data/routes/fee-amm.ts +132 -62
  540. package/src/apps/data/routes/receipts.test.ts +21 -18
  541. package/src/apps/data/routes/rpc.test.ts +34 -2
  542. package/src/apps/data/routes/rpc.ts +47 -10
  543. package/src/apps/data/routes/tokens.provenance.test.ts +157 -0
  544. package/src/apps/data/routes/tokens.test.ts +4 -4
  545. package/src/apps/data/routes/tokens.ts +11 -6
  546. package/src/apps/data/routes/transactions.test.ts +29 -0
  547. package/src/apps/data/routes/transactions.ts +33 -22
  548. package/src/apps/data/routes/webhooks.scan.test.ts +29 -0
  549. package/src/apps/data/routes/webhooks.test.ts +18 -3
  550. package/src/apps/data/routes/webhooks.ts +27 -13
  551. package/src/apps/management/App.ts +4 -0
  552. package/src/apps/management/Billing.test.ts +253 -27
  553. package/src/apps/management/Billing.ts +83 -29
  554. package/src/apps/management/routes/api-keys.test.ts +1 -1
  555. package/src/apps/management/routes/api-keys.ts +85 -11
  556. package/src/apps/management/routes/billing.test.ts +68 -4
  557. package/src/apps/management/routes/cli.test.ts +370 -0
  558. package/src/apps/management/routes/cli.ts +533 -0
  559. package/src/apps/management/routes/me.test.ts +14 -4
  560. package/src/apps/management/routes/orgs.test.ts +108 -4
  561. package/src/apps/management/routes/orgs.ts +7 -2
  562. package/src/apps/management/routes/usage.test.ts +2 -2
  563. package/src/apps/management/routes/verified-token-requests.test.ts +16 -2
  564. package/src/apps/management/routes/verified-token-requests.ts +7 -10
  565. package/src/apps/mcp.test.ts +108 -25
  566. package/src/apps/mcp.ts +15 -3
  567. package/src/apps/mpp/internal/Policy.test.ts +51 -4
  568. package/src/apps/mpp/internal/Policy.ts +6 -2
  569. package/src/apps/mpp/internal/Sponsorship.test.ts +29 -0
  570. package/src/apps/mpp/internal/Sponsorship.ts +6 -4
  571. package/src/apps/relay/App.test.ts +85 -1
  572. package/src/apps/relay/App.ts +28 -4
  573. package/src/apps/relay/Sponsorships.test.ts +97 -1
  574. package/src/apps/relay/Sponsorships.ts +77 -66
  575. package/src/apps/routes/Access.test.ts +319 -0
  576. package/src/apps/routes/Access.ts +147 -0
  577. package/src/apps/routes/App.ts +10 -0
  578. package/src/apps/routes/routes/chains.test.ts +3 -2
  579. package/src/apps/routes/routes/deposit-addresses.test.ts +978 -34
  580. package/src/apps/routes/routes/deposit-addresses.ts +243 -32
  581. package/src/apps/routes/routes/propAmm.local.test.ts +951 -0
  582. package/src/apps/routes/routes/quotes.test.ts +81 -8
  583. package/src/apps/routes/routes/quotes.ts +109 -27
  584. package/src/apps/routes/routes/transfers.test.ts +252 -15
  585. package/src/apps/routes/routes/transfers.ts +212 -33
  586. package/src/cli/ApiKeys.test.ts +265 -0
  587. package/src/cli/ApiKeys.ts +189 -0
  588. package/src/cli/Cli.test.ts +188 -0
  589. package/src/cli/Cli.ts +280 -12
  590. package/src/cli/Credentials.test.ts +122 -0
  591. package/src/cli/Credentials.ts +144 -0
  592. package/src/cli/Spec.test.ts +133 -0
  593. package/src/cli/Spec.ts +132 -0
  594. package/src/cli/bin.test.ts +49 -0
  595. package/src/cli/bin.ts +5 -1
  596. package/src/cli/commands/auth.test.ts +138 -0
  597. package/src/cli/commands/auth.ts +254 -0
  598. package/src/cli/commands/keys.test.ts +68 -0
  599. package/src/cli/commands/keys.ts +125 -0
  600. package/src/cloudflare.ts +184 -36
  601. package/src/db/Db.test.ts +877 -0
  602. package/src/db/Db.ts +507 -1
  603. package/src/db/Schema.ts +75 -4
  604. package/src/db/tables/apiKeyAdmissions.test.ts +57 -0
  605. package/src/db/tables/apiKeyAdmissions.ts +101 -11
  606. package/src/db/tables/apiKeyOwnerTombstones.ts +2 -2
  607. package/src/db/tables/authAccounts.test.ts +30 -0
  608. package/src/db/tables/authAccounts.ts +1 -0
  609. package/src/db/tables/earnVaults.test.ts +34 -0
  610. package/src/db/tables/earnVaults.ts +17 -2
  611. package/src/db/tables/organizations.test.ts +148 -84
  612. package/src/db/tables/organizations.ts +11 -43
  613. package/src/db/tables/requestUsage.ts +13 -2
  614. package/src/db/tables/rewardCampaigns.test.ts +163 -0
  615. package/src/db/tables/rewardEligibilityAssociations.test.ts +14 -0
  616. package/src/db/tables/rewardEligibilityAssociations.ts +24 -0
  617. package/src/db/tables/rewardRuns.ts +4 -0
  618. package/src/db/tables/rewardTransactionAttempts.ts +2 -0
  619. package/src/db/tables/routesDepositAddresses.test.ts +263 -0
  620. package/src/db/tables/routesDepositAddresses.ts +118 -34
  621. package/src/db/tables/routesDeposits.test.ts +133 -0
  622. package/src/db/tables/routesDeposits.ts +47 -26
  623. package/src/db/tables/routesIdempotency.test.ts +80 -0
  624. package/src/db/tables/routesIdempotency.ts +2 -0
  625. package/src/db/tables/routesPolicies.test.ts +143 -0
  626. package/src/db/tables/routesPolicies.ts +251 -0
  627. package/src/db/tables/routesTransferSubsidies.ts +64 -0
  628. package/src/db/tables/routesTransferSubsidyNonces.ts +16 -4
  629. package/src/db/tables/routesTransfers.test.ts +183 -2
  630. package/src/db/tables/routesTransfers.ts +65 -6
  631. package/src/db/tables/sponsoredTransactions.test.ts +351 -76
  632. package/src/db/tables/sponsoredTransactions.ts +182 -38
  633. package/src/db/tables/users.test.ts +51 -0
  634. package/src/db/tables/users.ts +12 -0
  635. package/src/db/tables/verifiedTokenRequests.test.ts +39 -20
  636. package/src/db/tables/verifiedTokenRequests.ts +80 -44
  637. package/src/handlers/internal/multisig.store.test.ts +120 -0
  638. package/src/handlers/internal/multisig.test.ts +389 -0
  639. package/src/handlers/internal/multisig.ts +13 -10
  640. package/src/handlers/relay.test.ts +259 -83
  641. package/src/handlers/relay.ts +36 -17
  642. package/src/internal/Auth.test.ts +383 -8
  643. package/src/internal/Auth.ts +272 -99
  644. package/src/internal/BetterAuth.test.ts +58 -22
  645. package/src/internal/BetterAuth.ts +23 -17
  646. package/src/internal/Cache.ts +3 -1
  647. package/src/internal/CliAuth.test.ts +279 -0
  648. package/src/internal/CliAuth.ts +319 -0
  649. package/src/internal/EarnSharePrices.test.ts +25 -0
  650. package/src/internal/EarnSharePrices.ts +9 -2
  651. package/src/internal/EarnVaults.test.ts +67 -0
  652. package/src/internal/EarnVaults.ts +299 -4
  653. package/src/internal/EarnWithdrawals.test.ts +315 -0
  654. package/src/internal/EarnWithdrawals.ts +266 -0
  655. package/src/internal/ExecutionContext.ts +31 -0
  656. package/src/internal/Log.test.ts +210 -0
  657. package/src/internal/Log.ts +180 -142
  658. package/src/internal/MetricSink.test.ts +190 -15
  659. package/src/internal/MetricSink.ts +27 -1
  660. package/src/internal/RateLimit.test.ts +144 -8
  661. package/src/internal/RateLimit.ts +254 -26
  662. package/src/internal/Store.ts +4 -5
  663. package/src/internal/Timing.test.ts +32 -0
  664. package/src/internal/Timing.ts +20 -1
  665. package/src/internal/Tron.test-d.ts +22 -0
  666. package/src/internal/Tron.test.ts +94 -0
  667. package/src/internal/Tron.ts +289 -0
  668. package/src/internal/Viem.rpc.test.ts +76 -0
  669. package/src/internal/Viem.ts +29 -6
  670. package/src/internal/rewards/Read.test.ts +109 -0
  671. package/src/internal/rewards/Read.ts +13 -4
  672. package/src/internal/routes/Action.test.ts +70 -0
  673. package/src/internal/routes/Action.ts +76 -1
  674. package/src/internal/routes/Chain.test.ts +18 -0
  675. package/src/internal/routes/Chain.ts +5 -0
  676. package/src/internal/routes/DepositAddress.ts +5 -0
  677. package/src/internal/routes/Evidence.test.ts +64 -0
  678. package/src/internal/routes/Evidence.ts +11 -3
  679. package/src/internal/routes/EvmTransferSettlement.ts +213 -0
  680. package/src/internal/routes/Policy.test.ts +316 -0
  681. package/src/internal/routes/Policy.ts +399 -0
  682. package/src/internal/routes/Provider.test.ts +103 -2
  683. package/src/internal/routes/Provider.ts +149 -27
  684. package/src/internal/routes/Quota.test.ts +149 -0
  685. package/src/internal/routes/Quota.ts +226 -0
  686. package/src/internal/routes/Reconciliation.local.test.ts +285 -0
  687. package/src/internal/routes/Reconciliation.test.ts +371 -13
  688. package/src/internal/routes/Reconciliation.ts +193 -42
  689. package/src/internal/routes/SolanaTransferSettlement.ts +232 -0
  690. package/src/internal/routes/SolanaTransferSubsidy.test.ts +471 -0
  691. package/src/internal/routes/SolanaTransferSubsidy.ts +760 -0
  692. package/src/internal/routes/SourceObservation.test.ts +221 -0
  693. package/src/internal/routes/Subsidy.local.test.ts +46 -0
  694. package/src/internal/routes/Subsidy.ts +4 -2
  695. package/src/internal/routes/Transfer.solana.test.ts +389 -0
  696. package/src/internal/routes/Transfer.test.ts +130 -1
  697. package/src/internal/routes/Transfer.tron.test.ts +172 -0
  698. package/src/internal/routes/Transfer.ts +866 -8
  699. package/src/internal/routes/TransferReconciliation.test.ts +26 -4
  700. package/src/internal/routes/TransferReconciliation.ts +91 -166
  701. package/src/internal/routes/TransferSettlement.ts +48 -0
  702. package/src/internal/routes/TransferSubsidy.local.test.ts +143 -0
  703. package/src/internal/routes/TransferSubsidy.test.ts +34 -4
  704. package/src/internal/routes/TransferSubsidy.ts +87 -12
  705. package/src/internal/routes/TronTransferSettlement.ts +212 -0
  706. package/src/internal/routes/TronTransferSubsidy.test.ts +109 -0
  707. package/src/internal/routes/TronTransferSubsidy.ts +619 -0
  708. package/src/internal/routes/index.test.ts +3 -0
  709. package/src/internal/routes/index.ts +3 -0
  710. package/src/internal/routes/providers/across.ts +13 -0
  711. package/src/internal/routes/providers/index.test.ts +141 -0
  712. package/src/internal/routes/providers/legacyMesh.test.ts +484 -0
  713. package/src/internal/routes/providers/legacyMesh.ts +633 -0
  714. package/src/internal/routes/providers/legacyMeshDelivery.test.ts +306 -0
  715. package/src/internal/routes/providers/legacyMeshDelivery.ts +320 -0
  716. package/src/internal/routes/providers/legacyMeshOutbound.test.ts +401 -0
  717. package/src/internal/routes/providers/legacyMeshOutbound.ts +566 -0
  718. package/src/internal/routes/providers/legacyMeshOutboundDelivery.ts +473 -0
  719. package/src/internal/routes/providers/propAmm.ts +640 -0
  720. package/src/internal/routes/providers/relay.test.ts +1299 -18
  721. package/src/internal/routes/providers/relay.ts +424 -39
  722. package/src/internal/routes/providers/rhino.ts +14 -1
  723. package/src/internal/routes/providers/squid.ts +21 -0
  724. package/src/internal/routes/providers/stargate.test.ts +105 -1
  725. package/src/internal/routes/providers/stargate.ts +22 -9
  726. package/src/internal/routes/providers/symbiosis.ts +13 -47
  727. package/src/providers/index.test.ts +2 -0
  728. package/src/providers/index.ts +18 -0
  729. package/dist/admin/Access.d.ts +0 -39
  730. package/dist/admin/Access.d.ts.map +0 -1
  731. package/dist/admin/Access.js +0 -73
  732. package/dist/admin/Access.js.map +0 -1
  733. package/src/admin/Access.test.ts +0 -130
  734. package/src/admin/Access.ts +0 -85
@@ -1,6 +1,6 @@
1
1
  import { serve } from '@hono/node-server'
2
2
  import * as Accounts from 'accounts/server'
3
- import { Hono, type Context } from 'hono'
3
+ import { Hono, Context } from 'hono'
4
4
  import { requestId } from 'hono/request-id'
5
5
  import { exportJWK, generateKeyPair } from 'jose'
6
6
  import { Challenge, Receipt, Store as MppStore } from 'mppx'
@@ -13,8 +13,10 @@ import { Actions, Transaction } from 'viem/tempo'
13
13
  import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
14
14
  import * as App from '../App.js'
15
15
  import * as ApiKey from '../ApiKey.js'
16
+ import * as ApiKeys from '../ApiKeys.js'
16
17
  import * as Management from '../apps/management/App.js'
17
18
  import type * as Db from '../db/Db.js'
19
+ import * as AuthAccounts from '../db/tables/authAccounts.js'
18
20
  import * as Memberships from '../db/tables/memberships.js'
19
21
  import * as Organizations from '../db/tables/organizations.js'
20
22
  import * as Projects from '../db/tables/projects.js'
@@ -22,6 +24,7 @@ import * as Users from '../db/tables/users.js'
22
24
  import * as Auth from './Auth.js'
23
25
  import * as Log from './Log.js'
24
26
  import * as Scope from '../Scope.js'
27
+ import * as Timeout from './Timeout.js'
25
28
  import * as Viem from './Viem.js'
26
29
  import * as TestApp from '../../test/App.js'
27
30
  import { createClient as createMppClient } from '../../test/Mppx.js'
@@ -39,6 +42,87 @@ const key = {
39
42
 
40
43
  const token = 'secret_test_key'
41
44
 
45
+ describe('cachedResolve', () => {
46
+ test.each(['positive', 'negative'] as const)(
47
+ 'resolves an independent miss after a caller times out and caches the %s result',
48
+ async (result) => {
49
+ const store = Store.memory()
50
+ const { record, token: apiKey } = await ApiKeys.mint(store, { scopes: ['data:read'] })
51
+ if (result === 'negative') await ApiKeys.revoke(store, record.id)
52
+ const slow = new Context(new Request('https://api.example/slow'))
53
+ const fast = new Context(new Request('https://api.example/fast'))
54
+ let started = 0
55
+ let completed = 0
56
+ vi.useFakeTimers()
57
+ const cache = Auth.cachedResolve(async (c, apiKey) => {
58
+ started++
59
+ // Only the timer controls latency; storage and key resolution use their real implementations.
60
+ await new Promise((resolve) => setTimeout(resolve, c === slow ? 90_000 : 0))
61
+ const value = await ApiKeys.resolve(store, apiKey)
62
+ completed++
63
+ return value
64
+ }, {})
65
+
66
+ const pending = cache.resolve(slow, apiKey)
67
+ try {
68
+ await Promise.all([
69
+ expect(
70
+ Timeout.run(() => pending, { timeout: 60_000 }),
71
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[TimeoutError: Timed out after 60000ms.]`),
72
+ vi.advanceTimersByTimeAsync(60_000),
73
+ ])
74
+ expect(completed).toMatchInlineSnapshot(`0`)
75
+
76
+ const expected = result === 'positive' ? record.id : null
77
+ await Promise.all([
78
+ expect(
79
+ Timeout.run(() => cache.resolve(fast, apiKey), { timeout: 1_000 }).then(
80
+ (value) => value?.id ?? null,
81
+ ),
82
+ ).resolves.toBe(expected),
83
+ vi.advanceTimersByTimeAsync(1_000),
84
+ ])
85
+ expect(started).toMatchInlineSnapshot(`2`)
86
+ expect(completed).toMatchInlineSnapshot(`1`)
87
+
88
+ const third = await cache.resolve(fast, apiKey)
89
+ expect(third?.id ?? null).toBe(expected)
90
+ expect(started).toMatchInlineSnapshot(`2`)
91
+ } finally {
92
+ // Settle the original operation so the test leaves no pending work behind.
93
+ await vi.advanceTimersByTimeAsync(90_000)
94
+ await pending
95
+ vi.useRealTimers()
96
+ }
97
+ },
98
+ )
99
+
100
+ test('expires completed positive and negative results with their respective TTLs', async () => {
101
+ const store = Store.memory()
102
+ const { record, token: apiKey } = await ApiKeys.mint(store, { scopes: ['data:read'] })
103
+ const persisted = (await store.get(ApiKey.keyFor(apiKey)))!
104
+ vi.useFakeTimers()
105
+ const cache = Auth.cachedResolve((_c, apiKey) => ApiKeys.resolve(store, apiKey), {})
106
+ const context = new Context(new Request('https://api.example'))
107
+
108
+ try {
109
+ expect((await cache.resolve(context, apiKey))?.id).toBe(record.id)
110
+ // Revocation fences the id permanently, so drop only the record to restore it later.
111
+ await store.delete(ApiKey.keyFor(apiKey))
112
+ expect((await cache.resolve(context, apiKey))?.id).toBe(record.id)
113
+ await vi.advanceTimersByTimeAsync(60_000)
114
+ expect(await cache.resolve(context, apiKey)).toMatchInlineSnapshot(`null`)
115
+
116
+ await store.put(ApiKey.keyFor(apiKey), persisted)
117
+ expect(await cache.resolve(context, apiKey)).toMatchInlineSnapshot(`null`)
118
+ await vi.advanceTimersByTimeAsync(10_000)
119
+ expect((await cache.resolve(context, apiKey))?.id).toBe(record.id)
120
+ } finally {
121
+ vi.useRealTimers()
122
+ }
123
+ })
124
+ })
125
+
42
126
  describe('require', () => {
43
127
  describe('apiKey', () => {
44
128
  test('accepts API key from tempo-api-key', async () => {
@@ -75,6 +159,36 @@ describe('require', () => {
75
159
  `)
76
160
  })
77
161
 
162
+ test('isolates an explicit endpoint bucket from the shared scope quota', async () => {
163
+ const app = createScopedApp({
164
+ routes: [
165
+ {
166
+ path: '/other',
167
+ policy: {
168
+ apiKey: { rateLimit: { limit: 1, period: 'minute' }, scopes: ['data:read'] },
169
+ },
170
+ },
171
+ {
172
+ path: '/protected',
173
+ policy: {
174
+ apiKey: {
175
+ bucket: 'protected',
176
+ rateLimit: { limit: 1, period: 'minute' },
177
+ scopes: ['data:read'],
178
+ },
179
+ },
180
+ },
181
+ ],
182
+ })
183
+ const options = { headers: { 'tempo-api-key': token } }
184
+
185
+ const other = await app.request('/other', options)
186
+ const protected_ = await app.request('/protected', options)
187
+ const overflow = await app.request('/protected', options)
188
+
189
+ expect([other.status, protected_.status, overflow.status]).toEqual([200, 200, 429])
190
+ })
191
+
78
192
  test('does not parse payment authorization as bearer fallback', async () => {
79
193
  const app = createApp()
80
194
  const response = await app.request('/protected', {
@@ -258,7 +372,7 @@ describe('require', () => {
258
372
 
259
373
  test('rejects missing scope', async () => {
260
374
  const app = createApp({
261
- policy: { apiKey: { scopes: ['webhooks:write'] } },
375
+ policy: { apiKey: { scopes: ['routes:write'] } },
262
376
  })
263
377
  const response = await app.request('/protected', {
264
378
  headers: { 'tempo-api-key': token },
@@ -270,7 +384,26 @@ describe('require', () => {
270
384
  {
271
385
  "error": {
272
386
  "code": "api_key_forbidden",
273
- "message": "API key missing required scope",
387
+ "message": "API key is missing required permissions: routes:write. Use an API key with these scopes.",
388
+ },
389
+ }
390
+ `)
391
+ })
392
+
393
+ test('lists only missing scopes when multiple permissions are required', async () => {
394
+ const app = createApp({
395
+ policy: { apiKey: { scopes: ['data:read', 'routes:write', 'webhooks:write'] } },
396
+ })
397
+ const response = await app.request('/protected', {
398
+ headers: { 'tempo-api-key': token },
399
+ })
400
+
401
+ expect(response.status).toMatchInlineSnapshot(`403`)
402
+ expect(await response.json()).toMatchInlineSnapshot(`
403
+ {
404
+ "error": {
405
+ "code": "api_key_forbidden",
406
+ "message": "API key is missing required permissions: routes:write, webhooks:write. Use an API key with these scopes.",
274
407
  },
275
408
  }
276
409
  `)
@@ -938,6 +1071,8 @@ describe('require', () => {
938
1071
  expect(consume).toHaveBeenCalledWith({
939
1072
  key: 'mpp:public:2001:db8:abcd:12',
940
1073
  limit: { limit: 100, period: 'minute' },
1074
+ principal: 'mpp:public:2001:db8:abcd:12',
1075
+ waitUntil: undefined,
941
1076
  })
942
1077
  })
943
1078
 
@@ -965,6 +1100,8 @@ describe('require', () => {
965
1100
  expect(consume).toHaveBeenCalledWith({
966
1101
  key: 'mpp:public:anonymous',
967
1102
  limit: { limit: 100, period: 'minute' },
1103
+ principal: 'mpp:public:anonymous',
1104
+ waitUntil: undefined,
968
1105
  })
969
1106
  })
970
1107
 
@@ -991,6 +1128,8 @@ describe('require', () => {
991
1128
  expect(consume).toHaveBeenCalledWith({
992
1129
  key: 'mpp:public:2001:db8:abcd:12',
993
1130
  limit: { limit: 100, period: 'minute' },
1131
+ principal: 'mpp:public:2001:db8:abcd:12',
1132
+ waitUntil: undefined,
994
1133
  })
995
1134
  })
996
1135
 
@@ -1021,6 +1160,8 @@ describe('require', () => {
1021
1160
  expect(consume).toHaveBeenCalledWith({
1022
1161
  key: 'mpp:api_key:key_test',
1023
1162
  limit: { limit: 100, period: 'minute' },
1163
+ principal: 'mpp:api_key:key_test',
1164
+ waitUntil: undefined,
1024
1165
  })
1025
1166
  })
1026
1167
 
@@ -1041,6 +1182,42 @@ describe('require', () => {
1041
1182
  expect(response.headers.get('RateLimit-Limit')).toBe('25')
1042
1183
  })
1043
1184
 
1185
+ test('isolates an explicit endpoint bucket from unrelated paid requests', async () => {
1186
+ const auth = {
1187
+ apiKey: { resolve: TestApp.resolver({ keys: [{ ...key, token }] }) },
1188
+ mpp: createMppHandler(),
1189
+ rateLimit: RateLimit.memory(),
1190
+ } satisfies Auth.Context
1191
+ const app = createScopedApp({
1192
+ auth,
1193
+ routes: [
1194
+ {
1195
+ path: '/other',
1196
+ policy: {
1197
+ mpp: { rateLimit: { limit: 1, period: 'minute' }, session: { amount: '1' } },
1198
+ },
1199
+ },
1200
+ {
1201
+ path: '/protected',
1202
+ policy: {
1203
+ mpp: {
1204
+ bucket: 'protected',
1205
+ rateLimit: { limit: 1, period: 'minute' },
1206
+ session: { amount: '1' },
1207
+ },
1208
+ },
1209
+ },
1210
+ ],
1211
+ })
1212
+ const options = { headers: { authorization: 'Payment paid' } }
1213
+
1214
+ const other = await app.request('/other', options)
1215
+ const protected_ = await app.request('/protected', options)
1216
+ const overflow = await app.request('/protected', options)
1217
+
1218
+ expect([other.status, protected_.status, overflow.status]).toEqual([200, 200, 429])
1219
+ })
1220
+
1044
1221
  test('route paid-request limit overrides the global limit', async () => {
1045
1222
  const app = createApp({
1046
1223
  auth: {
@@ -1648,6 +1825,32 @@ describe('require', () => {
1648
1825
  `)
1649
1826
  })
1650
1827
 
1828
+ test('isolates an explicit endpoint bucket from unrelated public requests', async () => {
1829
+ const app = createScopedApp({
1830
+ routes: [
1831
+ {
1832
+ path: '/other',
1833
+ policy: { public: { rateLimit: { limit: 1, period: 'minute' } } },
1834
+ },
1835
+ {
1836
+ path: '/protected',
1837
+ policy: {
1838
+ public: {
1839
+ bucket: 'protected',
1840
+ rateLimit: { limit: 1, period: 'minute' },
1841
+ },
1842
+ },
1843
+ },
1844
+ ],
1845
+ })
1846
+
1847
+ const other = await app.request('/other')
1848
+ const protected_ = await app.request('/protected')
1849
+ const overflow = await app.request('/protected')
1850
+
1851
+ expect([other.status, protected_.status, overflow.status]).toEqual([200, 200, 429])
1852
+ })
1853
+
1651
1854
  test('returns rate-limit error without payment context', async () => {
1652
1855
  const app = createApp({
1653
1856
  auth: {
@@ -2781,6 +2984,8 @@ describe('email OTP', () => {
2781
2984
  json({ email: 'Developer@Example.com', type: 'sign-in' }),
2782
2985
  )
2783
2986
  expect(sent.status).toBe(200)
2987
+ expect(sent.headers.get('tempo-terms-url')).toBe('https://console.tempo.xyz/legal/terms')
2988
+ expect(sent.headers.get('tempo-privacy-url')).toBe('https://tempo.xyz/privacy-policy/')
2784
2989
  expect(await sent.json()).toEqual({ success: true })
2785
2990
  expect(messages).toHaveLength(1)
2786
2991
  const otp = messages[0]!.text.match(/\b\d{6}\b/)?.[0]
@@ -2806,6 +3011,7 @@ describe('email OTP', () => {
2806
3011
 
2807
3012
  const existing = await Users.getByEmail(db, 'developer@example.com')
2808
3013
  expect(existing).toBeDefined()
3014
+ expect(existing?.termsSharedAt).toEqual(expect.any(String))
2809
3015
 
2810
3016
  const setCookie = verified.headers.get('set-cookie')
2811
3017
  expect(setCookie).toContain('tempo_auth.session_token=')
@@ -2920,18 +3126,36 @@ describe('email OTP', () => {
2920
3126
  })
2921
3127
 
2922
3128
  test('handles SIWE routes under an application path', async () => {
3129
+ const db = TestApp.database()
2923
3130
  const app = TestApp.create({
3131
+ db,
2924
3132
  path: '/api',
2925
3133
  session: { secret, wallet: { origin } },
2926
3134
  })
2927
3135
  const account = privateKeyToAccount(generatePrivateKey())
2928
3136
 
2929
- const { verifyResponse } = await TestApp.signIn(
2930
- { request: (path, init) => app.request(`/api${path}`, init) },
2931
- account,
2932
- )
3137
+ try {
3138
+ const user = await Users.upsertByAddress(db, { address: account.address })
3139
+ await db.kysely
3140
+ .updateTable('users')
3141
+ .set({ termsSharedAt: null })
3142
+ .where('id', '=', user.id)
3143
+ .execute()
3144
+ const { verifyResponse } = await TestApp.signIn(
3145
+ { request: (path, init) => app.request(`/api${path}`, init) },
3146
+ account,
3147
+ )
2933
3148
 
2934
- expect(verifyResponse.status).toBe(200)
3149
+ expect(verifyResponse.status).toBe(200)
3150
+ expect(verifyResponse.headers.get('tempo-terms-url')).toBe(
3151
+ 'https://console.tempo.xyz/legal/terms',
3152
+ )
3153
+ expect(await Users.get(db, user.id)).toMatchObject({
3154
+ termsSharedAt: expect.any(String),
3155
+ })
3156
+ } finally {
3157
+ await db.close()
3158
+ }
2935
3159
  })
2936
3160
 
2937
3161
  test('returns the canonical error envelope when the SIWE store fails', async () => {
@@ -3552,6 +3776,98 @@ describe('one-time session tokens', () => {
3552
3776
  })
3553
3777
  })
3554
3778
 
3779
+ describe.each(['identity', 'siwe'] as const)('%s session binding', (mode) => {
3780
+ test('rejects email reassignment without rebinding to the new owner', async () => {
3781
+ const { account, app, close, cookie, db, user } = await walletSession(mode)
3782
+ try {
3783
+ await Users.setEmail(db, user.id, 'changed@example.com')
3784
+ const replacement = await Users.upsertByAddress(db, { address: Tempo.accounts[9].address })
3785
+ await Users.setEmail(db, replacement.id, 'developer@example.com')
3786
+ const org = await Organizations.create(db, { name: 'Replacement organization' })
3787
+ await Memberships.create(db, { orgId: org.id, role: 'owner', userId: replacement.id })
3788
+
3789
+ for (const path of ['/v1/me', '/v1/orgs', `/v1/orgs/${org.id}`])
3790
+ expect((await app.request(path, { headers: { cookie } })).status).toBe(401)
3791
+ expect(await AuthAccounts.getWalletUserId(db, account.address)).toBe(user.id)
3792
+ expect((await Users.get(db, user.id))?.email).toBe('changed@example.com')
3793
+ expect((await Users.get(db, replacement.id))?.email).toBe('developer@example.com')
3794
+ } finally {
3795
+ await close()
3796
+ }
3797
+ })
3798
+
3799
+ test('rejects a session after its wallet is linked to another user', async () => {
3800
+ const { account, app, close, cookie, db, user } = await walletSession(mode)
3801
+ try {
3802
+ const replacement = await Users.upsertByAddress(db, { address: Tempo.accounts[9].address })
3803
+ await AuthAccounts.setWalletUser(db, { address: account.address, userId: replacement.id })
3804
+
3805
+ expect((await app.request('/v1/me', { headers: { cookie } })).status).toBe(401)
3806
+ expect(await AuthAccounts.getWalletUserId(db, account.address)).toBe(replacement.id)
3807
+ expect((await Users.get(db, user.id))?.email).toBe('developer@example.com')
3808
+ } finally {
3809
+ await close()
3810
+ }
3811
+ })
3812
+
3813
+ test('rejects legacy sessions without an immutable user binding', async () => {
3814
+ const { app, close, cookie, store } = await walletSession(mode)
3815
+ try {
3816
+ const token = cookie.slice(cookie.indexOf('=') + 1)
3817
+ const key = `${mode === 'identity' ? 'identity' : 'auth'}:session:${token}`
3818
+ const payload = JSON.parse((await store.get(key))!)
3819
+ delete payload.userId
3820
+ await store.put(key, JSON.stringify(payload))
3821
+
3822
+ expect((await app.request('/v1/me', { headers: { cookie } })).status).toBe(401)
3823
+ } finally {
3824
+ await close()
3825
+ }
3826
+ })
3827
+
3828
+ test.each([false, true])(
3829
+ 'blocks old owner invitations after removal with changed email %s',
3830
+ async (changedEmail) => {
3831
+ const { app, close, cookie, db, user } = await walletSession(mode)
3832
+ try {
3833
+ const owner = await TestApp.signIn(app, Tempo.accounts[8])
3834
+ expect(owner.verifyResponse.status).toBe(200)
3835
+ const created = await app.request('/v1/orgs', {
3836
+ ...json({ name: 'Protected organization' }),
3837
+ headers: { 'content-type': 'application/json', cookie: owner.cookie! },
3838
+ })
3839
+ expect(created.status).toBe(200)
3840
+ const org = (await created.json()) as { id: string }
3841
+ await Memberships.create(db, { orgId: org.id, role: 'member', userId: user.id })
3842
+ const invited = await app.request(`/v1/orgs/${org.id}/invitations`, {
3843
+ ...json({ email: 'developer@example.com', role: 'owner' }),
3844
+ headers: { 'content-type': 'application/json', cookie: owner.cookie! },
3845
+ })
3846
+ expect(invited.status).toBe(200)
3847
+ const invitation = (await invited.json()) as { id: string }
3848
+ if (changedEmail) await Users.setEmail(db, user.id, 'changed@example.com')
3849
+ const removed = await app.request(`/v1/orgs/${org.id}/members/${user.id}`, {
3850
+ headers: { cookie: owner.cookie! },
3851
+ method: 'DELETE',
3852
+ })
3853
+ expect(removed.status).toBe(200)
3854
+
3855
+ const accepted = await app.request(`/v1/invitations/${invitation.id}/accept`, {
3856
+ headers: { cookie },
3857
+ method: 'POST',
3858
+ })
3859
+ expect(accepted.status).toBe(changedEmail ? 401 : 404)
3860
+ expect(await Memberships.get(db, org.id, user.id)).toBeUndefined()
3861
+ expect((await app.request(`/v1/orgs/${org.id}`, { headers: { cookie } })).status).toBe(
3862
+ changedEmail ? 401 : 404,
3863
+ )
3864
+ } finally {
3865
+ await close()
3866
+ }
3867
+ },
3868
+ )
3869
+ })
3870
+
3555
3871
  describe('identity sign-in', () => {
3556
3872
  test('rejects cross-site form bodies', async () => {
3557
3873
  const app = TestApp.create({
@@ -3762,11 +4078,20 @@ describe('identity sign-in', () => {
3762
4078
  email: 'developer@example.com',
3763
4079
  messages,
3764
4080
  })
4081
+ const emailUser = await Users.getByEmail(db, 'developer@example.com')
4082
+ await db.kysely
4083
+ .updateTable('users')
4084
+ .set({ termsSharedAt: null })
4085
+ .where('id', '=', emailUser!.id)
4086
+ .execute()
3765
4087
  const identity = await app.request(
3766
4088
  `${origin}/v1/auth/identity`,
3767
4089
  json({ idToken: await issuer.mint({ address: account.address, audience: origin }) }),
3768
4090
  )
3769
4091
  const identityCookie = identity.headers.get('set-cookie')?.split(';', 1)[0]
4092
+ expect(await Users.get(db, emailUser!.id)).toMatchObject({
4093
+ termsSharedAt: expect.any(String),
4094
+ })
3770
4095
  const me = await app.request(`${origin}/v1/me`, {
3771
4096
  headers: { cookie: `${emailCookie}; ${identityCookie}` },
3772
4097
  })
@@ -3846,6 +4171,53 @@ function expectSessionsCleared(response: globalThis.Response) {
3846
4171
  )
3847
4172
  }
3848
4173
 
4174
+ async function walletSession(mode: 'identity' | 'siwe') {
4175
+ const account = Tempo.accounts[7]
4176
+ const db = TestApp.database()
4177
+ const issuer = await createIdentityIssuer({ email: 'developer@example.com' })
4178
+ const store = Store.memory()
4179
+ const app = TestApp.create({
4180
+ db,
4181
+ kv: { store },
4182
+ session: {
4183
+ identity: { audience: origin, issuer: issuer.url },
4184
+ secret,
4185
+ wallet: { issuer: issuer.url, origin },
4186
+ },
4187
+ })
4188
+ const response =
4189
+ mode === 'identity'
4190
+ ? await app.request(
4191
+ `${origin}/v1/auth/identity`,
4192
+ json({ idToken: await issuer.mint({ address: account.address, audience: origin }) }),
4193
+ )
4194
+ : (
4195
+ await TestApp.signIn(app, account, {
4196
+ idToken: ({ nonce }) =>
4197
+ issuer.mint({ address: account.address, audience: origin, nonce }),
4198
+ })
4199
+ ).verifyResponse
4200
+ expect(response.status).toBe(200)
4201
+ const cookie = response.headers.get('set-cookie')!.split(';', 1)[0]!
4202
+ const user = await Users.getByAddress(db, account.address)
4203
+ expect(user).toBeDefined()
4204
+ const me = await app.request('/v1/me', { headers: { cookie } })
4205
+ expect(me.status).toBe(200)
4206
+ expect(await me.json()).toMatchObject({ email: 'developer@example.com', id: user!.id })
4207
+ return {
4208
+ account,
4209
+ app,
4210
+ close: async () => {
4211
+ await issuer.close()
4212
+ await db.close()
4213
+ },
4214
+ cookie,
4215
+ db,
4216
+ store,
4217
+ user: user!,
4218
+ }
4219
+ }
4220
+
3849
4221
  /** Local Wallet-style OIDC issuer for identity verification tests. */
3850
4222
  async function createIdentityIssuer(options: createIdentityIssuer.Options) {
3851
4223
  const { privateKey, publicKey } = await generateKeyPair('EdDSA', { extractable: true })
@@ -3872,6 +4244,7 @@ async function createIdentityIssuer(options: createIdentityIssuer.Options) {
3872
4244
  new Request(`${url}/token`, {
3873
4245
  body: JSON.stringify({
3874
4246
  audience: parameters.audience,
4247
+ ...(parameters.nonce ? { nonce: parameters.nonce } : {}),
3875
4248
  subject: parameters.address,
3876
4249
  }),
3877
4250
  headers: { 'content-type': 'application/json' },
@@ -3891,6 +4264,8 @@ declare namespace createIdentityIssuer {
3891
4264
  address: string
3892
4265
  /** Origin used as the token audience. */
3893
4266
  audience: string
4267
+ /** SIWE challenge nonce bound into the identity token. */
4268
+ nonce?: string | undefined
3894
4269
  }
3895
4270
 
3896
4271
  type Options = {