@antseed/cli 0.1.179 → 0.1.181

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 (678) hide show
  1. package/README.md +5 -3
  2. package/dist/buyer-identities/store.d.ts +39 -2
  3. package/dist/buyer-identities/store.d.ts.map +1 -1
  4. package/dist/buyer-identities/store.js +99 -10
  5. package/dist/buyer-identities/store.js.map +1 -1
  6. package/dist/cli/commands/apps/index.js +8 -8
  7. package/dist/cli/commands/buyer/identity.d.ts +3 -1
  8. package/dist/cli/commands/buyer/identity.d.ts.map +1 -1
  9. package/dist/cli/commands/buyer/identity.js +55 -8
  10. package/dist/cli/commands/buyer/identity.js.map +1 -1
  11. package/dist/cli/commands/buyer/identity.test.d.ts +2 -0
  12. package/dist/cli/commands/buyer/identity.test.d.ts.map +1 -0
  13. package/dist/cli/commands/buyer/identity.test.js +168 -0
  14. package/dist/cli/commands/buyer/identity.test.js.map +1 -0
  15. package/dist/cli/commands/buyer/set-authorized-wallet.d.ts +10 -0
  16. package/dist/cli/commands/buyer/set-authorized-wallet.d.ts.map +1 -1
  17. package/dist/cli/commands/buyer/set-authorized-wallet.js +26 -4
  18. package/dist/cli/commands/buyer/set-authorized-wallet.js.map +1 -1
  19. package/dist/cli/commands/buyer/set-authorized-wallet.test.js +37 -2
  20. package/dist/cli/commands/buyer/set-authorized-wallet.test.js.map +1 -1
  21. package/dist/cli/commands/buyer/start.d.ts +15 -0
  22. package/dist/cli/commands/buyer/start.d.ts.map +1 -1
  23. package/dist/cli/commands/buyer/start.js +158 -49
  24. package/dist/cli/commands/buyer/start.js.map +1 -1
  25. package/dist/cli/commands/buyer/start.test.js +16 -1
  26. package/dist/cli/commands/buyer/start.test.js.map +1 -1
  27. package/dist/cli/commands/chat.d.ts +3 -0
  28. package/dist/cli/commands/chat.d.ts.map +1 -0
  29. package/dist/cli/commands/chat.js +189 -0
  30. package/dist/cli/commands/chat.js.map +1 -0
  31. package/dist/cli/commands/gateway/activity.d.ts +15 -0
  32. package/dist/cli/commands/gateway/activity.d.ts.map +1 -0
  33. package/dist/cli/commands/gateway/activity.js +233 -0
  34. package/dist/cli/commands/gateway/activity.js.map +1 -0
  35. package/dist/cli/commands/gateway/admin-token.d.ts +3 -0
  36. package/dist/cli/commands/gateway/admin-token.d.ts.map +1 -0
  37. package/dist/cli/commands/gateway/admin-token.js +90 -0
  38. package/dist/cli/commands/gateway/admin-token.js.map +1 -0
  39. package/dist/cli/commands/gateway/console-link.d.ts +20 -0
  40. package/dist/cli/commands/gateway/console-link.d.ts.map +1 -0
  41. package/dist/cli/commands/gateway/console-link.js +92 -0
  42. package/dist/cli/commands/gateway/console-link.js.map +1 -0
  43. package/dist/cli/commands/gateway/gateway-commands.test.d.ts +2 -0
  44. package/dist/cli/commands/gateway/gateway-commands.test.d.ts.map +1 -0
  45. package/dist/cli/commands/gateway/gateway-commands.test.js +230 -0
  46. package/dist/cli/commands/gateway/gateway-commands.test.js.map +1 -0
  47. package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts +2 -0
  48. package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts.map +1 -0
  49. package/dist/cli/commands/gateway/gateway-console-commands.test.js +373 -0
  50. package/dist/cli/commands/gateway/gateway-console-commands.test.js.map +1 -0
  51. package/dist/cli/commands/gateway/index.d.ts +8 -0
  52. package/dist/cli/commands/gateway/index.d.ts.map +1 -1
  53. package/dist/cli/commands/gateway/index.js +93 -14
  54. package/dist/cli/commands/gateway/index.js.map +1 -1
  55. package/dist/cli/commands/gateway/key.d.ts +4 -0
  56. package/dist/cli/commands/gateway/key.d.ts.map +1 -1
  57. package/dist/cli/commands/gateway/key.js +297 -182
  58. package/dist/cli/commands/gateway/key.js.map +1 -1
  59. package/dist/cli/commands/gateway/member.d.ts +3 -0
  60. package/dist/cli/commands/gateway/member.d.ts.map +1 -0
  61. package/dist/cli/commands/gateway/member.js +302 -0
  62. package/dist/cli/commands/gateway/member.js.map +1 -0
  63. package/dist/cli/commands/gateway/migrate.d.ts +18 -0
  64. package/dist/cli/commands/gateway/migrate.d.ts.map +1 -0
  65. package/dist/cli/commands/gateway/migrate.js +158 -0
  66. package/dist/cli/commands/gateway/migrate.js.map +1 -0
  67. package/dist/cli/commands/gateway/operator.d.ts +11 -0
  68. package/dist/cli/commands/gateway/operator.d.ts.map +1 -0
  69. package/dist/cli/commands/gateway/operator.js +199 -0
  70. package/dist/cli/commands/gateway/operator.js.map +1 -0
  71. package/dist/cli/commands/gateway/operator.test.d.ts +2 -0
  72. package/dist/cli/commands/gateway/operator.test.d.ts.map +1 -0
  73. package/dist/cli/commands/gateway/operator.test.js +151 -0
  74. package/dist/cli/commands/gateway/operator.test.js.map +1 -0
  75. package/dist/cli/commands/gateway/peer-list.d.ts +3 -0
  76. package/dist/cli/commands/gateway/peer-list.d.ts.map +1 -0
  77. package/dist/cli/commands/gateway/peer-list.js +107 -0
  78. package/dist/cli/commands/gateway/peer-list.js.map +1 -0
  79. package/dist/cli/commands/gateway/policy-options.d.ts +23 -0
  80. package/dist/cli/commands/gateway/policy-options.d.ts.map +1 -0
  81. package/dist/cli/commands/gateway/policy-options.js +156 -0
  82. package/dist/cli/commands/gateway/policy-options.js.map +1 -0
  83. package/dist/cli/commands/gateway/preset.d.ts +3 -0
  84. package/dist/cli/commands/gateway/preset.d.ts.map +1 -0
  85. package/dist/cli/commands/gateway/preset.js +181 -0
  86. package/dist/cli/commands/gateway/preset.js.map +1 -0
  87. package/dist/cli/commands/gateway/routing.d.ts +3 -0
  88. package/dist/cli/commands/gateway/routing.d.ts.map +1 -0
  89. package/dist/cli/commands/gateway/routing.js +110 -0
  90. package/dist/cli/commands/gateway/routing.js.map +1 -0
  91. package/dist/cli/commands/gateway/settings.d.ts +4 -0
  92. package/dist/cli/commands/gateway/settings.d.ts.map +1 -0
  93. package/dist/cli/commands/gateway/settings.js +314 -0
  94. package/dist/cli/commands/gateway/settings.js.map +1 -0
  95. package/dist/cli/commands/gateway/shared.d.ts +55 -6
  96. package/dist/cli/commands/gateway/shared.d.ts.map +1 -1
  97. package/dist/cli/commands/gateway/shared.js +206 -26
  98. package/dist/cli/commands/gateway/shared.js.map +1 -1
  99. package/dist/cli/commands/gateway/workspace.d.ts +3 -0
  100. package/dist/cli/commands/gateway/workspace.d.ts.map +1 -0
  101. package/dist/cli/commands/gateway/workspace.js +250 -0
  102. package/dist/cli/commands/gateway/workspace.js.map +1 -0
  103. package/dist/cli/commands/network/bootstrap.js +1 -1
  104. package/dist/cli/commands/seller/setup.js +1 -1
  105. package/dist/cli/commands/seller/start.d.ts.map +1 -1
  106. package/dist/cli/commands/seller/start.js +1 -2
  107. package/dist/cli/commands/seller/start.js.map +1 -1
  108. package/dist/cli/commands/system-proxy/index.js +1 -1
  109. package/dist/cli/commands/tunnel/start.d.ts.map +1 -1
  110. package/dist/cli/commands/tunnel/start.js +23 -5
  111. package/dist/cli/commands/tunnel/start.js.map +1 -1
  112. package/dist/cli/commands/wrapped-tools.js +8 -8
  113. package/dist/cli/commands/wrapped-tools.test.js +5 -5
  114. package/dist/cli/index.js +12 -44
  115. package/dist/cli/index.js.map +1 -1
  116. package/dist/cli/program.d.ts +4 -0
  117. package/dist/cli/program.d.ts.map +1 -0
  118. package/dist/cli/program.js +49 -0
  119. package/dist/cli/program.js.map +1 -0
  120. package/dist/cli/program.test.d.ts +2 -0
  121. package/dist/cli/program.test.d.ts.map +1 -0
  122. package/dist/cli/program.test.js +38 -0
  123. package/dist/cli/program.test.js.map +1 -0
  124. package/dist/cli/prompt-hidden.d.ts +3 -0
  125. package/dist/cli/prompt-hidden.d.ts.map +1 -0
  126. package/dist/cli/prompt-hidden.js +38 -0
  127. package/dist/cli/prompt-hidden.js.map +1 -0
  128. package/dist/cli/wallet-passphrase.d.ts +48 -0
  129. package/dist/cli/wallet-passphrase.d.ts.map +1 -0
  130. package/dist/cli/wallet-passphrase.js +119 -0
  131. package/dist/cli/wallet-passphrase.js.map +1 -0
  132. package/dist/cli/wallet-passphrase.test.d.ts +2 -0
  133. package/dist/cli/wallet-passphrase.test.d.ts.map +1 -0
  134. package/dist/cli/wallet-passphrase.test.js +79 -0
  135. package/dist/cli/wallet-passphrase.test.js.map +1 -0
  136. package/dist/config/defaults.d.ts.map +1 -1
  137. package/dist/config/defaults.js +0 -1
  138. package/dist/config/defaults.js.map +1 -1
  139. package/dist/config/effective.d.ts +12 -0
  140. package/dist/config/effective.d.ts.map +1 -1
  141. package/dist/config/effective.js +39 -6
  142. package/dist/config/effective.js.map +1 -1
  143. package/dist/config/effective.test.js +9 -1
  144. package/dist/config/effective.test.js.map +1 -1
  145. package/dist/config/loader.d.ts +6 -0
  146. package/dist/config/loader.d.ts.map +1 -1
  147. package/dist/config/loader.js +12 -0
  148. package/dist/config/loader.js.map +1 -1
  149. package/dist/config/loader.test.js +7 -1
  150. package/dist/config/loader.test.js.map +1 -1
  151. package/dist/config/types.d.ts +14 -2
  152. package/dist/config/types.d.ts.map +1 -1
  153. package/dist/config/validation.d.ts.map +1 -1
  154. package/dist/config/validation.js +19 -0
  155. package/dist/config/validation.js.map +1 -1
  156. package/dist/gateway/accounting.d.ts +33 -3
  157. package/dist/gateway/accounting.d.ts.map +1 -1
  158. package/dist/gateway/accounting.js +86 -7
  159. package/dist/gateway/accounting.js.map +1 -1
  160. package/dist/gateway/admission-benchmark.test.d.ts +2 -0
  161. package/dist/gateway/admission-benchmark.test.d.ts.map +1 -0
  162. package/dist/gateway/admission-benchmark.test.js +75 -0
  163. package/dist/gateway/admission-benchmark.test.js.map +1 -0
  164. package/dist/gateway/auth/auth.test.d.ts +4 -0
  165. package/dist/gateway/auth/auth.test.d.ts.map +1 -0
  166. package/dist/gateway/auth/auth.test.js +337 -0
  167. package/dist/gateway/auth/auth.test.js.map +1 -0
  168. package/dist/gateway/auth/credentials.test.d.ts +2 -0
  169. package/dist/gateway/auth/credentials.test.d.ts.map +1 -0
  170. package/dist/gateway/auth/credentials.test.js +132 -0
  171. package/dist/gateway/auth/credentials.test.js.map +1 -0
  172. package/dist/gateway/auth/db.d.ts +156 -0
  173. package/dist/gateway/auth/db.d.ts.map +1 -0
  174. package/dist/gateway/auth/db.js +390 -0
  175. package/dist/gateway/auth/db.js.map +1 -0
  176. package/dist/gateway/auth/hardening.test.d.ts +2 -0
  177. package/dist/gateway/auth/hardening.test.d.ts.map +1 -0
  178. package/dist/gateway/auth/hardening.test.js +155 -0
  179. package/dist/gateway/auth/hardening.test.js.map +1 -0
  180. package/dist/gateway/auth/http.d.ts +53 -0
  181. package/dist/gateway/auth/http.d.ts.map +1 -0
  182. package/dist/gateway/auth/http.js +165 -0
  183. package/dist/gateway/auth/http.js.map +1 -0
  184. package/dist/gateway/auth/index.d.ts +26 -0
  185. package/dist/gateway/auth/index.d.ts.map +1 -0
  186. package/dist/gateway/auth/index.js +1014 -0
  187. package/dist/gateway/auth/index.js.map +1 -0
  188. package/dist/gateway/auth/oidc.d.ts +57 -0
  189. package/dist/gateway/auth/oidc.d.ts.map +1 -0
  190. package/dist/gateway/auth/oidc.js +159 -0
  191. package/dist/gateway/auth/oidc.js.map +1 -0
  192. package/dist/gateway/auth/oidc.test.d.ts +2 -0
  193. package/dist/gateway/auth/oidc.test.d.ts.map +1 -0
  194. package/dist/gateway/auth/oidc.test.js +223 -0
  195. package/dist/gateway/auth/oidc.test.js.map +1 -0
  196. package/dist/gateway/auth/reauth.test.d.ts +2 -0
  197. package/dist/gateway/auth/reauth.test.d.ts.map +1 -0
  198. package/dist/gateway/auth/reauth.test.js +108 -0
  199. package/dist/gateway/auth/reauth.test.js.map +1 -0
  200. package/dist/gateway/auth/store-integration.test.d.ts +2 -0
  201. package/dist/gateway/auth/store-integration.test.d.ts.map +1 -0
  202. package/dist/gateway/auth/store-integration.test.js +100 -0
  203. package/dist/gateway/auth/store-integration.test.js.map +1 -0
  204. package/dist/gateway/auth/test-helpers.d.ts +167 -0
  205. package/dist/gateway/auth/test-helpers.d.ts.map +1 -0
  206. package/dist/gateway/auth/test-helpers.js +368 -0
  207. package/dist/gateway/auth/test-helpers.js.map +1 -0
  208. package/dist/gateway/auth/types.d.ts +145 -0
  209. package/dist/gateway/auth/types.d.ts.map +1 -0
  210. package/dist/gateway/auth/types.js +2 -0
  211. package/dist/gateway/auth/types.js.map +1 -0
  212. package/dist/gateway/auth/wallet.d.ts +15 -0
  213. package/dist/gateway/auth/wallet.d.ts.map +1 -0
  214. package/dist/gateway/auth/wallet.js +43 -0
  215. package/dist/gateway/auth/wallet.js.map +1 -0
  216. package/dist/gateway/bundle.d.ts +127 -0
  217. package/dist/gateway/bundle.d.ts.map +1 -0
  218. package/dist/gateway/bundle.js +604 -0
  219. package/dist/gateway/bundle.js.map +1 -0
  220. package/dist/gateway/bundle.test.d.ts +2 -0
  221. package/dist/gateway/bundle.test.d.ts.map +1 -0
  222. package/dist/gateway/bundle.test.js +277 -0
  223. package/dist/gateway/bundle.test.js.map +1 -0
  224. package/dist/gateway/buyer-control.d.ts +33 -0
  225. package/dist/gateway/buyer-control.d.ts.map +1 -0
  226. package/dist/gateway/buyer-control.js +93 -0
  227. package/dist/gateway/buyer-control.js.map +1 -0
  228. package/dist/gateway/buyer-policy-probe.d.ts +41 -0
  229. package/dist/gateway/buyer-policy-probe.d.ts.map +1 -0
  230. package/dist/gateway/buyer-policy-probe.js +99 -0
  231. package/dist/gateway/buyer-policy-probe.js.map +1 -0
  232. package/dist/gateway/buyer-policy-probe.test.d.ts +2 -0
  233. package/dist/gateway/buyer-policy-probe.test.d.ts.map +1 -0
  234. package/dist/gateway/buyer-policy-probe.test.js +128 -0
  235. package/dist/gateway/buyer-policy-probe.test.js.map +1 -0
  236. package/dist/gateway/buyer-process.d.ts +30 -0
  237. package/dist/gateway/buyer-process.d.ts.map +1 -0
  238. package/dist/gateway/buyer-process.js +101 -0
  239. package/dist/gateway/buyer-process.js.map +1 -0
  240. package/dist/gateway/buyer-process.test.d.ts +2 -0
  241. package/dist/gateway/buyer-process.test.d.ts.map +1 -0
  242. package/dist/gateway/buyer-process.test.js +112 -0
  243. package/dist/gateway/buyer-process.test.js.map +1 -0
  244. package/dist/gateway/chat/routes.d.ts +45 -0
  245. package/dist/gateway/chat/routes.d.ts.map +1 -0
  246. package/dist/gateway/chat/routes.js +439 -0
  247. package/dist/gateway/chat/routes.js.map +1 -0
  248. package/dist/gateway/chat/routes.test.d.ts +2 -0
  249. package/dist/gateway/chat/routes.test.d.ts.map +1 -0
  250. package/dist/gateway/chat/routes.test.js +304 -0
  251. package/dist/gateway/chat/routes.test.js.map +1 -0
  252. package/dist/gateway/chat/tools.d.ts +35 -0
  253. package/dist/gateway/chat/tools.d.ts.map +1 -0
  254. package/dist/gateway/chat/tools.js +347 -0
  255. package/dist/gateway/chat/tools.js.map +1 -0
  256. package/dist/gateway/chat/tools.test.d.ts +2 -0
  257. package/dist/gateway/chat/tools.test.d.ts.map +1 -0
  258. package/dist/gateway/chat/tools.test.js +136 -0
  259. package/dist/gateway/chat/tools.test.js.map +1 -0
  260. package/dist/gateway/console-api/access.d.ts +52 -0
  261. package/dist/gateway/console-api/access.d.ts.map +1 -0
  262. package/dist/gateway/console-api/access.js +171 -0
  263. package/dist/gateway/console-api/access.js.map +1 -0
  264. package/dist/gateway/console-api/deps.d.ts +52 -0
  265. package/dist/gateway/console-api/deps.d.ts.map +1 -0
  266. package/dist/gateway/console-api/deps.js +2 -0
  267. package/dist/gateway/console-api/deps.js.map +1 -0
  268. package/dist/gateway/console-api/handlers/admin-tokens.d.ts +8 -0
  269. package/dist/gateway/console-api/handlers/admin-tokens.d.ts.map +1 -0
  270. package/dist/gateway/console-api/handlers/admin-tokens.js +48 -0
  271. package/dist/gateway/console-api/handlers/admin-tokens.js.map +1 -0
  272. package/dist/gateway/console-api/handlers/audit.d.ts +8 -0
  273. package/dist/gateway/console-api/handlers/audit.d.ts.map +1 -0
  274. package/dist/gateway/console-api/handlers/audit.js +19 -0
  275. package/dist/gateway/console-api/handlers/audit.js.map +1 -0
  276. package/dist/gateway/console-api/handlers/audit.test.d.ts +2 -0
  277. package/dist/gateway/console-api/handlers/audit.test.d.ts.map +1 -0
  278. package/dist/gateway/console-api/handlers/audit.test.js +241 -0
  279. package/dist/gateway/console-api/handlers/audit.test.js.map +1 -0
  280. package/dist/gateway/console-api/handlers/data-settings.test.d.ts +2 -0
  281. package/dist/gateway/console-api/handlers/data-settings.test.d.ts.map +1 -0
  282. package/dist/gateway/console-api/handlers/data-settings.test.js +264 -0
  283. package/dist/gateway/console-api/handlers/data-settings.test.js.map +1 -0
  284. package/dist/gateway/console-api/handlers/index.d.ts +4 -0
  285. package/dist/gateway/console-api/handlers/index.d.ts.map +1 -0
  286. package/dist/gateway/console-api/handlers/index.js +24 -0
  287. package/dist/gateway/console-api/handlers/index.js.map +1 -0
  288. package/dist/gateway/console-api/handlers/keys.d.ts +13 -0
  289. package/dist/gateway/console-api/handlers/keys.d.ts.map +1 -0
  290. package/dist/gateway/console-api/handlers/keys.js +128 -0
  291. package/dist/gateway/console-api/handlers/keys.js.map +1 -0
  292. package/dist/gateway/console-api/handlers/keys.test.d.ts +2 -0
  293. package/dist/gateway/console-api/handlers/keys.test.d.ts.map +1 -0
  294. package/dist/gateway/console-api/handlers/keys.test.js +166 -0
  295. package/dist/gateway/console-api/handlers/keys.test.js.map +1 -0
  296. package/dist/gateway/console-api/handlers/network-buyer.d.ts +22 -0
  297. package/dist/gateway/console-api/handlers/network-buyer.d.ts.map +1 -0
  298. package/dist/gateway/console-api/handlers/network-buyer.js +39 -0
  299. package/dist/gateway/console-api/handlers/network-buyer.js.map +1 -0
  300. package/dist/gateway/console-api/handlers/network-mapping.d.ts +33 -0
  301. package/dist/gateway/console-api/handlers/network-mapping.d.ts.map +1 -0
  302. package/dist/gateway/console-api/handlers/network-mapping.js +219 -0
  303. package/dist/gateway/console-api/handlers/network-mapping.js.map +1 -0
  304. package/dist/gateway/console-api/handlers/network-test-helpers.d.ts +35 -0
  305. package/dist/gateway/console-api/handlers/network-test-helpers.d.ts.map +1 -0
  306. package/dist/gateway/console-api/handlers/network-test-helpers.js +121 -0
  307. package/dist/gateway/console-api/handlers/network-test-helpers.js.map +1 -0
  308. package/dist/gateway/console-api/handlers/network.d.ts +15 -0
  309. package/dist/gateway/console-api/handlers/network.d.ts.map +1 -0
  310. package/dist/gateway/console-api/handlers/network.js +57 -0
  311. package/dist/gateway/console-api/handlers/network.js.map +1 -0
  312. package/dist/gateway/console-api/handlers/network.test.d.ts +2 -0
  313. package/dist/gateway/console-api/handlers/network.test.d.ts.map +1 -0
  314. package/dist/gateway/console-api/handlers/network.test.js +383 -0
  315. package/dist/gateway/console-api/handlers/network.test.js.map +1 -0
  316. package/dist/gateway/console-api/handlers/org.d.ts +10 -0
  317. package/dist/gateway/console-api/handlers/org.d.ts.map +1 -0
  318. package/dist/gateway/console-api/handlers/org.js +150 -0
  319. package/dist/gateway/console-api/handlers/org.js.map +1 -0
  320. package/dist/gateway/console-api/handlers/peer-lists.d.ts +5 -0
  321. package/dist/gateway/console-api/handlers/peer-lists.d.ts.map +1 -0
  322. package/dist/gateway/console-api/handlers/peer-lists.js +43 -0
  323. package/dist/gateway/console-api/handlers/peer-lists.js.map +1 -0
  324. package/dist/gateway/console-api/handlers/presets.d.ts +9 -0
  325. package/dist/gateway/console-api/handlers/presets.d.ts.map +1 -0
  326. package/dist/gateway/console-api/handlers/presets.js +79 -0
  327. package/dist/gateway/console-api/handlers/presets.js.map +1 -0
  328. package/dist/gateway/console-api/handlers/routing.d.ts +5 -0
  329. package/dist/gateway/console-api/handlers/routing.d.ts.map +1 -0
  330. package/dist/gateway/console-api/handlers/routing.js +20 -0
  331. package/dist/gateway/console-api/handlers/routing.js.map +1 -0
  332. package/dist/gateway/console-api/handlers/settings.d.ts +10 -0
  333. package/dist/gateway/console-api/handlers/settings.d.ts.map +1 -0
  334. package/dist/gateway/console-api/handlers/settings.js +38 -0
  335. package/dist/gateway/console-api/handlers/settings.js.map +1 -0
  336. package/dist/gateway/console-api/handlers/status.d.ts +9 -0
  337. package/dist/gateway/console-api/handlers/status.d.ts.map +1 -0
  338. package/dist/gateway/console-api/handlers/status.js +47 -0
  339. package/dist/gateway/console-api/handlers/status.js.map +1 -0
  340. package/dist/gateway/console-api/handlers/status.test.d.ts +2 -0
  341. package/dist/gateway/console-api/handlers/status.test.d.ts.map +1 -0
  342. package/dist/gateway/console-api/handlers/status.test.js +82 -0
  343. package/dist/gateway/console-api/handlers/status.test.js.map +1 -0
  344. package/dist/gateway/console-api/handlers/usage.d.ts +10 -0
  345. package/dist/gateway/console-api/handlers/usage.d.ts.map +1 -0
  346. package/dist/gateway/console-api/handlers/usage.js +68 -0
  347. package/dist/gateway/console-api/handlers/usage.js.map +1 -0
  348. package/dist/gateway/console-api/handlers/wallet-card-link.d.ts +29 -0
  349. package/dist/gateway/console-api/handlers/wallet-card-link.d.ts.map +1 -0
  350. package/dist/gateway/console-api/handlers/wallet-card-link.js +46 -0
  351. package/dist/gateway/console-api/handlers/wallet-card-link.js.map +1 -0
  352. package/dist/gateway/console-api/handlers/wallet-chain.d.ts +26 -0
  353. package/dist/gateway/console-api/handlers/wallet-chain.d.ts.map +1 -0
  354. package/dist/gateway/console-api/handlers/wallet-chain.js +80 -0
  355. package/dist/gateway/console-api/handlers/wallet-chain.js.map +1 -0
  356. package/dist/gateway/console-api/handlers/wallet-mapping.d.ts +45 -0
  357. package/dist/gateway/console-api/handlers/wallet-mapping.d.ts.map +1 -0
  358. package/dist/gateway/console-api/handlers/wallet-mapping.js +202 -0
  359. package/dist/gateway/console-api/handlers/wallet-mapping.js.map +1 -0
  360. package/dist/gateway/console-api/handlers/wallet-operator.d.ts +41 -0
  361. package/dist/gateway/console-api/handlers/wallet-operator.d.ts.map +1 -0
  362. package/dist/gateway/console-api/handlers/wallet-operator.js +198 -0
  363. package/dist/gateway/console-api/handlers/wallet-operator.js.map +1 -0
  364. package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts +2 -0
  365. package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts.map +1 -0
  366. package/dist/gateway/console-api/handlers/wallet-operator.test.js +195 -0
  367. package/dist/gateway/console-api/handlers/wallet-operator.test.js.map +1 -0
  368. package/dist/gateway/console-api/handlers/wallet.d.ts +61 -0
  369. package/dist/gateway/console-api/handlers/wallet.d.ts.map +1 -0
  370. package/dist/gateway/console-api/handlers/wallet.js +221 -0
  371. package/dist/gateway/console-api/handlers/wallet.js.map +1 -0
  372. package/dist/gateway/console-api/handlers/wallet.test.d.ts +2 -0
  373. package/dist/gateway/console-api/handlers/wallet.test.d.ts.map +1 -0
  374. package/dist/gateway/console-api/handlers/wallet.test.js +581 -0
  375. package/dist/gateway/console-api/handlers/wallet.test.js.map +1 -0
  376. package/dist/gateway/console-api/handlers/workspaces.d.ts +12 -0
  377. package/dist/gateway/console-api/handlers/workspaces.d.ts.map +1 -0
  378. package/dist/gateway/console-api/handlers/workspaces.js +96 -0
  379. package/dist/gateway/console-api/handlers/workspaces.js.map +1 -0
  380. package/dist/gateway/console-api/operator-types.d.ts +68 -0
  381. package/dist/gateway/console-api/operator-types.d.ts.map +1 -0
  382. package/dist/gateway/console-api/operator-types.js +21 -0
  383. package/dist/gateway/console-api/operator-types.js.map +1 -0
  384. package/dist/gateway/console-api/router.d.ts +97 -0
  385. package/dist/gateway/console-api/router.d.ts.map +1 -0
  386. package/dist/gateway/console-api/router.js +69 -0
  387. package/dist/gateway/console-api/router.js.map +1 -0
  388. package/dist/gateway/console-api/routes.test.d.ts +2 -0
  389. package/dist/gateway/console-api/routes.test.d.ts.map +1 -0
  390. package/dist/gateway/console-api/routes.test.js +331 -0
  391. package/dist/gateway/console-api/routes.test.js.map +1 -0
  392. package/dist/gateway/console-api/serialize.d.ts +33 -0
  393. package/dist/gateway/console-api/serialize.d.ts.map +1 -0
  394. package/dist/gateway/console-api/serialize.js +179 -0
  395. package/dist/gateway/console-api/serialize.js.map +1 -0
  396. package/dist/gateway/console-api/server.d.ts +38 -0
  397. package/dist/gateway/console-api/server.d.ts.map +1 -0
  398. package/dist/gateway/console-api/server.js +308 -0
  399. package/dist/gateway/console-api/server.js.map +1 -0
  400. package/dist/gateway/console-api/server.test.d.ts +2 -0
  401. package/dist/gateway/console-api/server.test.d.ts.map +1 -0
  402. package/dist/gateway/console-api/server.test.js +149 -0
  403. package/dist/gateway/console-api/server.test.js.map +1 -0
  404. package/dist/gateway/console-api/test-support.d.ts +59 -0
  405. package/dist/gateway/console-api/test-support.d.ts.map +1 -0
  406. package/dist/gateway/console-api/test-support.js +120 -0
  407. package/dist/gateway/console-api/test-support.js.map +1 -0
  408. package/dist/gateway/console-api/types.d.ts +779 -0
  409. package/dist/gateway/console-api/types.d.ts.map +1 -0
  410. package/dist/gateway/console-api/types.js +6 -0
  411. package/dist/gateway/console-api/types.js.map +1 -0
  412. package/dist/gateway/console-location.d.ts +21 -0
  413. package/dist/gateway/console-location.d.ts.map +1 -0
  414. package/dist/gateway/console-location.js +41 -0
  415. package/dist/gateway/console-location.js.map +1 -0
  416. package/dist/gateway/console-recovery.d.ts +34 -0
  417. package/dist/gateway/console-recovery.d.ts.map +1 -0
  418. package/dist/gateway/console-recovery.js +94 -0
  419. package/dist/gateway/console-recovery.js.map +1 -0
  420. package/dist/gateway/console-recovery.test.d.ts +2 -0
  421. package/dist/gateway/console-recovery.test.d.ts.map +1 -0
  422. package/dist/gateway/console-recovery.test.js +106 -0
  423. package/dist/gateway/console-recovery.test.js.map +1 -0
  424. package/dist/gateway/console.d.ts +18 -0
  425. package/dist/gateway/console.d.ts.map +1 -0
  426. package/dist/gateway/console.js +101 -0
  427. package/dist/gateway/console.js.map +1 -0
  428. package/dist/gateway/console.test.d.ts +2 -0
  429. package/dist/gateway/console.test.d.ts.map +1 -0
  430. package/dist/gateway/console.test.js +165 -0
  431. package/dist/gateway/console.test.js.map +1 -0
  432. package/dist/gateway/errors.d.ts +3 -0
  433. package/dist/gateway/errors.d.ts.map +1 -0
  434. package/dist/gateway/errors.js +5 -0
  435. package/dist/gateway/errors.js.map +1 -0
  436. package/dist/gateway/exposure.d.ts +33 -0
  437. package/dist/gateway/exposure.d.ts.map +1 -0
  438. package/dist/gateway/exposure.js +146 -0
  439. package/dist/gateway/exposure.js.map +1 -0
  440. package/dist/gateway/exposure.test.d.ts +2 -0
  441. package/dist/gateway/exposure.test.d.ts.map +1 -0
  442. package/dist/gateway/exposure.test.js +93 -0
  443. package/dist/gateway/exposure.test.js.map +1 -0
  444. package/dist/gateway/gateway-policy.test.d.ts +2 -0
  445. package/dist/gateway/gateway-policy.test.d.ts.map +1 -0
  446. package/dist/gateway/gateway-policy.test.js +404 -0
  447. package/dist/gateway/gateway-policy.test.js.map +1 -0
  448. package/dist/gateway/gateway.test.js +47 -25
  449. package/dist/gateway/gateway.test.js.map +1 -1
  450. package/dist/gateway/keys.d.ts +2 -0
  451. package/dist/gateway/keys.d.ts.map +1 -1
  452. package/dist/gateway/keys.js +2 -0
  453. package/dist/gateway/keys.js.map +1 -1
  454. package/dist/gateway/limits.d.ts +32 -8
  455. package/dist/gateway/limits.d.ts.map +1 -1
  456. package/dist/gateway/limits.js +27 -11
  457. package/dist/gateway/limits.js.map +1 -1
  458. package/dist/gateway/observability.d.ts +51 -0
  459. package/dist/gateway/observability.d.ts.map +1 -0
  460. package/dist/gateway/observability.js +136 -0
  461. package/dist/gateway/observability.js.map +1 -0
  462. package/dist/gateway/policy-resolver.d.ts +73 -0
  463. package/dist/gateway/policy-resolver.d.ts.map +1 -0
  464. package/dist/gateway/policy-resolver.js +142 -0
  465. package/dist/gateway/policy-resolver.js.map +1 -0
  466. package/dist/gateway/policy-resolver.test.d.ts +2 -0
  467. package/dist/gateway/policy-resolver.test.d.ts.map +1 -0
  468. package/dist/gateway/policy-resolver.test.js +273 -0
  469. package/dist/gateway/policy-resolver.test.js.map +1 -0
  470. package/dist/gateway/request-errors.test.d.ts +2 -0
  471. package/dist/gateway/request-errors.test.d.ts.map +1 -0
  472. package/dist/gateway/request-errors.test.js +108 -0
  473. package/dist/gateway/request-errors.test.js.map +1 -0
  474. package/dist/gateway/request-shaping.d.ts +25 -0
  475. package/dist/gateway/request-shaping.d.ts.map +1 -0
  476. package/dist/gateway/request-shaping.js +66 -0
  477. package/dist/gateway/request-shaping.js.map +1 -0
  478. package/dist/gateway/response-usage.d.ts +35 -0
  479. package/dist/gateway/response-usage.d.ts.map +1 -0
  480. package/dist/gateway/response-usage.js +167 -0
  481. package/dist/gateway/response-usage.js.map +1 -0
  482. package/dist/gateway/response-usage.test.d.ts +2 -0
  483. package/dist/gateway/response-usage.test.d.ts.map +1 -0
  484. package/dist/gateway/response-usage.test.js +78 -0
  485. package/dist/gateway/response-usage.test.js.map +1 -0
  486. package/dist/gateway/runtime.d.ts +25 -0
  487. package/dist/gateway/runtime.d.ts.map +1 -1
  488. package/dist/gateway/runtime.js +39 -19
  489. package/dist/gateway/runtime.js.map +1 -1
  490. package/dist/gateway/server.d.ts +68 -2
  491. package/dist/gateway/server.d.ts.map +1 -1
  492. package/dist/gateway/server.js +532 -116
  493. package/dist/gateway/server.js.map +1 -1
  494. package/dist/gateway/services/audit.d.ts +16 -0
  495. package/dist/gateway/services/audit.d.ts.map +1 -0
  496. package/dist/gateway/services/audit.js +18 -0
  497. package/dist/gateway/services/audit.js.map +1 -0
  498. package/dist/gateway/services/context.d.ts +66 -0
  499. package/dist/gateway/services/context.d.ts.map +1 -0
  500. package/dist/gateway/services/context.js +52 -0
  501. package/dist/gateway/services/context.js.map +1 -0
  502. package/dist/gateway/services/keys.d.ts +78 -0
  503. package/dist/gateway/services/keys.d.ts.map +1 -0
  504. package/dist/gateway/services/keys.js +232 -0
  505. package/dist/gateway/services/keys.js.map +1 -0
  506. package/dist/gateway/services/members.d.ts +72 -0
  507. package/dist/gateway/services/members.d.ts.map +1 -0
  508. package/dist/gateway/services/members.js +161 -0
  509. package/dist/gateway/services/members.js.map +1 -0
  510. package/dist/gateway/services/network.d.ts +36 -0
  511. package/dist/gateway/services/network.d.ts.map +1 -0
  512. package/dist/gateway/services/network.js +147 -0
  513. package/dist/gateway/services/network.js.map +1 -0
  514. package/dist/gateway/services/operator.d.ts +98 -0
  515. package/dist/gateway/services/operator.d.ts.map +1 -0
  516. package/dist/gateway/services/operator.js +170 -0
  517. package/dist/gateway/services/operator.js.map +1 -0
  518. package/dist/gateway/services/operator.test.d.ts +2 -0
  519. package/dist/gateway/services/operator.test.d.ts.map +1 -0
  520. package/dist/gateway/services/operator.test.js +184 -0
  521. package/dist/gateway/services/operator.test.js.map +1 -0
  522. package/dist/gateway/services/peer-lists.d.ts +20 -0
  523. package/dist/gateway/services/peer-lists.d.ts.map +1 -0
  524. package/dist/gateway/services/peer-lists.js +134 -0
  525. package/dist/gateway/services/peer-lists.js.map +1 -0
  526. package/dist/gateway/services/presets.d.ts +34 -0
  527. package/dist/gateway/services/presets.d.ts.map +1 -0
  528. package/dist/gateway/services/presets.js +134 -0
  529. package/dist/gateway/services/presets.js.map +1 -0
  530. package/dist/gateway/services/routing.d.ts +13 -0
  531. package/dist/gateway/services/routing.d.ts.map +1 -0
  532. package/dist/gateway/services/routing.js +18 -0
  533. package/dist/gateway/services/routing.js.map +1 -0
  534. package/dist/gateway/services/services.test.d.ts +2 -0
  535. package/dist/gateway/services/services.test.d.ts.map +1 -0
  536. package/dist/gateway/services/services.test.js +476 -0
  537. package/dist/gateway/services/services.test.js.map +1 -0
  538. package/dist/gateway/services/settings.d.ts +68 -0
  539. package/dist/gateway/services/settings.d.ts.map +1 -0
  540. package/dist/gateway/services/settings.js +580 -0
  541. package/dist/gateway/services/settings.js.map +1 -0
  542. package/dist/gateway/services/tokens.d.ts +29 -0
  543. package/dist/gateway/services/tokens.d.ts.map +1 -0
  544. package/dist/gateway/services/tokens.js +48 -0
  545. package/dist/gateway/services/tokens.js.map +1 -0
  546. package/dist/gateway/services/usage.d.ts +55 -0
  547. package/dist/gateway/services/usage.d.ts.map +1 -0
  548. package/dist/gateway/services/usage.js +225 -0
  549. package/dist/gateway/services/usage.js.map +1 -0
  550. package/dist/gateway/services/wallet-address-env.test.d.ts +2 -0
  551. package/dist/gateway/services/wallet-address-env.test.d.ts.map +1 -0
  552. package/dist/gateway/services/wallet-address-env.test.js +119 -0
  553. package/dist/gateway/services/wallet-address-env.test.js.map +1 -0
  554. package/dist/gateway/services/wallet-address.d.ts +40 -0
  555. package/dist/gateway/services/wallet-address.d.ts.map +1 -0
  556. package/dist/gateway/services/wallet-address.js +116 -0
  557. package/dist/gateway/services/wallet-address.js.map +1 -0
  558. package/dist/gateway/services/wallet-address.test.d.ts +2 -0
  559. package/dist/gateway/services/wallet-address.test.d.ts.map +1 -0
  560. package/dist/gateway/services/wallet-address.test.js +84 -0
  561. package/dist/gateway/services/wallet-address.test.js.map +1 -0
  562. package/dist/gateway/services/workspaces.d.ts +75 -0
  563. package/dist/gateway/services/workspaces.d.ts.map +1 -0
  564. package/dist/gateway/services/workspaces.js +228 -0
  565. package/dist/gateway/services/workspaces.js.map +1 -0
  566. package/dist/gateway/spend-durability.test.d.ts +2 -0
  567. package/dist/gateway/spend-durability.test.d.ts.map +1 -0
  568. package/dist/gateway/spend-durability.test.js +330 -0
  569. package/dist/gateway/spend-durability.test.js.map +1 -0
  570. package/dist/gateway/spend-feed.d.ts +11 -1
  571. package/dist/gateway/spend-feed.d.ts.map +1 -1
  572. package/dist/gateway/spend-feed.js +17 -4
  573. package/dist/gateway/spend-feed.js.map +1 -1
  574. package/dist/gateway/spend-feed.test.d.ts +2 -0
  575. package/dist/gateway/spend-feed.test.d.ts.map +1 -0
  576. package/dist/gateway/spend-feed.test.js +34 -0
  577. package/dist/gateway/spend-feed.test.js.map +1 -0
  578. package/dist/gateway/store-data.test.d.ts +2 -0
  579. package/dist/gateway/store-data.test.d.ts.map +1 -0
  580. package/dist/gateway/store-data.test.js +346 -0
  581. package/dist/gateway/store-data.test.js.map +1 -0
  582. package/dist/gateway/store-migrations.d.ts +6 -0
  583. package/dist/gateway/store-migrations.d.ts.map +1 -0
  584. package/dist/gateway/store-migrations.js +301 -0
  585. package/dist/gateway/store-migrations.js.map +1 -0
  586. package/dist/gateway/store.d.ts +595 -10
  587. package/dist/gateway/store.d.ts.map +1 -1
  588. package/dist/gateway/store.js +1242 -120
  589. package/dist/gateway/store.js.map +1 -1
  590. package/dist/gateway/store.test.d.ts +2 -0
  591. package/dist/gateway/store.test.d.ts.map +1 -0
  592. package/dist/gateway/store.test.js +185 -0
  593. package/dist/gateway/store.test.js.map +1 -0
  594. package/dist/proxy/buyer-chain-reader.d.ts +68 -0
  595. package/dist/proxy/buyer-chain-reader.d.ts.map +1 -0
  596. package/dist/proxy/buyer-chain-reader.js +152 -0
  597. package/dist/proxy/buyer-chain-reader.js.map +1 -0
  598. package/dist/proxy/buyer-chain-reader.test.d.ts +2 -0
  599. package/dist/proxy/buyer-chain-reader.test.d.ts.map +1 -0
  600. package/dist/proxy/buyer-chain-reader.test.js +102 -0
  601. package/dist/proxy/buyer-chain-reader.test.js.map +1 -0
  602. package/dist/proxy/buyer-proxy.d.ts +169 -3
  603. package/dist/proxy/buyer-proxy.d.ts.map +1 -1
  604. package/dist/proxy/buyer-proxy.js +873 -117
  605. package/dist/proxy/buyer-proxy.js.map +1 -1
  606. package/dist/proxy/buyer-proxy.test.js +31 -0
  607. package/dist/proxy/buyer-proxy.test.js.map +1 -1
  608. package/dist/proxy/chain-read-cache.d.ts +47 -0
  609. package/dist/proxy/chain-read-cache.d.ts.map +1 -0
  610. package/dist/proxy/chain-read-cache.js +110 -0
  611. package/dist/proxy/chain-read-cache.js.map +1 -0
  612. package/dist/proxy/chain-read-cache.test.d.ts +2 -0
  613. package/dist/proxy/chain-read-cache.test.d.ts.map +1 -0
  614. package/dist/proxy/chain-read-cache.test.js +75 -0
  615. package/dist/proxy/chain-read-cache.test.js.map +1 -0
  616. package/dist/proxy/chain-rpc-test-support.d.ts +31 -0
  617. package/dist/proxy/chain-rpc-test-support.d.ts.map +1 -0
  618. package/dist/proxy/chain-rpc-test-support.js +136 -0
  619. package/dist/proxy/chain-rpc-test-support.js.map +1 -0
  620. package/dist/proxy/chain-rpc.d.ts +121 -0
  621. package/dist/proxy/chain-rpc.d.ts.map +1 -0
  622. package/dist/proxy/chain-rpc.js +420 -0
  623. package/dist/proxy/chain-rpc.js.map +1 -0
  624. package/dist/proxy/chain-rpc.test.d.ts +2 -0
  625. package/dist/proxy/chain-rpc.test.d.ts.map +1 -0
  626. package/dist/proxy/chain-rpc.test.js +180 -0
  627. package/dist/proxy/chain-rpc.test.js.map +1 -0
  628. package/dist/proxy/deposit-watch-hub.d.ts +47 -0
  629. package/dist/proxy/deposit-watch-hub.d.ts.map +1 -0
  630. package/dist/proxy/deposit-watch-hub.js +111 -0
  631. package/dist/proxy/deposit-watch-hub.js.map +1 -0
  632. package/dist/proxy/deposit-watch-hub.test.d.ts +2 -0
  633. package/dist/proxy/deposit-watch-hub.test.d.ts.map +1 -0
  634. package/dist/proxy/deposit-watch-hub.test.js +133 -0
  635. package/dist/proxy/deposit-watch-hub.test.js.map +1 -0
  636. package/dist/proxy/deposit-watcher.d.ts +44 -4
  637. package/dist/proxy/deposit-watcher.d.ts.map +1 -1
  638. package/dist/proxy/deposit-watcher.js +76 -11
  639. package/dist/proxy/deposit-watcher.js.map +1 -1
  640. package/dist/proxy/deposit-watcher.test.js +54 -1
  641. package/dist/proxy/deposit-watcher.test.js.map +1 -1
  642. package/dist/proxy/gateway-policy.test.d.ts +2 -0
  643. package/dist/proxy/gateway-policy.test.d.ts.map +1 -0
  644. package/dist/proxy/gateway-policy.test.js +576 -0
  645. package/dist/proxy/gateway-policy.test.js.map +1 -0
  646. package/dist/proxy/network-models.d.ts +2 -0
  647. package/dist/proxy/network-models.d.ts.map +1 -1
  648. package/dist/proxy/network-models.js +3 -1
  649. package/dist/proxy/network-models.js.map +1 -1
  650. package/dist/proxy/route-policy.d.ts +97 -0
  651. package/dist/proxy/route-policy.d.ts.map +1 -0
  652. package/dist/proxy/route-policy.js +230 -0
  653. package/dist/proxy/route-policy.js.map +1 -0
  654. package/dist/proxy/route-policy.test.d.ts +2 -0
  655. package/dist/proxy/route-policy.test.d.ts.map +1 -0
  656. package/dist/proxy/route-policy.test.js +120 -0
  657. package/dist/proxy/route-policy.test.js.map +1 -0
  658. package/dist/proxy/spend-attribution.d.ts +41 -10
  659. package/dist/proxy/spend-attribution.d.ts.map +1 -1
  660. package/dist/proxy/spend-attribution.js +133 -37
  661. package/dist/proxy/spend-attribution.js.map +1 -1
  662. package/dist/proxy/tee-control.d.ts +3 -1
  663. package/dist/proxy/tee-control.d.ts.map +1 -1
  664. package/dist/proxy/tee-control.js +5 -3
  665. package/dist/proxy/tee-control.js.map +1 -1
  666. package/dist/proxy/telemetry.d.ts +2 -1
  667. package/dist/proxy/telemetry.d.ts.map +1 -1
  668. package/dist/proxy/telemetry.js +10 -5
  669. package/dist/proxy/telemetry.js.map +1 -1
  670. package/dist/routing-policy/policy.d.ts +149 -0
  671. package/dist/routing-policy/policy.d.ts.map +1 -0
  672. package/dist/routing-policy/policy.js +450 -0
  673. package/dist/routing-policy/policy.js.map +1 -0
  674. package/dist/routing-policy/policy.test.d.ts +2 -0
  675. package/dist/routing-policy/policy.test.d.ts.map +1 -0
  676. package/dist/routing-policy/policy.test.js +134 -0
  677. package/dist/routing-policy/policy.test.js.map +1 -0
  678. package/package.json +15 -7
