tapimo 0.19.0 → 0.20.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 (494) hide show
  1. package/README.md +13 -5
  2. package/dist/ApiKey.d.ts +2 -2
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +2 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +85 -11
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +218 -56
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +12543 -13912
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +4 -5
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +12 -20
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +20 -36
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +871 -828
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +14 -26
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +93 -186
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +3 -5
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/audit-logs.d.ts +18 -18
  27. package/dist/admin/apps/audit-logs.js +1 -1
  28. package/dist/admin/apps/audit-logs.js.map +1 -1
  29. package/dist/admin/apps/earn-vaults.d.ts +27 -27
  30. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  31. package/dist/admin/apps/earn-vaults.js +11 -5
  32. package/dist/admin/apps/earn-vaults.js.map +1 -1
  33. package/dist/admin/apps/organizations.d.ts +17 -17
  34. package/dist/admin/apps/prop-amms.d.ts +4 -4
  35. package/dist/admin/apps/routes-support.js +1 -38
  36. package/dist/admin/apps/routes-support.js.map +1 -1
  37. package/dist/admin/apps/routes.d.ts +153 -153
  38. package/dist/admin/apps/sentinel.d.ts +4 -4
  39. package/dist/admin/apps/verified-tokens.d.ts +24 -24
  40. package/dist/admin/apps/zone-delegation-requests.d.ts +332 -0
  41. package/dist/admin/apps/zone-delegation-requests.d.ts.map +1 -0
  42. package/dist/admin/apps/zone-delegation-requests.js +200 -0
  43. package/dist/admin/apps/zone-delegation-requests.js.map +1 -0
  44. package/dist/admin/apps/zone-delegations.d.ts +512 -52
  45. package/dist/admin/apps/zone-delegations.d.ts.map +1 -1
  46. package/dist/admin/apps/zone-delegations.js +134 -44
  47. package/dist/admin/apps/zone-delegations.js.map +1 -1
  48. package/dist/admin/index.d.ts +1 -1
  49. package/dist/admin/index.d.ts.map +1 -1
  50. package/dist/admin/index.js +1 -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 +341 -397
  55. package/dist/admin/ui.generated.js.map +1 -1
  56. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  57. package/dist/analytics/tables/requestEvents.js +4 -2
  58. package/dist/analytics/tables/requestEvents.js.map +1 -1
  59. package/dist/apps/data/App.d.ts +11932 -13214
  60. package/dist/apps/data/App.d.ts.map +1 -1
  61. package/dist/apps/data/App.js +32 -13
  62. package/dist/apps/data/App.js.map +1 -1
  63. package/dist/apps/data/ZoneSelection.d.ts +1 -1
  64. package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
  65. package/dist/apps/data/ZoneSelection.js +2 -2
  66. package/dist/apps/data/ZoneSelection.js.map +1 -1
  67. package/dist/apps/data/routes/activities.d.ts +60 -27
  68. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  69. package/dist/apps/data/routes/activities.js +91 -16
  70. package/dist/apps/data/routes/activities.js.map +1 -1
  71. package/dist/apps/data/routes/addresses.d.ts +893 -875
  72. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  73. package/dist/apps/data/routes/balances.d.ts +36 -36
  74. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  75. package/dist/apps/data/routes/balances.js +3 -1
  76. package/dist/apps/data/routes/balances.js.map +1 -1
  77. package/dist/apps/data/routes/blocks.d.ts +40 -40
  78. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  79. package/dist/apps/data/routes/blocks.js +3 -7
  80. package/dist/apps/data/routes/blocks.js.map +1 -1
  81. package/dist/apps/data/routes/coingecko.d.ts +236 -236
  82. package/dist/apps/data/routes/earn-transactions.d.ts +14 -14
  83. package/dist/apps/data/routes/earn.d.ts +261 -1445
  84. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  85. package/dist/apps/data/routes/earn.js +64 -490
  86. package/dist/apps/data/routes/earn.js.map +1 -1
  87. package/dist/apps/data/routes/exchanges.d.ts +144 -144
  88. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  89. package/dist/apps/data/routes/exchanges.js +5 -15
  90. package/dist/apps/data/routes/exchanges.js.map +1 -1
  91. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  92. package/dist/apps/data/routes/fee-amm.js +3 -9
  93. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  94. package/dist/apps/data/routes/indexer.d.ts +13 -13
  95. package/dist/apps/data/routes/receipts.d.ts +53 -53
  96. package/dist/apps/data/routes/receipts.js +1 -1
  97. package/dist/apps/data/routes/receipts.js.map +1 -1
  98. package/dist/apps/data/routes/rpc.d.ts +52 -0
  99. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  100. package/dist/apps/data/routes/rpc.js +19 -18
  101. package/dist/apps/data/routes/rpc.js.map +1 -1
  102. package/dist/apps/data/routes/tokenlist.d.ts +14 -14
  103. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  104. package/dist/apps/data/routes/tokenlist.js +1 -3
  105. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  106. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  107. package/dist/apps/data/routes/tokens.js +7 -5
  108. package/dist/apps/data/routes/tokens.js.map +1 -1
  109. package/dist/apps/data/routes/transactions.d.ts +281 -281
  110. package/dist/apps/data/routes/transactions.js +3 -3
  111. package/dist/apps/data/routes/transactions.js.map +1 -1
  112. package/dist/apps/data/routes/transfers.d.ts +12 -12
  113. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  114. package/dist/apps/data/routes/transfers.js +1 -3
  115. package/dist/apps/data/routes/transfers.js.map +1 -1
  116. package/dist/apps/data/routes/valuation.d.ts +30 -30
  117. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  118. package/dist/apps/data/routes/valuation.js +1 -3
  119. package/dist/apps/data/routes/valuation.js.map +1 -1
  120. package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
  121. package/dist/apps/data/routes/webhooks.d.ts +102 -102
  122. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  123. package/dist/apps/data/routes/webhooks.js +9 -23
  124. package/dist/apps/data/routes/webhooks.js.map +1 -1
  125. package/dist/apps/data/routes/zone-deposits.d.ts +16 -16
  126. package/dist/apps/data/routes/zone-withdrawals.d.ts +31 -31
  127. package/dist/apps/data/routes/zones.d.ts +28 -28
  128. package/dist/apps/management/App.d.ts +18 -102
  129. package/dist/apps/management/App.d.ts.map +1 -1
  130. package/dist/apps/management/App.js +1 -1
  131. package/dist/apps/management/App.js.map +1 -1
  132. package/dist/apps/management/routes/api-keys.d.ts +253 -339
  133. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  134. package/dist/apps/management/routes/api-keys.js +25 -11
  135. package/dist/apps/management/routes/api-keys.js.map +1 -1
  136. package/dist/apps/management/routes/billing.d.ts +92 -92
  137. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  138. package/dist/apps/management/routes/billing.js +5 -13
  139. package/dist/apps/management/routes/billing.js.map +1 -1
  140. package/dist/apps/management/routes/cli.d.ts.map +1 -1
  141. package/dist/apps/management/routes/cli.js +3 -9
  142. package/dist/apps/management/routes/cli.js.map +1 -1
  143. package/dist/apps/management/routes/faucet.d.ts +16 -16
  144. package/dist/apps/management/routes/fee-payer-usage.d.ts +38 -38
  145. package/dist/apps/management/routes/fee-payer-usage.d.ts.map +1 -1
  146. package/dist/apps/management/routes/fee-payer-usage.js +2 -4
  147. package/dist/apps/management/routes/fee-payer-usage.js.map +1 -1
  148. package/dist/apps/management/routes/invitations.d.ts +52 -52
  149. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  150. package/dist/apps/management/routes/invitations.js +4 -12
  151. package/dist/apps/management/routes/invitations.js.map +1 -1
  152. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  153. package/dist/apps/management/routes/invite-links.js +6 -14
  154. package/dist/apps/management/routes/invite-links.js.map +1 -1
  155. package/dist/apps/management/routes/me.d.ts +6 -6
  156. package/dist/apps/management/routes/me.d.ts.map +1 -1
  157. package/dist/apps/management/routes/me.js +3 -7
  158. package/dist/apps/management/routes/me.js.map +1 -1
  159. package/dist/apps/management/routes/members.d.ts +84 -84
  160. package/dist/apps/management/routes/members.d.ts.map +1 -1
  161. package/dist/apps/management/routes/members.js +2 -4
  162. package/dist/apps/management/routes/members.js.map +1 -1
  163. package/dist/apps/management/routes/orgs.d.ts +44 -44
  164. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  165. package/dist/apps/management/routes/orgs.js +2 -6
  166. package/dist/apps/management/routes/orgs.js.map +1 -1
  167. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  168. package/dist/apps/management/routes/projects.js +2 -6
  169. package/dist/apps/management/routes/projects.js.map +1 -1
  170. package/dist/apps/management/routes/route-usage.d.ts +34 -34
  171. package/dist/apps/management/routes/route-usage.d.ts.map +1 -1
  172. package/dist/apps/management/routes/route-usage.js +2 -4
  173. package/dist/apps/management/routes/route-usage.js.map +1 -1
  174. package/dist/apps/management/routes/routes-access-requests.d.ts +120 -91
  175. package/dist/apps/management/routes/routes-access-requests.d.ts.map +1 -1
  176. package/dist/apps/management/routes/routes-access-requests.js +49 -9
  177. package/dist/apps/management/routes/routes-access-requests.js.map +1 -1
  178. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  179. package/dist/apps/management/routes/usage.js +8 -16
  180. package/dist/apps/management/routes/usage.js.map +1 -1
  181. package/dist/apps/management/routes/verified-token-requests.d.ts +39 -39
  182. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  183. package/dist/apps/management/routes/verified-token-requests.js +3 -7
  184. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  185. package/dist/apps/management/routes/webhooks.d.ts +2089 -2089
  186. package/dist/apps/management/routes/zone-delegations.d.ts +14 -17
  187. package/dist/apps/management/routes/zone-delegations.d.ts.map +1 -1
  188. package/dist/apps/management/routes/zone-delegations.js +1 -6
  189. package/dist/apps/management/routes/zone-delegations.js.map +1 -1
  190. package/dist/apps/mpp/App.d.ts +44 -44
  191. package/dist/apps/mpp/App.js +3 -3
  192. package/dist/apps/mpp/App.js.map +1 -1
  193. package/dist/apps/mpp/internal/Adapter.js +1 -1
  194. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  195. package/dist/apps/mpp/internal/Error.d.ts.map +1 -1
  196. package/dist/apps/mpp/internal/Error.js +1 -0
  197. package/dist/apps/mpp/internal/Error.js.map +1 -1
  198. package/dist/apps/mpp/internal/Policy.d.ts +5 -1
  199. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  200. package/dist/apps/mpp/internal/Policy.js +35 -13
  201. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  202. package/dist/apps/relay/App.d.ts +2 -2
  203. package/dist/apps/relay/App.d.ts.map +1 -1
  204. package/dist/apps/relay/App.js +25 -16
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/routes/App.d.ts +311 -311
  207. package/dist/apps/routes/routes/deposit-addresses.d.ts +1099 -1099
  208. package/dist/apps/routes/routes/list.d.ts +74 -74
  209. package/dist/apps/routes/routes/transfers.d.ts +94 -94
  210. package/dist/cli/ApiKeys.d.ts +19 -26
  211. package/dist/cli/ApiKeys.d.ts.map +1 -1
  212. package/dist/db/Db.d.ts +3 -3
  213. package/dist/db/Db.d.ts.map +1 -1
  214. package/dist/db/Db.js +27 -0
  215. package/dist/db/Db.js.map +1 -1
  216. package/dist/db/Schema.d.ts +28 -62
  217. package/dist/db/Schema.d.ts.map +1 -1
  218. package/dist/db/Schema.js +18 -18
  219. package/dist/db/Schema.js.map +1 -1
  220. package/dist/db/tables/rewardRuns.d.ts +21 -0
  221. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  222. package/dist/db/tables/rewardRuns.js +19 -0
  223. package/dist/db/tables/rewardRuns.js.map +1 -1
  224. package/dist/db/tables/routesAccessRequests.d.ts +13 -0
  225. package/dist/db/tables/routesAccessRequests.d.ts.map +1 -1
  226. package/dist/db/tables/routesAccessRequests.js +12 -0
  227. package/dist/db/tables/routesAccessRequests.js.map +1 -1
  228. package/dist/db/tables/zoneDelegationRequests.d.ts +165 -0
  229. package/dist/db/tables/zoneDelegationRequests.d.ts.map +1 -0
  230. package/dist/db/tables/{zoneKeyRequests.js → zoneDelegationRequests.js} +43 -42
  231. package/dist/db/tables/zoneDelegationRequests.js.map +1 -0
  232. package/dist/db/tables/zoneDelegations.d.ts +11 -5
  233. package/dist/db/tables/zoneDelegations.d.ts.map +1 -1
  234. package/dist/db/tables/zoneDelegations.js +21 -3
  235. package/dist/db/tables/zoneDelegations.js.map +1 -1
  236. package/dist/handlers/internal/accounts.d.ts +7 -0
  237. package/dist/handlers/internal/accounts.d.ts.map +1 -0
  238. package/dist/handlers/internal/{multisig.js → accounts.js} +10 -10
  239. package/dist/handlers/internal/{multisig.js.map → accounts.js.map} +1 -1
  240. package/dist/handlers/internal/sponsorship.js +17 -17
  241. package/dist/handlers/internal/sponsorship.js.map +1 -1
  242. package/dist/handlers/relay.d.ts +6 -6
  243. package/dist/handlers/relay.d.ts.map +1 -1
  244. package/dist/handlers/relay.js +15 -15
  245. package/dist/handlers/relay.js.map +1 -1
  246. package/dist/internal/Auth.d.ts.map +1 -1
  247. package/dist/internal/Auth.js +4 -8
  248. package/dist/internal/Auth.js.map +1 -1
  249. package/dist/internal/EarnRates.d.ts.map +1 -1
  250. package/dist/internal/EarnRates.js +1 -3
  251. package/dist/internal/EarnRates.js.map +1 -1
  252. package/dist/internal/EarnVaults.js +2 -2
  253. package/dist/internal/Log.d.ts +2 -4
  254. package/dist/internal/Log.d.ts.map +1 -1
  255. package/dist/internal/Log.js +0 -3
  256. package/dist/internal/Log.js.map +1 -1
  257. package/dist/internal/Response.d.ts +1 -1
  258. package/dist/internal/Response.d.ts.map +1 -1
  259. package/dist/internal/Response.js +0 -3
  260. package/dist/internal/Response.js.map +1 -1
  261. package/dist/internal/Schema.d.ts +11 -0
  262. package/dist/internal/Schema.d.ts.map +1 -1
  263. package/dist/internal/Schema.js +24 -1
  264. package/dist/internal/Schema.js.map +1 -1
  265. package/dist/internal/ZoneAccess.d.ts +70 -35
  266. package/dist/internal/ZoneAccess.d.ts.map +1 -1
  267. package/dist/internal/ZoneAccess.js +312 -131
  268. package/dist/internal/ZoneAccess.js.map +1 -1
  269. package/dist/internal/ZoneDelegation.d.ts +7 -19
  270. package/dist/internal/ZoneDelegation.d.ts.map +1 -1
  271. package/dist/internal/ZoneDelegation.js +8 -29
  272. package/dist/internal/ZoneDelegation.js.map +1 -1
  273. package/dist/internal/{ZoneKeyApproval.d.ts → ZoneDelegationApproval.d.ts} +3 -5
  274. package/dist/internal/ZoneDelegationApproval.d.ts.map +1 -0
  275. package/dist/internal/ZoneDelegationApproval.js +16 -0
  276. package/dist/internal/ZoneDelegationApproval.js.map +1 -0
  277. package/dist/internal/ZoneKeyRewrite.d.ts +98 -0
  278. package/dist/internal/ZoneKeyRewrite.d.ts.map +1 -0
  279. package/dist/internal/ZoneKeyRewrite.js +151 -0
  280. package/dist/internal/ZoneKeyRewrite.js.map +1 -0
  281. package/dist/internal/rewards/Campaigns.d.ts +2 -0
  282. package/dist/internal/rewards/Campaigns.d.ts.map +1 -1
  283. package/dist/internal/rewards/Campaigns.js.map +1 -1
  284. package/dist/internal/rewards/Distributions.d.ts.map +1 -1
  285. package/dist/internal/rewards/Distributions.js +2 -6
  286. package/dist/internal/rewards/Distributions.js.map +1 -1
  287. package/dist/internal/rewards/Monitor.d.ts +4 -1
  288. package/dist/internal/rewards/Monitor.d.ts.map +1 -1
  289. package/dist/internal/rewards/Monitor.js +19 -2
  290. package/dist/internal/rewards/Monitor.js.map +1 -1
  291. package/dist/internal/rewards/Runner.d.ts.map +1 -1
  292. package/dist/internal/rewards/Runner.js +9 -1
  293. package/dist/internal/rewards/Runner.js.map +1 -1
  294. package/dist/internal/routes/Action.d.ts.map +1 -1
  295. package/dist/internal/routes/Action.js +2 -3
  296. package/dist/internal/routes/Action.js.map +1 -1
  297. package/dist/internal/routes/Deposit.d.ts.map +1 -1
  298. package/dist/internal/routes/Deposit.js +2 -6
  299. package/dist/internal/routes/Deposit.js.map +1 -1
  300. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  301. package/dist/internal/routes/DepositAddress.js +4 -10
  302. package/dist/internal/routes/DepositAddress.js.map +1 -1
  303. package/dist/internal/routes/Policy.d.ts.map +1 -1
  304. package/dist/internal/routes/Policy.js +2 -1
  305. package/dist/internal/routes/Policy.js.map +1 -1
  306. package/dist/internal/routes/Provider.js +8 -8
  307. package/dist/internal/routes/Provider.js.map +1 -1
  308. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  309. package/dist/internal/routes/Reconciliation.js +3 -2
  310. package/dist/internal/routes/Reconciliation.js.map +1 -1
  311. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  312. package/dist/internal/routes/Transfer.js +4 -12
  313. package/dist/internal/routes/Transfer.js.map +1 -1
  314. package/dist/internal/routes/UniversalDepositAddress.d.ts.map +1 -1
  315. package/dist/internal/routes/UniversalDepositAddress.js +3 -6
  316. package/dist/internal/routes/UniversalDepositAddress.js.map +1 -1
  317. package/dist/internal/routes/providers/SquidOrder.d.ts.map +1 -1
  318. package/dist/internal/routes/providers/SquidOrder.js +3 -2
  319. package/dist/internal/routes/providers/SquidOrder.js.map +1 -1
  320. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  321. package/dist/internal/routes/providers/relay.js +4 -3
  322. package/dist/internal/routes/providers/relay.js.map +1 -1
  323. package/package.json +20 -5
  324. package/src/ApiKey.ts +2 -2
  325. package/src/ApiKeys.test.ts +284 -51
  326. package/src/ApiKeys.ts +297 -64
  327. package/src/App.ts +4 -5
  328. package/src/Client.test-d.ts +33 -126
  329. package/src/Scope.test.ts +26 -45
  330. package/src/Scope.ts +24 -37
  331. package/src/admin/App.test.ts +51 -4
  332. package/src/admin/App.ts +25 -33
  333. package/src/admin/Mcp.test.ts +2 -1
  334. package/src/admin/apps/api-keys.test.ts +90 -20
  335. package/src/admin/apps/api-keys.ts +5 -8
  336. package/src/admin/apps/audit-logs.ts +1 -1
  337. package/src/admin/apps/earn-vaults.test.ts +19 -19
  338. package/src/admin/apps/earn-vaults.ts +11 -5
  339. package/src/admin/apps/routes-support.test.ts +254 -3
  340. package/src/admin/apps/routes-support.ts +1 -44
  341. package/src/admin/apps/scopes.test.ts +3 -3
  342. package/src/admin/apps/zone-delegation-requests.test.ts +246 -0
  343. package/src/admin/apps/zone-delegation-requests.ts +240 -0
  344. package/src/admin/apps/zone-delegations.test.ts +218 -58
  345. package/src/admin/apps/zone-delegations.ts +146 -46
  346. package/src/admin/index.ts +1 -1
  347. package/src/admin/ui/src/components/ApiKeyForm.tsx +4 -3
  348. package/src/admin/ui/src/lib/config.ts +3 -3
  349. package/src/admin/ui/src/lib/query-client.ts +1 -1
  350. package/src/admin/ui/src/lib/review-queues.ts +10 -10
  351. package/src/admin/ui/src/lib/routes-setup.test.ts +1 -2
  352. package/src/admin/ui/src/lib/routes-setup.ts +3 -5
  353. package/src/admin/ui/src/lib/scopes.test.ts +3 -6
  354. package/src/admin/ui/src/lib/scopes.ts +2 -9
  355. package/src/admin/ui/src/lib/{zone-key-requests.ts → zone-delegation-requests.ts} +27 -31
  356. package/src/admin/ui/src/routeTree.gen.ts +17 -17
  357. package/src/admin/ui/src/routes/__root.tsx +1 -1
  358. package/src/admin/ui/src/routes/api-keys.tsx +2 -15
  359. package/src/admin/ui/src/routes/audit-logs.tsx +2 -2
  360. package/src/admin/ui/src/routes/index.tsx +11 -11
  361. package/src/admin/ui/src/routes/organizations.tsx +3 -1
  362. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +3 -1
  363. package/src/admin/ui/src/routes/organizations_.$orgId_.setup.tsx +1 -3
  364. package/src/admin/ui/src/routes/{zone-key-requests.tsx → zone-delegation-requests.tsx} +228 -172
  365. package/src/admin/ui/vite.config.ts +14 -1
  366. package/src/admin/ui.generated.ts +412 -583
  367. package/src/analytics/tables/requestEvents.test.ts +13 -3
  368. package/src/analytics/tables/requestEvents.ts +4 -3
  369. package/src/apps/data/App.test.ts +72 -35
  370. package/src/apps/data/App.ts +29 -13
  371. package/src/apps/data/ZoneSelection.test.ts +53 -70
  372. package/src/apps/data/ZoneSelection.ts +2 -2
  373. package/src/apps/data/routes/activities.test.ts +140 -6
  374. package/src/apps/data/routes/activities.ts +124 -18
  375. package/src/apps/data/routes/balances.ts +5 -1
  376. package/src/apps/data/routes/blocks.ts +9 -13
  377. package/src/apps/data/routes/earn-transactions.local.test.ts +6 -1
  378. package/src/apps/data/routes/earn-transactions.test.ts +7 -3
  379. package/src/apps/data/routes/earn.bench.ts +0 -14
  380. package/src/apps/data/routes/earn.discovery.test.ts +4 -39
  381. package/src/apps/data/routes/earn.local.test.ts +27 -34
  382. package/src/apps/data/routes/earn.test.ts +172 -490
  383. package/src/apps/data/routes/earn.ts +103 -652
  384. package/src/apps/data/routes/exchanges.ts +20 -30
  385. package/src/apps/data/routes/fee-amm.ts +12 -18
  386. package/src/apps/data/routes/indexer.test.ts +14 -12
  387. package/src/apps/data/routes/receipts.ts +1 -1
  388. package/src/apps/data/routes/rpc.test.ts +23 -18
  389. package/src/apps/data/routes/rpc.ts +21 -21
  390. package/src/apps/data/routes/rpc.zone.test.ts +60 -6
  391. package/src/apps/data/routes/tokenlist.ts +4 -6
  392. package/src/apps/data/routes/tokens.test.ts +20 -0
  393. package/src/apps/data/routes/tokens.ts +10 -5
  394. package/src/apps/data/routes/transactions.ts +3 -3
  395. package/src/apps/data/routes/transfers.ts +4 -6
  396. package/src/apps/data/routes/valuation.test.ts +2 -4
  397. package/src/apps/data/routes/valuation.ts +4 -6
  398. package/src/apps/data/routes/webhooks.test.ts +1 -5
  399. package/src/apps/data/routes/webhooks.ts +30 -44
  400. package/src/apps/data/routes/zones.test.ts +35 -19
  401. package/src/apps/management/App.ts +3 -1
  402. package/src/apps/management/routes/api-keys.test.ts +112 -22
  403. package/src/apps/management/routes/api-keys.ts +30 -15
  404. package/src/apps/management/routes/billing.ts +17 -25
  405. package/src/apps/management/routes/cli.ts +12 -18
  406. package/src/apps/management/routes/fee-payer-usage.ts +5 -4
  407. package/src/apps/management/routes/invitations.ts +16 -21
  408. package/src/apps/management/routes/invite-links.ts +18 -26
  409. package/src/apps/management/routes/me.ts +9 -13
  410. package/src/apps/management/routes/members.ts +5 -7
  411. package/src/apps/management/routes/orgs.ts +8 -12
  412. package/src/apps/management/routes/projects.ts +8 -12
  413. package/src/apps/management/routes/route-usage.ts +5 -4
  414. package/src/apps/management/routes/routes-access-requests.test.ts +64 -2
  415. package/src/apps/management/routes/routes-access-requests.ts +99 -15
  416. package/src/apps/management/routes/scopes.test.ts +3 -3
  417. package/src/apps/management/routes/usage.ts +20 -28
  418. package/src/apps/management/routes/verified-token-requests.ts +9 -13
  419. package/src/apps/management/routes/zone-delegations.test.ts +3 -5
  420. package/src/apps/management/routes/zone-delegations.ts +4 -9
  421. package/src/apps/mpp/App.ts +3 -3
  422. package/src/apps/mpp/Mpp.zone.test.ts +49 -18
  423. package/src/apps/mpp/internal/Adapter.ts +1 -1
  424. package/src/apps/mpp/internal/Error.test.ts +3 -0
  425. package/src/apps/mpp/internal/Error.ts +1 -0
  426. package/src/apps/mpp/internal/Policy.test.ts +9 -8
  427. package/src/apps/mpp/internal/Policy.ts +37 -14
  428. package/src/apps/relay/App.sandbox.test.ts +15 -14
  429. package/src/apps/relay/App.test.ts +120 -61
  430. package/src/apps/relay/App.ts +28 -18
  431. package/src/apps/relay/App.zone-billing.test.ts +9 -4
  432. package/src/apps/routes/App.test.ts +21 -22
  433. package/src/db/Db.ts +34 -3
  434. package/src/db/Schema.ts +26 -26
  435. package/src/db/tables/rewardRuns.ts +39 -0
  436. package/src/db/tables/routesAccessRequests.test.ts +65 -0
  437. package/src/db/tables/routesAccessRequests.ts +25 -0
  438. package/src/db/tables/{zoneKeyRequests.test.ts → zoneDelegationRequests.test.ts} +36 -77
  439. package/src/db/tables/{zoneKeyRequests.ts → zoneDelegationRequests.ts} +69 -52
  440. package/src/db/tables/zoneDelegations.test.ts +5 -6
  441. package/src/db/tables/zoneDelegations.ts +25 -8
  442. package/src/handlers/internal/{multisig.store.test.ts → accounts.store.test.ts} +16 -16
  443. package/src/handlers/internal/{multisig.test.ts → accounts.test.ts} +85 -82
  444. package/src/handlers/internal/{multisig.ts → accounts.ts} +9 -9
  445. package/src/handlers/internal/sponsorship.ts +20 -20
  446. package/src/handlers/relay.test.ts +48 -46
  447. package/src/handlers/relay.ts +26 -26
  448. package/src/internal/Auth.test.ts +6 -2
  449. package/src/internal/Auth.ts +4 -10
  450. package/src/internal/EarnRates.ts +4 -6
  451. package/src/internal/EarnVaults.ts +2 -2
  452. package/src/internal/Log.test-d.ts +1 -0
  453. package/src/internal/Log.test.ts +4 -6
  454. package/src/internal/Log.ts +2 -6
  455. package/src/internal/Response.ts +0 -3
  456. package/src/internal/Schema.test.ts +42 -0
  457. package/src/internal/Schema.ts +36 -1
  458. package/src/internal/ZoneAccess.test.ts +515 -312
  459. package/src/internal/ZoneAccess.ts +410 -158
  460. package/src/internal/ZoneDelegation.test.ts +1 -41
  461. package/src/internal/ZoneDelegation.ts +10 -48
  462. package/src/internal/ZoneDelegationApproval.test.ts +22 -0
  463. package/src/internal/{ZoneKeyApproval.ts → ZoneDelegationApproval.ts} +4 -11
  464. package/src/internal/ZoneKeyRewrite.ts +231 -0
  465. package/src/internal/rewards/Campaigns.ts +2 -0
  466. package/src/internal/rewards/Distributions.ts +8 -12
  467. package/src/internal/rewards/Monitor.test.ts +64 -0
  468. package/src/internal/rewards/Monitor.ts +27 -4
  469. package/src/internal/rewards/Runner.ts +9 -1
  470. package/src/internal/routes/Action.ts +5 -6
  471. package/src/internal/routes/Deposit.ts +8 -12
  472. package/src/internal/routes/DepositAddress.ts +13 -19
  473. package/src/internal/routes/Policy.ts +2 -1
  474. package/src/internal/routes/Provider.ts +8 -8
  475. package/src/internal/routes/Reconciliation.ts +3 -2
  476. package/src/internal/routes/Transfer.ts +16 -24
  477. package/src/internal/routes/UniversalDepositAddress.ts +9 -12
  478. package/src/internal/routes/providers/SquidOrder.ts +3 -2
  479. package/src/internal/routes/providers/relay.ts +4 -3
  480. package/dist/admin/apps/zone-key-requests.d.ts +0 -406
  481. package/dist/admin/apps/zone-key-requests.d.ts.map +0 -1
  482. package/dist/admin/apps/zone-key-requests.js +0 -183
  483. package/dist/admin/apps/zone-key-requests.js.map +0 -1
  484. package/dist/db/tables/zoneKeyRequests.d.ts +0 -289
  485. package/dist/db/tables/zoneKeyRequests.d.ts.map +0 -1
  486. package/dist/db/tables/zoneKeyRequests.js.map +0 -1
  487. package/dist/handlers/internal/multisig.d.ts +0 -7
  488. package/dist/handlers/internal/multisig.d.ts.map +0 -1
  489. package/dist/internal/ZoneKeyApproval.d.ts.map +0 -1
  490. package/dist/internal/ZoneKeyApproval.js +0 -21
  491. package/dist/internal/ZoneKeyApproval.js.map +0 -1
  492. package/src/admin/apps/zone-key-requests.test.ts +0 -272
  493. package/src/admin/apps/zone-key-requests.ts +0 -231
  494. package/src/internal/ZoneKeyApproval.test.ts +0 -46
