@antseed/cli 0.1.179 → 0.1.180

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 (666) hide show
  1. package/README.md +2 -0
  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/buyer/identity.d.ts +3 -1
  7. package/dist/cli/commands/buyer/identity.d.ts.map +1 -1
  8. package/dist/cli/commands/buyer/identity.js +55 -8
  9. package/dist/cli/commands/buyer/identity.js.map +1 -1
  10. package/dist/cli/commands/buyer/identity.test.d.ts +2 -0
  11. package/dist/cli/commands/buyer/identity.test.d.ts.map +1 -0
  12. package/dist/cli/commands/buyer/identity.test.js +168 -0
  13. package/dist/cli/commands/buyer/identity.test.js.map +1 -0
  14. package/dist/cli/commands/buyer/set-authorized-wallet.d.ts +10 -0
  15. package/dist/cli/commands/buyer/set-authorized-wallet.d.ts.map +1 -1
  16. package/dist/cli/commands/buyer/set-authorized-wallet.js +26 -4
  17. package/dist/cli/commands/buyer/set-authorized-wallet.js.map +1 -1
  18. package/dist/cli/commands/buyer/set-authorized-wallet.test.js +37 -2
  19. package/dist/cli/commands/buyer/set-authorized-wallet.test.js.map +1 -1
  20. package/dist/cli/commands/buyer/start.d.ts +15 -0
  21. package/dist/cli/commands/buyer/start.d.ts.map +1 -1
  22. package/dist/cli/commands/buyer/start.js +158 -48
  23. package/dist/cli/commands/buyer/start.js.map +1 -1
  24. package/dist/cli/commands/buyer/start.test.js +16 -1
  25. package/dist/cli/commands/buyer/start.test.js.map +1 -1
  26. package/dist/cli/commands/chat.d.ts +3 -0
  27. package/dist/cli/commands/chat.d.ts.map +1 -0
  28. package/dist/cli/commands/chat.js +189 -0
  29. package/dist/cli/commands/chat.js.map +1 -0
  30. package/dist/cli/commands/gateway/activity.d.ts +15 -0
  31. package/dist/cli/commands/gateway/activity.d.ts.map +1 -0
  32. package/dist/cli/commands/gateway/activity.js +233 -0
  33. package/dist/cli/commands/gateway/activity.js.map +1 -0
  34. package/dist/cli/commands/gateway/admin-token.d.ts +3 -0
  35. package/dist/cli/commands/gateway/admin-token.d.ts.map +1 -0
  36. package/dist/cli/commands/gateway/admin-token.js +90 -0
  37. package/dist/cli/commands/gateway/admin-token.js.map +1 -0
  38. package/dist/cli/commands/gateway/console-link.d.ts +20 -0
  39. package/dist/cli/commands/gateway/console-link.d.ts.map +1 -0
  40. package/dist/cli/commands/gateway/console-link.js +92 -0
  41. package/dist/cli/commands/gateway/console-link.js.map +1 -0
  42. package/dist/cli/commands/gateway/gateway-commands.test.d.ts +2 -0
  43. package/dist/cli/commands/gateway/gateway-commands.test.d.ts.map +1 -0
  44. package/dist/cli/commands/gateway/gateway-commands.test.js +230 -0
  45. package/dist/cli/commands/gateway/gateway-commands.test.js.map +1 -0
  46. package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts +2 -0
  47. package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts.map +1 -0
  48. package/dist/cli/commands/gateway/gateway-console-commands.test.js +373 -0
  49. package/dist/cli/commands/gateway/gateway-console-commands.test.js.map +1 -0
  50. package/dist/cli/commands/gateway/index.d.ts +8 -0
  51. package/dist/cli/commands/gateway/index.d.ts.map +1 -1
  52. package/dist/cli/commands/gateway/index.js +93 -14
  53. package/dist/cli/commands/gateway/index.js.map +1 -1
  54. package/dist/cli/commands/gateway/key.d.ts +4 -0
  55. package/dist/cli/commands/gateway/key.d.ts.map +1 -1
  56. package/dist/cli/commands/gateway/key.js +297 -182
  57. package/dist/cli/commands/gateway/key.js.map +1 -1
  58. package/dist/cli/commands/gateway/member.d.ts +3 -0
  59. package/dist/cli/commands/gateway/member.d.ts.map +1 -0
  60. package/dist/cli/commands/gateway/member.js +302 -0
  61. package/dist/cli/commands/gateway/member.js.map +1 -0
  62. package/dist/cli/commands/gateway/migrate.d.ts +18 -0
  63. package/dist/cli/commands/gateway/migrate.d.ts.map +1 -0
  64. package/dist/cli/commands/gateway/migrate.js +158 -0
  65. package/dist/cli/commands/gateway/migrate.js.map +1 -0
  66. package/dist/cli/commands/gateway/operator.d.ts +11 -0
  67. package/dist/cli/commands/gateway/operator.d.ts.map +1 -0
  68. package/dist/cli/commands/gateway/operator.js +199 -0
  69. package/dist/cli/commands/gateway/operator.js.map +1 -0
  70. package/dist/cli/commands/gateway/operator.test.d.ts +2 -0
  71. package/dist/cli/commands/gateway/operator.test.d.ts.map +1 -0
  72. package/dist/cli/commands/gateway/operator.test.js +151 -0
  73. package/dist/cli/commands/gateway/operator.test.js.map +1 -0
  74. package/dist/cli/commands/gateway/peer-list.d.ts +3 -0
  75. package/dist/cli/commands/gateway/peer-list.d.ts.map +1 -0
  76. package/dist/cli/commands/gateway/peer-list.js +107 -0
  77. package/dist/cli/commands/gateway/peer-list.js.map +1 -0
  78. package/dist/cli/commands/gateway/policy-options.d.ts +23 -0
  79. package/dist/cli/commands/gateway/policy-options.d.ts.map +1 -0
  80. package/dist/cli/commands/gateway/policy-options.js +156 -0
  81. package/dist/cli/commands/gateway/policy-options.js.map +1 -0
  82. package/dist/cli/commands/gateway/preset.d.ts +3 -0
  83. package/dist/cli/commands/gateway/preset.d.ts.map +1 -0
  84. package/dist/cli/commands/gateway/preset.js +181 -0
  85. package/dist/cli/commands/gateway/preset.js.map +1 -0
  86. package/dist/cli/commands/gateway/routing.d.ts +3 -0
  87. package/dist/cli/commands/gateway/routing.d.ts.map +1 -0
  88. package/dist/cli/commands/gateway/routing.js +110 -0
  89. package/dist/cli/commands/gateway/routing.js.map +1 -0
  90. package/dist/cli/commands/gateway/settings.d.ts +4 -0
  91. package/dist/cli/commands/gateway/settings.d.ts.map +1 -0
  92. package/dist/cli/commands/gateway/settings.js +314 -0
  93. package/dist/cli/commands/gateway/settings.js.map +1 -0
  94. package/dist/cli/commands/gateway/shared.d.ts +55 -6
  95. package/dist/cli/commands/gateway/shared.d.ts.map +1 -1
  96. package/dist/cli/commands/gateway/shared.js +206 -26
  97. package/dist/cli/commands/gateway/shared.js.map +1 -1
  98. package/dist/cli/commands/gateway/workspace.d.ts +3 -0
  99. package/dist/cli/commands/gateway/workspace.d.ts.map +1 -0
  100. package/dist/cli/commands/gateway/workspace.js +250 -0
  101. package/dist/cli/commands/gateway/workspace.js.map +1 -0
  102. package/dist/cli/commands/tunnel/start.d.ts.map +1 -1
  103. package/dist/cli/commands/tunnel/start.js +23 -5
  104. package/dist/cli/commands/tunnel/start.js.map +1 -1
  105. package/dist/cli/index.js +12 -44
  106. package/dist/cli/index.js.map +1 -1
  107. package/dist/cli/program.d.ts +4 -0
  108. package/dist/cli/program.d.ts.map +1 -0
  109. package/dist/cli/program.js +49 -0
  110. package/dist/cli/program.js.map +1 -0
  111. package/dist/cli/program.test.d.ts +2 -0
  112. package/dist/cli/program.test.d.ts.map +1 -0
  113. package/dist/cli/program.test.js +38 -0
  114. package/dist/cli/program.test.js.map +1 -0
  115. package/dist/cli/prompt-hidden.d.ts +3 -0
  116. package/dist/cli/prompt-hidden.d.ts.map +1 -0
  117. package/dist/cli/prompt-hidden.js +38 -0
  118. package/dist/cli/prompt-hidden.js.map +1 -0
  119. package/dist/cli/wallet-passphrase.d.ts +48 -0
  120. package/dist/cli/wallet-passphrase.d.ts.map +1 -0
  121. package/dist/cli/wallet-passphrase.js +119 -0
  122. package/dist/cli/wallet-passphrase.js.map +1 -0
  123. package/dist/cli/wallet-passphrase.test.d.ts +2 -0
  124. package/dist/cli/wallet-passphrase.test.d.ts.map +1 -0
  125. package/dist/cli/wallet-passphrase.test.js +79 -0
  126. package/dist/cli/wallet-passphrase.test.js.map +1 -0
  127. package/dist/config/effective.d.ts +12 -0
  128. package/dist/config/effective.d.ts.map +1 -1
  129. package/dist/config/effective.js +39 -6
  130. package/dist/config/effective.js.map +1 -1
  131. package/dist/config/effective.test.js +9 -1
  132. package/dist/config/effective.test.js.map +1 -1
  133. package/dist/config/loader.d.ts +6 -0
  134. package/dist/config/loader.d.ts.map +1 -1
  135. package/dist/config/loader.js +12 -0
  136. package/dist/config/loader.js.map +1 -1
  137. package/dist/config/loader.test.js +7 -1
  138. package/dist/config/loader.test.js.map +1 -1
  139. package/dist/config/types.d.ts +14 -0
  140. package/dist/config/types.d.ts.map +1 -1
  141. package/dist/config/validation.d.ts.map +1 -1
  142. package/dist/config/validation.js +19 -0
  143. package/dist/config/validation.js.map +1 -1
  144. package/dist/gateway/accounting.d.ts +33 -3
  145. package/dist/gateway/accounting.d.ts.map +1 -1
  146. package/dist/gateway/accounting.js +86 -7
  147. package/dist/gateway/accounting.js.map +1 -1
  148. package/dist/gateway/admission-benchmark.test.d.ts +2 -0
  149. package/dist/gateway/admission-benchmark.test.d.ts.map +1 -0
  150. package/dist/gateway/admission-benchmark.test.js +75 -0
  151. package/dist/gateway/admission-benchmark.test.js.map +1 -0
  152. package/dist/gateway/auth/auth.test.d.ts +4 -0
  153. package/dist/gateway/auth/auth.test.d.ts.map +1 -0
  154. package/dist/gateway/auth/auth.test.js +337 -0
  155. package/dist/gateway/auth/auth.test.js.map +1 -0
  156. package/dist/gateway/auth/credentials.test.d.ts +2 -0
  157. package/dist/gateway/auth/credentials.test.d.ts.map +1 -0
  158. package/dist/gateway/auth/credentials.test.js +132 -0
  159. package/dist/gateway/auth/credentials.test.js.map +1 -0
  160. package/dist/gateway/auth/db.d.ts +156 -0
  161. package/dist/gateway/auth/db.d.ts.map +1 -0
  162. package/dist/gateway/auth/db.js +390 -0
  163. package/dist/gateway/auth/db.js.map +1 -0
  164. package/dist/gateway/auth/hardening.test.d.ts +2 -0
  165. package/dist/gateway/auth/hardening.test.d.ts.map +1 -0
  166. package/dist/gateway/auth/hardening.test.js +155 -0
  167. package/dist/gateway/auth/hardening.test.js.map +1 -0
  168. package/dist/gateway/auth/http.d.ts +53 -0
  169. package/dist/gateway/auth/http.d.ts.map +1 -0
  170. package/dist/gateway/auth/http.js +165 -0
  171. package/dist/gateway/auth/http.js.map +1 -0
  172. package/dist/gateway/auth/index.d.ts +26 -0
  173. package/dist/gateway/auth/index.d.ts.map +1 -0
  174. package/dist/gateway/auth/index.js +1014 -0
  175. package/dist/gateway/auth/index.js.map +1 -0
  176. package/dist/gateway/auth/oidc.d.ts +57 -0
  177. package/dist/gateway/auth/oidc.d.ts.map +1 -0
  178. package/dist/gateway/auth/oidc.js +159 -0
  179. package/dist/gateway/auth/oidc.js.map +1 -0
  180. package/dist/gateway/auth/oidc.test.d.ts +2 -0
  181. package/dist/gateway/auth/oidc.test.d.ts.map +1 -0
  182. package/dist/gateway/auth/oidc.test.js +223 -0
  183. package/dist/gateway/auth/oidc.test.js.map +1 -0
  184. package/dist/gateway/auth/reauth.test.d.ts +2 -0
  185. package/dist/gateway/auth/reauth.test.d.ts.map +1 -0
  186. package/dist/gateway/auth/reauth.test.js +108 -0
  187. package/dist/gateway/auth/reauth.test.js.map +1 -0
  188. package/dist/gateway/auth/store-integration.test.d.ts +2 -0
  189. package/dist/gateway/auth/store-integration.test.d.ts.map +1 -0
  190. package/dist/gateway/auth/store-integration.test.js +100 -0
  191. package/dist/gateway/auth/store-integration.test.js.map +1 -0
  192. package/dist/gateway/auth/test-helpers.d.ts +167 -0
  193. package/dist/gateway/auth/test-helpers.d.ts.map +1 -0
  194. package/dist/gateway/auth/test-helpers.js +368 -0
  195. package/dist/gateway/auth/test-helpers.js.map +1 -0
  196. package/dist/gateway/auth/types.d.ts +145 -0
  197. package/dist/gateway/auth/types.d.ts.map +1 -0
  198. package/dist/gateway/auth/types.js +2 -0
  199. package/dist/gateway/auth/types.js.map +1 -0
  200. package/dist/gateway/auth/wallet.d.ts +15 -0
  201. package/dist/gateway/auth/wallet.d.ts.map +1 -0
  202. package/dist/gateway/auth/wallet.js +43 -0
  203. package/dist/gateway/auth/wallet.js.map +1 -0
  204. package/dist/gateway/bundle.d.ts +127 -0
  205. package/dist/gateway/bundle.d.ts.map +1 -0
  206. package/dist/gateway/bundle.js +604 -0
  207. package/dist/gateway/bundle.js.map +1 -0
  208. package/dist/gateway/bundle.test.d.ts +2 -0
  209. package/dist/gateway/bundle.test.d.ts.map +1 -0
  210. package/dist/gateway/bundle.test.js +277 -0
  211. package/dist/gateway/bundle.test.js.map +1 -0
  212. package/dist/gateway/buyer-control.d.ts +33 -0
  213. package/dist/gateway/buyer-control.d.ts.map +1 -0
  214. package/dist/gateway/buyer-control.js +93 -0
  215. package/dist/gateway/buyer-control.js.map +1 -0
  216. package/dist/gateway/buyer-policy-probe.d.ts +41 -0
  217. package/dist/gateway/buyer-policy-probe.d.ts.map +1 -0
  218. package/dist/gateway/buyer-policy-probe.js +99 -0
  219. package/dist/gateway/buyer-policy-probe.js.map +1 -0
  220. package/dist/gateway/buyer-policy-probe.test.d.ts +2 -0
  221. package/dist/gateway/buyer-policy-probe.test.d.ts.map +1 -0
  222. package/dist/gateway/buyer-policy-probe.test.js +128 -0
  223. package/dist/gateway/buyer-policy-probe.test.js.map +1 -0
  224. package/dist/gateway/buyer-process.d.ts +30 -0
  225. package/dist/gateway/buyer-process.d.ts.map +1 -0
  226. package/dist/gateway/buyer-process.js +101 -0
  227. package/dist/gateway/buyer-process.js.map +1 -0
  228. package/dist/gateway/buyer-process.test.d.ts +2 -0
  229. package/dist/gateway/buyer-process.test.d.ts.map +1 -0
  230. package/dist/gateway/buyer-process.test.js +112 -0
  231. package/dist/gateway/buyer-process.test.js.map +1 -0
  232. package/dist/gateway/chat/routes.d.ts +45 -0
  233. package/dist/gateway/chat/routes.d.ts.map +1 -0
  234. package/dist/gateway/chat/routes.js +439 -0
  235. package/dist/gateway/chat/routes.js.map +1 -0
  236. package/dist/gateway/chat/routes.test.d.ts +2 -0
  237. package/dist/gateway/chat/routes.test.d.ts.map +1 -0
  238. package/dist/gateway/chat/routes.test.js +304 -0
  239. package/dist/gateway/chat/routes.test.js.map +1 -0
  240. package/dist/gateway/chat/tools.d.ts +35 -0
  241. package/dist/gateway/chat/tools.d.ts.map +1 -0
  242. package/dist/gateway/chat/tools.js +347 -0
  243. package/dist/gateway/chat/tools.js.map +1 -0
  244. package/dist/gateway/chat/tools.test.d.ts +2 -0
  245. package/dist/gateway/chat/tools.test.d.ts.map +1 -0
  246. package/dist/gateway/chat/tools.test.js +136 -0
  247. package/dist/gateway/chat/tools.test.js.map +1 -0
  248. package/dist/gateway/console-api/access.d.ts +52 -0
  249. package/dist/gateway/console-api/access.d.ts.map +1 -0
  250. package/dist/gateway/console-api/access.js +171 -0
  251. package/dist/gateway/console-api/access.js.map +1 -0
  252. package/dist/gateway/console-api/deps.d.ts +52 -0
  253. package/dist/gateway/console-api/deps.d.ts.map +1 -0
  254. package/dist/gateway/console-api/deps.js +2 -0
  255. package/dist/gateway/console-api/deps.js.map +1 -0
  256. package/dist/gateway/console-api/handlers/admin-tokens.d.ts +8 -0
  257. package/dist/gateway/console-api/handlers/admin-tokens.d.ts.map +1 -0
  258. package/dist/gateway/console-api/handlers/admin-tokens.js +48 -0
  259. package/dist/gateway/console-api/handlers/admin-tokens.js.map +1 -0
  260. package/dist/gateway/console-api/handlers/audit.d.ts +8 -0
  261. package/dist/gateway/console-api/handlers/audit.d.ts.map +1 -0
  262. package/dist/gateway/console-api/handlers/audit.js +19 -0
  263. package/dist/gateway/console-api/handlers/audit.js.map +1 -0
  264. package/dist/gateway/console-api/handlers/audit.test.d.ts +2 -0
  265. package/dist/gateway/console-api/handlers/audit.test.d.ts.map +1 -0
  266. package/dist/gateway/console-api/handlers/audit.test.js +241 -0
  267. package/dist/gateway/console-api/handlers/audit.test.js.map +1 -0
  268. package/dist/gateway/console-api/handlers/data-settings.test.d.ts +2 -0
  269. package/dist/gateway/console-api/handlers/data-settings.test.d.ts.map +1 -0
  270. package/dist/gateway/console-api/handlers/data-settings.test.js +264 -0
  271. package/dist/gateway/console-api/handlers/data-settings.test.js.map +1 -0
  272. package/dist/gateway/console-api/handlers/index.d.ts +4 -0
  273. package/dist/gateway/console-api/handlers/index.d.ts.map +1 -0
  274. package/dist/gateway/console-api/handlers/index.js +24 -0
  275. package/dist/gateway/console-api/handlers/index.js.map +1 -0
  276. package/dist/gateway/console-api/handlers/keys.d.ts +13 -0
  277. package/dist/gateway/console-api/handlers/keys.d.ts.map +1 -0
  278. package/dist/gateway/console-api/handlers/keys.js +128 -0
  279. package/dist/gateway/console-api/handlers/keys.js.map +1 -0
  280. package/dist/gateway/console-api/handlers/keys.test.d.ts +2 -0
  281. package/dist/gateway/console-api/handlers/keys.test.d.ts.map +1 -0
  282. package/dist/gateway/console-api/handlers/keys.test.js +166 -0
  283. package/dist/gateway/console-api/handlers/keys.test.js.map +1 -0
  284. package/dist/gateway/console-api/handlers/network-buyer.d.ts +22 -0
  285. package/dist/gateway/console-api/handlers/network-buyer.d.ts.map +1 -0
  286. package/dist/gateway/console-api/handlers/network-buyer.js +39 -0
  287. package/dist/gateway/console-api/handlers/network-buyer.js.map +1 -0
  288. package/dist/gateway/console-api/handlers/network-mapping.d.ts +33 -0
  289. package/dist/gateway/console-api/handlers/network-mapping.d.ts.map +1 -0
  290. package/dist/gateway/console-api/handlers/network-mapping.js +219 -0
  291. package/dist/gateway/console-api/handlers/network-mapping.js.map +1 -0
  292. package/dist/gateway/console-api/handlers/network-test-helpers.d.ts +35 -0
  293. package/dist/gateway/console-api/handlers/network-test-helpers.d.ts.map +1 -0
  294. package/dist/gateway/console-api/handlers/network-test-helpers.js +121 -0
  295. package/dist/gateway/console-api/handlers/network-test-helpers.js.map +1 -0
  296. package/dist/gateway/console-api/handlers/network.d.ts +15 -0
  297. package/dist/gateway/console-api/handlers/network.d.ts.map +1 -0
  298. package/dist/gateway/console-api/handlers/network.js +57 -0
  299. package/dist/gateway/console-api/handlers/network.js.map +1 -0
  300. package/dist/gateway/console-api/handlers/network.test.d.ts +2 -0
  301. package/dist/gateway/console-api/handlers/network.test.d.ts.map +1 -0
  302. package/dist/gateway/console-api/handlers/network.test.js +383 -0
  303. package/dist/gateway/console-api/handlers/network.test.js.map +1 -0
  304. package/dist/gateway/console-api/handlers/org.d.ts +10 -0
  305. package/dist/gateway/console-api/handlers/org.d.ts.map +1 -0
  306. package/dist/gateway/console-api/handlers/org.js +150 -0
  307. package/dist/gateway/console-api/handlers/org.js.map +1 -0
  308. package/dist/gateway/console-api/handlers/peer-lists.d.ts +5 -0
  309. package/dist/gateway/console-api/handlers/peer-lists.d.ts.map +1 -0
  310. package/dist/gateway/console-api/handlers/peer-lists.js +43 -0
  311. package/dist/gateway/console-api/handlers/peer-lists.js.map +1 -0
  312. package/dist/gateway/console-api/handlers/presets.d.ts +9 -0
  313. package/dist/gateway/console-api/handlers/presets.d.ts.map +1 -0
  314. package/dist/gateway/console-api/handlers/presets.js +79 -0
  315. package/dist/gateway/console-api/handlers/presets.js.map +1 -0
  316. package/dist/gateway/console-api/handlers/routing.d.ts +5 -0
  317. package/dist/gateway/console-api/handlers/routing.d.ts.map +1 -0
  318. package/dist/gateway/console-api/handlers/routing.js +20 -0
  319. package/dist/gateway/console-api/handlers/routing.js.map +1 -0
  320. package/dist/gateway/console-api/handlers/settings.d.ts +10 -0
  321. package/dist/gateway/console-api/handlers/settings.d.ts.map +1 -0
  322. package/dist/gateway/console-api/handlers/settings.js +38 -0
  323. package/dist/gateway/console-api/handlers/settings.js.map +1 -0
  324. package/dist/gateway/console-api/handlers/status.d.ts +9 -0
  325. package/dist/gateway/console-api/handlers/status.d.ts.map +1 -0
  326. package/dist/gateway/console-api/handlers/status.js +47 -0
  327. package/dist/gateway/console-api/handlers/status.js.map +1 -0
  328. package/dist/gateway/console-api/handlers/status.test.d.ts +2 -0
  329. package/dist/gateway/console-api/handlers/status.test.d.ts.map +1 -0
  330. package/dist/gateway/console-api/handlers/status.test.js +82 -0
  331. package/dist/gateway/console-api/handlers/status.test.js.map +1 -0
  332. package/dist/gateway/console-api/handlers/usage.d.ts +10 -0
  333. package/dist/gateway/console-api/handlers/usage.d.ts.map +1 -0
  334. package/dist/gateway/console-api/handlers/usage.js +68 -0
  335. package/dist/gateway/console-api/handlers/usage.js.map +1 -0
  336. package/dist/gateway/console-api/handlers/wallet-card-link.d.ts +29 -0
  337. package/dist/gateway/console-api/handlers/wallet-card-link.d.ts.map +1 -0
  338. package/dist/gateway/console-api/handlers/wallet-card-link.js +46 -0
  339. package/dist/gateway/console-api/handlers/wallet-card-link.js.map +1 -0
  340. package/dist/gateway/console-api/handlers/wallet-chain.d.ts +26 -0
  341. package/dist/gateway/console-api/handlers/wallet-chain.d.ts.map +1 -0
  342. package/dist/gateway/console-api/handlers/wallet-chain.js +80 -0
  343. package/dist/gateway/console-api/handlers/wallet-chain.js.map +1 -0
  344. package/dist/gateway/console-api/handlers/wallet-mapping.d.ts +45 -0
  345. package/dist/gateway/console-api/handlers/wallet-mapping.d.ts.map +1 -0
  346. package/dist/gateway/console-api/handlers/wallet-mapping.js +202 -0
  347. package/dist/gateway/console-api/handlers/wallet-mapping.js.map +1 -0
  348. package/dist/gateway/console-api/handlers/wallet-operator.d.ts +41 -0
  349. package/dist/gateway/console-api/handlers/wallet-operator.d.ts.map +1 -0
  350. package/dist/gateway/console-api/handlers/wallet-operator.js +198 -0
  351. package/dist/gateway/console-api/handlers/wallet-operator.js.map +1 -0
  352. package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts +2 -0
  353. package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts.map +1 -0
  354. package/dist/gateway/console-api/handlers/wallet-operator.test.js +195 -0
  355. package/dist/gateway/console-api/handlers/wallet-operator.test.js.map +1 -0
  356. package/dist/gateway/console-api/handlers/wallet.d.ts +61 -0
  357. package/dist/gateway/console-api/handlers/wallet.d.ts.map +1 -0
  358. package/dist/gateway/console-api/handlers/wallet.js +221 -0
  359. package/dist/gateway/console-api/handlers/wallet.js.map +1 -0
  360. package/dist/gateway/console-api/handlers/wallet.test.d.ts +2 -0
  361. package/dist/gateway/console-api/handlers/wallet.test.d.ts.map +1 -0
  362. package/dist/gateway/console-api/handlers/wallet.test.js +581 -0
  363. package/dist/gateway/console-api/handlers/wallet.test.js.map +1 -0
  364. package/dist/gateway/console-api/handlers/workspaces.d.ts +12 -0
  365. package/dist/gateway/console-api/handlers/workspaces.d.ts.map +1 -0
  366. package/dist/gateway/console-api/handlers/workspaces.js +96 -0
  367. package/dist/gateway/console-api/handlers/workspaces.js.map +1 -0
  368. package/dist/gateway/console-api/operator-types.d.ts +68 -0
  369. package/dist/gateway/console-api/operator-types.d.ts.map +1 -0
  370. package/dist/gateway/console-api/operator-types.js +21 -0
  371. package/dist/gateway/console-api/operator-types.js.map +1 -0
  372. package/dist/gateway/console-api/router.d.ts +97 -0
  373. package/dist/gateway/console-api/router.d.ts.map +1 -0
  374. package/dist/gateway/console-api/router.js +69 -0
  375. package/dist/gateway/console-api/router.js.map +1 -0
  376. package/dist/gateway/console-api/routes.test.d.ts +2 -0
  377. package/dist/gateway/console-api/routes.test.d.ts.map +1 -0
  378. package/dist/gateway/console-api/routes.test.js +331 -0
  379. package/dist/gateway/console-api/routes.test.js.map +1 -0
  380. package/dist/gateway/console-api/serialize.d.ts +33 -0
  381. package/dist/gateway/console-api/serialize.d.ts.map +1 -0
  382. package/dist/gateway/console-api/serialize.js +179 -0
  383. package/dist/gateway/console-api/serialize.js.map +1 -0
  384. package/dist/gateway/console-api/server.d.ts +38 -0
  385. package/dist/gateway/console-api/server.d.ts.map +1 -0
  386. package/dist/gateway/console-api/server.js +308 -0
  387. package/dist/gateway/console-api/server.js.map +1 -0
  388. package/dist/gateway/console-api/server.test.d.ts +2 -0
  389. package/dist/gateway/console-api/server.test.d.ts.map +1 -0
  390. package/dist/gateway/console-api/server.test.js +149 -0
  391. package/dist/gateway/console-api/server.test.js.map +1 -0
  392. package/dist/gateway/console-api/test-support.d.ts +59 -0
  393. package/dist/gateway/console-api/test-support.d.ts.map +1 -0
  394. package/dist/gateway/console-api/test-support.js +120 -0
  395. package/dist/gateway/console-api/test-support.js.map +1 -0
  396. package/dist/gateway/console-api/types.d.ts +779 -0
  397. package/dist/gateway/console-api/types.d.ts.map +1 -0
  398. package/dist/gateway/console-api/types.js +6 -0
  399. package/dist/gateway/console-api/types.js.map +1 -0
  400. package/dist/gateway/console-location.d.ts +21 -0
  401. package/dist/gateway/console-location.d.ts.map +1 -0
  402. package/dist/gateway/console-location.js +41 -0
  403. package/dist/gateway/console-location.js.map +1 -0
  404. package/dist/gateway/console-recovery.d.ts +34 -0
  405. package/dist/gateway/console-recovery.d.ts.map +1 -0
  406. package/dist/gateway/console-recovery.js +94 -0
  407. package/dist/gateway/console-recovery.js.map +1 -0
  408. package/dist/gateway/console-recovery.test.d.ts +2 -0
  409. package/dist/gateway/console-recovery.test.d.ts.map +1 -0
  410. package/dist/gateway/console-recovery.test.js +106 -0
  411. package/dist/gateway/console-recovery.test.js.map +1 -0
  412. package/dist/gateway/console.d.ts +18 -0
  413. package/dist/gateway/console.d.ts.map +1 -0
  414. package/dist/gateway/console.js +101 -0
  415. package/dist/gateway/console.js.map +1 -0
  416. package/dist/gateway/console.test.d.ts +2 -0
  417. package/dist/gateway/console.test.d.ts.map +1 -0
  418. package/dist/gateway/console.test.js +165 -0
  419. package/dist/gateway/console.test.js.map +1 -0
  420. package/dist/gateway/errors.d.ts +3 -0
  421. package/dist/gateway/errors.d.ts.map +1 -0
  422. package/dist/gateway/errors.js +5 -0
  423. package/dist/gateway/errors.js.map +1 -0
  424. package/dist/gateway/exposure.d.ts +33 -0
  425. package/dist/gateway/exposure.d.ts.map +1 -0
  426. package/dist/gateway/exposure.js +146 -0
  427. package/dist/gateway/exposure.js.map +1 -0
  428. package/dist/gateway/exposure.test.d.ts +2 -0
  429. package/dist/gateway/exposure.test.d.ts.map +1 -0
  430. package/dist/gateway/exposure.test.js +93 -0
  431. package/dist/gateway/exposure.test.js.map +1 -0
  432. package/dist/gateway/gateway-policy.test.d.ts +2 -0
  433. package/dist/gateway/gateway-policy.test.d.ts.map +1 -0
  434. package/dist/gateway/gateway-policy.test.js +404 -0
  435. package/dist/gateway/gateway-policy.test.js.map +1 -0
  436. package/dist/gateway/gateway.test.js +47 -25
  437. package/dist/gateway/gateway.test.js.map +1 -1
  438. package/dist/gateway/keys.d.ts +2 -0
  439. package/dist/gateway/keys.d.ts.map +1 -1
  440. package/dist/gateway/keys.js +2 -0
  441. package/dist/gateway/keys.js.map +1 -1
  442. package/dist/gateway/limits.d.ts +32 -8
  443. package/dist/gateway/limits.d.ts.map +1 -1
  444. package/dist/gateway/limits.js +27 -11
  445. package/dist/gateway/limits.js.map +1 -1
  446. package/dist/gateway/observability.d.ts +51 -0
  447. package/dist/gateway/observability.d.ts.map +1 -0
  448. package/dist/gateway/observability.js +136 -0
  449. package/dist/gateway/observability.js.map +1 -0
  450. package/dist/gateway/policy-resolver.d.ts +73 -0
  451. package/dist/gateway/policy-resolver.d.ts.map +1 -0
  452. package/dist/gateway/policy-resolver.js +142 -0
  453. package/dist/gateway/policy-resolver.js.map +1 -0
  454. package/dist/gateway/policy-resolver.test.d.ts +2 -0
  455. package/dist/gateway/policy-resolver.test.d.ts.map +1 -0
  456. package/dist/gateway/policy-resolver.test.js +273 -0
  457. package/dist/gateway/policy-resolver.test.js.map +1 -0
  458. package/dist/gateway/request-errors.test.d.ts +2 -0
  459. package/dist/gateway/request-errors.test.d.ts.map +1 -0
  460. package/dist/gateway/request-errors.test.js +108 -0
  461. package/dist/gateway/request-errors.test.js.map +1 -0
  462. package/dist/gateway/request-shaping.d.ts +25 -0
  463. package/dist/gateway/request-shaping.d.ts.map +1 -0
  464. package/dist/gateway/request-shaping.js +66 -0
  465. package/dist/gateway/request-shaping.js.map +1 -0
  466. package/dist/gateway/response-usage.d.ts +35 -0
  467. package/dist/gateway/response-usage.d.ts.map +1 -0
  468. package/dist/gateway/response-usage.js +167 -0
  469. package/dist/gateway/response-usage.js.map +1 -0
  470. package/dist/gateway/response-usage.test.d.ts +2 -0
  471. package/dist/gateway/response-usage.test.d.ts.map +1 -0
  472. package/dist/gateway/response-usage.test.js +78 -0
  473. package/dist/gateway/response-usage.test.js.map +1 -0
  474. package/dist/gateway/runtime.d.ts +25 -0
  475. package/dist/gateway/runtime.d.ts.map +1 -1
  476. package/dist/gateway/runtime.js +39 -19
  477. package/dist/gateway/runtime.js.map +1 -1
  478. package/dist/gateway/server.d.ts +68 -2
  479. package/dist/gateway/server.d.ts.map +1 -1
  480. package/dist/gateway/server.js +532 -116
  481. package/dist/gateway/server.js.map +1 -1
  482. package/dist/gateway/services/audit.d.ts +16 -0
  483. package/dist/gateway/services/audit.d.ts.map +1 -0
  484. package/dist/gateway/services/audit.js +18 -0
  485. package/dist/gateway/services/audit.js.map +1 -0
  486. package/dist/gateway/services/context.d.ts +66 -0
  487. package/dist/gateway/services/context.d.ts.map +1 -0
  488. package/dist/gateway/services/context.js +52 -0
  489. package/dist/gateway/services/context.js.map +1 -0
  490. package/dist/gateway/services/keys.d.ts +78 -0
  491. package/dist/gateway/services/keys.d.ts.map +1 -0
  492. package/dist/gateway/services/keys.js +232 -0
  493. package/dist/gateway/services/keys.js.map +1 -0
  494. package/dist/gateway/services/members.d.ts +72 -0
  495. package/dist/gateway/services/members.d.ts.map +1 -0
  496. package/dist/gateway/services/members.js +161 -0
  497. package/dist/gateway/services/members.js.map +1 -0
  498. package/dist/gateway/services/network.d.ts +36 -0
  499. package/dist/gateway/services/network.d.ts.map +1 -0
  500. package/dist/gateway/services/network.js +147 -0
  501. package/dist/gateway/services/network.js.map +1 -0
  502. package/dist/gateway/services/operator.d.ts +98 -0
  503. package/dist/gateway/services/operator.d.ts.map +1 -0
  504. package/dist/gateway/services/operator.js +170 -0
  505. package/dist/gateway/services/operator.js.map +1 -0
  506. package/dist/gateway/services/operator.test.d.ts +2 -0
  507. package/dist/gateway/services/operator.test.d.ts.map +1 -0
  508. package/dist/gateway/services/operator.test.js +184 -0
  509. package/dist/gateway/services/operator.test.js.map +1 -0
  510. package/dist/gateway/services/peer-lists.d.ts +20 -0
  511. package/dist/gateway/services/peer-lists.d.ts.map +1 -0
  512. package/dist/gateway/services/peer-lists.js +134 -0
  513. package/dist/gateway/services/peer-lists.js.map +1 -0
  514. package/dist/gateway/services/presets.d.ts +34 -0
  515. package/dist/gateway/services/presets.d.ts.map +1 -0
  516. package/dist/gateway/services/presets.js +134 -0
  517. package/dist/gateway/services/presets.js.map +1 -0
  518. package/dist/gateway/services/routing.d.ts +13 -0
  519. package/dist/gateway/services/routing.d.ts.map +1 -0
  520. package/dist/gateway/services/routing.js +18 -0
  521. package/dist/gateway/services/routing.js.map +1 -0
  522. package/dist/gateway/services/services.test.d.ts +2 -0
  523. package/dist/gateway/services/services.test.d.ts.map +1 -0
  524. package/dist/gateway/services/services.test.js +476 -0
  525. package/dist/gateway/services/services.test.js.map +1 -0
  526. package/dist/gateway/services/settings.d.ts +68 -0
  527. package/dist/gateway/services/settings.d.ts.map +1 -0
  528. package/dist/gateway/services/settings.js +580 -0
  529. package/dist/gateway/services/settings.js.map +1 -0
  530. package/dist/gateway/services/tokens.d.ts +29 -0
  531. package/dist/gateway/services/tokens.d.ts.map +1 -0
  532. package/dist/gateway/services/tokens.js +48 -0
  533. package/dist/gateway/services/tokens.js.map +1 -0
  534. package/dist/gateway/services/usage.d.ts +55 -0
  535. package/dist/gateway/services/usage.d.ts.map +1 -0
  536. package/dist/gateway/services/usage.js +225 -0
  537. package/dist/gateway/services/usage.js.map +1 -0
  538. package/dist/gateway/services/wallet-address-env.test.d.ts +2 -0
  539. package/dist/gateway/services/wallet-address-env.test.d.ts.map +1 -0
  540. package/dist/gateway/services/wallet-address-env.test.js +119 -0
  541. package/dist/gateway/services/wallet-address-env.test.js.map +1 -0
  542. package/dist/gateway/services/wallet-address.d.ts +40 -0
  543. package/dist/gateway/services/wallet-address.d.ts.map +1 -0
  544. package/dist/gateway/services/wallet-address.js +116 -0
  545. package/dist/gateway/services/wallet-address.js.map +1 -0
  546. package/dist/gateway/services/wallet-address.test.d.ts +2 -0
  547. package/dist/gateway/services/wallet-address.test.d.ts.map +1 -0
  548. package/dist/gateway/services/wallet-address.test.js +84 -0
  549. package/dist/gateway/services/wallet-address.test.js.map +1 -0
  550. package/dist/gateway/services/workspaces.d.ts +75 -0
  551. package/dist/gateway/services/workspaces.d.ts.map +1 -0
  552. package/dist/gateway/services/workspaces.js +228 -0
  553. package/dist/gateway/services/workspaces.js.map +1 -0
  554. package/dist/gateway/spend-durability.test.d.ts +2 -0
  555. package/dist/gateway/spend-durability.test.d.ts.map +1 -0
  556. package/dist/gateway/spend-durability.test.js +330 -0
  557. package/dist/gateway/spend-durability.test.js.map +1 -0
  558. package/dist/gateway/spend-feed.d.ts +11 -1
  559. package/dist/gateway/spend-feed.d.ts.map +1 -1
  560. package/dist/gateway/spend-feed.js +17 -4
  561. package/dist/gateway/spend-feed.js.map +1 -1
  562. package/dist/gateway/spend-feed.test.d.ts +2 -0
  563. package/dist/gateway/spend-feed.test.d.ts.map +1 -0
  564. package/dist/gateway/spend-feed.test.js +34 -0
  565. package/dist/gateway/spend-feed.test.js.map +1 -0
  566. package/dist/gateway/store-data.test.d.ts +2 -0
  567. package/dist/gateway/store-data.test.d.ts.map +1 -0
  568. package/dist/gateway/store-data.test.js +346 -0
  569. package/dist/gateway/store-data.test.js.map +1 -0
  570. package/dist/gateway/store-migrations.d.ts +6 -0
  571. package/dist/gateway/store-migrations.d.ts.map +1 -0
  572. package/dist/gateway/store-migrations.js +301 -0
  573. package/dist/gateway/store-migrations.js.map +1 -0
  574. package/dist/gateway/store.d.ts +595 -10
  575. package/dist/gateway/store.d.ts.map +1 -1
  576. package/dist/gateway/store.js +1242 -120
  577. package/dist/gateway/store.js.map +1 -1
  578. package/dist/gateway/store.test.d.ts +2 -0
  579. package/dist/gateway/store.test.d.ts.map +1 -0
  580. package/dist/gateway/store.test.js +185 -0
  581. package/dist/gateway/store.test.js.map +1 -0
  582. package/dist/proxy/buyer-chain-reader.d.ts +68 -0
  583. package/dist/proxy/buyer-chain-reader.d.ts.map +1 -0
  584. package/dist/proxy/buyer-chain-reader.js +152 -0
  585. package/dist/proxy/buyer-chain-reader.js.map +1 -0
  586. package/dist/proxy/buyer-chain-reader.test.d.ts +2 -0
  587. package/dist/proxy/buyer-chain-reader.test.d.ts.map +1 -0
  588. package/dist/proxy/buyer-chain-reader.test.js +102 -0
  589. package/dist/proxy/buyer-chain-reader.test.js.map +1 -0
  590. package/dist/proxy/buyer-proxy.d.ts +169 -3
  591. package/dist/proxy/buyer-proxy.d.ts.map +1 -1
  592. package/dist/proxy/buyer-proxy.js +873 -117
  593. package/dist/proxy/buyer-proxy.js.map +1 -1
  594. package/dist/proxy/buyer-proxy.test.js +31 -0
  595. package/dist/proxy/buyer-proxy.test.js.map +1 -1
  596. package/dist/proxy/chain-read-cache.d.ts +47 -0
  597. package/dist/proxy/chain-read-cache.d.ts.map +1 -0
  598. package/dist/proxy/chain-read-cache.js +110 -0
  599. package/dist/proxy/chain-read-cache.js.map +1 -0
  600. package/dist/proxy/chain-read-cache.test.d.ts +2 -0
  601. package/dist/proxy/chain-read-cache.test.d.ts.map +1 -0
  602. package/dist/proxy/chain-read-cache.test.js +75 -0
  603. package/dist/proxy/chain-read-cache.test.js.map +1 -0
  604. package/dist/proxy/chain-rpc-test-support.d.ts +31 -0
  605. package/dist/proxy/chain-rpc-test-support.d.ts.map +1 -0
  606. package/dist/proxy/chain-rpc-test-support.js +136 -0
  607. package/dist/proxy/chain-rpc-test-support.js.map +1 -0
  608. package/dist/proxy/chain-rpc.d.ts +121 -0
  609. package/dist/proxy/chain-rpc.d.ts.map +1 -0
  610. package/dist/proxy/chain-rpc.js +420 -0
  611. package/dist/proxy/chain-rpc.js.map +1 -0
  612. package/dist/proxy/chain-rpc.test.d.ts +2 -0
  613. package/dist/proxy/chain-rpc.test.d.ts.map +1 -0
  614. package/dist/proxy/chain-rpc.test.js +180 -0
  615. package/dist/proxy/chain-rpc.test.js.map +1 -0
  616. package/dist/proxy/deposit-watch-hub.d.ts +47 -0
  617. package/dist/proxy/deposit-watch-hub.d.ts.map +1 -0
  618. package/dist/proxy/deposit-watch-hub.js +111 -0
  619. package/dist/proxy/deposit-watch-hub.js.map +1 -0
  620. package/dist/proxy/deposit-watch-hub.test.d.ts +2 -0
  621. package/dist/proxy/deposit-watch-hub.test.d.ts.map +1 -0
  622. package/dist/proxy/deposit-watch-hub.test.js +133 -0
  623. package/dist/proxy/deposit-watch-hub.test.js.map +1 -0
  624. package/dist/proxy/deposit-watcher.d.ts +44 -4
  625. package/dist/proxy/deposit-watcher.d.ts.map +1 -1
  626. package/dist/proxy/deposit-watcher.js +76 -11
  627. package/dist/proxy/deposit-watcher.js.map +1 -1
  628. package/dist/proxy/deposit-watcher.test.js +54 -1
  629. package/dist/proxy/deposit-watcher.test.js.map +1 -1
  630. package/dist/proxy/gateway-policy.test.d.ts +2 -0
  631. package/dist/proxy/gateway-policy.test.d.ts.map +1 -0
  632. package/dist/proxy/gateway-policy.test.js +576 -0
  633. package/dist/proxy/gateway-policy.test.js.map +1 -0
  634. package/dist/proxy/network-models.d.ts +2 -0
  635. package/dist/proxy/network-models.d.ts.map +1 -1
  636. package/dist/proxy/network-models.js +3 -1
  637. package/dist/proxy/network-models.js.map +1 -1
  638. package/dist/proxy/route-policy.d.ts +97 -0
  639. package/dist/proxy/route-policy.d.ts.map +1 -0
  640. package/dist/proxy/route-policy.js +230 -0
  641. package/dist/proxy/route-policy.js.map +1 -0
  642. package/dist/proxy/route-policy.test.d.ts +2 -0
  643. package/dist/proxy/route-policy.test.d.ts.map +1 -0
  644. package/dist/proxy/route-policy.test.js +120 -0
  645. package/dist/proxy/route-policy.test.js.map +1 -0
  646. package/dist/proxy/spend-attribution.d.ts +41 -10
  647. package/dist/proxy/spend-attribution.d.ts.map +1 -1
  648. package/dist/proxy/spend-attribution.js +133 -37
  649. package/dist/proxy/spend-attribution.js.map +1 -1
  650. package/dist/proxy/tee-control.d.ts +3 -1
  651. package/dist/proxy/tee-control.d.ts.map +1 -1
  652. package/dist/proxy/tee-control.js +5 -3
  653. package/dist/proxy/tee-control.js.map +1 -1
  654. package/dist/proxy/telemetry.d.ts +2 -1
  655. package/dist/proxy/telemetry.d.ts.map +1 -1
  656. package/dist/proxy/telemetry.js +10 -5
  657. package/dist/proxy/telemetry.js.map +1 -1
  658. package/dist/routing-policy/policy.d.ts +149 -0
  659. package/dist/routing-policy/policy.d.ts.map +1 -0
  660. package/dist/routing-policy/policy.js +450 -0
  661. package/dist/routing-policy/policy.js.map +1 -0
  662. package/dist/routing-policy/policy.test.d.ts +2 -0
  663. package/dist/routing-policy/policy.test.d.ts.map +1 -0
  664. package/dist/routing-policy/policy.test.js +134 -0
  665. package/dist/routing-policy/policy.test.js.map +1 -0
  666. package/package.json +15 -7
