@reclaimprotocol/attestor-core 4.0.3 → 5.0.1-beta.10

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 (474) hide show
  1. package/LICENSE +660 -660
  2. package/README.md +1 -2
  3. package/lib/avs/abis/avsDirectoryABI.js +341 -342
  4. package/lib/avs/abis/delegationABI.js +4 -5
  5. package/lib/avs/abis/registryABI.js +722 -723
  6. package/lib/avs/client/create-claim-on-avs.d.ts +5 -5
  7. package/lib/avs/client/create-claim-on-avs.js +160 -139
  8. package/lib/avs/config.d.ts +1 -1
  9. package/lib/avs/config.js +25 -23
  10. package/lib/avs/contracts/ReclaimServiceManager.d.ts +436 -532
  11. package/lib/avs/contracts/ReclaimServiceManager.js +0 -3
  12. package/lib/avs/contracts/common.d.ts +40 -11
  13. package/lib/avs/contracts/common.js +0 -3
  14. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +13 -11
  15. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1157 -1148
  16. package/lib/avs/contracts/factories/index.d.ts +1 -1
  17. package/lib/avs/contracts/factories/index.js +4 -9
  18. package/lib/avs/contracts/index.d.ts +3 -3
  19. package/lib/avs/contracts/index.js +6 -40
  20. package/lib/avs/types/index.d.ts +6 -6
  21. package/lib/avs/types/index.js +0 -3
  22. package/lib/avs/utils/contracts.d.ts +14 -14
  23. package/lib/avs/utils/contracts.js +50 -35
  24. package/lib/avs/utils/register.d.ts +3 -3
  25. package/lib/avs/utils/register.js +71 -79
  26. package/lib/avs/utils/tasks.d.ts +4 -4
  27. package/lib/avs/utils/tasks.js +44 -41
  28. package/lib/browser/avs/abis/avsDirectoryABI.d.ts +60 -0
  29. package/lib/browser/avs/abis/avsDirectoryABI.js +343 -0
  30. package/lib/browser/avs/abis/delegationABI.d.ts +126 -0
  31. package/lib/browser/avs/abis/delegationABI.js +4 -0
  32. package/lib/browser/avs/abis/registryABI.d.ts +136 -0
  33. package/lib/browser/avs/abis/registryABI.js +728 -0
  34. package/lib/browser/avs/client/create-claim-on-avs.d.ts +12 -0
  35. package/lib/browser/avs/client/create-claim-on-avs.js +168 -0
  36. package/lib/browser/avs/config.d.ts +7 -0
  37. package/lib/browser/avs/config.js +26 -0
  38. package/lib/browser/avs/contracts/ReclaimServiceManager.d.ts +601 -0
  39. package/lib/browser/avs/contracts/ReclaimServiceManager.js +0 -0
  40. package/lib/browser/avs/contracts/common.d.ts +50 -0
  41. package/lib/browser/avs/contracts/common.js +0 -0
  42. package/lib/browser/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +890 -0
  43. package/lib/browser/avs/contracts/factories/ReclaimServiceManager__factory.js +1183 -0
  44. package/lib/browser/avs/contracts/factories/index.d.ts +1 -0
  45. package/lib/browser/avs/contracts/factories/index.js +4 -0
  46. package/lib/browser/avs/contracts/index.d.ts +3 -0
  47. package/lib/browser/avs/contracts/index.js +6 -0
  48. package/lib/browser/avs/types/index.d.ts +55 -0
  49. package/lib/browser/avs/types/index.js +0 -0
  50. package/lib/browser/avs/utils/contracts.d.ts +21 -0
  51. package/lib/browser/avs/utils/contracts.js +53 -0
  52. package/lib/browser/avs/utils/register.d.ts +27 -0
  53. package/lib/browser/avs/utils/register.js +74 -0
  54. package/lib/browser/avs/utils/tasks.d.ts +22 -0
  55. package/lib/browser/avs/utils/tasks.js +48 -0
  56. package/lib/browser/client/create-claim.d.ts +5 -0
  57. package/lib/browser/client/create-claim.js +461 -0
  58. package/lib/browser/client/index.d.ts +3 -0
  59. package/lib/browser/client/index.js +3 -0
  60. package/lib/browser/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  61. package/lib/browser/client/tunnels/make-rpc-tcp-tunnel.js +53 -0
  62. package/lib/browser/client/tunnels/make-rpc-tls-tunnel.d.ts +26 -0
  63. package/lib/browser/client/tunnels/make-rpc-tls-tunnel.js +127 -0
  64. package/lib/browser/client/utils/attestor-pool.d.ts +8 -0
  65. package/lib/browser/client/utils/attestor-pool.js +24 -0
  66. package/lib/browser/client/utils/client-socket.d.ts +11 -0
  67. package/lib/browser/client/utils/client-socket.js +120 -0
  68. package/lib/browser/client/utils/message-handler.d.ts +4 -0
  69. package/lib/browser/client/utils/message-handler.js +97 -0
  70. package/lib/browser/config/index.d.ts +31 -0
  71. package/lib/browser/config/index.js +62 -0
  72. package/lib/browser/external-rpc/benchmark.d.ts +1 -0
  73. package/lib/browser/external-rpc/benchmark.js +82 -0
  74. package/lib/browser/external-rpc/event-bus.d.ts +7 -0
  75. package/lib/browser/external-rpc/event-bus.js +17 -0
  76. package/lib/browser/external-rpc/global.d.js +0 -0
  77. package/lib/browser/external-rpc/handle-incoming-msg.d.ts +2 -0
  78. package/lib/browser/external-rpc/handle-incoming-msg.js +241 -0
  79. package/lib/browser/external-rpc/index.d.ts +3 -0
  80. package/lib/browser/external-rpc/index.js +3 -0
  81. package/lib/browser/external-rpc/jsc-polyfills/1.d.ts +14 -0
  82. package/lib/browser/external-rpc/jsc-polyfills/1.js +80 -0
  83. package/lib/browser/external-rpc/jsc-polyfills/2.js +15 -0
  84. package/lib/browser/external-rpc/jsc-polyfills/event.d.ts +10 -0
  85. package/lib/browser/external-rpc/jsc-polyfills/event.js +19 -0
  86. package/lib/browser/external-rpc/jsc-polyfills/index.d.ts +2 -0
  87. package/lib/browser/external-rpc/jsc-polyfills/index.js +2 -0
  88. package/lib/browser/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  89. package/lib/browser/external-rpc/jsc-polyfills/ws.js +83 -0
  90. package/lib/browser/external-rpc/setup-browser.d.ts +6 -0
  91. package/lib/browser/external-rpc/setup-browser.js +33 -0
  92. package/lib/browser/external-rpc/setup-jsc.d.ts +24 -0
  93. package/lib/browser/external-rpc/setup-jsc.js +22 -0
  94. package/lib/{window-rpc → browser/external-rpc}/types.d.ts +56 -35
  95. package/lib/browser/external-rpc/types.js +0 -0
  96. package/lib/browser/external-rpc/utils.d.ts +20 -0
  97. package/lib/browser/external-rpc/utils.js +100 -0
  98. package/lib/browser/external-rpc/zk.d.ts +14 -0
  99. package/lib/browser/external-rpc/zk.js +58 -0
  100. package/lib/browser/index.browser.js +13 -0
  101. package/lib/browser/index.d.ts +9 -0
  102. package/lib/browser/index.js +13 -0
  103. package/lib/browser/mechain/abis/governanceABI.d.ts +50 -0
  104. package/lib/browser/mechain/abis/governanceABI.js +461 -0
  105. package/lib/browser/mechain/abis/taskABI.d.ts +157 -0
  106. package/lib/browser/mechain/abis/taskABI.js +512 -0
  107. package/lib/browser/mechain/client/create-claim-on-mechain.d.ts +10 -0
  108. package/lib/browser/mechain/client/create-claim-on-mechain.js +33 -0
  109. package/lib/browser/mechain/client/index.d.ts +1 -0
  110. package/lib/browser/mechain/client/index.js +1 -0
  111. package/lib/browser/mechain/constants/index.d.ts +3 -0
  112. package/lib/browser/mechain/constants/index.js +8 -0
  113. package/lib/browser/mechain/index.d.ts +2 -0
  114. package/lib/browser/mechain/index.js +2 -0
  115. package/lib/browser/mechain/types/index.d.ts +23 -0
  116. package/lib/browser/mechain/types/index.js +0 -0
  117. package/lib/browser/proto/api.d.ts +651 -0
  118. package/lib/browser/proto/api.js +4250 -0
  119. package/lib/browser/proto/tee-bundle.d.ts +156 -0
  120. package/lib/browser/proto/tee-bundle.js +1296 -0
  121. package/lib/browser/providers/http/index.d.ts +18 -0
  122. package/lib/browser/providers/http/index.js +640 -0
  123. package/lib/browser/providers/http/patch-parse5-tree.d.ts +6 -0
  124. package/lib/browser/providers/http/patch-parse5-tree.js +34 -0
  125. package/lib/browser/providers/http/utils.d.ts +77 -0
  126. package/lib/browser/providers/http/utils.js +283 -0
  127. package/lib/browser/providers/index.d.ts +4 -0
  128. package/lib/browser/providers/index.js +7 -0
  129. package/lib/browser/scripts/fallbacks/crypto.js +4 -0
  130. package/lib/browser/scripts/fallbacks/empty.js +4 -0
  131. package/lib/browser/scripts/fallbacks/gnark.js +15 -0
  132. package/lib/browser/scripts/fallbacks/re2.js +7 -0
  133. package/lib/browser/scripts/fallbacks/snarkjs.js +10 -0
  134. package/lib/browser/scripts/fallbacks/stwo.js +159 -0
  135. package/lib/browser/types/bgp.d.ts +11 -0
  136. package/lib/browser/types/bgp.js +0 -0
  137. package/lib/browser/types/claims.d.ts +70 -0
  138. package/lib/browser/types/claims.js +0 -0
  139. package/lib/browser/types/client.d.ts +163 -0
  140. package/lib/browser/types/client.js +0 -0
  141. package/lib/browser/types/general.d.ts +77 -0
  142. package/lib/browser/types/general.js +0 -0
  143. package/lib/browser/types/handlers.d.ts +10 -0
  144. package/lib/browser/types/handlers.js +0 -0
  145. package/lib/browser/types/index.d.ts +10 -0
  146. package/lib/browser/types/index.js +10 -0
  147. package/lib/browser/types/providers.d.ts +161 -0
  148. package/lib/browser/types/providers.gen.d.ts +443 -0
  149. package/lib/browser/types/providers.gen.js +16 -0
  150. package/lib/browser/types/providers.js +0 -0
  151. package/lib/browser/types/rpc.d.ts +35 -0
  152. package/lib/browser/types/rpc.js +0 -0
  153. package/lib/browser/types/signatures.d.ts +28 -0
  154. package/lib/browser/types/signatures.js +0 -0
  155. package/lib/browser/types/tunnel.d.ts +18 -0
  156. package/lib/browser/types/tunnel.js +0 -0
  157. package/lib/browser/types/zk.d.ts +38 -0
  158. package/lib/browser/types/zk.js +0 -0
  159. package/lib/browser/utils/auth.d.ts +8 -0
  160. package/lib/browser/utils/auth.js +71 -0
  161. package/lib/browser/utils/b64-json.d.ts +2 -0
  162. package/lib/browser/utils/b64-json.js +17 -0
  163. package/lib/browser/utils/claims.d.ts +33 -0
  164. package/lib/browser/utils/claims.js +89 -0
  165. package/lib/browser/utils/env.d.ts +3 -0
  166. package/lib/browser/utils/env.js +19 -0
  167. package/lib/browser/utils/error.d.ts +26 -0
  168. package/lib/browser/utils/error.js +54 -0
  169. package/lib/browser/utils/generics.d.ts +119 -0
  170. package/lib/browser/utils/generics.js +272 -0
  171. package/lib/browser/utils/http-parser.d.ts +59 -0
  172. package/lib/browser/utils/http-parser.js +201 -0
  173. package/lib/browser/utils/index.browser.js +13 -0
  174. package/lib/browser/utils/index.d.ts +13 -0
  175. package/lib/browser/utils/index.js +13 -0
  176. package/lib/browser/utils/logger.browser.js +88 -0
  177. package/lib/browser/utils/logger.d.ts +14 -0
  178. package/lib/browser/utils/logger.js +88 -0
  179. package/lib/browser/utils/prepare-packets.d.ts +16 -0
  180. package/lib/browser/utils/prepare-packets.js +69 -0
  181. package/lib/browser/utils/redactions.d.ts +73 -0
  182. package/lib/browser/utils/redactions.js +135 -0
  183. package/lib/browser/utils/retries.d.ts +12 -0
  184. package/lib/browser/utils/retries.js +26 -0
  185. package/lib/browser/utils/signatures/eth.d.ts +2 -0
  186. package/lib/browser/utils/signatures/eth.js +31 -0
  187. package/lib/browser/utils/signatures/index.d.ts +5 -0
  188. package/lib/browser/utils/signatures/index.js +12 -0
  189. package/lib/browser/utils/socket-base.d.ts +23 -0
  190. package/lib/browser/utils/socket-base.js +96 -0
  191. package/lib/browser/utils/tls-imports.d.ts +21 -0
  192. package/lib/browser/utils/tls-imports.js +71 -0
  193. package/lib/browser/utils/tls.d.ts +2 -0
  194. package/lib/browser/utils/tls.js +58 -0
  195. package/lib/browser/utils/ws.d.ts +7 -0
  196. package/lib/browser/utils/ws.js +22 -0
  197. package/lib/browser/utils/zk.d.ts +71 -0
  198. package/lib/browser/utils/zk.js +625 -0
  199. package/lib/client/create-claim.d.ts +2 -2
  200. package/lib/client/create-claim.js +437 -400
  201. package/lib/client/index.d.ts +3 -3
  202. package/lib/client/index.js +3 -20
  203. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +2 -2
  204. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +49 -56
  205. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +4 -3
  206. package/lib/client/tunnels/make-rpc-tls-tunnel.js +123 -131
  207. package/lib/client/utils/attestor-pool.d.ts +3 -1
  208. package/lib/client/utils/attestor-pool.js +21 -25
  209. package/lib/client/utils/client-socket.d.ts +4 -4
  210. package/lib/client/utils/client-socket.js +114 -94
  211. package/lib/client/utils/message-handler.d.ts +2 -2
  212. package/lib/client/utils/message-handler.js +89 -86
  213. package/lib/config/index.d.ts +6 -3
  214. package/lib/config/index.js +60 -37
  215. package/lib/external-rpc/benchmark.d.ts +1 -0
  216. package/lib/external-rpc/benchmark.js +82 -0
  217. package/lib/external-rpc/event-bus.d.ts +7 -0
  218. package/lib/external-rpc/event-bus.js +17 -0
  219. package/lib/external-rpc/global.d.js +0 -0
  220. package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
  221. package/lib/external-rpc/handle-incoming-msg.js +241 -0
  222. package/lib/external-rpc/index.d.ts +3 -0
  223. package/lib/external-rpc/index.js +3 -0
  224. package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
  225. package/lib/external-rpc/jsc-polyfills/1.js +80 -0
  226. package/lib/external-rpc/jsc-polyfills/2.js +15 -0
  227. package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
  228. package/lib/external-rpc/jsc-polyfills/event.js +19 -0
  229. package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
  230. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  231. package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  232. package/lib/external-rpc/jsc-polyfills/ws.js +83 -0
  233. package/lib/external-rpc/setup-browser.d.ts +6 -0
  234. package/lib/external-rpc/setup-browser.js +33 -0
  235. package/lib/external-rpc/setup-jsc.d.ts +24 -0
  236. package/lib/external-rpc/setup-jsc.js +22 -0
  237. package/lib/external-rpc/types.d.ts +213 -0
  238. package/lib/external-rpc/types.js +0 -0
  239. package/lib/external-rpc/utils.d.ts +20 -0
  240. package/lib/external-rpc/utils.js +100 -0
  241. package/lib/external-rpc/zk.d.ts +14 -0
  242. package/lib/external-rpc/zk.js +58 -0
  243. package/lib/index.browser.d.ts +9 -0
  244. package/lib/index.d.ts +8 -9
  245. package/lib/index.js +12 -49
  246. package/lib/mechain/abis/governanceABI.js +460 -461
  247. package/lib/mechain/abis/taskABI.js +505 -506
  248. package/lib/mechain/client/create-claim-on-mechain.d.ts +3 -3
  249. package/lib/mechain/client/create-claim-on-mechain.js +31 -30
  250. package/lib/mechain/client/index.d.ts +1 -1
  251. package/lib/mechain/client/index.js +1 -18
  252. package/lib/mechain/constants/index.js +8 -7
  253. package/lib/mechain/index.d.ts +2 -2
  254. package/lib/mechain/index.js +2 -19
  255. package/lib/mechain/types/index.d.ts +2 -2
  256. package/lib/mechain/types/index.js +0 -3
  257. package/lib/proto/api.d.ts +182 -39
  258. package/lib/proto/api.js +4105 -3555
  259. package/lib/proto/tee-bundle.d.ts +156 -0
  260. package/lib/proto/tee-bundle.js +1296 -0
  261. package/lib/providers/http/index.d.ts +16 -1
  262. package/lib/providers/http/index.js +603 -576
  263. package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
  264. package/lib/providers/http/patch-parse5-tree.js +34 -0
  265. package/lib/providers/http/utils.d.ts +7 -4
  266. package/lib/providers/http/utils.js +240 -317
  267. package/lib/providers/index.d.ts +1 -1
  268. package/lib/providers/index.js +5 -9
  269. package/lib/scripts/check-avs-registration.d.ts +1 -1
  270. package/lib/scripts/check-avs-registration.js +24 -25
  271. package/lib/scripts/fallbacks/crypto.d.ts +1 -0
  272. package/lib/scripts/fallbacks/crypto.js +4 -0
  273. package/lib/scripts/fallbacks/empty.d.ts +3 -0
  274. package/lib/scripts/fallbacks/empty.js +4 -0
  275. package/lib/scripts/fallbacks/gnark.d.ts +7 -0
  276. package/lib/scripts/fallbacks/gnark.js +15 -0
  277. package/lib/scripts/fallbacks/re2.d.ts +1 -0
  278. package/lib/scripts/fallbacks/re2.js +7 -0
  279. package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
  280. package/lib/scripts/fallbacks/snarkjs.js +10 -0
  281. package/lib/scripts/fallbacks/stwo.d.ts +6 -0
  282. package/lib/scripts/generate-provider-types.js +92 -73
  283. package/lib/scripts/generate-receipt.d.ts +2 -2
  284. package/lib/scripts/generate-receipt.js +94 -83
  285. package/lib/scripts/generate-toprf-keys.js +17 -16
  286. package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
  287. package/lib/scripts/jsc-cli-rpc.js +35 -0
  288. package/lib/scripts/register-avs-operator.d.ts +1 -1
  289. package/lib/scripts/register-avs-operator.js +3 -7
  290. package/lib/scripts/start-server.d.ts +1 -1
  291. package/lib/scripts/start-server.js +9 -11
  292. package/lib/scripts/update-avs-metadata.d.ts +1 -1
  293. package/lib/scripts/update-avs-metadata.js +17 -19
  294. package/lib/scripts/utils.js +8 -9
  295. package/lib/scripts/whitelist-operator.d.ts +1 -1
  296. package/lib/scripts/whitelist-operator.js +13 -15
  297. package/lib/server/create-server.d.ts +3 -2
  298. package/lib/server/create-server.js +98 -85
  299. package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
  300. package/lib/server/handlers/claimTeeBundle.js +232 -0
  301. package/lib/server/handlers/claimTunnel.d.ts +1 -1
  302. package/lib/server/handlers/claimTunnel.js +75 -73
  303. package/lib/server/handlers/completeClaimOnChain.d.ts +1 -1
  304. package/lib/server/handlers/completeClaimOnChain.js +27 -26
  305. package/lib/server/handlers/createClaimOnChain.d.ts +1 -1
  306. package/lib/server/handlers/createClaimOnChain.js +30 -29
  307. package/lib/server/handlers/createTaskOnMechain.d.ts +1 -1
  308. package/lib/server/handlers/createTaskOnMechain.js +54 -49
  309. package/lib/server/handlers/createTunnel.d.ts +1 -1
  310. package/lib/server/handlers/createTunnel.js +91 -94
  311. package/lib/server/handlers/disconnectTunnel.d.ts +1 -1
  312. package/lib/server/handlers/disconnectTunnel.js +6 -8
  313. package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
  314. package/lib/server/handlers/fetchCertificateBytes.js +57 -0
  315. package/lib/server/handlers/index.d.ts +1 -1
  316. package/lib/server/handlers/index.js +24 -21
  317. package/lib/server/handlers/init.d.ts +1 -1
  318. package/lib/server/handlers/init.js +31 -34
  319. package/lib/server/handlers/toprf.d.ts +1 -1
  320. package/lib/server/handlers/toprf.js +17 -19
  321. package/lib/server/index.d.ts +4 -4
  322. package/lib/server/index.js +4 -21
  323. package/lib/server/socket.d.ts +7 -7
  324. package/lib/server/socket.js +104 -106
  325. package/lib/server/tunnels/make-tcp-tunnel.d.ts +5 -3
  326. package/lib/server/tunnels/make-tcp-tunnel.js +189 -162
  327. package/lib/server/utils/apm.d.ts +1 -1
  328. package/lib/server/utils/apm.js +26 -40
  329. package/lib/server/utils/assert-valid-claim-request.d.ts +6 -5
  330. package/lib/server/utils/assert-valid-claim-request.js +339 -185
  331. package/lib/server/utils/config-env.js +4 -7
  332. package/lib/server/utils/dns.js +18 -16
  333. package/lib/server/utils/gcp-attestation.d.ts +17 -0
  334. package/lib/server/utils/gcp-attestation.js +237 -0
  335. package/lib/server/utils/generics.d.ts +3 -3
  336. package/lib/server/utils/generics.js +37 -51
  337. package/lib/server/utils/iso.js +255 -256
  338. package/lib/server/utils/keep-alive.d.ts +2 -2
  339. package/lib/server/utils/keep-alive.js +36 -40
  340. package/lib/server/utils/nitro-attestation.d.ts +33 -0
  341. package/lib/server/utils/nitro-attestation.js +249 -0
  342. package/lib/server/utils/oprf-raw.d.ts +21 -0
  343. package/lib/server/utils/oprf-raw.js +61 -0
  344. package/lib/server/utils/process-handshake.d.ts +3 -3
  345. package/lib/server/utils/process-handshake.js +217 -175
  346. package/lib/server/utils/proxy-session.d.ts +1 -0
  347. package/lib/server/utils/proxy-session.js +4 -0
  348. package/lib/server/utils/tee-oprf-mpc-verification.d.ts +16 -0
  349. package/lib/server/utils/tee-oprf-mpc-verification.js +86 -0
  350. package/lib/server/utils/tee-oprf-verification.d.ts +24 -0
  351. package/lib/server/utils/tee-oprf-verification.js +151 -0
  352. package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
  353. package/lib/server/utils/tee-transcript-reconstruction.js +140 -0
  354. package/lib/server/utils/tee-verification.d.ts +28 -0
  355. package/lib/server/utils/tee-verification.js +358 -0
  356. package/lib/{utils → server/utils}/validation.d.ts +1 -1
  357. package/lib/server/utils/validation.js +45 -0
  358. package/lib/types/bgp.js +0 -3
  359. package/lib/types/claims.d.ts +7 -10
  360. package/lib/types/claims.js +0 -3
  361. package/lib/types/client.d.ts +5 -5
  362. package/lib/types/client.js +0 -3
  363. package/lib/types/general.d.ts +30 -4
  364. package/lib/types/general.js +0 -3
  365. package/lib/types/handlers.d.ts +3 -3
  366. package/lib/types/handlers.js +0 -3
  367. package/lib/types/index.d.ts +10 -10
  368. package/lib/types/index.js +10 -27
  369. package/lib/types/providers.d.ts +15 -4
  370. package/lib/types/providers.gen.d.ts +15 -1
  371. package/lib/types/providers.gen.js +15 -13
  372. package/lib/types/providers.js +0 -3
  373. package/lib/types/rpc.d.ts +2 -2
  374. package/lib/types/rpc.js +0 -3
  375. package/lib/types/signatures.js +0 -3
  376. package/lib/types/tunnel.d.ts +2 -2
  377. package/lib/types/tunnel.js +0 -3
  378. package/lib/types/zk.d.ts +17 -2
  379. package/lib/types/zk.js +0 -3
  380. package/lib/utils/auth.d.ts +2 -1
  381. package/lib/utils/auth.js +66 -59
  382. package/lib/utils/b64-json.js +13 -19
  383. package/lib/utils/bgp-listener.d.ts +1 -1
  384. package/lib/utils/bgp-listener.js +111 -114
  385. package/lib/utils/claims.d.ts +3 -3
  386. package/lib/utils/claims.js +78 -101
  387. package/lib/utils/env.js +15 -16
  388. package/lib/utils/error.d.ts +6 -7
  389. package/lib/utils/error.js +50 -39
  390. package/lib/utils/generics.d.ts +20 -13
  391. package/lib/utils/generics.js +221 -297
  392. package/lib/utils/http-parser.d.ts +1 -1
  393. package/lib/utils/http-parser.js +186 -237
  394. package/lib/utils/index.browser.d.ts +13 -0
  395. package/lib/utils/index.d.ts +14 -12
  396. package/lib/utils/index.js +14 -29
  397. package/lib/utils/logger.browser.d.ts +14 -0
  398. package/lib/utils/logger.d.ts +1 -1
  399. package/lib/utils/logger.js +69 -87
  400. package/lib/utils/prepare-packets.d.ts +3 -3
  401. package/lib/utils/prepare-packets.js +66 -58
  402. package/lib/utils/redactions.d.ts +20 -1
  403. package/lib/utils/redactions.js +116 -129
  404. package/lib/utils/retries.d.ts +1 -1
  405. package/lib/utils/retries.js +24 -26
  406. package/lib/utils/signatures/eth.d.ts +1 -1
  407. package/lib/utils/signatures/eth.js +28 -30
  408. package/lib/utils/signatures/index.d.ts +3 -3
  409. package/lib/utils/signatures/index.js +11 -10
  410. package/lib/utils/socket-base.d.ts +6 -5
  411. package/lib/utils/socket-base.js +89 -88
  412. package/lib/utils/tls-imports.d.ts +21 -0
  413. package/lib/utils/tls-imports.js +71 -0
  414. package/lib/utils/tls.d.ts +1 -1
  415. package/lib/utils/tls.js +54 -28
  416. package/lib/utils/ws.d.ts +1 -6
  417. package/lib/utils/ws.js +17 -33
  418. package/lib/utils/zk.d.ts +28 -12
  419. package/lib/utils/zk.js +587 -406
  420. package/package.json +79 -60
  421. package/lib/avs/tests/test.operator.d.ts +0 -11
  422. package/lib/avs/tests/test.operator.js +0 -313
  423. package/lib/avs/tests/utils.d.ts +0 -2
  424. package/lib/avs/tests/utils.js +0 -50
  425. package/lib/scripts/verify-root-ca.d.ts +0 -1
  426. package/lib/scripts/verify-root-ca.js +0 -51
  427. package/lib/tests/describe-with-server.d.ts +0 -20
  428. package/lib/tests/describe-with-server.js +0 -64
  429. package/lib/tests/mock-provider-server.d.ts +0 -13
  430. package/lib/tests/mock-provider-server.js +0 -65
  431. package/lib/tests/mocks.d.ts +0 -4
  432. package/lib/tests/mocks.js +0 -23
  433. package/lib/tests/test.auth.js +0 -75
  434. package/lib/tests/test.bgp-listener.js +0 -169
  435. package/lib/tests/test.claim-creation.js +0 -280
  436. package/lib/tests/test.http-parser.d.ts +0 -1
  437. package/lib/tests/test.http-parser.js +0 -120
  438. package/lib/tests/test.http-provider-utils.js +0 -2416
  439. package/lib/tests/test.http-provider.js +0 -114
  440. package/lib/tests/test.rpc-communication.d.ts +0 -1
  441. package/lib/tests/test.rpc-communication.js +0 -64
  442. package/lib/tests/test.rpc-tunnel.d.ts +0 -1
  443. package/lib/tests/test.rpc-tunnel.js +0 -172
  444. package/lib/tests/test.signatures.d.ts +0 -1
  445. package/lib/tests/test.signatures.js +0 -24
  446. package/lib/tests/test.tcp-tunnel.d.ts +0 -1
  447. package/lib/tests/test.tcp-tunnel.js +0 -64
  448. package/lib/tests/test.zk.d.ts +0 -1
  449. package/lib/tests/test.zk.js +0 -337
  450. package/lib/tests/utils.d.ts +0 -18
  451. package/lib/tests/utils.js +0 -64
  452. package/lib/utils/atomic-operations.d.ts +0 -24
  453. package/lib/utils/atomic-operations.js +0 -65
  454. package/lib/utils/benchmark.d.ts +0 -1
  455. package/lib/utils/benchmark.js +0 -70
  456. package/lib/utils/connection-state-machine.d.ts +0 -43
  457. package/lib/utils/connection-state-machine.js +0 -129
  458. package/lib/utils/resource-monitor.d.ts +0 -61
  459. package/lib/utils/resource-monitor.js +0 -107
  460. package/lib/utils/validation.js +0 -46
  461. package/lib/window-rpc/index.d.ts +0 -3
  462. package/lib/window-rpc/index.js +0 -20
  463. package/lib/window-rpc/setup-window-rpc.d.ts +0 -5
  464. package/lib/window-rpc/setup-window-rpc.js +0 -291
  465. package/lib/window-rpc/types.js +0 -3
  466. package/lib/window-rpc/utils.d.ts +0 -14
  467. package/lib/window-rpc/utils.js +0 -102
  468. package/lib/window-rpc/window-rpc-zk.d.ts +0 -15
  469. package/lib/window-rpc/window-rpc-zk.js +0 -85
  470. /package/lib/{tests/test.auth.d.ts → browser/external-rpc/jsc-polyfills/2.d.ts} +0 -0
  471. /package/lib/{tests/test.bgp-listener.d.ts → external-rpc/jsc-polyfills/2.d.ts} +0 -0
  472. /package/lib/{tests/test.claim-creation.d.ts → scripts/build-browser.d.ts} +0 -0
  473. /package/lib/{tests/test.http-provider-utils.d.ts → scripts/build-jsc.d.ts} +0 -0
  474. /package/lib/{tests/test.http-provider.d.ts → scripts/build-lib.d.ts} +0 -0
