@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,424 +1,461 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createClaimOnAttestor = createClaimOnAttestor;
4
- const tls_1 = require("@reclaimprotocol/tls");
5
- const make_rpc_tls_tunnel_1 = require("../client/tunnels/make-rpc-tls-tunnel");
6
- const attestor_pool_1 = require("../client/utils/attestor-pool");
7
- const config_1 = require("../config");
8
- const api_1 = require("../proto/api");
9
- const providers_1 = require("../providers");
10
- const utils_1 = require("../utils");
11
- const retries_1 = require("../utils/retries");
12
- const signatures_1 = require("../utils/signatures");
13
- const tls_2 = require("../utils/tls");
14
- /**
15
- * Create a claim on the attestor
16
- */
17
- function createClaimOnAttestor({ logger: _logger, maxRetries = 3, ...opts }) {
18
- const logger = _logger
19
- // if the client has already been initialised
20
- // and no logger is provided, use the client's logger
21
- // otherwise default to the global logger
22
- || ('logger' in opts.client ? opts.client.logger : utils_1.logger);
23
- return (0, retries_1.executeWithRetries)(attempt => (_createClaimOnAttestor({
24
- ...opts,
25
- logger: attempt
26
- ? logger.child({ attempt })
27
- : logger
28
- })), { maxRetries, logger, shouldRetry });
1
+ import { makeRpcTlsTunnel } from "../client/tunnels/make-rpc-tls-tunnel.js";
2
+ import { getAttestorClientFromPool } from "../client/utils/attestor-pool.js";
3
+ import { DEFAULT_HTTPS_PORT, PROVIDER_CTX, TOPRF_DOMAIN_SEPARATOR } from "../config/index.js";
4
+ import { ClaimTunnelRequest } from "../proto/api.js";
5
+ import { providers } from "../providers/index.js";
6
+ import {
7
+ asciiToUint8Array,
8
+ AttestorError,
9
+ binaryHashToStr,
10
+ canonicalStringify,
11
+ generateTunnelId,
12
+ getBlocksToReveal,
13
+ getEngineProto,
14
+ getProviderValue,
15
+ isApplicationData,
16
+ logger as LOGGER,
17
+ makeDefaultOPRFOperator,
18
+ makeHttpResponseParser,
19
+ preparePacketsForReveal,
20
+ redactSlices,
21
+ uint8ArrayToStr,
22
+ unixTimestampSeconds
23
+ } from "../utils/index.js";
24
+ import { executeWithRetries } from "../utils/retries.js";
25
+ import { SIGNATURES } from "../utils/signatures/index.js";
26
+ import { getDefaultTlsOptions } from "../utils/tls.js";
27
+ function createClaimOnAttestor({
28
+ logger: _logger,
29
+ maxRetries = 3,
30
+ ...opts
31
+ }) {
32
+ const logger = _logger || ("logger" in opts.client ? opts.client.logger : LOGGER);
33
+ return executeWithRetries(
34
+ (attempt) => _createClaimOnAttestor({
35
+ ...opts,
36
+ logger: attempt ? logger.child({ attempt }) : logger
37
+ }),
38
+ { maxRetries, logger, shouldRetry }
39
+ );
29
40
  }
30
41
  function shouldRetry(err) {
31
- var _a;
32
- if (err instanceof TypeError) {
33
- return false;
34
- }
35
- // possibly a network error, or the server
36
- // closed the connection before we received the full data
37
- if ((_a = err.message) === null || _a === void 0 ? void 0 : _a.includes('stream ended before')) {
38
- return true;
39
- }
40
- return err instanceof utils_1.AttestorError
41
- && err.code !== 'ERROR_INVALID_CLAIM'
42
- && err.code !== 'ERROR_BAD_REQUEST'
43
- && err.code !== 'ERROR_AUTHENTICATION_FAILED';
42
+ if (err instanceof TypeError) {
43
+ return false;
44
+ }
45
+ if (err?.message?.includes("stream ended before")) {
46
+ return true;
47
+ }
48
+ return err instanceof AttestorError && err.code !== "ERROR_INVALID_CLAIM" && err.code !== "ERROR_BAD_REQUEST" && err.code !== "ERROR_AUTHENTICATION_FAILED" && err.code !== "ERROR_TOPRF_OUT_OF_BOUNDS";
44
49
  }
45
- async function _createClaimOnAttestor({ name, params, secretParams, context, onStep, ownerPrivateKey, client: clientInit, logger = utils_1.logger, timestampS, updateProviderParams, updateParametersFromOprfData = true, ...zkOpts }) {
46
- const provider = providers_1.providers[name];
47
- const hostPort = (0, utils_1.getProviderValue)(params, provider.hostPort, secretParams);
48
- const geoLocation = (0, utils_1.getProviderValue)(params, provider.geoLocation, secretParams);
49
- const providerTlsOpts = (0, utils_1.getProviderValue)(params, provider.additionalClientOptions);
50
- const tlsOpts = { ...(0, tls_2.getDefaultTlsOptions)(), ...providerTlsOpts };
51
- const { zkEngine = 'snarkjs' } = zkOpts;
52
- let redactionMode = (0, utils_1.getProviderValue)(params, provider.writeRedactionMode);
53
- const [host, port] = hostPort.split(':');
54
- const resParser = (0, utils_1.makeHttpResponseParser)();
55
- let client;
56
- let lastMsgRevealed = false;
57
- const revealMap = new Map();
58
- onStep === null || onStep === void 0 ? void 0 : onStep({ name: 'connecting' });
59
- let endedHttpRequest;
60
- const createTunnelReq = {
61
- host,
62
- port: port ? +port : config_1.DEFAULT_HTTPS_PORT,
63
- geoLocation,
64
- id: (0, utils_1.generateTunnelId)()
65
- };
66
- logger = logger.child({ tunnelId: createTunnelReq.id });
67
- const authRequest = 'authRequest' in clientInit
68
- ? (typeof clientInit.authRequest === 'function'
69
- ? await clientInit.authRequest()
70
- : clientInit.authRequest)
71
- : undefined;
72
- const tunnel = await (0, make_rpc_tls_tunnel_1.makeRpcTlsTunnel)({
73
- tlsOpts,
74
- connect: (connectMsgs) => {
75
- let created = false;
76
- if ('metadata' in clientInit) {
77
- client = clientInit;
78
- }
79
- else {
80
- client = (0, attestor_pool_1.getAttestorClientFromPool)(clientInit.url, () => {
81
- created = true;
82
- return {
83
- authRequest: authRequest,
84
- initMessages: connectMsgs,
85
- logger
86
- };
87
- });
88
- }
89
- if (!created) {
90
- client
91
- .waitForInit()
92
- .then(() => client.sendMessage(...connectMsgs))
93
- .catch(err => {
94
- logger.error({ err }, 'error in sending init msgs');
95
- });
96
- }
97
- return client;
98
- },
99
- logger,
100
- request: createTunnelReq,
101
- onMessage(data) {
102
- logger.debug({ bytes: data.length }, 'recv data from server');
103
- resParser.onChunk(data);
104
- if (resParser.res.complete) {
105
- logger === null || logger === void 0 ? void 0 : logger.debug('got complete HTTP response from server');
106
- // wait a little bit to make sure the client has
107
- // finished writing the response
108
- setTimeout(() => {
109
- endedHttpRequest === null || endedHttpRequest === void 0 ? void 0 : endedHttpRequest();
110
- }, 100);
111
- }
112
- },
113
- onClose(err) {
114
- const level = err ? 'error' : 'debug';
115
- logger === null || logger === void 0 ? void 0 : logger[level]({ err }, 'tls session ended');
116
- endedHttpRequest === null || endedHttpRequest === void 0 ? void 0 : endedHttpRequest(err);
117
- try {
118
- resParser.streamEnded();
119
- }
120
- catch (_a) { }
121
- },
122
- });
123
- const { version: tlsVersion, cipherSuite } = tunnel.tls.getMetadata();
124
- if (tlsVersion === 'TLS1_2' && redactionMode !== 'zk') {
125
- redactionMode = 'zk';
126
- logger.info('TLS1.2 detected, defaulting to zk redaction mode');
50
+ async function _createClaimOnAttestor({
51
+ name,
52
+ params,
53
+ secretParams,
54
+ context,
55
+ onStep,
56
+ ownerPrivateKey,
57
+ client: clientInit,
58
+ logger = LOGGER,
59
+ timestampS,
60
+ updateProviderParams,
61
+ updateParametersFromOprfData = true,
62
+ ...zkOpts
63
+ }) {
64
+ const provider = providers[name];
65
+ const hostPort = getProviderValue(params, provider.hostPort, secretParams);
66
+ const geoLocation = getProviderValue(params, provider.geoLocation, secretParams);
67
+ const proxySessionId = getProviderValue(params, provider.proxySessionId, secretParams);
68
+ const providerTlsOpts = getProviderValue(
69
+ params,
70
+ provider.additionalClientOptions
71
+ );
72
+ const tlsOpts = {
73
+ ...getDefaultTlsOptions(),
74
+ fetchCertificateBytes: fetchCertificateBytesFromAttestor,
75
+ ...providerTlsOpts
76
+ };
77
+ const { zkEngine = "snarkjs" } = zkOpts;
78
+ let redactionMode = getProviderValue(params, provider.writeRedactionMode);
79
+ const [host, port] = hostPort.split(":");
80
+ const resParser = makeHttpResponseParser();
81
+ let client;
82
+ let lastMsgRevealed = false;
83
+ const revealMap = /* @__PURE__ */ new Map();
84
+ onStep?.({ name: "connecting" });
85
+ let endedHttpRequest;
86
+ const createTunnelReq = {
87
+ host,
88
+ port: port ? +port : DEFAULT_HTTPS_PORT,
89
+ geoLocation,
90
+ proxySessionId,
91
+ id: generateTunnelId()
92
+ };
93
+ logger = logger.child({ tunnelId: createTunnelReq.id });
94
+ const authRequest = "authRequest" in clientInit ? typeof clientInit.authRequest === "function" ? await clientInit.authRequest() : clientInit.authRequest : void 0;
95
+ const tunnel = await makeRpcTlsTunnel({
96
+ tlsOpts,
97
+ connect: (connectMsgs) => {
98
+ let created = false;
99
+ if ("metadata" in clientInit) {
100
+ client = clientInit;
101
+ } else {
102
+ client = getAttestorClientFromPool(
103
+ clientInit.url,
104
+ () => {
105
+ created = true;
106
+ return {
107
+ authRequest,
108
+ initMessages: connectMsgs,
109
+ logger
110
+ };
111
+ }
112
+ );
113
+ }
114
+ if (!created) {
115
+ client.waitForInit().then(() => client.sendMessage(...connectMsgs)).catch((err) => {
116
+ logger.error(
117
+ { err },
118
+ "error in sending init msgs"
119
+ );
120
+ });
121
+ }
122
+ return client;
123
+ },
124
+ logger,
125
+ request: createTunnelReq,
126
+ onMessage(data) {
127
+ logger.debug({ bytes: data.length }, "recv data from server");
128
+ resParser.onChunk(data);
129
+ if (resParser.res.complete) {
130
+ logger?.debug("got complete HTTP response from server");
131
+ setTimeout(() => {
132
+ endedHttpRequest?.();
133
+ }, 100);
134
+ }
135
+ },
136
+ onClose(err) {
137
+ const level = err ? "error" : "debug";
138
+ logger?.[level]({ err }, "tls session ended");
139
+ endedHttpRequest?.(err);
140
+ try {
141
+ resParser.streamEnded();
142
+ } catch {
143
+ }
127
144
  }
128
- const { redactions, data: requestStr } = provider.createRequest(
145
+ });
146
+ const {
147
+ version: tlsVersion,
148
+ cipherSuite
149
+ } = tunnel.tls.getMetadata();
150
+ if (tlsVersion === "TLS1_2" && redactionMode !== "zk") {
151
+ redactionMode = "zk";
152
+ logger.info("TLS1.2 detected, defaulting to zk redaction mode");
153
+ }
154
+ const {
155
+ redactions,
156
+ data: requestStr
157
+ } = provider.createRequest(
129
158
  // @ts-ignore
130
- secretParams, params, logger);
131
- const requestData = typeof requestStr === 'string'
132
- ? (0, tls_1.strToUint8Array)(requestStr)
133
- : requestStr;
134
- logger.debug({ redactions: redactions.length }, 'generated request');
135
- const waitForAllData = new Promise((resolve, reject) => {
136
- endedHttpRequest = err => (err ? reject(err) : resolve());
137
- });
138
- onStep === null || onStep === void 0 ? void 0 : onStep({ name: 'sending-request-data' });
139
- try {
140
- if (redactionMode === 'zk') {
141
- await writeRedactedZk();
142
- }
143
- else {
144
- await writeRedactedWithKeyUpdate();
145
- }
146
- logger.info('wrote request to server');
159
+ secretParams,
160
+ params,
161
+ logger
162
+ );
163
+ const requestData = typeof requestStr === "string" ? asciiToUint8Array(requestStr) : requestStr;
164
+ logger.debug(
165
+ { redactions: redactions.length },
166
+ "generated request"
167
+ );
168
+ const waitForAllData = new Promise(
169
+ (resolve, reject) => {
170
+ endedHttpRequest = (err) => err ? reject(err) : resolve();
147
171
  }
148
- catch (err) {
149
- // wait for complete stream end when the session is closed
150
- // mid-write, as this means the server could not process
151
- // our request due to some error. Hope the stream end
152
- // error will be more descriptive
153
- logger.error({ err }, 'session errored during write, waiting for stream end');
172
+ );
173
+ onStep?.({ name: "sending-request-data" });
174
+ try {
175
+ if (redactionMode === "zk") {
176
+ await writeRedactedZk();
177
+ } else {
178
+ await writeRedactedWithKeyUpdate();
154
179
  }
155
- onStep === null || onStep === void 0 ? void 0 : onStep({ name: 'waiting-for-response' });
156
- await waitForAllData;
157
- await tunnel.close();
158
- logger.info('session closed, processing response');
159
- // update the response selections
160
- if (updateProviderParams) {
161
- const { params: updatedParms, secretParams: updatedSecretParms } = await updateProviderParams(tunnel.transcript, tlsVersion !== null && tlsVersion !== void 0 ? tlsVersion : 'TLS1_2');
162
- params = { ...params, ...updatedParms };
163
- secretParams = { ...secretParams, ...updatedSecretParms };
180
+ logger.info("wrote request to server");
181
+ } catch (err) {
182
+ logger.error(
183
+ { err },
184
+ "session errored during write, waiting for stream end"
185
+ );
186
+ }
187
+ onStep?.({ name: "waiting-for-response" });
188
+ await waitForAllData;
189
+ await tunnel.close();
190
+ logger.info("session closed, processing response");
191
+ if (updateProviderParams) {
192
+ const { params: updatedParms, secretParams: updatedSecretParms } = await updateProviderParams(tunnel.transcript, tlsVersion ?? "TLS1_2");
193
+ params = { ...params, ...updatedParms };
194
+ secretParams = { ...secretParams, ...updatedSecretParms };
195
+ }
196
+ const signatureAlg = SIGNATURES[client.metadata.signatureType];
197
+ let serverIV;
198
+ let clientIV;
199
+ const [serverBlock] = getLastBlocks("server", 1);
200
+ if (serverBlock?.message.type === "ciphertext") {
201
+ serverIV = serverBlock.message.fixedIv;
202
+ }
203
+ const [clientBlock] = getLastBlocks("client", 1);
204
+ if (clientBlock?.message.type === "ciphertext") {
205
+ clientIV = clientBlock.message.fixedIv;
206
+ }
207
+ const transcript = await generateTranscript();
208
+ const claimTunnelReq = ClaimTunnelRequest.create({
209
+ request: createTunnelReq,
210
+ data: {
211
+ provider: name,
212
+ parameters: canonicalStringify(params),
213
+ context: canonicalStringify(context),
214
+ timestampS: timestampS ?? unixTimestampSeconds(),
215
+ owner: getAddress()
216
+ },
217
+ transcript,
218
+ zkEngine: getEngineProto(zkEngine),
219
+ fixedServerIV: serverIV,
220
+ fixedClientIV: clientIV
221
+ });
222
+ onStep?.({ name: "waiting-for-verification" });
223
+ const claimTunnelBytes = ClaimTunnelRequest.encode(claimTunnelReq).finish();
224
+ const requestSignature = await signatureAlg.sign(claimTunnelBytes, ownerPrivateKey);
225
+ claimTunnelReq.signatures = { requestSignature };
226
+ const result = await client.rpc("claimTunnel", claimTunnelReq);
227
+ logger.info({ success: !!result.claim }, "recv claim response");
228
+ return result;
229
+ async function fetchCertificateBytesFromAttestor(url) {
230
+ if (!client) {
231
+ throw new Error("attestor client not initialized");
164
232
  }
165
- const signatureAlg = signatures_1.SIGNATURES[client.metadata.signatureType];
166
- let serverIV;
167
- let clientIV;
168
- const [serverBlock] = getLastBlocks('server', 1);
169
- if (serverBlock && serverBlock.message.type === 'ciphertext') {
170
- serverIV = serverBlock.message.fixedIv;
233
+ const result2 = await client.rpc("fetchCertificateBytes", { url });
234
+ return result2.bytes;
235
+ }
236
+ async function writeRedactedWithKeyUpdate() {
237
+ let currentIndex = 0;
238
+ for (const section of redactions) {
239
+ const block2 = requestData.slice(currentIndex, section.fromIndex);
240
+ if (block2.length) {
241
+ await writeWithReveal(block2, true);
242
+ }
243
+ const redacted = requestData.slice(section.fromIndex, section.toIndex);
244
+ await writeWithReveal(redacted, false);
245
+ currentIndex = section.toIndex;
171
246
  }
172
- const [clientBlock] = getLastBlocks('client', 1);
173
- if (clientBlock && clientBlock.message.type === 'ciphertext') {
174
- clientIV = clientBlock.message.fixedIv;
175
- }
176
- const transcript = await generateTranscript();
177
- // now that we have the full transcript, we need
178
- // to generate the ZK proofs & send them to the attestor
179
- // to verify & sign our claim
180
- const claimTunnelReq = api_1.ClaimTunnelRequest.create({
181
- request: createTunnelReq,
182
- data: {
183
- provider: name,
184
- parameters: (0, utils_1.canonicalStringify)(params),
185
- context: (0, utils_1.canonicalStringify)(context),
186
- timestampS: timestampS !== null && timestampS !== void 0 ? timestampS : (0, utils_1.unixTimestampSeconds)(),
187
- owner: getAddress(),
188
- },
189
- transcript: transcript,
190
- zkEngine: zkEngine === 'gnark'
191
- ? api_1.ZKProofEngine.ZK_ENGINE_GNARK
192
- : api_1.ZKProofEngine.ZK_ENGINE_SNARKJS,
193
- fixedServerIV: serverIV,
194
- fixedClientIV: clientIV,
195
- });
196
- onStep === null || onStep === void 0 ? void 0 : onStep({ name: 'waiting-for-verification' });
197
- const claimTunnelBytes = api_1.ClaimTunnelRequest
198
- .encode(claimTunnelReq).finish();
199
- const requestSignature = await signatureAlg
200
- .sign(claimTunnelBytes, ownerPrivateKey);
201
- claimTunnelReq.signatures = { requestSignature };
202
- const result = await client.rpc('claimTunnel', claimTunnelReq);
203
- logger.info({ success: !!result.claim }, 'recv claim response');
204
- return result;
205
- async function writeRedactedWithKeyUpdate() {
206
- var _a;
207
- let currentIndex = 0;
208
- for (const section of redactions) {
209
- const block = requestData
210
- .slice(currentIndex, section.fromIndex);
211
- if (block.length) {
212
- await writeWithReveal(block, true);
213
- }
214
- const redacted = requestData
215
- .slice(section.fromIndex, section.toIndex);
216
- await writeWithReveal(redacted, false);
217
- currentIndex = section.toIndex;
218
- }
219
- // write if redactions were there
220
- const lastBlockStart = ((_a = redactions === null || redactions === void 0 ? void 0 : redactions[redactions.length - 1]) === null || _a === void 0 ? void 0 : _a.toIndex) || 0;
221
- const block = requestData.slice(lastBlockStart);
222
- if (block.length) {
223
- await writeWithReveal(block, true);
224
- }
247
+ const lastBlockStart = redactions?.[redactions.length - 1]?.toIndex || 0;
248
+ const block = requestData.slice(lastBlockStart);
249
+ if (block.length) {
250
+ await writeWithReveal(block, true);
225
251
  }
226
- async function writeRedactedZk() {
227
- let blocksWritten = tunnel.transcript.length;
228
- await tunnel.tls.write(requestData);
229
- blocksWritten = tunnel.transcript.length - blocksWritten;
230
- setRevealOfLastSentBlocks({
231
- type: 'zk',
232
- redactedPlaintext: (0, utils_1.redactSlices)(requestData, redactions)
233
- }, blocksWritten);
252
+ }
253
+ async function writeRedactedZk() {
254
+ let blocksWritten = tunnel.transcript.length;
255
+ await tunnel.tls.write(requestData);
256
+ blocksWritten = tunnel.transcript.length - blocksWritten;
257
+ setRevealOfLastSentBlocks(
258
+ {
259
+ type: "zk",
260
+ redactedPlaintext: redactSlices(requestData, redactions)
261
+ },
262
+ blocksWritten
263
+ );
264
+ }
265
+ async function writeWithReveal(data, reveal) {
266
+ if (reveal !== lastMsgRevealed) {
267
+ await tunnel.tls.updateTrafficKeys();
234
268
  }
235
- /**
236
- * Write data to the tunnel, with the option to mark the packet
237
- * as revealable to the attestor or not
238
- */
239
- async function writeWithReveal(data, reveal) {
240
- // if the reveal state has changed, update the traffic keys
241
- // to not accidentally reveal a packet not meant to be revealed
242
- // and vice versa
243
- if (reveal !== lastMsgRevealed) {
244
- await tunnel.tls.updateTrafficKeys();
245
- }
246
- let blocksWritten = tunnel.transcript.length;
247
- await tunnel.write(data);
248
- blocksWritten = tunnel.transcript.length - blocksWritten;
249
- // now we mark the packet to be revealed to the attestor
250
- setRevealOfLastSentBlocks(reveal ? { type: 'complete' } : undefined, blocksWritten);
251
- lastMsgRevealed = reveal;
269
+ let blocksWritten = tunnel.transcript.length;
270
+ await tunnel.write(data);
271
+ blocksWritten = tunnel.transcript.length - blocksWritten;
272
+ setRevealOfLastSentBlocks(reveal ? { type: "complete" } : void 0, blocksWritten);
273
+ lastMsgRevealed = reveal;
274
+ }
275
+ function setRevealOfLastSentBlocks(reveal, nBlocks = 1) {
276
+ const lastBlocks = getLastBlocks("client", nBlocks);
277
+ if (!lastBlocks.length) {
278
+ return;
252
279
  }
253
- function setRevealOfLastSentBlocks(reveal, nBlocks = 1) {
254
- const lastBlocks = getLastBlocks('client', nBlocks);
255
- if (!lastBlocks.length) {
256
- return;
257
- }
258
- for (const block of lastBlocks) {
259
- setRevealOfMessage(block.message, reveal);
260
- }
280
+ for (const block of lastBlocks) {
281
+ setRevealOfMessage(block.message, reveal);
261
282
  }
262
- function getLastBlocks(sender, nBlocks) {
263
- // set the correct index for the server blocks
264
- const lastBlocks = [];
265
- for (let i = tunnel.transcript.length - 1; i >= 0; i--) {
266
- const block = tunnel.transcript[i];
267
- if (block.sender === sender) {
268
- lastBlocks.push(block);
269
- if (lastBlocks.length === nBlocks) {
270
- break;
271
- }
272
- }
283
+ }
284
+ function getLastBlocks(sender, nBlocks) {
285
+ const lastBlocks = [];
286
+ for (let i = tunnel.transcript.length - 1; i >= 0; i--) {
287
+ const block = tunnel.transcript[i];
288
+ if (block.sender === sender) {
289
+ lastBlocks.push(block);
290
+ if (lastBlocks.length === nBlocks) {
291
+ break;
273
292
  }
274
- return lastBlocks;
293
+ }
275
294
  }
276
- /**
277
- * Generate transcript with reveal data for the attestor to verify
278
- */
279
- async function generateTranscript() {
280
- await addServerSideReveals();
281
- const startMs = Date.now();
282
- const revealedMessages = await (0, utils_1.preparePacketsForReveal)(tunnel.transcript, revealMap, {
283
- logger,
284
- cipherSuite: cipherSuite,
285
- onZkProgress(done, total) {
286
- const timeSinceStartMs = Date.now() - startMs;
287
- const timePerBlockMs = timeSinceStartMs / done;
288
- const timeLeftMs = timePerBlockMs * (total - done);
289
- onStep === null || onStep === void 0 ? void 0 : onStep({
290
- name: 'generating-zk-proofs',
291
- proofsDone: done,
292
- proofsTotal: total,
293
- approxTimeLeftS: Math.round(timeLeftMs / 1000),
294
- });
295
- },
296
- ...zkOpts,
295
+ return lastBlocks;
296
+ }
297
+ async function generateTranscript() {
298
+ await addServerSideReveals();
299
+ const startMs = Date.now();
300
+ const revealedMessages = await preparePacketsForReveal(
301
+ tunnel.transcript,
302
+ revealMap,
303
+ {
304
+ logger,
305
+ cipherSuite,
306
+ onZkProgress(done, total) {
307
+ const timeSinceStartMs = Date.now() - startMs;
308
+ const timePerBlockMs = timeSinceStartMs / done;
309
+ const timeLeftMs = timePerBlockMs * (total - done);
310
+ onStep?.({
311
+ name: "generating-zk-proofs",
312
+ proofsDone: done,
313
+ proofsTotal: total,
314
+ approxTimeLeftS: Math.round(timeLeftMs / 1e3)
315
+ });
316
+ },
317
+ ...zkOpts
318
+ }
319
+ );
320
+ return revealedMessages;
321
+ }
322
+ async function addServerSideReveals() {
323
+ const allPackets = tunnel.transcript;
324
+ let serverPacketsToReveal = "all";
325
+ const packets = [];
326
+ const serverBlocks = [];
327
+ for (const b of allPackets) {
328
+ if (b.message.type !== "ciphertext" || !isApplicationData(b.message, tlsVersion)) {
329
+ continue;
330
+ }
331
+ const plaintext = tlsVersion === "TLS1_3" ? b.message.plaintext.slice(0, -1) : b.message.plaintext;
332
+ packets.push({
333
+ message: plaintext,
334
+ sender: b.sender
335
+ });
336
+ if (b.sender === "server") {
337
+ serverBlocks.push({
338
+ plaintext,
339
+ message: b.message
297
340
  });
298
- return revealedMessages;
341
+ }
299
342
  }
300
- /**
301
- * Add reveals for server side blocks, using
302
- * the provider's redaction function if available.
303
- * Otherwise, opts to reveal all server side blocks.
304
- */
305
- async function addServerSideReveals() {
306
- const allPackets = tunnel.transcript;
307
- let serverPacketsToReveal = 'all';
308
- const packets = [];
309
- const serverBlocks = [];
310
- for (const b of allPackets) {
311
- if (b.message.type !== 'ciphertext'
312
- || !(0, utils_1.isApplicationData)(b.message, tlsVersion)) {
313
- continue;
314
- }
315
- const plaintext = tlsVersion === 'TLS1_3'
316
- ? b.message.plaintext.slice(0, -1)
317
- : b.message.plaintext;
318
- packets.push({
319
- message: plaintext,
320
- sender: b.sender
321
- });
322
- if (b.sender === 'server') {
323
- serverBlocks.push({
324
- plaintext: plaintext,
325
- message: b.message
326
- });
327
- }
328
- }
329
- if (provider.getResponseRedactions) {
330
- serverPacketsToReveal = await (0, utils_1.getBlocksToReveal)(serverBlocks, total => provider.getResponseRedactions({
331
- response: total,
332
- params,
333
- logger,
334
- ctx: config_1.PROVIDER_CTX
335
- }), performOprf);
336
- }
337
- const revealedPackets = packets
338
- .filter(p => p.sender === 'client');
339
- if (serverPacketsToReveal === 'all') {
340
- // reveal all server side blocks
341
- for (const { message, sender } of allPackets) {
342
- if (sender === 'server') {
343
- setRevealOfMessage(message, { type: 'complete' });
344
- }
345
- }
346
- revealedPackets.push(...packets.filter(p => p.sender === 'server'));
347
- }
348
- else {
349
- for (const { block, redactedPlaintext, toprfs } of serverPacketsToReveal) {
350
- setRevealOfMessage(block.message, {
351
- type: 'zk',
352
- redactedPlaintext,
353
- toprfs
354
- });
355
- revealedPackets.push({ sender: 'server', message: redactedPlaintext });
356
- if (updateParametersFromOprfData && toprfs) {
357
- let strParams = (0, utils_1.canonicalStringify)(params);
358
- for (const toprf of toprfs) {
359
- strParams = strParams.replaceAll((0, utils_1.uint8ArrayToStr)(toprf.plaintext), (0, utils_1.binaryHashToStr)(toprf.nullifier, toprf.dataLocation.length));
360
- }
361
- params = JSON.parse(strParams);
362
- }
363
- }
343
+ if (provider.getResponseRedactions) {
344
+ serverPacketsToReveal = await getBlocksToReveal(
345
+ serverBlocks,
346
+ (total) => provider.getResponseRedactions({
347
+ response: total,
348
+ params,
349
+ logger,
350
+ ctx: PROVIDER_CTX
351
+ }),
352
+ performOprf
353
+ );
354
+ }
355
+ const revealedPackets = packets.filter((p) => p.sender === "client");
356
+ if (serverPacketsToReveal === "all") {
357
+ for (const { message, sender } of allPackets) {
358
+ if (sender === "server") {
359
+ setRevealOfMessage(message, { type: "complete" });
364
360
  }
365
- await provider.assertValidProviderReceipt({
366
- receipt: revealedPackets,
367
- params: {
368
- ...params,
369
- // provide secret params for proper
370
- // request body validation
371
- secretParams,
372
- },
373
- logger,
374
- ctx: config_1.PROVIDER_CTX
361
+ }
362
+ revealedPackets.push(...packets.filter((p) => p.sender === "server"));
363
+ } else {
364
+ for (const {
365
+ block,
366
+ redactedPlaintext,
367
+ overshotToprfFromPrevBlock,
368
+ toprfs,
369
+ oprfRawMarkers
370
+ } of serverPacketsToReveal) {
371
+ setRevealOfMessage(block.message, {
372
+ type: "zk",
373
+ redactedPlaintext,
374
+ toprfs,
375
+ oprfRawMarkers,
376
+ overshotToprfFromPrevBlock
375
377
  });
376
- // reveal all handshake blocks
377
- // so the attestor can verify there was no
378
- // hanky-panky
379
- for (const p of allPackets) {
380
- if (p.message.type !== 'ciphertext') {
381
- continue;
382
- }
383
- // break the moment we hit the first
384
- // application data packet
385
- if ((0, utils_1.isApplicationData)(p.message, tlsVersion)) {
386
- break;
387
- }
388
- setRevealOfMessage(p.message, { type: 'complete' });
378
+ revealedPackets.push(
379
+ { sender: "server", message: redactedPlaintext }
380
+ );
381
+ if (updateParametersFromOprfData && toprfs) {
382
+ let strParams = canonicalStringify(params);
383
+ for (const toprf of toprfs) {
384
+ const ogText = uint8ArrayToStr(toprf.plaintext);
385
+ const hashedText = binaryHashToStr(
386
+ toprf.nullifier,
387
+ toprf.dataLocation.length
388
+ );
389
+ strParams = strParams.replaceAll(ogText, hashedText);
390
+ }
391
+ params = JSON.parse(strParams);
389
392
  }
393
+ }
390
394
  }
391
- async function performOprf(plaintext) {
392
- var _a;
393
- logger.info({ length: plaintext.length }, 'generating OPRF...');
394
- const oprfOperator = ((_a = zkOpts.oprfOperators) === null || _a === void 0 ? void 0 : _a['chacha20'])
395
- || (0, utils_1.makeDefaultOPRFOperator)('chacha20', zkEngine, logger);
396
- const reqData = await oprfOperator.generateOPRFRequestData(plaintext, config_1.TOPRF_DOMAIN_SEPARATOR, logger);
397
- const res = await client.rpc('toprf', {
398
- maskedData: reqData.maskedData,
399
- engine: (0, utils_1.getEngineProto)(zkEngine)
400
- });
401
- const nullifier = await oprfOperator.finaliseOPRF(client.initResponse.toprfPublicKey, reqData, [res]);
402
- const data = {
403
- nullifier,
404
- responses: [res],
405
- mask: reqData.mask,
406
- dataLocation: undefined,
407
- plaintext
408
- };
409
- return data;
410
- }
411
- function setRevealOfMessage(message, reveal) {
412
- if (reveal) {
413
- revealMap.set(message, reveal);
414
- return;
415
- }
416
- revealMap.delete(message);
395
+ await provider.assertValidProviderReceipt({
396
+ receipt: revealedPackets,
397
+ params: {
398
+ ...params,
399
+ // provide secret params for proper
400
+ // request body validation
401
+ secretParams
402
+ },
403
+ logger,
404
+ ctx: PROVIDER_CTX
405
+ });
406
+ for (const p of allPackets) {
407
+ if (p.message.type !== "ciphertext") {
408
+ continue;
409
+ }
410
+ if (isApplicationData(p.message, tlsVersion)) {
411
+ break;
412
+ }
413
+ setRevealOfMessage(p.message, { type: "complete" });
417
414
  }
418
- function getAddress() {
419
- const { getAddress, getPublicKey } = signatureAlg;
420
- const pubKey = getPublicKey(ownerPrivateKey);
421
- return getAddress(pubKey);
415
+ }
416
+ async function performOprf(plaintext) {
417
+ logger.info({ length: plaintext.length }, "generating OPRF...");
418
+ const oprfOperator = zkOpts.oprfOperators?.["chacha20"] || makeDefaultOPRFOperator(
419
+ "chacha20",
420
+ zkEngine,
421
+ logger
422
+ );
423
+ const reqData = await oprfOperator.generateOPRFRequestData(
424
+ plaintext,
425
+ TOPRF_DOMAIN_SEPARATOR,
426
+ logger
427
+ );
428
+ const res = await client.rpc("toprf", {
429
+ maskedData: reqData.maskedData,
430
+ engine: getEngineProto(zkEngine)
431
+ });
432
+ const nullifier = await oprfOperator.finaliseOPRF(
433
+ client.initResponse.toprfPublicKey,
434
+ reqData,
435
+ [res]
436
+ );
437
+ const data = {
438
+ nullifier,
439
+ responses: [res],
440
+ mask: reqData.mask,
441
+ dataLocation: void 0,
442
+ plaintext
443
+ };
444
+ return data;
445
+ }
446
+ function setRevealOfMessage(message, reveal) {
447
+ if (reveal) {
448
+ revealMap.set(message, reveal);
449
+ return;
422
450
  }
451
+ revealMap.delete(message);
452
+ }
453
+ function getAddress() {
454
+ const { getAddress: getAddress2, getPublicKey } = signatureAlg;
455
+ const pubKey = getPublicKey(ownerPrivateKey);
456
+ return getAddress2(pubKey);
457
+ }
423
458
  }
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNsYWltLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jcmVhdGUtY2xhaW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0Esc0RBcUJDO0FBakVELDhDQUF3RTtBQUN4RSxnRkFBeUU7QUFDekUsa0VBQTBFO0FBQzFFLHVDQUFxRjtBQUNyRix1Q0FBaUU7QUFDakUsNkNBQXlDO0FBU3pDLHFDQWlCa0I7QUFDbEIsK0NBQXNEO0FBQ3RELHFEQUFpRDtBQUNqRCx1Q0FBb0Q7QUFPcEQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDcEMsRUFDQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQ1Y7SUFFL0IsTUFBTSxNQUFNLEdBQUcsT0FBTztRQUNyQiw2Q0FBNkM7UUFDN0MscURBQXFEO1FBQ3JELHlDQUF5QztXQUN0QyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBTSxDQUFDLENBQUE7SUFDM0QsT0FBTyxJQUFBLDRCQUFrQixFQUN4QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQ1Ysc0JBQXNCLENBQUk7UUFDekIsR0FBRyxJQUFJO1FBQ1AsTUFBTSxFQUFFLE9BQU87WUFDZCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxNQUFNO0tBQ1QsQ0FBQyxDQUNGLEVBQ0QsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUNuQyxDQUFBO0FBQ0YsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVU7O0lBQzlCLElBQUcsR0FBRyxZQUFZLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUVELDBDQUEwQztJQUMx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
459
+ export {
460
+ createClaimOnAttestor
461
+ };