@@ -0,0 +1,420 @@
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 { FetchRequest, Interface, JsonRpcProvider, Network } from 'ethers';
21
+ /** Every endpoint is backing off (or just failed); serve cached data and retry after `retryAt`. */
22
+ export class RpcUnavailableError extends Error {
23
+ retryAt;
24
+ code = 'RPC_UNAVAILABLE';
25
+ constructor(message, retryAt) {
26
+ super(message);
27
+ this.retryAt = retryAt;
28
+ this.name = 'RpcUnavailableError';
29
+ }
30
+ }
31
+ export const MULTICALL3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
32
+ const REQUEST_TIMEOUT_MS = 10_000;
33
+ const RATE_LIMIT_CODE = -32005;
34
+ const CODE_CACHE_MS = 60 * 60_000;
35
+ const EMPTY_CODE_CACHE_MS = 10 * 60_000;
36
+ const COALESCED_METHODS = new Set(['eth_call', 'eth_getCode', 'eth_getBalance', 'eth_blockNumber', 'eth_getTransactionReceipt', 'eth_chainId', 'eth_getTransactionCount']);
37
+ const MULTICALL = new Interface([
38
+ 'function aggregate3(tuple(address target, bool allowFailure, bytes callData)[] calls) payable returns (tuple(bool success, bytes returnData)[] returnData)',
39
+ ]);
40
+ /**
41
+ * The reads folded into Multicall3 batches (as declared in the USDC,
42
+ * AntseedDeposits and DepositRelay ABIs the buyer and gateway use, and the
43
+ * registry, emissions and usage-rewards reads behind the console's buyer
44
+ * rewards). Inside
45
+ * `aggregate3` a call runs with `msg.sender` = Multicall3, so only views whose
46
+ * answer does not depend on the caller belong here; any other `eth_call` is
47
+ * sent on its own.
48
+ */
49
+ const BATCHABLE_SELECTORS = (() => {
50
+ const reads = new Interface([
51
+ 'function balanceOf(address owner) view returns (uint256)',
52
+ 'function name() view returns (string)',
53
+ 'function version() view returns (string)',
54
+ 'function DOMAIN_SEPARATOR() view returns (bytes32)',
55
+ 'function getBuyerBalance(address buyer) view returns (uint256 available, uint256 reserved, uint256 lastActivityAt)',
56
+ 'function getBuyerCreditLimit(address buyer) view returns (uint256)',
57
+ 'function getOperator(address buyer) view returns (address)',
58
+ 'function getOperatorNonce(address buyer) view returns (uint256)',
59
+ 'function FEE() view returns (uint256)',
60
+ // Buyer rewards (`createRewardsReader`): protocol pointers and epoch configuration...
61
+ 'function emissions() view returns (address)',
62
+ 'function staking() view returns (address)',
63
+ 'function currentEpoch() view returns (uint256)',
64
+ 'function effectiveEpoch() view returns (uint256)',
65
+ 'function genesis() view returns (uint256)',
66
+ 'function epochDuration() view returns (uint256)',
67
+ 'function EPOCH_DURATION() view returns (uint256)',
68
+ 'function currentEmissionRate() view returns (uint256)',
69
+ 'function sellerRewardsPool() view returns (address)',
70
+ // ...and the buyer's own rewards, which name the buyer.
71
+ 'function buyerEpochClaimed(address buyer, uint256 epoch) view returns (bool)',
72
+ 'function pendingBuyerReward(address buyer, uint256 epoch) view returns (uint256)',
73
+ 'function pendingEmissions(address account, uint256[] epochs) view returns (uint256 seller, uint256 buyer)',
74
+ ]);
75
+ const selectors = new Set();
76
+ reads.forEachFunction((fragment) => selectors.add(fragment.selector));
77
+ return selectors;
78
+ })();
79
+ let nextInternalId = 1_000_000_000;
80
+ export class ChainRpcProvider extends JsonRpcProvider {
81
+ endpoints;
82
+ transport;
83
+ now;
84
+ random;
85
+ batchWindowMs;
86
+ maxBatchSize;
87
+ backoffBaseMs;
88
+ backoffMaxMs;
89
+ rps;
90
+ multicallAddress;
91
+ inflight = new Map();
92
+ constants = new Map();
93
+ queue = [];
94
+ flushTimer = null;
95
+ multicall = null;
96
+ counters = { requests: 0, calls: {}, coalesced: 0, batchedCalls: 0, cacheHits: 0, rateLimited: 0, shortCircuited: 0 };
97
+ constructor(urls, evmChainId, options = {}) {
98
+ const unique = [...new Set(urls.map((url) => url.trim()).filter(Boolean))];
99
+ if (unique.length === 0)
100
+ throw new Error('At least one RPC endpoint is required.');
101
+ super(unique[0], evmChainId ? Network.from(evmChainId) : undefined, { staticNetwork: !!evmChainId, batchMaxCount: 1 });
102
+ this.now = options.now ?? Date.now;
103
+ this.rps = options.requestsPerSecond ?? 8;
104
+ this.endpoints = unique.map((url) => ({ url, failures: 0, openUntil: 0, tokens: this.rps, refilledAt: this.now() }));
105
+ this.transport = options.transport ?? fetchTransport;
106
+ this.random = options.random ?? Math.random;
107
+ this.batchWindowMs = options.batchWindowMs === undefined ? 5 : options.batchWindowMs;
108
+ this.maxBatchSize = options.maxBatchSize ?? 50;
109
+ this.backoffBaseMs = options.backoffBaseMs ?? 2_000;
110
+ // Capped at a minute: with a single endpoint, every read waits this out,
111
+ // and a sweep confirmation (two minutes) must outlive it.
112
+ this.backoffMaxMs = options.backoffMaxMs ?? 60_000;
113
+ this.multicallAddress = options.multicallAddress ?? MULTICALL3_ADDRESS;
114
+ }
115
+ get urls() {
116
+ return this.endpoints.map((endpoint) => endpoint.url);
117
+ }
118
+ stats() {
119
+ return { ...this.counters, calls: { ...this.counters.calls } };
120
+ }
121
+ /** When the next request could go out; 0 while some endpoint is usable. */
122
+ get unavailableUntil() {
123
+ const now = this.now();
124
+ if (this.endpoints.some((endpoint) => endpoint.openUntil <= now))
125
+ return 0;
126
+ return Math.min(...this.endpoints.map((endpoint) => endpoint.openUntil));
127
+ }
128
+ async _send(payload) {
129
+ if (Array.isArray(payload))
130
+ return Promise.all(payload.map((entry) => this.one(entry)));
131
+ return [await this.one(payload)];
132
+ }
133
+ async one(payload) {
134
+ this.counters.calls[payload.method] = (this.counters.calls[payload.method] ?? 0) + 1;
135
+ const key = JSON.stringify([payload.method, payload.params]);
136
+ const constant = this.constants.get(key);
137
+ if (constant && constant.until > this.now()) {
138
+ this.counters.cacheHits++;
139
+ return { id: payload.id, result: constant.result };
140
+ }
141
+ const coalesce = COALESCED_METHODS.has(payload.method);
142
+ const pending = coalesce ? this.inflight.get(key) : undefined;
143
+ if (pending) {
144
+ this.counters.coalesced++;
145
+ return { ...await pending, id: payload.id };
146
+ }
147
+ const task = this.batchable(payload) ? this.enqueue(payload) : this.request(payload);
148
+ if (coalesce)
149
+ this.inflight.set(key, task);
150
+ try {
151
+ const result = await task;
152
+ this.remember(key, payload, result);
153
+ return { ...result, id: payload.id };
154
+ }
155
+ finally {
156
+ if (coalesce && this.inflight.get(key) === task)
157
+ this.inflight.delete(key);
158
+ }
159
+ }
160
+ /** `eth_chainId` forever; contract code for an hour (an empty account for ten minutes). */
161
+ remember(key, payload, result) {
162
+ if (!('result' in result))
163
+ return;
164
+ if (payload.method === 'eth_chainId') {
165
+ this.constants.set(key, { result: result.result, until: Number.POSITIVE_INFINITY });
166
+ }
167
+ else if (payload.method === 'eth_getCode' && Array.isArray(payload.params) && (payload.params[1] ?? 'latest') === 'latest') {
168
+ const empty = result.result === '0x';
169
+ this.constants.set(key, { result: result.result, until: this.now() + (empty ? EMPTY_CODE_CACHE_MS : CODE_CACHE_MS) });
170
+ }
171
+ }
172
+ batchable(payload) {
173
+ if (this.batchWindowMs === null || payload.method !== 'eth_call' || !Array.isArray(payload.params))
174
+ return false;
175
+ const [tx, block] = payload.params;
176
+ if (!tx || typeof tx !== 'object' || (block !== undefined && block !== 'latest'))
177
+ return false;
178
+ if (typeof tx['to'] !== 'string' || tx['to'].toLowerCase() === this.multicallAddress.toLowerCase())
179
+ return false;
180
+ const data = tx['data'] ?? tx['input'];
181
+ if (typeof data !== 'string' || !BATCHABLE_SELECTORS.has(data.slice(0, 10).toLowerCase()))
182
+ return false;
183
+ return Object.keys(tx).every((field) => field === 'to' || field === 'data' || field === 'input');
184
+ }
185
+ enqueue(payload) {
186
+ const tx = payload.params[0];
187
+ return new Promise((resolve, reject) => {
188
+ this.queue.push({ payload, tx: { to: tx['to'], data: tx['data'] ?? tx['input'] ?? '0x' }, resolve, reject });
189
+ if (this.queue.length >= this.maxBatchSize) {
190
+ this.flushSoon(0);
191
+ }
192
+ else {
193
+ this.flushSoon(this.batchWindowMs ?? 0);
194
+ }
195
+ });
196
+ }
197
+ flushSoon(delayMs) {
198
+ if (this.flushTimer && delayMs > 0)
199
+ return;
200
+ if (this.flushTimer)
201
+ clearTimeout(this.flushTimer);
202
+ this.flushTimer = setTimeout(() => {
203
+ this.flushTimer = null;
204
+ while (this.queue.length > 0)
205
+ void this.flush(this.queue.splice(0, this.maxBatchSize));
206
+ }, delayMs);
207
+ }
208
+ async flush(batch) {
209
+ if (batch.length === 1 || !await this.multicallDeployed().catch(() => false)) {
210
+ await this.sendEach(batch);
211
+ return;
212
+ }
213
+ const data = MULTICALL.encodeFunctionData('aggregate3', [batch.map((call) => ({ target: call.tx.to, allowFailure: true, callData: call.tx.data }))]);
214
+ let response;
215
+ try {
216
+ response = await this.transmit({ jsonrpc: '2.0', id: nextInternalId++, method: 'eth_call', params: [{ to: this.multicallAddress, data }, 'latest'] });
217
+ }
218
+ catch (error) {
219
+ // Every endpoint is backing off: the individual calls would fail the same way.
220
+ if (error instanceof RpcUnavailableError) {
221
+ for (const call of batch)
222
+ call.reject(error);
223
+ return;
224
+ }
225
+ // The endpoint refused the aggregate request itself (e.g. HTTP 400 or
226
+ // 413 on a large body): send one call each.
227
+ await this.sendEach(batch);
228
+ return;
229
+ }
230
+ const body = response;
231
+ let decoded = null;
232
+ if (body && typeof body.result === 'string') {
233
+ try {
234
+ decoded = MULTICALL.decodeFunctionResult('aggregate3', body.result)[0];
235
+ }
236
+ catch {
237
+ decoded = null;
238
+ }
239
+ }
240
+ if (!decoded || decoded.length !== batch.length) {
241
+ // The aggregate itself failed (gas cap, a node quirk): fall back to one call each.
242
+ await this.sendEach(batch);
243
+ return;
244
+ }
245
+ this.counters.batchedCalls += batch.length;
246
+ batch.forEach((call, index) => {
247
+ const entry = decoded[index];
248
+ call.resolve(entry.success
249
+ ? { id: call.payload.id, result: entry.returnData }
250
+ : { id: call.payload.id, error: { code: 3, message: 'execution reverted', data: entry.returnData } });
251
+ });
252
+ }
253
+ async sendEach(batch) {
254
+ await Promise.all(batch.map(async (call) => {
255
+ try {
256
+ call.resolve(await this.request(call.payload));
257
+ }
258
+ catch (error) {
259
+ call.reject(error);
260
+ }
261
+ }));
262
+ }
263
+ /** Multicall3 is probed once per process (its code is then cached like any other). */
264
+ multicallDeployed() {
265
+ this.multicall ??= this.one({ jsonrpc: '2.0', id: nextInternalId++, method: 'eth_getCode', params: [this.multicallAddress, 'latest'] })
266
+ .then((result) => 'result' in result && typeof result.result === 'string' && result.result !== '0x')
267
+ .catch((error) => {
268
+ this.multicall = null;
269
+ throw error;
270
+ });
271
+ return this.multicall;
272
+ }
273
+ async request(payload) {
274
+ const body = await this.transmit(payload);
275
+ const entry = Array.isArray(body) ? body[0] : body;
276
+ if (!entry || typeof entry !== 'object')
277
+ throw new Error('The RPC endpoint returned an empty response.');
278
+ return { ...entry, id: payload.id };
279
+ }
280
+ /** Sends one payload to the first endpoint not backing off, moving on when one throttles or fails. */
281
+ async transmit(payload) {
282
+ const body = JSON.stringify(payload);
283
+ let lastError = null;
284
+ let attempted = false;
285
+ for (const endpoint of this.endpoints) {
286
+ if (endpoint.openUntil > this.now())
287
+ continue;
288
+ attempted = true;
289
+ await this.pace(endpoint);
290
+ this.counters.requests++;
291
+ let response;
292
+ try {
293
+ response = await this.transport(endpoint.url, body);
294
+ }
295
+ catch (error) {
296
+ lastError = error instanceof Error ? error : new Error(String(error));
297
+ this.trip(endpoint, null);
298
+ continue;
299
+ }
300
+ if (response.status === 429 || isRateLimited(response.body)) {
301
+ this.counters.rateLimited++;
302
+ this.trip(endpoint, response.retryAfterMs ?? null);
303
+ lastError = new RpcUnavailableError(`${redact(endpoint.url)} is rate limiting requests`, endpoint.openUntil);
304
+ continue;
305
+ }
306
+ if (response.status >= 500 || response.status === 401 || response.status === 403) {
307
+ this.trip(endpoint, response.retryAfterMs ?? null);
308
+ lastError = new RpcUnavailableError(`${redact(endpoint.url)} responded with HTTP ${response.status}`, endpoint.openUntil);
309
+ continue;
310
+ }
311
+ if (response.status < 200 || response.status >= 300) {
312
+ throw new Error(`${redact(endpoint.url)} responded with HTTP ${response.status}`);
313
+ }
314
+ endpoint.failures = 0;
315
+ return response.body;
316
+ }
317
+ if (!attempted) {
318
+ this.counters.shortCircuited++;
319
+ const retryAt = this.unavailableUntil;
320
+ throw new RpcUnavailableError(`Every RPC endpoint is backing off after errors or rate limits; retrying in ${Math.max(1, Math.ceil((retryAt - this.now()) / 1000))} s.`, retryAt);
321
+ }
322
+ if (lastError instanceof RpcUnavailableError)
323
+ throw lastError;
324
+ throw new RpcUnavailableError(lastError?.message ?? 'The RPC endpoints did not answer.', this.unavailableUntil || this.now());
325
+ }
326
+ /** Exponential back-off with "equal jitter": half the delay fixed, half random. */
327
+ trip(endpoint, retryAfterMs) {
328
+ endpoint.failures++;
329
+ const exponential = Math.min(this.backoffMaxMs, this.backoffBaseMs * 2 ** Math.min(endpoint.failures - 1, 20));
330
+ const delay = exponential / 2 + this.random() * exponential / 2;
331
+ endpoint.openUntil = this.now() + Math.max(delay, Math.min(retryAfterMs ?? 0, this.backoffMaxMs));
332
+ }
333
+ async pace(endpoint) {
334
+ for (;;) {
335
+ const now = this.now();
336
+ endpoint.tokens = Math.min(this.rps, endpoint.tokens + (now - endpoint.refilledAt) * this.rps / 1000);
337
+ endpoint.refilledAt = now;
338
+ if (endpoint.tokens >= 1) {
339
+ endpoint.tokens -= 1;
340
+ return;
341
+ }
342
+ await new Promise((resolve) => setTimeout(resolve, Math.ceil((1 - endpoint.tokens) * 1000 / this.rps)));
343
+ }
344
+ }
345
+ destroy() {
346
+ if (this.flushTimer)
347
+ clearTimeout(this.flushTimer);
348
+ this.flushTimer = null;
349
+ for (const call of this.queue.splice(0))
350
+ call.reject(new Error('provider destroyed'));
351
+ super.destroy();
352
+ }
353
+ }
354
+ function isRateLimited(body) {
355
+ const entries = Array.isArray(body) ? body : [body];
356
+ return entries.some((entry) => {
357
+ const error = entry?.error;
358
+ return !!error && (error.code === RATE_LIMIT_CODE || /rate.?limit|too many requests|exceeded .*capacity/i.test(String(error.message ?? '')));
359
+ });
360
+ }
361
+ /** An RPC URL without its path or query, which is where providers put API keys. */
362
+ export function redact(url) {
363
+ try {
364
+ const parsed = new URL(url);
365
+ return `${parsed.protocol}//${parsed.host}${parsed.pathname.length > 1 || parsed.search ? '/…' : ''}`;
366
+ }
367
+ catch {
368
+ return 'RPC endpoint';
369
+ }
370
+ }
371
+ function retryAfter(value) {
372
+ if (!value)
373
+ return null;
374
+ const seconds = Number(value);
375
+ if (Number.isFinite(seconds))
376
+ return Math.max(0, seconds * 1000);
377
+ const at = Date.parse(value);
378
+ return Number.isFinite(at) ? Math.max(0, at - Date.now()) : null;
379
+ }
380
+ async function fetchTransport(url, body) {
381
+ const request = new FetchRequest(url);
382
+ request.timeout = REQUEST_TIMEOUT_MS;
383
+ request.retryFunc = async () => false;
384
+ request.setThrottleParams({ maxAttempts: 1 });
385
+ request.setHeader('content-type', 'application/json');
386
+ request.body = body;
387
+ const response = await request.send();
388
+ let parsed = null;
389
+ try {
390
+ parsed = response.bodyJson;
391
+ }
392
+ catch {
393
+ parsed = null;
394
+ }
395
+ return { status: response.statusCode, body: parsed, retryAfterMs: retryAfter(response.getHeader('retry-after')) };
396
+ }
397
+ const shared = new Map();
398
+ /**
399
+ * The process's provider for a chain and endpoint list; built once, reused by every reader.
400
+ * Batched reads run inside Multicall3, with `msg.sender` = Multicall3 rather
401
+ * than the zero address or a `from`: a read whose answer depends on the caller
402
+ * must not be added to `BATCHABLE_SELECTORS`.
403
+ */
404
+ export function sharedChainProvider(chain, options) {
405
+ const urls = [chain.rpcUrl, ...(chain.fallbackRpcUrls ?? [])];
406
+ const key = `${chain.evmChainId}|${urls.join('|')}`;
407
+ let provider = shared.get(key);
408
+ if (!provider) {
409
+ provider = new ChainRpcProvider(urls, chain.evmChainId, options);
410
+ shared.set(key, provider);
411
+ }
412
+ return provider;
413
+ }
414
+ /** For tests. */
415
+ export function resetSharedChainProviders() {
416
+ for (const provider of shared.values())
417
+ provider.destroy();
418
+ shared.clear();
419
+ }
420
+ //# sourceMappingURL=chain-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-rpc.js","sourceRoot":"","sources":["../../src/proxy/chain-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chain-rpc.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-rpc.test.d.ts","sourceRoot":"","sources":["../../src/proxy/chain-rpc.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,180 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { Contract, Interface, isError } from 'ethers';
4
+ import { startFakeChainRpc } from './chain-rpc-test-support.js';
5
+ import { ChainRpcProvider, MULTICALL3_ADDRESS, resetSharedChainProviders, RpcUnavailableError, sharedChainProvider } from './chain-rpc.js';
6
+ const USDC = '0x' + 'a1'.repeat(20);
7
+ const ERC20 = ['function balanceOf(address owner) view returns (uint256)'];
8
+ const addresses = Array.from({ length: 5 }, (_, index) => '0x' + String(index + 1).padStart(2, '0').repeat(20));
9
+ test('identical reads in flight share one request', async (t) => {
10
+ const rpc = await startFakeChainRpc();
11
+ t.after(() => rpc.close());
12
+ const provider = new ChainRpcProvider([rpc.url], 8453);
13
+ t.after(() => provider.destroy());
14
+ // `send` skips ethers' own short-lived result cache, so this exercises the provider's coalescing.
15
+ const read = () => provider.send('eth_getCode', [addresses[0], 'latest']);
16
+ assert.deepEqual(await Promise.all([read(), read(), read()]), ['0x6080604052', '0x6080604052', '0x6080604052']);
17
+ assert.equal(rpc.requests, 1);
18
+ assert.equal(provider.stats().coalesced, 2);
19
+ await read();
20
+ assert.equal(rpc.requests, 1, 'deployed code is remembered');
21
+ });
22
+ test('concurrent eth_calls go out as one Multicall3 call', async (t) => {
23
+ const rpc = await startFakeChainRpc();
24
+ t.after(() => rpc.close());
25
+ addresses.forEach((address, index) => rpc.usdc.set(address.toLowerCase(), BigInt(index + 1) * 1000000n));
26
+ const provider = new ChainRpcProvider([rpc.url], 8453);
27
+ t.after(() => provider.destroy());
28
+ const usdc = new Contract(USDC, ERC20, provider);
29
+ const read = () => Promise.all(addresses.map((address) => usdc.getFunction('balanceOf').staticCall(address)));
30
+ assert.deepEqual(await read(), [1000000n, 2000000n, 3000000n, 4000000n, 5000000n]);
31
+ // One probe for Multicall3's code, then one aggregate3 call.
32
+ assert.deepEqual(rpc.byMethod, { eth_getCode: 1, eth_call: 1 });
33
+ assert.equal(rpc.batchedCalls, 5);
34
+ rpc.reset();
35
+ await read();
36
+ assert.deepEqual(rpc.byMethod, { eth_call: 1 }, 'the Multicall3 code is remembered');
37
+ });
38
+ test('without Multicall3 the calls are sent one by one', async (t) => {
39
+ const rpc = await startFakeChainRpc({ multicall: false });
40
+ t.after(() => rpc.close());
41
+ const provider = new ChainRpcProvider([rpc.url], 8453);
42
+ t.after(() => provider.destroy());
43
+ const usdc = new Contract(USDC, ERC20, provider);
44
+ await Promise.all(addresses.map((address) => usdc.getFunction('balanceOf').staticCall(address)));
45
+ assert.equal(rpc.byMethod['eth_call'], 5);
46
+ });
47
+ test('only allow-listed reads are batched: anything else keeps its own eth_call and msg.sender', async (t) => {
48
+ const rpc = await startFakeChainRpc();
49
+ t.after(() => rpc.close());
50
+ const provider = new ChainRpcProvider([rpc.url], 8453);
51
+ t.after(() => provider.destroy());
52
+ const token = new Contract(USDC, [...ERC20, 'function allowance(address owner, address spender) view returns (uint256)'], provider);
53
+ await Promise.all([
54
+ ...addresses.slice(0, 2).map((address) => token.getFunction('balanceOf').staticCall(address)),
55
+ token.getFunction('allowance').staticCall(addresses[0], addresses[1]),
56
+ token.getFunction('allowance').staticCall(addresses[1], addresses[2]),
57
+ ]);
58
+ // One aggregate3 for the two balanceOf reads, one eth_call per allowance.
59
+ assert.deepEqual(rpc.byMethod, { eth_getCode: 1, eth_call: 3 });
60
+ assert.equal(rpc.batchedCalls, 2);
61
+ });
62
+ test('buyer reward reads are batched', async (t) => {
63
+ const rpc = await startFakeChainRpc();
64
+ t.after(() => rpc.close());
65
+ const provider = new ChainRpcProvider([rpc.url], 8453);
66
+ t.after(() => provider.destroy());
67
+ const rewards = new Contract(USDC, ['function pendingBuyerReward(address buyer, uint256 epoch) view returns (uint256)', 'function currentEpoch() view returns (uint256)'], provider);
68
+ await Promise.all([
69
+ rewards.getFunction('pendingBuyerReward').staticCall(addresses[0], 3),
70
+ rewards.getFunction('pendingBuyerReward').staticCall(addresses[0], 4),
71
+ rewards.getFunction('currentEpoch').staticCall(),
72
+ ]);
73
+ assert.deepEqual(rpc.byMethod, { eth_getCode: 1, eth_call: 1 });
74
+ assert.equal(rpc.batchedCalls, 3);
75
+ });
76
+ test('a reverting call inside a batch fails alone, as a CALL_EXCEPTION', async (t) => {
77
+ const multicall = new Interface(['function aggregate3(tuple(address target, bool allowFailure, bytes callData)[] calls) payable returns (tuple(bool success, bytes returnData)[] returnData)']);
78
+ const word = (value) => '0x' + value.toString(16).padStart(64, '0');
79
+ const transport = async (_url, body) => {
80
+ const request = JSON.parse(body);
81
+ if (request.method === 'eth_getCode')
82
+ return { status: 200, body: { jsonrpc: '2.0', id: request.id, result: '0x60' } };
83
+ assert.equal(request.params[0].to.toLowerCase(), MULTICALL3_ADDRESS.toLowerCase());
84
+ const [calls] = multicall.decodeFunctionData('aggregate3', request.params[0].data);
85
+ const results = calls.map((_, index) => index === 1 ? { success: false, returnData: '0x' } : { success: true, returnData: word(7n) });
86
+ return { status: 200, body: { jsonrpc: '2.0', id: request.id, result: multicall.encodeFunctionResult('aggregate3', [results]) } };
87
+ };
88
+ const provider = new ChainRpcProvider(['https://rpc.example.test'], 8453, { transport });
89
+ t.after(() => provider.destroy());
90
+ const usdc = new Contract(USDC, ERC20, provider);
91
+ const settled = await Promise.allSettled(addresses.slice(0, 3).map((address) => usdc.getFunction('balanceOf').staticCall(address)));
92
+ assert.equal(settled[0].status, 'fulfilled');
93
+ assert.equal(settled[0].value, 7n);
94
+ assert.equal(settled[1].status, 'rejected');
95
+ assert.ok(isError(settled[1].reason, 'CALL_EXCEPTION'));
96
+ assert.equal(settled[2].status, 'fulfilled');
97
+ });
98
+ test('an aggregate refused with HTTP 413 falls back to one call each', async (t) => {
99
+ const word = (value) => '0x' + value.toString(16).padStart(64, '0');
100
+ let aggregates = 0;
101
+ let singles = 0;
102
+ const transport = async (_url, body) => {
103
+ const request = JSON.parse(body);
104
+ if (request.method === 'eth_getCode')
105
+ return { status: 200, body: { jsonrpc: '2.0', id: request.id, result: '0x60' } };
106
+ if (request.params[0].to.toLowerCase() === MULTICALL3_ADDRESS.toLowerCase()) {
107
+ aggregates += 1;
108
+ return { status: 413, body: null };
109
+ }
110
+ singles += 1;
111
+ return { status: 200, body: { jsonrpc: '2.0', id: request.id, result: word(5n) } };
112
+ };
113
+ const provider = new ChainRpcProvider(['https://rpc.example.test'], 8453, { transport });
114
+ t.after(() => provider.destroy());
115
+ const usdc = new Contract(USDC, ERC20, provider);
116
+ const values = await Promise.all(addresses.slice(0, 3).map((address) => usdc.getFunction('balanceOf').staticCall(address)));
117
+ assert.deepEqual(values, [5n, 5n, 5n]);
118
+ assert.equal(aggregates, 1);
119
+ assert.equal(singles, 3);
120
+ });
121
+ test('a rate-limited endpoint is skipped for a jittered, growing back-off; then the call fails fast without touching the network', async (t) => {
122
+ const primary = await startFakeChainRpc();
123
+ const fallback = await startFakeChainRpc();
124
+ t.after(() => primary.close());
125
+ t.after(() => fallback.close());
126
+ let now = 1_000_000;
127
+ const provider = new ChainRpcProvider([primary.url, fallback.url], 8453, { now: () => now, random: () => 0, backoffBaseMs: 2_000, batchWindowMs: null });
128
+ t.after(() => provider.destroy());
129
+ primary.rateLimit(Number.POSITIVE_INFINITY);
130
+ assert.equal(await provider.getBalance(addresses[0]), 0n, 'the fallback answers');
131
+ assert.equal(primary.requests, 1);
132
+ assert.equal(fallback.requests, 1);
133
+ await provider.getBalance(addresses[1]);
134
+ assert.equal(primary.requests, 1, 'the throttling endpoint is not retried while it backs off');
135
+ assert.equal(fallback.requests, 2);
136
+ fallback.rateLimitStyle = 'jsonrpc';
137
+ fallback.rateLimit(Number.POSITIVE_INFINITY);
138
+ now += 5_000; // past the primary's first back-off (2 s base, equal jitter at random()=0 → 1 s)
139
+ await assert.rejects(provider.getBalance(addresses[2]), (error) => error instanceof RpcUnavailableError || /rate limiting/.test(String(error)));
140
+ const sent = primary.requests + fallback.requests;
141
+ await assert.rejects(provider.getBalance(addresses[3]), /backing off/);
142
+ assert.equal(primary.requests + fallback.requests, sent, 'refused locally while every endpoint backs off');
143
+ assert.equal(provider.stats().shortCircuited, 1);
144
+ // Second consecutive failure of the primary: 4 s base → at least 2 s.
145
+ const until = provider.unavailableUntil;
146
+ assert.ok(until >= now + 1_000);
147
+ primary.rateLimit(0);
148
+ fallback.rateLimit(0);
149
+ now = until + 1;
150
+ assert.equal(await provider.getBalance(addresses[4]), 0n, 'recovers once the back-off passes');
151
+ });
152
+ test('Retry-After is honoured as the minimum back-off', async (t) => {
153
+ let now = 0;
154
+ let calls = 0;
155
+ const transport = async (_url, body) => {
156
+ calls++;
157
+ if (calls === 1)
158
+ return { status: 429, body: null, retryAfterMs: 30_000 };
159
+ return { status: 200, body: { jsonrpc: '2.0', id: JSON.parse(body).id, result: '0x0' } };
160
+ };
161
+ const provider = new ChainRpcProvider(['https://rpc.example.test'], 8453, { transport, now: () => now, random: () => 0, batchWindowMs: null });
162
+ t.after(() => provider.destroy());
163
+ const read = () => provider.send('eth_blockNumber', []);
164
+ await assert.rejects(read());
165
+ now = 29_000;
166
+ await assert.rejects(read(), /backing off/);
167
+ assert.equal(calls, 1);
168
+ now = 30_001;
169
+ assert.equal(await read(), '0x0');
170
+ });
171
+ test('one shared provider per chain and endpoint list', () => {
172
+ resetSharedChainProviders();
173
+ const a = sharedChainProvider({ evmChainId: 8453, rpcUrl: 'https://one.example.test', fallbackRpcUrls: ['https://two.example.test'] });
174
+ const b = sharedChainProvider({ evmChainId: 8453, rpcUrl: 'https://one.example.test', fallbackRpcUrls: ['https://two.example.test'] });
175
+ const c = sharedChainProvider({ evmChainId: 8453, rpcUrl: 'https://three.example.test' });
176
+ assert.equal(a, b);
177
+ assert.notEqual(a, c);
178
+ resetSharedChainProviders();
179
+ });
180
+ //# sourceMappingURL=chain-rpc.test.js.map