@@ -1,337 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const tls_1 = require("@reclaimprotocol/tls");
7
- const assert_1 = __importDefault(require("assert"));
8
- const config_1 = require("../config");
9
- const api_1 = require("../proto/api");
10
- const toprf_1 = require("../server/handlers/toprf");
11
- const utils_1 = require("../utils");
12
- require("../server/utils/config-env");
13
- const ZK_CIPHER_SUITES = [
14
- 'TLS_CHACHA20_POLY1305_SHA256',
15
- 'TLS_AES_128_GCM_SHA256',
16
- 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
17
- ];
18
- const ZK_ENGINES = [
19
- 'gnark',
20
- 'snarkjs'
21
- ];
22
- jest.setTimeout(90000); // 90s
23
- describe('Redaction Tests', () => {
24
- it('should correctly redact blocks', async () => {
25
- const vectors = [
26
- {
27
- input: [
28
- 'hell',
29
- 'o world'
30
- ],
31
- output: [
32
- 'h***',
33
- '* world'
34
- ],
35
- redactions: [
36
- { fromIndex: 1, toIndex: 5 }
37
- ]
38
- },
39
- {
40
- input: [
41
- 'hell',
42
- 'o world'
43
- ],
44
- output: [
45
- // first block is completely
46
- // redacted, so it won't be included
47
- '* world'
48
- ],
49
- redactions: [
50
- { fromIndex: 0, toIndex: 5 }
51
- ]
52
- },
53
- {
54
- input: [
55
- 'hello',
56
- 'how',
57
- 'do',
58
- 'you',
59
- 'do'
60
- ],
61
- output: [
62
- 'he**o',
63
- 'd*',
64
- 'y*u',
65
- 'do'
66
- ],
67
- redactions: [
68
- { fromIndex: 2, toIndex: 4 },
69
- { fromIndex: 5, toIndex: 8 },
70
- { fromIndex: 9, toIndex: 10 },
71
- { fromIndex: 11, toIndex: 12 }
72
- ]
73
- }
74
- ];
75
- for (const { input, output, redactions } of vectors) {
76
- const realOutput = await (0, utils_1.getBlocksToReveal)(input.map(i => ({ plaintext: Buffer.from(i) })), () => redactions, () => {
77
- throw new Error('should not call this');
78
- });
79
- if (realOutput === 'all') {
80
- fail('should not return "all"');
81
- continue;
82
- }
83
- expect(realOutput).toHaveLength(output.length);
84
- for (const [i, element] of output.entries()) {
85
- expect((0, utils_1.uint8ArrayToStr)(realOutput[i].redactedPlaintext)).toEqual(element);
86
- }
87
- }
88
- });
89
- it('should correctly hash blocks', async () => {
90
- const nullifer = (0, tls_1.strToUint8Array)('abcdefg');
91
- const base64Nullifier = Buffer.from(nullifer).toString('base64');
92
- const vectors = [
93
- {
94
- input: [
95
- 'hell',
96
- 'o world'
97
- ],
98
- output: [
99
- 'h' + base64Nullifier.slice(0, 3),
100
- base64Nullifier.slice(3, 4) + ' world'
101
- ],
102
- redactions: [
103
- { fromIndex: 1, toIndex: 5, hash: 'oprf' }
104
- ]
105
- },
106
- {
107
- input: [
108
- 'hell',
109
- 'o world'
110
- ],
111
- output: [
112
- base64Nullifier.slice(0, 4),
113
- base64Nullifier.slice(4, 5) + ' world'
114
- ],
115
- redactions: [
116
- { fromIndex: 0, toIndex: 5, hash: 'oprf' }
117
- ]
118
- },
119
- ];
120
- for (const { input, output, redactions } of vectors) {
121
- const realOutput = await (0, utils_1.getBlocksToReveal)(input.map(i => ({ plaintext: Buffer.from(i) })), () => redactions, async () => ({
122
- dataLocation: undefined,
123
- nullifier: nullifer,
124
- responses: [],
125
- mask: (0, tls_1.strToUint8Array)('mask'),
126
- plaintext: (0, tls_1.strToUint8Array)('abcdefg')
127
- }));
128
- if (realOutput === 'all') {
129
- fail('should not return "all"');
130
- }
131
- expect(realOutput).toHaveLength(output.length);
132
- for (const [i, element] of output.entries()) {
133
- expect((0, utils_1.uint8ArrayToStr)(realOutput[i].redactedPlaintext)).toEqual(element);
134
- }
135
- }
136
- });
137
- });
138
- describe('OPRF Slicing Tests', () => {
139
- const cipherSuite = 'TLS_CHACHA20_POLY1305_SHA256';
140
- const alg = 'CHACHA20-POLY1305';
141
- const zkEngine = 'gnark';
142
- const keylength = 32;
143
- it('should correctly demarcate blocks for OPRF', async () => {
144
- var _a, _b;
145
- const plaintext = `lorem ipsum dolor sit amet, consectetur adipiscing elit,
146
- sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
147
- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
148
- nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
149
- cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
150
- cupidatat non proident, sunt in culpa qui officia deserunt mollit anim
151
- id est laborum`;
152
- const vectors = [
153
- {
154
- plaintext: plaintext,
155
- redactions: [
156
- { fromIndex: 0, toIndex: 35, hash: 'oprf' },
157
- ]
158
- },
159
- {
160
- plaintext: plaintext,
161
- redactions: [
162
- { fromIndex: 128, toIndex: 138, hash: 'oprf' },
163
- ]
164
- },
165
- {
166
- plaintext: plaintext,
167
- redactions: [
168
- { fromIndex: 125, toIndex: 135, hash: 'oprf' },
169
- ]
170
- }
171
- ];
172
- const key = Buffer.alloc(keylength, 0);
173
- key[0] = 1;
174
- key[3] = 4;
175
- const { ivLength: fixedIvLength, } = tls_1.SUPPORTED_CIPHER_SUITE_MAP[cipherSuite];
176
- const fixedIv = Buffer.alloc(fixedIvLength, 0);
177
- fixedIv[0] = 1;
178
- fixedIv[3] = 4;
179
- const encKey = await tls_1.crypto.importKey(alg, key);
180
- for (const [i, { plaintext, redactions }] of vectors.entries()) {
181
- const plaintextArr = Buffer.from(plaintext);
182
- const { ciphertext, iv } = await (0, tls_1.encryptWrappedRecord)(plaintextArr, {
183
- key: encKey,
184
- iv: fixedIv,
185
- recordNumber: 1234,
186
- recordHeaderOpts: { type: 'WRAPPED_RECORD' },
187
- cipherSuite,
188
- version: cipherSuite.includes('ECDHE_')
189
- ? 'TLS1_2'
190
- : 'TLS1_3',
191
- });
192
- const packet = {
193
- type: 'ciphertext',
194
- encKey,
195
- iv,
196
- recordNumber: 1234,
197
- plaintext: plaintextArr,
198
- ciphertext,
199
- fixedIv: fixedIv,
200
- data: ciphertext
201
- };
202
- const blocksToReveal = await (0, utils_1.getBlocksToReveal)([packet], () => redactions, performOprf);
203
- (0, assert_1.default)(blocksToReveal !== 'all');
204
- expect(blocksToReveal).toHaveLength(1);
205
- expect(blocksToReveal[0].toprfs).toBeTruthy();
206
- const revealsMap = new Map();
207
- revealsMap.set(packet, {
208
- type: 'zk',
209
- redactedPlaintext: blocksToReveal[0].redactedPlaintext,
210
- toprfs: blocksToReveal[0].toprfs
211
- });
212
- const revealedMessages = await (0, utils_1.preparePacketsForReveal)([{ sender: 'server', message: packet }], revealsMap, {
213
- logger: utils_1.logger,
214
- cipherSuite: cipherSuite,
215
- zkEngine: zkEngine,
216
- });
217
- const proofs = (_b = (_a = revealedMessages[0].reveal) === null || _a === void 0 ? void 0 : _a.zkReveal) === null || _b === void 0 ? void 0 : _b.proofs;
218
- expect(proofs === null || proofs === void 0 ? void 0 : proofs.length).toBeTruthy();
219
- const x = await (0, utils_1.verifyZkPacket)({
220
- ciphertext,
221
- zkReveal: { proofs: proofs },
222
- logger: utils_1.logger,
223
- cipherSuite,
224
- zkEngine: zkEngine,
225
- recordNumber: 1234,
226
- iv: fixedIv
227
- });
228
- expect(x.redactedPlaintext).toEqual(blocksToReveal[0].redactedPlaintext);
229
- console.log(`done: ${i + 1}/${vectors.length}`);
230
- }
231
- });
232
- async function performOprf(plaintext) {
233
- utils_1.logger.info({ length: plaintext.length }, 'generating OPRF...');
234
- const oprfOperator = (0, utils_1.makeDefaultOPRFOperator)('chacha20', zkEngine, utils_1.logger);
235
- const reqData = await oprfOperator.generateOPRFRequestData(plaintext, config_1.TOPRF_DOMAIN_SEPARATOR, utils_1.logger);
236
- const res = await (0, toprf_1.toprf)({
237
- maskedData: reqData.maskedData,
238
- engine: api_1.ZKProofEngine.ZK_ENGINE_GNARK
239
- }, { logger: utils_1.logger });
240
- const nullifier = await oprfOperator.finaliseOPRF(res.publicKeyShare, reqData, [res]);
241
- const data = {
242
- nullifier,
243
- responses: [res],
244
- mask: reqData.mask,
245
- dataLocation: undefined,
246
- plaintext
247
- };
248
- return data;
249
- }
250
- });
251
- describe.each(ZK_CIPHER_SUITES)('[%s] should generate ZK proof for some ciphertext', (cipherSuite) => {
252
- describe.each(ZK_ENGINES)('[%s]', (zkEngine) => {
253
- const zkProofConcurrency = zkEngine === 'snarkjs' ? 1 : undefined;
254
- it(zkEngine + '-' + cipherSuite, async () => {
255
- const alg = cipherSuite.includes('CHACHA20')
256
- ? 'CHACHA20-POLY1305'
257
- : (cipherSuite.includes('AES_256_GCM')
258
- ? 'AES-256-GCM'
259
- : 'AES-128-GCM');
260
- const keylength = alg === 'AES-128-GCM' ? 16 : 32;
261
- const key = Buffer.alloc(keylength, 0);
262
- key[0] = 1;
263
- key[3] = 4;
264
- const { ivLength: fixedIvLength, } = tls_1.SUPPORTED_CIPHER_SUITE_MAP[cipherSuite];
265
- const fixedIv = Buffer.alloc(fixedIvLength, 0);
266
- fixedIv[0] = 1;
267
- fixedIv[3] = 4;
268
- const encKey = await tls_1.crypto.importKey(alg, key);
269
- const vectors = [
270
- {
271
- plaintext: 'My cool API secret is "my name jeff". Please don\'t reveal it',
272
- redactions: [
273
- { fromIndex: 23, toIndex: 35 }
274
- ]
275
- },
276
- {
277
- plaintext: `lorem ipsum dolor sit amet, consectetur adipiscing elit,
278
- sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
279
- Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
280
- nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
281
- cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
282
- cupidatat non proident, sunt in culpa qui officia deserunt mollit anim
283
- id est laborum`,
284
- redactions: [
285
- { fromIndex: 5, toIndex: 15 },
286
- ]
287
- }
288
- ];
289
- const proofGenerator = await (0, utils_1.makeZkProofGenerator)({
290
- logger: utils_1.logger,
291
- cipherSuite,
292
- zkEngine,
293
- zkProofConcurrency,
294
- });
295
- for (const { plaintext, redactions } of vectors) {
296
- const plaintextArr = Buffer.from(plaintext);
297
- const redactedPlaintext = (0, utils_1.redactSlices)(plaintextArr, redactions);
298
- // ensure redaction fn kinda works at least
299
- expect(redactedPlaintext).not.toEqual(plaintextArr);
300
- const { ciphertext, iv } = await (0, tls_1.encryptWrappedRecord)(plaintextArr, {
301
- key: encKey,
302
- iv: fixedIv,
303
- recordNumber: 1234,
304
- recordHeaderOpts: { type: 'WRAPPED_RECORD' },
305
- cipherSuite,
306
- version: cipherSuite.includes('ECDHE_')
307
- ? 'TLS1_2'
308
- : 'TLS1_3',
309
- });
310
- const packet = {
311
- type: 'ciphertext',
312
- encKey,
313
- iv,
314
- recordNumber: 1234,
315
- plaintext: plaintextArr,
316
- ciphertext,
317
- fixedIv: fixedIv,
318
- data: ciphertext
319
- };
320
- let proofs;
321
- await proofGenerator.addPacketToProve(packet, { type: 'zk', redactedPlaintext }, p => proofs = p);
322
- await proofGenerator.generateProofs();
323
- const x = await (0, utils_1.verifyZkPacket)({
324
- ciphertext,
325
- zkReveal: { proofs: proofs },
326
- logger: utils_1.logger,
327
- cipherSuite,
328
- zkEngine: zkEngine,
329
- recordNumber: 1234,
330
- iv: fixedIv
331
- });
332
- expect(redactedPlaintext).toEqual(x.redactedPlaintext);
333
- }
334
- });
335
- });
336
- });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC56ay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0cy90ZXN0LnprLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQTZIO0FBRTdILG9EQUEyQjtBQUMzQix1Q0FBbUQ7QUFDbkQsdUNBQStFO0FBQy9FLHFEQUFpRDtBQUVqRCxxQ0FTa0I7QUFDbEIsdUNBQW9DO0FBRXBDLE1BQU0sZ0JBQWdCLEdBQWtCO0lBQ3ZDLDhCQUE4QjtJQUM5Qix3QkFBd0I7SUFDeEIseUNBQXlDO0NBQ3pDLENBQUE7QUFFRCxNQUFNLFVBQVUsR0FBZTtJQUM5QixPQUFPO0lBQ1AsU0FBUztDQUNULENBQUE7QUFRRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQU0sQ0FBQyxDQUFBLENBQUMsTUFBTTtBQUU5QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBRWhDLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUcsRUFBRTtRQUM5QyxNQUFNLE9BQU8sR0FBMEI7WUFDdEM7Z0JBQ0MsS0FBSyxFQUFFO29CQUNOLE1BQU07b0JBQ04sU0FBUztpQkFDVDtnQkFDRCxNQUFNLEVBQUU7b0JBQ1AsTUFBTTtvQkFDTixTQUFTO2lCQUNUO2dCQUNELFVBQVUsRUFBRTtvQkFDWCxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtpQkFDNUI7YUFDRDtZQUNEO2dCQUNDLEtBQUssRUFBRTtvQkFDTixNQUFNO29CQUNOLFNBQVM7aUJBQ1Q7Z0JBQ0QsTUFBTSxFQUFFO29CQUNQLDRCQUE0QjtvQkFDNUIsb0NBQW9DO29CQUNwQyxTQUFTO2lCQUNUO2dCQUNELFVBQVUsRUFBRTtvQkFDWCxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtpQkFDNUI7YUFDRDtZQUNEO2dCQUNDLEtBQUssRUFBRTtvQkFDTixPQUFPO29CQUNQLEtBQUs7b0JBQ0wsSUFB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
@@ -1,18 +0,0 @@
1
- import { ClaimTunnelRequest } from '../proto/api';
2
- export declare function delay(ms: number): Promise<unknown>;
3
- export declare function randomPrivateKey(): string;
4
- export declare function getRandomPort(): number;
5
- /**
6
- * Verifies that no direct reveal accidentally leaked
7
- * the key. This is done by checking that no other
8
- * application data packets were sent with the same key
9
- *
10
- * Uses the spy on preparePacketsForReveal to get the
11
- * tls transcript and reveals map that was used.
12
- */
13
- export declare function verifyNoDirectRevealLeaks(): void;
14
- /**
15
- * Gets the first TOPRF block from the transcript.
16
- * Returns undefined if no TOPRF block is found.
17
- */
18
- export declare function getFirstTOprfBlock({ transcript }: ClaimTunnelRequest): import("../proto/api").TOPRFPayload | undefined;
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.delay = delay;
4
- exports.randomPrivateKey = randomPrivateKey;
5
- exports.getRandomPort = getRandomPort;
6
- exports.verifyNoDirectRevealLeaks = verifyNoDirectRevealLeaks;
7
- exports.getFirstTOprfBlock = getFirstTOprfBlock;
8
- const crypto_1 = require("crypto");
9
- const mocks_1 = require("../tests/mocks");
10
- function delay(ms) {
11
- return new Promise((resolve) => setTimeout(resolve, ms));
12
- }
13
- function randomPrivateKey() {
14
- return '0x' + (0, crypto_1.randomBytes)(32).toString('hex');
15
- }
16
- function getRandomPort() {
17
- return Math.floor(Math.random() * 5000 + 5000);
18
- }
19
- /**
20
- * Verifies that no direct reveal accidentally leaked
21
- * the key. This is done by checking that no other
22
- * application data packets were sent with the same key
23
- *
24
- * Uses the spy on preparePacketsForReveal to get the
25
- * tls transcript and reveals map that was used.
26
- */
27
- function verifyNoDirectRevealLeaks() {
28
- if (!mocks_1.SPY_PREPARER.mock.calls.length) {
29
- return;
30
- }
31
- const [tlsTranscript, revealsMap] = mocks_1.SPY_PREPARER.mock.calls[0];
32
- for (const [packet, reveal] of revealsMap.entries()) {
33
- if (reveal.type !== 'complete') {
34
- continue;
35
- }
36
- if (packet.type === 'plaintext') {
37
- continue;
38
- }
39
- // find any other packets with the same key
40
- // that do not have a reveal & were application data.
41
- // If we find any, it means we've leaked the key
42
- const otherPacketsWKey = tlsTranscript
43
- .filter(({ message }) => (message.type === 'ciphertext'
44
- && !revealsMap.get(message)
45
- && message.encKey === packet.encKey
46
- && message.contentType === 'APPLICATION_DATA'));
47
- expect(otherPacketsWKey).toHaveLength(0);
48
- }
49
- }
50
- /**
51
- * Gets the first TOPRF block from the transcript.
52
- * Returns undefined if no TOPRF block is found.
53
- */
54
- function getFirstTOprfBlock({ transcript }) {
55
- var _a;
56
- for (const { reveal } of transcript) {
57
- for (const proof of ((_a = reveal === null || reveal === void 0 ? void 0 : reveal.zkReveal) === null || _a === void 0 ? void 0 : _a.proofs) || []) {
58
- if (proof.toprf) {
59
- return proof.toprf;
60
- }
61
- }
62
- }
63
- }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdHMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxzQkFFQztBQUVELDRDQUVDO0FBRUQsc0NBRUM7QUFVRCw4REEyQkM7QUFNRCxnREFRQztBQWpFRCxtQ0FBb0M7QUFFcEMsMkNBQThDO0FBRTlDLFNBQWdCLEtBQUssQ0FBQyxFQUFVO0lBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCO0lBQy9CLE9BQU8sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUMsQ0FBQztBQUVELFNBQWdCLGFBQWE7SUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQix5QkFBeUI7SUFDeEMsSUFBRyxDQUFDLG9CQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxPQUFNO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLEdBQUcsb0JBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlELEtBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNwRCxJQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0IsU0FBUTtRQUNULENBQUM7UUFFRCxJQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDaEMsU0FBUTtRQUNULENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MscURBQXFEO1FBQ3JELGdEQUFnRDtRQUNoRCxNQUFNLGdCQUFnQixHQUFHLGFBQWE7YUFDcEMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDeEIsT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZO2VBQzFCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7ZUFDeEIsT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtlQUNoQyxPQUFPLENBQUMsV0FBVyxLQUFLLGtCQUFrQixDQUM3QyxDQUFDLENBQUE7UUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekMsQ0FBQztBQUNGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxFQUFFLFVBQVUsRUFBc0I7O0lBQ3BFLEtBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLEtBQUksTUFBTSxLQUFLLElBQUksQ0FBQSxNQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxRQUFRLDBDQUFFLE1BQU0sS0FBSSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxJQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ25CLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztBQUNGLENBQUMifQ==
@@ -1,24 +0,0 @@
1
- /**
2
- * Atomic operations utility for preventing race conditions.
3
- * Provides mutex-like locks using Promise-based mutual exclusion.
4
- */
5
- export declare class AtomicOperations {
6
- private static locks;
7
- /**
8
- * Execute a function with a named lock to prevent concurrent execution.
9
- * @param lockName Unique identifier for the lock
10
- * @param fn Function to execute atomically
11
- * @returns Promise that resolves with the function's return value
12
- */
13
- static withLock<T>(lockName: string, fn: () => Promise<T>): Promise<T>;
14
- /**
15
- * Check if a lock is currently held.
16
- * @param lockName Name of the lock to check
17
- * @returns True if the lock is currently held
18
- */
19
- static isLocked(lockName: string): boolean;
20
- /**
21
- * Clear all locks (for testing/cleanup).
22
- */
23
- static clearAllLocks(): void;
24
- }
@@ -1,65 +0,0 @@
1
- "use strict";
2
- /**
3
- * Atomic operations utility for preventing race conditions.
4
- * Provides mutex-like locks using Promise-based mutual exclusion.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.AtomicOperations = void 0;
8
- class AtomicOperations {
9
- /**
10
- * Execute a function with a named lock to prevent concurrent execution.
11
- * @param lockName Unique identifier for the lock
12
- * @param fn Function to execute atomically
13
- * @returns Promise that resolves with the function's return value
14
- */
15
- static async withLock(lockName, fn) {
16
- // Wait for any existing lock to complete
17
- const existingLock = this.locks.get(lockName);
18
- if (existingLock) {
19
- await existingLock.catch(() => {
20
- // Ignore errors from previous lock holders
21
- });
22
- }
23
- // Create a new lock
24
- let resolve;
25
- let reject;
26
- const lockPromise = new Promise((res, rej) => {
27
- resolve = res;
28
- reject = rej;
29
- });
30
- this.locks.set(lockName, lockPromise);
31
- try {
32
- // Execute the function
33
- const result = await fn();
34
- resolve();
35
- return result;
36
- }
37
- catch (error) {
38
- reject(error);
39
- throw error;
40
- }
41
- finally {
42
- // Clean up the lock if we're still the current holder
43
- if (this.locks.get(lockName) === lockPromise) {
44
- this.locks.delete(lockName);
45
- }
46
- }
47
- }
48
- /**
49
- * Check if a lock is currently held.
50
- * @param lockName Name of the lock to check
51
- * @returns True if the lock is currently held
52
- */
53
- static isLocked(lockName) {
54
- return this.locks.has(lockName);
55
- }
56
- /**
57
- * Clear all locks (for testing/cleanup).
58
- */
59
- static clearAllLocks() {
60
- this.locks.clear();
61
- }
62
- }
63
- exports.AtomicOperations = AtomicOperations;
64
- AtomicOperations.locks = new Map();
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljLW9wZXJhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXRvbWljLW9wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsTUFBYSxnQkFBZ0I7SUFHNUI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBSSxRQUFnQixFQUFFLEVBQW9CO1FBQzlELHlDQUF5QztRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQzdCLDJDQUEyQztZQUM1QyxDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxPQUFtQixDQUFBO1FBQ3ZCLElBQUksTUFBNEIsQ0FBQTtRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNsRCxPQUFPLEdBQUcsR0FBRyxDQUFBO1lBQ2IsTUFBTSxHQUFHLEdBQUcsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXJDLElBQUksQ0FBQztZQUNKLHVCQUF1QjtZQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFBO1lBQ3pCLE9BQVEsRUFBRSxDQUFBO1lBQ1YsT0FBTyxNQUFNLENBQUE7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNoQixNQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZCxNQUFNLEtBQUssQ0FBQTtRQUNaLENBQUM7Z0JBQVMsQ0FBQztZQUNWLHNEQUFzRDtZQUN0RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUM1QixDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxhQUFhO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQzs7QUExREYsNENBMkRDO0FBMURlLHNCQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUEifQ==
@@ -1 +0,0 @@
1
- export declare function Benchmark(): Promise<string>;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Benchmark = Benchmark;
4
- const tls_1 = require("@reclaimprotocol/tls");
5
- const logger_1 = require("../utils/logger");
6
- const zk_1 = require("../utils/zk");
7
- const ZK_CIPHER_SUITES = [
8
- 'TLS_CHACHA20_POLY1305_SHA256',
9
- 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
10
- 'TLS_AES_128_GCM_SHA256'
11
- ];
12
- async function Benchmark() {
13
- let benchmarkRes = '';
14
- for (const cipherSuite of ZK_CIPHER_SUITES) {
15
- const now = Date.now();
16
- const alg = cipherSuite.includes('CHACHA20')
17
- ? 'CHACHA20-POLY1305'
18
- : (cipherSuite.includes('AES_256_GCM')
19
- ? 'AES-256-GCM'
20
- : 'AES-128-GCM');
21
- const keylength = alg === 'AES-128-GCM' ? 16 : 32;
22
- const key = Buffer.alloc(keylength, 0);
23
- const { ivLength: fixedIvLength, } = tls_1.SUPPORTED_CIPHER_SUITE_MAP[cipherSuite];
24
- const fixedIv = Buffer.alloc(fixedIvLength, 0);
25
- const encKey = await tls_1.crypto.importKey(alg, key);
26
- const vectors = [
27
- {
28
- plaintext: 'My cool API secret is "my name jeff". Please don\'t reveal it'
29
- }
30
- ];
31
- const proofGenerator = await (0, zk_1.makeZkProofGenerator)({
32
- logger: logger_1.logger,
33
- cipherSuite,
34
- });
35
- for (const { plaintext } of vectors) {
36
- const plaintextArr = (0, tls_1.strToUint8Array)(plaintext);
37
- const { ciphertext, iv } = await (0, tls_1.encryptWrappedRecord)(plaintextArr, {
38
- key: encKey,
39
- iv: fixedIv,
40
- recordNumber: 0,
41
- recordHeaderOpts: {
42
- type: 'WRAPPED_RECORD'
43
- },
44
- cipherSuite,
45
- version: cipherSuite.includes('ECDHE_')
46
- ? 'TLS1_2'
47
- : 'TLS1_3',
48
- });
49
- const packet = {
50
- type: 'ciphertext',
51
- encKey,
52
- iv,
53
- recordNumber: 0,
54
- plaintext: plaintextArr,
55
- ciphertext,
56
- fixedIv: new Uint8Array(0),
57
- data: ciphertext
58
- };
59
- await proofGenerator.addPacketToProve(packet, {
60
- type: 'zk',
61
- redactedPlaintext: plaintextArr,
62
- }, () => { });
63
- await proofGenerator.generateProofs();
64
- }
65
- benchmarkRes = benchmarkRes + `Benchmark ${alg} ok. Took ${Date.now() - now} ms \n`;
66
- }
67
- logger_1.logger.info(benchmarkRes);
68
- return benchmarkRes;
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSw4QkErRUM7QUFoR0QsOENBSzZCO0FBRTdCLDZDQUF5QztBQUN6QyxxQ0FBbUQ7QUFHbkQsTUFBTSxnQkFBZ0IsR0FBa0I7SUFDdkMsOEJBQThCO0lBQzlCLHlDQUF5QztJQUN6Qyx3QkFBd0I7Q0FDeEIsQ0FBQTtBQUVNLEtBQUssVUFBVSxTQUFTO0lBRTlCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixLQUFJLE1BQU0sV0FBVyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFFM0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBRXRCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxtQkFBbUI7WUFDckIsQ0FBQyxDQUFDLENBQ0QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxhQUFhO2dCQUNmLENBQUMsQ0FBQyxhQUFhLENBQ2hCLENBQUE7UUFDRixNQUFNLFNBQVMsR0FBRyxHQUFHLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUN0QyxNQUFNLEVBQ0wsUUFBUSxFQUFFLGFBQWEsR0FDdkIsR0FBRyxnQ0FBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUU5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sT0FBTyxHQUFHO1lBQ2Y7Z0JBQ0MsU0FBUyxFQUFFLCtEQUErRDthQUMxRTtTQUNELENBQUE7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEseUJBQW9CLEVBQUM7WUFDakQsTUFBTSxFQUFOLGVBQU07WUFDTixXQUFXO1NBQ1gsQ0FBQyxDQUFBO1FBQ0YsS0FBSSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBQSxxQkFBZSxFQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRS9DLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBCQUFvQixFQUNwRCxZQUFZLEVBQ1o7Z0JBQ0MsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsZ0JBQWdCLEVBQUU7b0JBQ2pCLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3RCO2dCQUNELFdBQVc7Z0JBQ1gsT0FBTyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsUUFBUTthQUNYLENBQ0QsQ0FBQTtZQUVELE1BQU0sTUFBTSxHQUFzQjtnQkFDakMsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLE1BQU07Z0JBQ04sRUFBRTtnQkFDRixZQUFZLEVBQUUsQ0FBQztnQkFDZixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsVUFBVTtnQkFDVixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEVBQUUsVUFBVTthQUNoQixDQUFBO1lBRUQsTUFBTSxjQUFjLENBQUMsZ0JBQWdCLENBQ3BDLE1BQU0sRUFDTjtnQkFDQyxJQUFJLEVBQUUsSUFBSTtnQkFDVixpQkFBaUIsRUFBQyxZQUFZO2FBQzlCLEVBQ0QsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUNSLENBQUE7WUFDRCxNQUFNLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUV0QyxDQUFDO1FBRUQsWUFBWSxHQUFHLFlBQVksR0FBRyxhQUFhLEdBQUcsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUE7SUFDcEYsQ0FBQztJQUVELGVBQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDekIsT0FBTyxZQUFZLENBQUE7QUFDcEIsQ0FBQyJ9
@@ -1,43 +0,0 @@
1
- /**
2
- * Connection state machine for managing atomic state transitions.
3
- * Prevents race conditions in connection state management.
4
- */
5
- export declare enum ConnectionState {
6
- CONNECTING = "connecting",
7
- CONNECTED = "connected",
8
- CLOSING = "closing",
9
- CLOSED = "closed"
10
- }
11
- type StateChangeListener = (oldState: ConnectionState, newState: ConnectionState) => void;
12
- export declare class ConnectionStateMachine {
13
- private currentState;
14
- private listeners;
15
- private transitionLock;
16
- constructor(initialState?: ConnectionState);
17
- /**
18
- * Get current state.
19
- */
20
- getState(): ConnectionState;
21
- /**
22
- * Check if the connection is in any of the specified states.
23
- */
24
- isInState(...states: ConnectionState[]): boolean;
25
- /**
26
- * Register a state change listener.
27
- */
28
- onStateChange(listener: StateChangeListener): () => void;
29
- /**
30
- * Attempt to transition from allowed states to a new state.
31
- * @param fromStates Allowed states to transition from
32
- * @param toState Target state
33
- * @param action Optional action to execute during transition
34
- * @returns Promise that resolves to true if transition succeeded
35
- */
36
- transition(fromStates: ConnectionState | ConnectionState[], toState: ConnectionState, action?: () => Promise<void>): Promise<boolean>;
37
- /**
38
- * Force a state change without checking allowed transitions.
39
- * Use with caution - mainly for error recovery.
40
- */
41
- forceState(newState: ConnectionState): Promise<void>;
42
- }
43
- export {};