@@ -0,0 +1,47 @@
1
+ /**
2
+ * TTL cache for chain reads. Concurrent reads of one key share a load; an
3
+ * expired value is served while it refreshes in the background (when asked
4
+ * to); a failed refresh serves the last good value marked `stale` and does
5
+ * not retry the load until `errorRetryMs` passes, so an RPC outage or rate
6
+ * limit never turns into a retry loop.
7
+ */
8
+ export interface CachedRead<T> {
9
+ value: T;
10
+ /** True when the value could not be refreshed (the chain is unreachable or rate limited). */
11
+ stale: boolean;
12
+ fetchedAt: number;
13
+ }
14
+ export interface ReadOptions {
15
+ ttlMs: number;
16
+ /** Serve a value up to this much past its TTL immediately, refreshing it in the background. */
17
+ staleWhileRevalidateMs?: number;
18
+ /** Ignore a cached value younger than the TTL (still shares an in-flight load). */
19
+ force?: boolean;
20
+ /** False: a failed refresh is an error, never the last value (for reads that must not be stale). */
21
+ serveStaleOnError?: boolean;
22
+ /** Overrides the cache's `errorRetryMs` for this read. */
23
+ errorRetryMs?: number;
24
+ }
25
+ export declare class ChainReadCache {
26
+ private readonly entries;
27
+ private readonly now;
28
+ private readonly errorRetryMs;
29
+ private readonly maxEntries;
30
+ constructor(options?: {
31
+ now?: () => number;
32
+ errorRetryMs?: number;
33
+ maxEntries?: number;
34
+ });
35
+ read<T>(key: string, options: ReadOptions, load: () => Promise<T>): Promise<CachedRead<T>>;
36
+ /** The cached value regardless of age, when there is one. */
37
+ peek<T>(key: string): CachedRead<T> | null;
38
+ /** Milliseconds since the cached value was read, by the cache's clock; null when none. */
39
+ age(key: string): number | null;
40
+ /** Records a value read elsewhere (e.g. one tick of the deposit watcher). */
41
+ set<T>(key: string, value: T): void;
42
+ /** Drops keys equal to `key` or starting with `key` followed by `:`. */
43
+ invalidate(key: string): void;
44
+ private entry;
45
+ private start;
46
+ }
47
+ //# sourceMappingURL=chain-read-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-read-cache.d.ts","sourceRoot":"","sources":["../../src/proxy/chain-read-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAA;IACR,6FAA6F;IAC7F,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAWD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;IAMtF,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAyBhG,6DAA6D;IAC7D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1C,0FAA0F;IAC1F,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK/B,6EAA6E;IAC7E,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IASnC,wEAAwE;IACxE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7B,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,KAAK;CAoBd"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * TTL cache for chain reads. Concurrent reads of one key share a load; an
3
+ * expired value is served while it refreshes in the background (when asked
4
+ * to); a failed refresh serves the last good value marked `stale` and does
5
+ * not retry the load until `errorRetryMs` passes, so an RPC outage or rate
6
+ * limit never turns into a retry loop.
7
+ */
8
+ export class ChainReadCache {
9
+ entries = new Map();
10
+ now;
11
+ errorRetryMs;
12
+ maxEntries;
13
+ constructor(options = {}) {
14
+ this.now = options.now ?? Date.now;
15
+ this.errorRetryMs = options.errorRetryMs ?? 10_000;
16
+ this.maxEntries = options.maxEntries ?? 5_000;
17
+ }
18
+ async read(key, options, load) {
19
+ const entry = this.entry(key);
20
+ const now = this.now();
21
+ const fresh = entry.hasValue && now - entry.fetchedAt < options.ttlMs;
22
+ if (fresh && !options.force)
23
+ return { value: entry.value, stale: false, fetchedAt: entry.fetchedAt };
24
+ const staleOnError = options.serveStaleOnError !== false;
25
+ const recentlyFailed = entry.failedAt !== null && now - entry.failedAt < (options.errorRetryMs ?? this.errorRetryMs);
26
+ if (recentlyFailed && !entry.loading) {
27
+ if (entry.hasValue && staleOnError)
28
+ return { value: entry.value, stale: true, fetchedAt: entry.fetchedAt };
29
+ throw entry.error;
30
+ }
31
+ const loading = this.start(key, entry, load);
32
+ if (entry.hasValue && !options.force && now - entry.fetchedAt < options.ttlMs + (options.staleWhileRevalidateMs ?? 0)) {
33
+ loading.catch(() => { });
34
+ return { value: entry.value, stale: false, fetchedAt: entry.fetchedAt };
35
+ }
36
+ try {
37
+ const value = await loading;
38
+ return { value, stale: false, fetchedAt: entry.fetchedAt };
39
+ }
40
+ catch (error) {
41
+ if (entry.hasValue && staleOnError)
42
+ return { value: entry.value, stale: true, fetchedAt: entry.fetchedAt };
43
+ throw error;
44
+ }
45
+ }
46
+ /** The cached value regardless of age, when there is one. */
47
+ peek(key) {
48
+ const entry = this.entries.get(key);
49
+ return entry?.hasValue ? { value: entry.value, stale: false, fetchedAt: entry.fetchedAt } : null;
50
+ }
51
+ /** Milliseconds since the cached value was read, by the cache's clock; null when none. */
52
+ age(key) {
53
+ const entry = this.entries.get(key);
54
+ return entry?.hasValue ? this.now() - entry.fetchedAt : null;
55
+ }
56
+ /** Records a value read elsewhere (e.g. one tick of the deposit watcher). */
57
+ set(key, value) {
58
+ const entry = this.entry(key);
59
+ entry.value = value;
60
+ entry.hasValue = true;
61
+ entry.fetchedAt = this.now();
62
+ entry.failedAt = null;
63
+ entry.error = undefined;
64
+ }
65
+ /** Drops keys equal to `key` or starting with `key` followed by `:`. */
66
+ invalidate(key) {
67
+ for (const existing of this.entries.keys()) {
68
+ if (existing === key || existing.startsWith(`${key}:`))
69
+ this.entries.delete(existing);
70
+ }
71
+ }
72
+ entry(key) {
73
+ let entry = this.entries.get(key);
74
+ if (!entry) {
75
+ if (this.entries.size >= this.maxEntries) {
76
+ const oldest = this.entries.keys().next().value;
77
+ if (oldest !== undefined)
78
+ this.entries.delete(oldest);
79
+ }
80
+ entry = { fetchedAt: 0, hasValue: false, loading: null, failedAt: null, error: undefined };
81
+ this.entries.set(key, entry);
82
+ }
83
+ return entry;
84
+ }
85
+ start(key, entry, load) {
86
+ if (entry.loading)
87
+ return entry.loading;
88
+ const loading = (async () => load())();
89
+ entry.loading = loading;
90
+ loading.then((value) => {
91
+ if (this.entries.get(key) !== entry)
92
+ return;
93
+ entry.value = value;
94
+ entry.hasValue = true;
95
+ entry.fetchedAt = this.now();
96
+ entry.failedAt = null;
97
+ entry.error = undefined;
98
+ }, (error) => {
99
+ if (this.entries.get(key) !== entry)
100
+ return;
101
+ entry.failedAt = this.now();
102
+ entry.error = error;
103
+ }).finally(() => {
104
+ if (entry.loading === loading)
105
+ entry.loading = null;
106
+ });
107
+ return loading;
108
+ }
109
+ }
110
+ //# sourceMappingURL=chain-read-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-read-cache.js","sourceRoot":"","sources":["../../src/proxy/chain-read-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chain-read-cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-read-cache.test.d.ts","sourceRoot":"","sources":["../../src/proxy/chain-read-cache.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { ChainReadCache } from './chain-read-cache.js';
4
+ test('a value is reused for its TTL and concurrent loads share one call', async () => {
5
+ let now = 0;
6
+ let loads = 0;
7
+ const cache = new ChainReadCache({ now: () => now });
8
+ const load = async () => { loads++; return loads; };
9
+ const [a, b] = await Promise.all([cache.read('k', { ttlMs: 1_000 }, load), cache.read('k', { ttlMs: 1_000 }, load)]);
10
+ assert.equal(a.value, 1);
11
+ assert.equal(b.value, 1);
12
+ now = 999;
13
+ assert.equal((await cache.read('k', { ttlMs: 1_000 }, load)).value, 1);
14
+ now = 1_000;
15
+ assert.equal((await cache.read('k', { ttlMs: 1_000 }, load)).value, 2);
16
+ assert.equal(loads, 2);
17
+ });
18
+ test('stale-while-revalidate answers at once and refreshes in the background, within its window only', async () => {
19
+ let now = 0;
20
+ let loads = 0;
21
+ const cache = new ChainReadCache({ now: () => now });
22
+ const load = async () => ++loads;
23
+ await cache.read('k', { ttlMs: 100, staleWhileRevalidateMs: 1_000 }, load);
24
+ now = 500;
25
+ const served = await cache.read('k', { ttlMs: 100, staleWhileRevalidateMs: 1_000 }, load);
26
+ assert.deepEqual([served.value, served.stale], [1, false]);
27
+ await new Promise((resolve) => setImmediate(resolve));
28
+ assert.equal(loads, 2);
29
+ assert.equal(cache.peek('k')?.value, 2);
30
+ now = 5_000; // past TTL + window: wait for the read
31
+ assert.equal((await cache.read('k', { ttlMs: 100, staleWhileRevalidateMs: 1_000 }, load)).value, 3);
32
+ });
33
+ test('a failed refresh serves the last value as stale and does not retry until errorRetryMs passes', async () => {
34
+ let now = 0;
35
+ let loads = 0;
36
+ let fail = false;
37
+ const cache = new ChainReadCache({ now: () => now, errorRetryMs: 10_000 });
38
+ const load = async () => {
39
+ loads++;
40
+ if (fail)
41
+ throw new Error('429');
42
+ return 'v';
43
+ };
44
+ await cache.read('k', { ttlMs: 100 }, load);
45
+ fail = true;
46
+ now = 200;
47
+ assert.deepEqual(await cache.read('k', { ttlMs: 100 }, load), { value: 'v', stale: true, fetchedAt: 0 });
48
+ assert.equal(loads, 2);
49
+ now = 5_000;
50
+ assert.equal((await cache.read('k', { ttlMs: 100 }, load)).stale, true);
51
+ assert.equal(loads, 2, 'no retry inside the error window');
52
+ now = 10_201;
53
+ fail = false;
54
+ assert.deepEqual(await cache.read('k', { ttlMs: 100 }, load), { value: 'v', stale: false, fetchedAt: 10_201 });
55
+ assert.equal(loads, 3);
56
+ });
57
+ test('a failure without a cached value is rethrown (and not retried at once)', async () => {
58
+ let loads = 0;
59
+ const cache = new ChainReadCache({ now: () => 0, errorRetryMs: 10_000 });
60
+ const load = async () => { loads++; throw new Error('down'); };
61
+ await assert.rejects(cache.read('k', { ttlMs: 100 }, load), /down/);
62
+ await assert.rejects(cache.read('k', { ttlMs: 100 }, load), /down/);
63
+ assert.equal(loads, 1);
64
+ });
65
+ test('set, force and invalidate', async () => {
66
+ let loads = 0;
67
+ const cache = new ChainReadCache({ now: () => 0 });
68
+ cache.set('usdc:0xabc', 5n);
69
+ assert.equal((await cache.read('usdc:0xabc', { ttlMs: 100 }, async () => { loads++; return 6n; })).value, 5n);
70
+ assert.equal((await cache.read('usdc:0xabc', { ttlMs: 100, force: true }, async () => { loads++; return 6n; })).value, 6n);
71
+ cache.invalidate('usdc');
72
+ assert.equal(cache.peek('usdc:0xabc'), null);
73
+ assert.equal(loads, 1);
74
+ });
75
+ //# sourceMappingURL=chain-read-cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-read-cache.test.js","sourceRoot":"","sources":["../../src/proxy/chain-read-cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface FakeChainRpc {
2
+ url: string;
3
+ /** HTTP requests received, in total and by JSON-RPC method (an `aggregate3` counts once as `eth_call`). */
4
+ requests: number;
5
+ byMethod: Record<string, number>;
6
+ /** Calls answered inside `aggregate3` batches. */
7
+ batchedCalls: number;
8
+ usdc: Map<string, bigint>;
9
+ deposits: Map<string, {
10
+ available: bigint;
11
+ reserved: bigint;
12
+ }>;
13
+ creditLimit: bigint;
14
+ operators: Map<string, string>;
15
+ /** Answer the next N requests (Infinity: all) with HTTP 429. */
16
+ rateLimit(count: number): void;
17
+ /** Answer with JSON-RPC error -32005 instead of HTTP 429. */
18
+ rateLimitStyle: 'http' | 'jsonrpc';
19
+ /** Forget the counters. */
20
+ reset(): void;
21
+ close(): Promise<void>;
22
+ }
23
+ export declare function startFakeChainRpc(options?: {
24
+ evmChainId?: number;
25
+ multicall?: boolean;
26
+ port?: number;
27
+ host?: string;
28
+ }): Promise<FakeChainRpc>;
29
+ /** ABI-encode a uint256 (for tests that hand-craft responses). */
30
+ export declare function encodeUint(value: bigint): string;
31
+ //# sourceMappingURL=chain-rpc-test-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-rpc-test-support.d.ts","sourceRoot":"","sources":["../../src/proxy/chain-rpc-test-support.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,2GAA2G;IAC3G,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,gEAAgE;IAChE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,6DAA6D;IAC7D,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,2BAA2B;IAC3B,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA+GvJ;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * A fake Base JSON-RPC endpoint for tests and `scripts/rpc-budget.mjs`:
3
+ * answers the reads the buyer and gateway make (USDC balances, deposits
4
+ * balances, credit limit, operator, Multicall3 `aggregate3`), counts every
5
+ * HTTP request by method, and can be told to rate-limit. Anything it does
6
+ * not know returns a zero word, which decodes as 0 / false / the zero address.
7
+ */
8
+ import { createServer } from 'node:http';
9
+ import { AbiCoder, Interface } from 'ethers';
10
+ import { MULTICALL3_ADDRESS } from './chain-rpc.js';
11
+ const READS = new Interface([
12
+ 'function balanceOf(address owner) view returns (uint256)',
13
+ 'function getBuyerBalance(address buyer) view returns (uint256 available, uint256 reserved, uint256 lastActivityAt)',
14
+ 'function getBuyerCreditLimit(address buyer) view returns (uint256)',
15
+ 'function getOperator(address buyer) view returns (address)',
16
+ 'function aggregate3(tuple(address target, bool allowFailure, bytes callData)[] calls) payable returns (tuple(bool success, bytes returnData)[] returnData)',
17
+ ]);
18
+ const ZERO_WORD = '0x' + '0'.repeat(64);
19
+ export async function startFakeChainRpc(options = {}) {
20
+ const evmChainId = options.evmChainId ?? 8453;
21
+ const multicall = options.multicall !== false;
22
+ let limited = 0;
23
+ const fake = {
24
+ url: '',
25
+ requests: 0,
26
+ byMethod: {},
27
+ batchedCalls: 0,
28
+ usdc: new Map(),
29
+ deposits: new Map(),
30
+ creditLimit: 100000000n,
31
+ operators: new Map(),
32
+ rateLimit: (count) => { limited = count; },
33
+ rateLimitStyle: 'http',
34
+ reset: () => {
35
+ fake.requests = 0;
36
+ fake.byMethod = {};
37
+ fake.batchedCalls = 0;
38
+ },
39
+ close: async () => {
40
+ await new Promise((resolve) => server.close(() => resolve()));
41
+ },
42
+ };
43
+ const call = (to, data) => {
44
+ if (multicall && to.toLowerCase() === MULTICALL3_ADDRESS.toLowerCase()) {
45
+ const [calls] = READS.decodeFunctionData('aggregate3', data);
46
+ fake.batchedCalls += calls.length;
47
+ const results = calls.map((entry) => call(entry.target, entry.callData));
48
+ return { success: true, returnData: READS.encodeFunctionResult('aggregate3', [results]) };
49
+ }
50
+ let parsed;
51
+ try {
52
+ parsed = READS.parseTransaction({ data });
53
+ }
54
+ catch {
55
+ parsed = null;
56
+ }
57
+ const owner = parsed?.args[0] && typeof parsed.args[0] === 'string' ? parsed.args[0].toLowerCase() : '';
58
+ switch (parsed?.name) {
59
+ case 'balanceOf': return { success: true, returnData: READS.encodeFunctionResult('balanceOf', [fake.usdc.get(owner) ?? 0n]) };
60
+ case 'getBuyerBalance': {
61
+ const balance = fake.deposits.get(owner) ?? { available: 0n, reserved: 0n };
62
+ return { success: true, returnData: READS.encodeFunctionResult('getBuyerBalance', [balance.available, balance.reserved, 0n]) };
63
+ }
64
+ case 'getBuyerCreditLimit': return { success: true, returnData: READS.encodeFunctionResult('getBuyerCreditLimit', [fake.creditLimit]) };
65
+ case 'getOperator': return { success: true, returnData: READS.encodeFunctionResult('getOperator', [fake.operators.get(owner) ?? '0x' + '0'.repeat(40)]) };
66
+ default: return { success: true, returnData: ZERO_WORD };
67
+ }
68
+ };
69
+ const answer = (request) => {
70
+ const id = request.id ?? null;
71
+ const method = request.method ?? '';
72
+ const params = request.params ?? [];
73
+ switch (method) {
74
+ case 'eth_chainId': return { jsonrpc: '2.0', id, result: '0x' + evmChainId.toString(16) };
75
+ case 'net_version': return { jsonrpc: '2.0', id, result: String(evmChainId) };
76
+ case 'eth_blockNumber': return { jsonrpc: '2.0', id, result: '0x100' };
77
+ case 'eth_getBalance':
78
+ case 'eth_getTransactionCount': return { jsonrpc: '2.0', id, result: '0x0' };
79
+ case 'eth_gasPrice': return { jsonrpc: '2.0', id, result: '0x1' };
80
+ case 'eth_getCode': {
81
+ const address = String(params[0] ?? '').toLowerCase();
82
+ const deployed = address !== MULTICALL3_ADDRESS.toLowerCase() || multicall;
83
+ return { jsonrpc: '2.0', id, result: deployed ? '0x6080604052' : '0x' };
84
+ }
85
+ case 'eth_getLogs': return { jsonrpc: '2.0', id, result: [] };
86
+ case 'eth_getTransactionReceipt': return { jsonrpc: '2.0', id, result: null };
87
+ case 'eth_call': {
88
+ const tx = (params[0] ?? {});
89
+ const result = call(tx.to ?? '', tx.data ?? tx.input ?? '0x');
90
+ return result.success
91
+ ? { jsonrpc: '2.0', id, result: result.returnData }
92
+ : { jsonrpc: '2.0', id, error: { code: 3, message: 'execution reverted', data: result.returnData } };
93
+ }
94
+ default: return { jsonrpc: '2.0', id, error: { code: -32601, message: `method ${method} not supported by the fake RPC` } };
95
+ }
96
+ };
97
+ const server = createServer((req, res) => {
98
+ const chunks = [];
99
+ req.on('data', (chunk) => chunks.push(chunk));
100
+ req.on('end', () => {
101
+ fake.requests++;
102
+ let body;
103
+ try {
104
+ body = JSON.parse(Buffer.concat(chunks).toString('utf8') || 'null');
105
+ }
106
+ catch {
107
+ res.writeHead(400).end();
108
+ return;
109
+ }
110
+ const entries = (Array.isArray(body) ? body : [body]);
111
+ for (const entry of entries)
112
+ fake.byMethod[entry.method ?? '?'] = (fake.byMethod[entry.method ?? '?'] ?? 0) + 1;
113
+ if (limited > 0) {
114
+ limited--;
115
+ if (fake.rateLimitStyle === 'http') {
116
+ res.writeHead(429, { 'content-type': 'application/json', 'retry-after': '1' }).end(JSON.stringify({ error: 'rate limited' }));
117
+ }
118
+ else {
119
+ const errors = entries.map((entry) => ({ jsonrpc: '2.0', id: entry.id ?? null, error: { code: -32005, message: 'rate limit exceeded' } }));
120
+ res.writeHead(200, { 'content-type': 'application/json' }).end(JSON.stringify(Array.isArray(body) ? errors : errors[0]));
121
+ }
122
+ return;
123
+ }
124
+ const results = entries.map(answer);
125
+ res.writeHead(200, { 'content-type': 'application/json' }).end(JSON.stringify(Array.isArray(body) ? results : results[0]));
126
+ });
127
+ });
128
+ await new Promise((resolve) => server.listen(options.port ?? 0, options.host ?? '127.0.0.1', () => resolve()));
129
+ fake.url = `http://127.0.0.1:${server.address().port}`;
130
+ return fake;
131
+ }
132
+ /** ABI-encode a uint256 (for tests that hand-craft responses). */
133
+ export function encodeUint(value) {
134
+ return AbiCoder.defaultAbiCoder().encode(['uint256'], [value]);
135
+ }
136
+ //# sourceMappingURL=chain-rpc-test-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-rpc-test-support.js","sourceRoot":"","sources":["../../src/proxy/chain-rpc-test-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * The JSON-RPC client every chain read in the buyer and gateway processes
3
+ * goes through: one provider per chain per process (`sharedChainProvider`),
4
+ * so public endpoints (mainnet.base.org and friends) that throttle per IP
5
+ * see as few requests as possible.
6
+ *
7
+ * - Identical reads in flight at once share one request.
8
+ * - `eth_call`s issued together (a `Promise.all` of contract reads, one
9
+ * tick of the deposit watcher for N wallets) are folded into a single
10
+ * Multicall3 `aggregate3` call, for an allow-list of caller-independent
11
+ * views (`BATCHABLE_SELECTORS`).
12
+ * - Chain constants (`eth_chainId`, deployed contract code) are remembered.
13
+ * - An endpoint that answers 429 / JSON-RPC -32005 / 5xx / a network error
14
+ * is skipped for an exponentially growing, jittered period and the call
15
+ * moves to the next endpoint. When every endpoint is backing off the call
16
+ * fails at once with `RpcUnavailableError` without touching the network,
17
+ * so callers serve cached data instead of hammering.
18
+ * - Requests are paced per endpoint so a burst never exceeds a few per second.
19
+ */
20
+ import { JsonRpcProvider, type JsonRpcPayload, type JsonRpcResult } from 'ethers';
21
+ export interface RpcTransportResponse {
22
+ status: number;
23
+ /** Parsed JSON body, or null when the body is not JSON. */
24
+ body: unknown;
25
+ /** From a `Retry-After` header, when the endpoint sent one. */
26
+ retryAfterMs?: number | null;
27
+ }
28
+ export type RpcTransport = (url: string, body: string) => Promise<RpcTransportResponse>;
29
+ export interface ChainRpcOptions {
30
+ transport?: RpcTransport;
31
+ now?: () => number;
32
+ random?: () => number;
33
+ /** How long concurrent `eth_call`s are collected into one Multicall3 call; null disables batching. */
34
+ batchWindowMs?: number | null;
35
+ /** Calls per Multicall3 batch. */
36
+ maxBatchSize?: number;
37
+ /** First back-off after an endpoint throttles or fails; doubles per consecutive failure. */
38
+ backoffBaseMs?: number;
39
+ backoffMaxMs?: number;
40
+ /** Sustained requests per second per endpoint (bursts of the same size are allowed). */
41
+ requestsPerSecond?: number;
42
+ multicallAddress?: string;
43
+ }
44
+ export interface ChainRpcStats {
45
+ /** HTTP requests sent to RPC endpoints. */
46
+ requests: number;
47
+ /** JSON-RPC calls asked of the provider, by method (before coalescing, batching and caching). */
48
+ calls: Record<string, number>;
49
+ coalesced: number;
50
+ /** `eth_call`s that went out inside a Multicall3 batch. */
51
+ batchedCalls: number;
52
+ cacheHits: number;
53
+ rateLimited: number;
54
+ /** Calls refused locally because every endpoint was backing off. */
55
+ shortCircuited: number;
56
+ }
57
+ /** Every endpoint is backing off (or just failed); serve cached data and retry after `retryAt`. */
58
+ export declare class RpcUnavailableError extends Error {
59
+ readonly retryAt: number;
60
+ readonly code = "RPC_UNAVAILABLE";
61
+ constructor(message: string, retryAt: number);
62
+ }
63
+ export declare const MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
64
+ export declare class ChainRpcProvider extends JsonRpcProvider {
65
+ private readonly endpoints;
66
+ private readonly transport;
67
+ private readonly now;
68
+ private readonly random;
69
+ private readonly batchWindowMs;
70
+ private readonly maxBatchSize;
71
+ private readonly backoffBaseMs;
72
+ private readonly backoffMaxMs;
73
+ private readonly rps;
74
+ private readonly multicallAddress;
75
+ private readonly inflight;
76
+ private readonly constants;
77
+ private queue;
78
+ private flushTimer;
79
+ private multicall;
80
+ private readonly counters;
81
+ constructor(urls: string[], evmChainId?: number, options?: ChainRpcOptions);
82
+ get urls(): string[];
83
+ stats(): ChainRpcStats;
84
+ /** When the next request could go out; 0 while some endpoint is usable. */
85
+ get unavailableUntil(): number;
86
+ _send(payload: JsonRpcPayload | JsonRpcPayload[]): Promise<JsonRpcResult[]>;
87
+ private one;
88
+ /** `eth_chainId` forever; contract code for an hour (an empty account for ten minutes). */
89
+ private remember;
90
+ private batchable;
91
+ private enqueue;
92
+ private flushSoon;
93
+ private flush;
94
+ private sendEach;
95
+ /** Multicall3 is probed once per process (its code is then cached like any other). */
96
+ private multicallDeployed;
97
+ private request;
98
+ /** Sends one payload to the first endpoint not backing off, moving on when one throttles or fails. */
99
+ private transmit;
100
+ /** Exponential back-off with "equal jitter": half the delay fixed, half random. */
101
+ private trip;
102
+ private pace;
103
+ destroy(): void;
104
+ }
105
+ /** An RPC URL without its path or query, which is where providers put API keys. */
106
+ export declare function redact(url: string): string;
107
+ export interface ChainRpcTarget {
108
+ evmChainId: number;
109
+ rpcUrl: string;
110
+ fallbackRpcUrls?: string[];
111
+ }
112
+ /**
113
+ * The process's provider for a chain and endpoint list; built once, reused by every reader.
114
+ * Batched reads run inside Multicall3, with `msg.sender` = Multicall3 rather
115
+ * than the zero address or a `from`: a read whose answer depends on the caller
116
+ * must not be added to `BATCHABLE_SELECTORS`.
117
+ */
118
+ export declare function sharedChainProvider(chain: ChainRpcTarget, options?: ChainRpcOptions): ChainRpcProvider;
119
+ /** For tests. */
120
+ export declare function resetSharedChainProviders(): void;
121
+ //# sourceMappingURL=chain-rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-rpc.d.ts","sourceRoot":"","sources":["../../src/proxy/chain-rpc.ts"],"names":[],"mappings":"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"}