@@ -1,289 +0,0 @@
1
- import type { JSONColumnType } from 'kysely';
2
- import * as ZoneKeyApproval from '../../internal/ZoneKeyApproval.js';
3
- import type * as Db from '../Db.js';
4
- import type * as Schema from '../Schema.js';
5
- /** Persisted immutable request, without plaintext credentials. */
6
- export type Table = Omit<Schema.ZoneKeyRequest, 'input'> & {
7
- /** Validated settings persisted as JSON, never a plaintext credential. */
8
- input: JSONColumnType<Schema.ZoneKeyRequest['input']>;
9
- };
10
- /** One unique approver's decision. */
11
- export type ApprovalTable = Schema.ZoneKeyApproval;
12
- /** Stores an immutable issuance request that expires after 24 hours. */
13
- export declare function create(db: Db.Db, options: create.Options): Promise<{
14
- createdAt: string;
15
- expiresAt: string;
16
- groupId: string;
17
- id: string;
18
- input: {
19
- allowedIps?: readonly string[] | undefined;
20
- billingActive?: boolean | undefined;
21
- environment?: "production" | "sandbox" | undefined;
22
- name?: string | undefined;
23
- projectId?: string | undefined;
24
- rateLimits?: Record<string, {
25
- limit: number;
26
- period: "minute" | "second";
27
- }> | undefined;
28
- zoneTags?: readonly number[] | undefined;
29
- createdBy?: string | undefined;
30
- expiresAt?: string | undefined;
31
- orgId?: string | undefined;
32
- scopes: readonly string[];
33
- } & {
34
- orgId: string;
35
- };
36
- keyId: string | null;
37
- requesterEmail: string;
38
- requesterId: string;
39
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
40
- }>;
41
- export declare namespace create {
42
- /** Validated request and authenticated requester. */
43
- type Options = {
44
- /** Approver group pinned for this request. */
45
- groupId: string;
46
- /** Exact key settings reviewed by approvers. */
47
- input: Schema.ZoneKeyRequest['input'];
48
- /** Requester from the verified internal identity session. */
49
- requester: ZoneKeyApproval.Member;
50
- };
51
- }
52
- /** Reads a request and its recorded approvals. */
53
- export declare function get(db: Db.Db, id: string): Promise<{
54
- approvals: {
55
- approvedAt: string;
56
- approverEmail: string;
57
- approverId: string;
58
- createdAt: string;
59
- expiresAt: string;
60
- groupId: string;
61
- id: string;
62
- input: {
63
- allowedIps?: readonly string[] | undefined;
64
- billingActive?: boolean | undefined;
65
- environment?: "production" | "sandbox" | undefined;
66
- name?: string | undefined;
67
- projectId?: string | undefined;
68
- rateLimits?: Record<string, {
69
- limit: number;
70
- period: "minute" | "second";
71
- }> | undefined;
72
- zoneTags?: readonly number[] | undefined;
73
- createdBy?: string | undefined;
74
- expiresAt?: string | undefined;
75
- orgId?: string | undefined;
76
- scopes: readonly string[];
77
- } & {
78
- orgId: string;
79
- };
80
- keyId: string | null;
81
- requestId: string;
82
- requesterEmail: string;
83
- requesterId: string;
84
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
85
- }[];
86
- createdAt: string;
87
- expiresAt: string;
88
- groupId: string;
89
- id: string;
90
- input: {
91
- allowedIps?: readonly string[] | undefined;
92
- billingActive?: boolean | undefined;
93
- environment?: "production" | "sandbox" | undefined;
94
- name?: string | undefined;
95
- projectId?: string | undefined;
96
- rateLimits?: Record<string, {
97
- limit: number;
98
- period: "minute" | "second";
99
- }> | undefined;
100
- zoneTags?: readonly number[] | undefined;
101
- createdBy?: string | undefined;
102
- expiresAt?: string | undefined;
103
- orgId?: string | undefined;
104
- scopes: readonly string[];
105
- } & {
106
- orgId: string;
107
- };
108
- keyId: string | null;
109
- requesterEmail: string;
110
- requesterId: string;
111
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
112
- } | null>;
113
- /** Lists requests newest first, one page at a time, so every request stays reachable. */
114
- export declare function list(db: Db.Db, options?: list.Options): Promise<{
115
- data: {
116
- createdAt: string;
117
- expiresAt: string;
118
- groupId: string;
119
- id: string;
120
- input: {
121
- allowedIps?: readonly string[] | undefined;
122
- billingActive?: boolean | undefined;
123
- environment?: "production" | "sandbox" | undefined;
124
- name?: string | undefined;
125
- projectId?: string | undefined;
126
- rateLimits?: Record<string, {
127
- limit: number;
128
- period: "minute" | "second";
129
- }> | undefined;
130
- zoneTags?: readonly number[] | undefined;
131
- createdBy?: string | undefined;
132
- expiresAt?: string | undefined;
133
- orgId?: string | undefined;
134
- scopes: readonly string[];
135
- } & {
136
- orgId: string;
137
- };
138
- keyId: string | null;
139
- requesterEmail: string;
140
- requesterId: string;
141
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
142
- }[];
143
- nextCursor: string | null;
144
- }>;
145
- export declare namespace list {
146
- type Options = {
147
- /** Opaque position from the preceding page. */
148
- cursor?: string | undefined;
149
- };
150
- }
151
- /** Records one independent approval while serializing with issuance and cancellation. */
152
- export declare function approve(db: Db.Db, options: approve.Options): Promise<{
153
- approvals: {
154
- approvedAt: string;
155
- approverEmail: string;
156
- approverId: string;
157
- createdAt: string;
158
- expiresAt: string;
159
- groupId: string;
160
- id: string;
161
- input: {
162
- allowedIps?: readonly string[] | undefined;
163
- billingActive?: boolean | undefined;
164
- environment?: "production" | "sandbox" | undefined;
165
- name?: string | undefined;
166
- projectId?: string | undefined;
167
- rateLimits?: Record<string, {
168
- limit: number;
169
- period: "minute" | "second";
170
- }> | undefined;
171
- zoneTags?: readonly number[] | undefined;
172
- createdBy?: string | undefined;
173
- expiresAt?: string | undefined;
174
- orgId?: string | undefined;
175
- scopes: readonly string[];
176
- } & {
177
- orgId: string;
178
- };
179
- keyId: string | null;
180
- requestId: string;
181
- requesterEmail: string;
182
- requesterId: string;
183
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
184
- }[];
185
- createdAt: string;
186
- expiresAt: string;
187
- groupId: string;
188
- id: string;
189
- input: {
190
- allowedIps?: readonly string[] | undefined;
191
- billingActive?: boolean | undefined;
192
- environment?: "production" | "sandbox" | undefined;
193
- name?: string | undefined;
194
- projectId?: string | undefined;
195
- rateLimits?: Record<string, {
196
- limit: number;
197
- period: "minute" | "second";
198
- }> | undefined;
199
- zoneTags?: readonly number[] | undefined;
200
- createdBy?: string | undefined;
201
- expiresAt?: string | undefined;
202
- orgId?: string | undefined;
203
- scopes: readonly string[];
204
- } & {
205
- orgId: string;
206
- };
207
- keyId: string | null;
208
- requesterEmail: string;
209
- requesterId: string;
210
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
211
- } | null>;
212
- export declare namespace approve {
213
- /** Authenticated decision context. */
214
- type Options = {
215
- /** Currently configured approver group. */
216
- groupId: string;
217
- /** Request being approved. */
218
- id: string;
219
- /** Fetches current account and approval-group status without caching. */
220
- lookup: ZoneKeyApproval.Lookup;
221
- /** Identity from the current verified session. */
222
- member: ZoneKeyApproval.Member | null;
223
- };
224
- }
225
- /** Consumes approval once, before external KV writes, and reserves the resulting key id. */
226
- export declare function claim(db: Db.Db, options: claim.Options): Promise<{
227
- keyId: string;
228
- createdAt: string;
229
- expiresAt: string;
230
- groupId: string;
231
- id: string;
232
- input: {
233
- allowedIps?: readonly string[] | undefined;
234
- billingActive?: boolean | undefined;
235
- environment?: "production" | "sandbox" | undefined;
236
- name?: string | undefined;
237
- projectId?: string | undefined;
238
- rateLimits?: Record<string, {
239
- limit: number;
240
- period: "minute" | "second";
241
- }> | undefined;
242
- zoneTags?: readonly number[] | undefined;
243
- createdBy?: string | undefined;
244
- expiresAt?: string | undefined;
245
- orgId?: string | undefined;
246
- scopes: readonly string[];
247
- } & {
248
- orgId: string;
249
- };
250
- requesterEmail: string;
251
- requesterId: string;
252
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
253
- }>;
254
- export declare namespace claim {
255
- /** Current requester session accompanying the one-time claim. */
256
- type Options = approve.Options;
257
- }
258
- /** Records the terminal issuance outcome; a failed or interrupted claim cannot be replayed. */
259
- export declare function finish(db: Db.Db, id: string, status: 'issued' | 'failed'): Promise<void>;
260
- /** Cancels a pending request without needing quorum. */
261
- export declare function cancel(db: Db.Db, id: string): Promise<{
262
- createdAt: string;
263
- expiresAt: string;
264
- groupId: string;
265
- id: string;
266
- input: {
267
- allowedIps?: readonly string[] | undefined;
268
- billingActive?: boolean | undefined;
269
- environment?: "production" | "sandbox" | undefined;
270
- name?: string | undefined;
271
- projectId?: string | undefined;
272
- rateLimits?: Record<string, {
273
- limit: number;
274
- period: "minute" | "second";
275
- }> | undefined;
276
- zoneTags?: readonly number[] | undefined;
277
- createdBy?: string | undefined;
278
- expiresAt?: string | undefined;
279
- orgId?: string | undefined;
280
- scopes: readonly string[];
281
- } & {
282
- orgId: string;
283
- };
284
- keyId: string | null;
285
- requesterEmail: string;
286
- requesterId: string;
287
- status: "cancelled" | "failed" | "issued" | "issuing" | "pending";
288
- } | undefined>;
289
- //# sourceMappingURL=zoneKeyRequests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zoneKeyRequests.d.ts","sourceRoot":"","sources":["../../../src/db/tables/zoneKeyRequests.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"zoneKeyRequests.js","sourceRoot":"","sources":["../../../src/db/tables/zoneKeyRequests.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { Store } from 'viem/tempo';
2
- import type * as core_Store from '../../internal/Store.js';
3
- /** Methods the relay answers through stored multisig coordination when a multisig store is configured. */
4
- export declare const methods: Set<string>;
5
- /** Adapts Tempo API state to Viem's atomic multisig store. */
6
- export declare function fromStore(store: core_Store.State): Store.Atomic;
7
- //# sourceMappingURL=multisig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../../../src/handlers/internal/multisig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,KAAK,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAE1D,0GAA0G;AAC1G,eAAO,MAAM,OAAO,aAUlB,CAAA;AAEF,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAiB/D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ZoneKeyApproval.d.ts","sourceRoot":"","sources":["../../src/internal/ZoneKeyApproval.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,eAAO,MAAM,MAAM,IAAI,CAAA;AAEvB,+GAA+G;AAC/G,eAAO,MAAM,gBAAgB,QAAuB,CAAA;AAEpD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE3D;AAED,sFAAsF;AACtF,MAAM,MAAM,MAAM,GAAG;IACnB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAA;IACjB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,CAE1E;AAED,4DAA4D;AAC5D,MAAM,MAAM,MAAM,GAAG;IACnB,oDAAoD;IACpD,MAAM,EAAE,OAAO,CAAA;IACf,2DAA2D;IAC3D,QAAQ,EAAE,OAAO,CAAA;IACjB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,8FAA8F;AAC9F,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,qBAAa,aAAc,SAAQ,KAAK;IAC7B,IAAI,SAAkC;IAC/C,YACE,OAAO,SAAmG,EAG3G;CACF"}
@@ -1,21 +0,0 @@
1
- import * as Scope from '../Scope.js';
2
- /** Number of independent approvals required for Zone read credentials. */
3
- export const quorum = 2;
4
- /** Maximum lifetime of an approval, matching the request lifetime and bounded by its authenticated session. */
5
- export const approvalLifetime = 24 * 60 * 60 * 1_000;
6
- /** Returns whether scopes grant access subject to Zone read approval. */
7
- export function required(scopes) {
8
- return scopes.some((scope) => scope === '*' || Scope.parseZone(scope)?.verb === 'read');
9
- }
10
- /** Returns whether an authenticated identity's session is still valid. */
11
- export function active(member) {
12
- return Boolean(member?.id && member.email && Date.parse(member.expiresAt) > Date.now());
13
- }
14
- /** Expected rejection of a Zone key request or an unapproved issuance path. */
15
- export class RequiredError extends Error {
16
- name = 'ZoneKeyApproval.RequiredError';
17
- constructor(message = 'Zone read keys require two independent group approvals through the admin key-request workflow.') {
18
- super(message);
19
- }
20
- }
21
- //# sourceMappingURL=ZoneKeyApproval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ZoneKeyApproval.js","sourceRoot":"","sources":["../../src/internal/ZoneKeyApproval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAA;AAEvB,+GAA+G;AAC/G,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;AAEpD,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,MAAyB;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAA;AACzF,CAAC;AAcD,0EAA0E;AAC1E,MAAM,UAAU,MAAM,CAAC,MAAiC;IACtD,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;AACzF,CAAC;AAeD,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,GAAG,+BAA+B,CAAA;IAC/C,YACE,OAAO,GAAG,gGAAgG;QAE1G,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF"}
@@ -1,272 +0,0 @@
1
- import * as ApiKeys from '../../ApiKeys.js'
2
- import * as Metrics from '../../Metrics.js'
3
- import * as Organizations from '../../db/tables/organizations.js'
4
- import * as Requests from '../../db/tables/zoneKeyRequests.js'
5
- import type * as ZoneKeyApproval from '../../internal/ZoneKeyApproval.js'
6
- import * as TestAdmin from '../../../test/Admin.js'
7
-
8
- describe('zoneKeyRequests', () => {
9
- test('a lookup outage blocks issuance, preserves the request, and emits the failure metric', async () => {
10
- const member = employee('requester', false)
11
- const counts: Parameters<Metrics.Metrics['count']>[] = []
12
- const { app, db, store } = TestAdmin.setup({
13
- identify: () => member,
14
- metrics: Metrics.from({
15
- count(...parameters) {
16
- counts.push(parameters)
17
- },
18
- flush() {},
19
- gauge() {},
20
- histogram() {},
21
- }),
22
- zoneKeyApproval: {
23
- groupId,
24
- identify: () => member,
25
- lookup: async () => {
26
- await fetch('http://127.0.0.1:1/unavailable')
27
- return []
28
- },
29
- },
30
- })
31
- const org = await Organizations.create(db, { name: 'Zone outage' })
32
- const request = await Requests.create(db, {
33
- groupId,
34
- input: { name: 'Zone read', orgId: org.id, scopes: ['zone:421700001:read'] },
35
- requester: member,
36
- })
37
- for (const id of ['first', 'second'])
38
- await Requests.approve(db, { groupId, id: request.id, lookup, member: employee(id, true) })
39
- const response = await app.request(`/zone-key-requests/${request.id}/issue`, { method: 'POST' })
40
- expect(response.status).toBe(502)
41
- expect((await Requests.get(db, request.id))?.status).toBe('pending')
42
- expect(await ApiKeys.list(store)).toEqual([])
43
- expect(counts.filter(([name]) => name === 'zone_key_approval_failure_count')).toEqual([
44
- ['zone_key_approval_failure_count', 1],
45
- ])
46
- expect((await app.request('/api-keys')).status).toBe(200)
47
- })
48
-
49
- test('ordinary staff retain general administration and can request but cannot approve Zone keys', async () => {
50
- const member = employee('requester', false)
51
- const { app, db, store } = TestAdmin.setup({
52
- identify: () => member,
53
- zoneKeyApproval: { lookup: (_request, ids) => lookup(ids), groupId, identify: () => member },
54
- })
55
- for (const path of ['/api-keys', '/organizations', '/audit-logs'])
56
- expect((await app.request(path)).status).toBe(200)
57
- const ordinary = await app.request('/api-keys', {
58
- body: JSON.stringify({ name: 'Ordinary key', scopes: ['data:read'] }),
59
- headers: { 'content-type': 'application/json' },
60
- method: 'POST',
61
- })
62
- expect(ordinary.status).toBe(200)
63
- const org = await Organizations.create(db, { name: 'Zone requester' })
64
- const input = { name: 'Zone read', orgId: org.id, scopes: ['zone:421700001:read'] }
65
- const created = await app.request('/zone-key-requests', {
66
- body: JSON.stringify(input),
67
- headers: { 'content-type': 'application/json' },
68
- method: 'POST',
69
- })
70
- expect(created.status).toBe(201)
71
- const request = await created.json()
72
- const path = `/zone-key-requests/${request.id}`
73
- expect((await app.request(`${path}/approve`, { method: 'POST' })).status).toBe(403)
74
- expect((await app.request(`${path}/issue`, { method: 'POST' })).status).toBe(403)
75
- const nonmember = employee('nonmember', false)
76
- const { app: nonmemberApp } = TestAdmin.setup({
77
- db,
78
- identify: () => nonmember,
79
- zoneKeyApproval: {
80
- lookup: (_request, ids) => lookup(ids),
81
- groupId,
82
- identify: () => nonmember,
83
- },
84
- })
85
- expect((await nonmemberApp.request(`${path}/approve`, { method: 'POST' })).status).toBe(403)
86
- for (const id of ['first', 'second']) {
87
- const reviewer = employee(id, true)
88
- const { app: review } = TestAdmin.setup({
89
- db,
90
- identify: () => reviewer,
91
- zoneKeyApproval: {
92
- lookup: (_request, ids) => lookup(ids),
93
- groupId,
94
- identify: () => reviewer,
95
- },
96
- })
97
- expect((await review.request(path)).status).toBe(200)
98
- expect((await review.request(`${path}/approve`, { method: 'POST' })).status).toBe(200)
99
- expect((await review.request(`${path}/issue`, { method: 'POST' })).status).toBe(403)
100
- }
101
- const issued = await app.request(`${path}/issue`, { method: 'POST' })
102
- expect(issued.status).toBe(200)
103
- const key = await issued.json()
104
- expect(key.scopes).toEqual(input.scopes)
105
- expect((await ApiKeys.resolve(store, key.token))?.id).toBe(key.id)
106
- expect((await app.request(`${path}/issue`, { method: 'POST' })).status).toBe(403)
107
- expect((await Requests.get(db, request.id))?.status).toBe('issued')
108
- expect((await app.request(`/api-keys/${key.id}`, { method: 'DELETE' })).status).toBe(200)
109
- expect(await ApiKeys.resolve(store, key.token)).toBeNull()
110
- })
111
-
112
- test('rejects missing, mismatched, and expired workflow identities without blocking other routes', async () => {
113
- for (const member of [
114
- null,
115
- employee('different', true),
116
- { ...employee('admin', true), expiresAt: new Date().toISOString() },
117
- ]) {
118
- const { app } = TestAdmin.setup({
119
- zoneKeyApproval: {
120
- lookup: (_request, ids) => lookup(ids),
121
- groupId,
122
- identify: () => member,
123
- },
124
- })
125
- expect((await app.request('/zone-key-requests')).status).toBe(401)
126
- expect((await app.request('/api-keys')).status).toBe(200)
127
- }
128
- })
129
-
130
- test('requires admin authentication and fails closed until configured', async () => {
131
- const anonymous = TestAdmin.setup({ identify: () => null })
132
- expect((await anonymous.app.request('/zone-key-requests')).status).toBe(401)
133
- const { app } = TestAdmin.setup()
134
- const response = await app.request('/zone-key-requests')
135
- expect(response.status).toBe(503)
136
- expect((await response.json()).error.code).toBe('zone_key_approval_unconfigured')
137
- })
138
-
139
- test('requires a verified internal session for the approval workflow', async () => {
140
- const { app } = TestAdmin.setup({
141
- zoneKeyApproval: {
142
- lookup: (_request, ids) => lookup(ids),
143
- groupId: 'app-tempo-api-zone-issuers',
144
- identify: () => null,
145
- },
146
- })
147
- expect((await app.request('/zone-key-requests')).status).toBe(401)
148
- })
149
-
150
- test('pages through every request newest first', async () => {
151
- const member = employee('requester', false)
152
- const { app, db } = TestAdmin.setup({
153
- identify: () => member,
154
- zoneKeyApproval: { groupId, identify: () => member, lookup: (_request, ids) => lookup(ids) },
155
- })
156
- const created = []
157
- for (let index = 0; index < 51; index++)
158
- created.push(
159
- await Requests.create(db, {
160
- groupId,
161
- input: {
162
- name: `Zone read ${index}`,
163
- orgId: 'org_fixture',
164
- scopes: ['zone:421700001:read'],
165
- },
166
- requester: member,
167
- }),
168
- )
169
- const first = await (await app.request('/zone-key-requests')).json()
170
- expect(first.data).toHaveLength(50)
171
- expect(first.nextCursor).toEqual(expect.any(String))
172
- const second = await (
173
- await app.request(`/zone-key-requests?cursor=${encodeURIComponent(first.nextCursor)}`)
174
- ).json()
175
- expect(second.nextCursor).toBeNull()
176
- expect(
177
- [...first.data, ...second.data].map((request: { id: string }) => request.id).sort(),
178
- ).toEqual(created.map((request) => request.id).sort())
179
- expect((await app.request('/zone-key-requests?cursor=invalid')).status).toBe(400)
180
- })
181
-
182
- test('reports approver group membership in the bootstrap config', async () => {
183
- const counts: Parameters<Metrics.Metrics['count']>[] = []
184
- const cases: readonly [ZoneKeyIdentify, boolean | null][] = [
185
- [() => employee('approver', true), true],
186
- [() => employee('approver', false), false],
187
- [() => employee('approver', true, -1), false],
188
- [() => ({ ...employee('approver', true), email: 'other@tempo.xyz' }), false],
189
- [() => null, false],
190
- [
191
- () => {
192
- throw new Error('not authenticated')
193
- },
194
- null,
195
- ],
196
- ]
197
- for (const [identify, expected] of cases) {
198
- const { app } = TestAdmin.setup({
199
- identify: () => ({ email: 'approver@tempo.xyz' }),
200
- metrics: Metrics.from({
201
- count(...parameters) {
202
- counts.push(parameters)
203
- },
204
- flush() {},
205
- gauge() {},
206
- histogram() {},
207
- }),
208
- zoneKeyApproval: { groupId, identify, lookup: (_request, ids) => lookup(ids) },
209
- })
210
- const config = await (await app.request('/config.json')).json()
211
- expect(config.auth.zoneKeyApprover).toBe(expected)
212
- }
213
- expect(counts.filter(([name]) => name === 'zone_key_approval_failure_count')).toEqual([
214
- ['zone_key_approval_failure_count', 1],
215
- ])
216
- })
217
-
218
- test('rejects cross-origin approval mutations', async () => {
219
- const { app } = TestAdmin.setup()
220
- const response = await app.request('/zone-key-requests/zkr_fixture/approve', {
221
- headers: { origin: 'https://other.example' },
222
- method: 'POST',
223
- })
224
- expect(response.status).toBe(403)
225
- expect((await response.json()).error.code).toBe('forbidden')
226
- })
227
-
228
- test('direct admin creation, rotation, and elevation cannot grant protected scopes', async () => {
229
- const { app, store } = TestAdmin.setup()
230
- for (const scopes of [['zone:421700001:read'], ['*']]) {
231
- const response = await app.request('/api-keys', {
232
- body: JSON.stringify({ name: 'Protected', scopes }),
233
- headers: { 'content-type': 'application/json' },
234
- method: 'POST',
235
- })
236
- expect(response.status).toBe(403)
237
- expect((await response.json()).error.code).toBe('zone_key_approval_required')
238
- }
239
- const source = await ApiKeys.mint(store, { scopes: ['zone:421700001:read'] })
240
- const rotation = await app.request(`/api-keys/${source.record.id}/rotate`, { method: 'POST' })
241
- expect(rotation.status).toBe(403)
242
- const unprivileged = await ApiKeys.mint(store, { scopes: ['data:read'] })
243
- const update = await app.request(`/api-keys/${unprivileged.record.id}`, {
244
- body: JSON.stringify({ scopes: ['zone:421700001:read'] }),
245
- headers: { 'content-type': 'application/json' },
246
- method: 'PATCH',
247
- })
248
- expect(update.status).toBe(403)
249
- expect((await ApiKeys.get(store, unprivileged.record.id))?.scopes).toEqual(['data:read'])
250
- })
251
- })
252
-
253
- const groupId = 'app-tempo-api-zone-issuers'
254
-
255
- type ZoneKeyIdentify = () => ZoneKeyApproval.Member | null
256
-
257
- function employee(id: string, eligible: boolean, hours = 1): ZoneKeyApproval.Member {
258
- return {
259
- email: `${id}@tempo.xyz`,
260
- eligible,
261
- expiresAt: new Date(Date.now() + hours * 3_600_000).toISOString(),
262
- id: `employee_${id}`,
263
- }
264
- }
265
-
266
- async function lookup(ids: readonly string[]): Promise<ZoneKeyApproval.Status[]> {
267
- return ids.map((id) => ({
268
- active: true,
269
- eligible: id !== 'employee_requester' && id !== 'employee_nonmember',
270
- id,
271
- }))
272
- }