@joclaim/attestor-core 0.2.0 → 0.2.3

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 (420) hide show
  1. package/README.md +21 -15
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +340 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +1 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +725 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +12 -0
  9. package/lib/avs/client/create-claim-on-avs.js +138 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +20 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +1 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1169 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/{src/avs/contracts/factories/index.ts → lib/avs/contracts/factories/index.js} +1 -1
  20. package/{src/avs/contracts/index.ts → lib/avs/contracts/index.d.ts} +0 -3
  21. package/lib/avs/contracts/index.js +2 -0
  22. package/lib/avs/types/index.d.ts +55 -0
  23. package/lib/avs/types/index.js +1 -0
  24. package/lib/avs/utils/contracts.d.ts +21 -0
  25. package/lib/avs/utils/contracts.js +33 -0
  26. package/lib/avs/utils/register.d.ts +27 -0
  27. package/lib/avs/utils/register.js +78 -0
  28. package/lib/avs/utils/tasks.d.ts +22 -0
  29. package/lib/avs/utils/tasks.js +40 -0
  30. package/lib/client/create-claim.d.ts +5 -0
  31. package/lib/client/create-claim.js +437 -0
  32. package/lib/client/index.d.ts +3 -0
  33. package/lib/client/index.js +3 -0
  34. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  35. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +51 -0
  36. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +26 -0
  37. package/lib/client/tunnels/make-rpc-tls-tunnel.js +131 -0
  38. package/lib/client/utils/attestor-pool.d.ts +8 -0
  39. package/lib/client/utils/attestor-pool.js +25 -0
  40. package/lib/client/utils/client-socket.d.ts +11 -0
  41. package/lib/client/utils/client-socket.js +98 -0
  42. package/lib/client/utils/message-handler.d.ts +4 -0
  43. package/lib/client/utils/message-handler.js +87 -0
  44. package/lib/config/index.d.ts +30 -0
  45. package/lib/config/index.js +43 -0
  46. package/lib/external-rpc/benchmark.d.ts +1 -0
  47. package/lib/external-rpc/benchmark.js +69 -0
  48. package/lib/external-rpc/event-bus.d.ts +7 -0
  49. package/lib/external-rpc/event-bus.js +14 -0
  50. package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
  51. package/lib/external-rpc/handle-incoming-msg.js +233 -0
  52. package/lib/external-rpc/index.d.ts +3 -0
  53. package/lib/external-rpc/index.js +3 -0
  54. package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
  55. package/lib/external-rpc/jsc-polyfills/1.js +82 -0
  56. package/lib/external-rpc/jsc-polyfills/2.d.ts +1 -0
  57. package/lib/external-rpc/jsc-polyfills/2.js +20 -0
  58. package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
  59. package/lib/external-rpc/jsc-polyfills/event.js +14 -0
  60. package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
  61. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  62. package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  63. package/lib/external-rpc/jsc-polyfills/ws.js +81 -0
  64. package/lib/external-rpc/setup-browser.d.ts +6 -0
  65. package/lib/external-rpc/setup-browser.js +33 -0
  66. package/lib/external-rpc/setup-jsc.d.ts +24 -0
  67. package/lib/external-rpc/setup-jsc.js +22 -0
  68. package/lib/external-rpc/types.d.ts +213 -0
  69. package/lib/external-rpc/types.js +1 -0
  70. package/lib/external-rpc/utils.d.ts +20 -0
  71. package/lib/external-rpc/utils.js +100 -0
  72. package/lib/external-rpc/zk.d.ts +14 -0
  73. package/lib/external-rpc/zk.js +63 -0
  74. package/lib/index.d.ts +9 -0
  75. package/lib/index.js +9 -0
  76. package/lib/mechain/abis/governanceABI.d.ts +50 -0
  77. package/lib/mechain/abis/governanceABI.js +458 -0
  78. package/lib/mechain/abis/taskABI.d.ts +157 -0
  79. package/lib/mechain/abis/taskABI.js +509 -0
  80. package/lib/mechain/client/create-claim-on-mechain.d.ts +10 -0
  81. package/lib/mechain/client/create-claim-on-mechain.js +28 -0
  82. package/lib/mechain/client/index.d.ts +1 -0
  83. package/lib/mechain/client/index.js +1 -0
  84. package/lib/mechain/constants/index.d.ts +3 -0
  85. package/{src/mechain/constants/index.ts → lib/mechain/constants/index.js} +3 -5
  86. package/lib/mechain/index.d.ts +2 -0
  87. package/lib/mechain/index.js +2 -0
  88. package/lib/mechain/types/index.d.ts +23 -0
  89. package/lib/mechain/types/index.js +1 -0
  90. package/lib/proto/api.d.ts +633 -0
  91. package/lib/proto/api.js +4258 -0
  92. package/lib/proto/tee-bundle.d.ts +135 -0
  93. package/lib/proto/tee-bundle.js +1161 -0
  94. package/lib/providers/http/index.d.ts +18 -0
  95. package/lib/providers/http/index.js +658 -0
  96. package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
  97. package/lib/providers/http/patch-parse5-tree.js +33 -0
  98. package/lib/providers/http/utils.d.ts +77 -0
  99. package/lib/providers/http/utils.js +324 -0
  100. package/lib/providers/index.d.ts +4 -0
  101. package/lib/providers/index.js +4 -0
  102. package/lib/scripts/build-browser.d.ts +1 -0
  103. package/lib/scripts/build-browser.js +37 -0
  104. package/lib/scripts/build-jsc.d.ts +1 -0
  105. package/lib/scripts/build-jsc.js +49 -0
  106. package/lib/scripts/check-avs-registration.d.ts +1 -0
  107. package/lib/scripts/check-avs-registration.js +26 -0
  108. package/lib/scripts/fallbacks/crypto.d.ts +1 -0
  109. package/lib/scripts/fallbacks/crypto.js +1 -0
  110. package/lib/scripts/fallbacks/empty.d.ts +3 -0
  111. package/lib/scripts/fallbacks/empty.js +1 -0
  112. package/lib/scripts/fallbacks/re2.d.ts +1 -0
  113. package/lib/scripts/fallbacks/re2.js +4 -0
  114. package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
  115. package/lib/scripts/fallbacks/snarkjs.js +1 -0
  116. package/lib/scripts/generate-provider-types.d.ts +5 -0
  117. package/lib/scripts/generate-provider-types.js +78 -0
  118. package/lib/scripts/generate-receipt.d.ts +9 -0
  119. package/lib/scripts/generate-receipt.js +90 -0
  120. package/lib/scripts/generate-toprf-keys.d.ts +1 -0
  121. package/lib/scripts/generate-toprf-keys.js +20 -0
  122. package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
  123. package/lib/scripts/jsc-cli-rpc.js +37 -0
  124. package/lib/scripts/register-avs-operator.d.ts +1 -0
  125. package/lib/scripts/register-avs-operator.js +4 -0
  126. package/lib/scripts/start-server.d.ts +1 -0
  127. package/lib/scripts/start-server.js +13 -0
  128. package/lib/scripts/update-avs-metadata.d.ts +1 -0
  129. package/lib/scripts/update-avs-metadata.js +19 -0
  130. package/lib/scripts/utils.d.ts +1 -0
  131. package/lib/scripts/utils.js +7 -0
  132. package/lib/scripts/whitelist-operator.d.ts +1 -0
  133. package/lib/scripts/whitelist-operator.js +15 -0
  134. package/lib/server/create-server.d.ts +7 -0
  135. package/lib/server/create-server.js +122 -0
  136. package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
  137. package/lib/server/handlers/claimTeeBundle.js +206 -0
  138. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  139. package/lib/server/handlers/claimTunnel.js +73 -0
  140. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  141. package/lib/server/handlers/completeClaimOnChain.js +22 -0
  142. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  143. package/lib/server/handlers/createClaimOnChain.js +26 -0
  144. package/lib/server/handlers/createTaskOnMechain.d.ts +2 -0
  145. package/lib/server/handlers/createTaskOnMechain.js +47 -0
  146. package/lib/server/handlers/createTunnel.d.ts +2 -0
  147. package/lib/server/handlers/createTunnel.js +93 -0
  148. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  149. package/lib/server/handlers/disconnectTunnel.js +5 -0
  150. package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
  151. package/lib/server/handlers/fetchCertificateBytes.js +41 -0
  152. package/lib/server/handlers/index.d.ts +4 -0
  153. package/lib/server/handlers/index.js +22 -0
  154. package/lib/server/handlers/init.d.ts +2 -0
  155. package/lib/server/handlers/init.js +30 -0
  156. package/lib/server/handlers/toprf.d.ts +2 -0
  157. package/lib/server/handlers/toprf.js +16 -0
  158. package/lib/server/index.d.ts +4 -0
  159. package/lib/server/index.js +4 -0
  160. package/lib/server/provider-api.d.ts +9 -0
  161. package/lib/server/provider-api.js +98 -0
  162. package/lib/server/provider-store.d.ts +53 -0
  163. package/lib/server/provider-store.js +80 -0
  164. package/lib/server/session-api.d.ts +9 -0
  165. package/lib/server/session-api.js +95 -0
  166. package/lib/server/session-store.d.ts +14 -0
  167. package/lib/server/session-store.js +36 -0
  168. package/lib/server/socket.d.ts +13 -0
  169. package/lib/server/socket.js +109 -0
  170. package/lib/server/tunnels/make-tcp-tunnel.d.ts +22 -0
  171. package/lib/server/tunnels/make-tcp-tunnel.js +177 -0
  172. package/lib/server/utils/apm.d.ts +11 -0
  173. package/lib/server/utils/apm.js +36 -0
  174. package/lib/server/utils/assert-valid-claim-request.d.ts +31 -0
  175. package/lib/server/utils/assert-valid-claim-request.js +229 -0
  176. package/lib/server/utils/config-env.d.ts +1 -0
  177. package/lib/server/utils/config-env.js +4 -0
  178. package/lib/server/utils/dns.d.ts +1 -0
  179. package/lib/server/utils/dns.js +18 -0
  180. package/lib/server/utils/gcp-attestation.d.ts +17 -0
  181. package/lib/server/utils/gcp-attestation.js +289 -0
  182. package/lib/server/utils/generics.d.ts +22 -0
  183. package/lib/server/utils/generics.js +51 -0
  184. package/lib/server/utils/iso.d.ts +1 -0
  185. package/lib/server/utils/iso.js +256 -0
  186. package/lib/server/utils/keep-alive.d.ts +7 -0
  187. package/lib/server/utils/keep-alive.js +38 -0
  188. package/lib/server/utils/nitro-attestation.d.ts +33 -0
  189. package/lib/server/utils/nitro-attestation.js +325 -0
  190. package/lib/server/utils/process-handshake.d.ts +13 -0
  191. package/lib/server/utils/process-handshake.js +214 -0
  192. package/lib/server/utils/proxy-session.d.ts +1 -0
  193. package/lib/server/utils/proxy-session.js +6 -0
  194. package/lib/server/utils/tee-oprf-verification.d.ts +22 -0
  195. package/lib/server/utils/tee-oprf-verification.js +160 -0
  196. package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
  197. package/lib/server/utils/tee-transcript-reconstruction.js +187 -0
  198. package/lib/server/utils/tee-verification.d.ts +27 -0
  199. package/lib/server/utils/tee-verification.js +365 -0
  200. package/lib/server/utils/validation.d.ts +2 -0
  201. package/lib/server/utils/validation.js +38 -0
  202. package/lib/types/bgp.d.ts +11 -0
  203. package/lib/types/bgp.js +1 -0
  204. package/lib/types/claims.d.ts +73 -0
  205. package/lib/types/claims.js +1 -0
  206. package/lib/types/client.d.ts +163 -0
  207. package/lib/types/client.js +1 -0
  208. package/lib/types/general.d.ts +54 -0
  209. package/lib/types/general.js +1 -0
  210. package/lib/types/handlers.d.ts +10 -0
  211. package/lib/types/handlers.js +1 -0
  212. package/lib/types/index.d.ts +10 -0
  213. package/lib/types/index.js +10 -0
  214. package/lib/types/providers.d.ts +161 -0
  215. package/lib/types/providers.gen.d.ts +443 -0
  216. package/lib/types/providers.gen.js +10 -0
  217. package/lib/types/providers.js +1 -0
  218. package/lib/types/rpc.d.ts +35 -0
  219. package/lib/types/rpc.js +1 -0
  220. package/lib/types/signatures.d.ts +28 -0
  221. package/lib/types/signatures.js +1 -0
  222. package/lib/types/tunnel.d.ts +18 -0
  223. package/lib/types/tunnel.js +1 -0
  224. package/lib/types/zk.d.ts +28 -0
  225. package/lib/types/zk.js +1 -0
  226. package/lib/utils/auth.d.ts +8 -0
  227. package/lib/utils/auth.js +59 -0
  228. package/lib/utils/b64-json.d.ts +2 -0
  229. package/lib/utils/b64-json.js +17 -0
  230. package/lib/utils/bgp-listener.d.ts +7 -0
  231. package/lib/utils/bgp-listener.js +119 -0
  232. package/lib/utils/claims.d.ts +33 -0
  233. package/lib/utils/claims.js +101 -0
  234. package/lib/utils/env.d.ts +3 -0
  235. package/lib/utils/env.js +15 -0
  236. package/lib/utils/error.d.ts +26 -0
  237. package/lib/utils/error.js +50 -0
  238. package/lib/utils/generics.d.ts +114 -0
  239. package/lib/utils/generics.js +317 -0
  240. package/lib/utils/http-parser.d.ts +59 -0
  241. package/lib/utils/http-parser.js +246 -0
  242. package/lib/utils/index.d.ts +13 -0
  243. package/lib/utils/index.js +13 -0
  244. package/lib/utils/logger.d.ts +13 -0
  245. package/lib/utils/logger.js +91 -0
  246. package/lib/utils/prepare-packets.d.ts +16 -0
  247. package/lib/utils/prepare-packets.js +62 -0
  248. package/lib/utils/redactions.d.ts +62 -0
  249. package/lib/utils/redactions.js +148 -0
  250. package/lib/utils/retries.d.ts +12 -0
  251. package/lib/utils/retries.js +24 -0
  252. package/lib/utils/signatures/eth.d.ts +2 -0
  253. package/lib/utils/signatures/eth.js +29 -0
  254. package/lib/utils/signatures/index.d.ts +5 -0
  255. package/lib/utils/signatures/index.js +7 -0
  256. package/lib/utils/socket-base.d.ts +23 -0
  257. package/lib/utils/socket-base.js +90 -0
  258. package/lib/utils/tls.d.ts +2 -0
  259. package/{src/utils/tls.ts → lib/utils/tls.js} +28 -35
  260. package/lib/utils/ws.d.ts +7 -0
  261. package/lib/utils/ws.js +22 -0
  262. package/lib/utils/zk.d.ts +70 -0
  263. package/lib/utils/zk.js +572 -0
  264. package/package.json +19 -12
  265. package/src/avs/abis/avsDirectoryABI.ts +0 -340
  266. package/src/avs/abis/delegationABI.ts +0 -1
  267. package/src/avs/abis/registryABI.ts +0 -725
  268. package/src/avs/client/create-claim-on-avs.ts +0 -206
  269. package/src/avs/config.ts +0 -25
  270. package/src/avs/contracts/ReclaimServiceManager.ts +0 -1457
  271. package/src/avs/contracts/common.ts +0 -44
  272. package/src/avs/contracts/factories/ReclaimServiceManager__factory.ts +0 -1213
  273. package/src/avs/tests/test.operator.ts +0 -413
  274. package/src/avs/tests/utils.ts +0 -51
  275. package/src/avs/types/index.ts +0 -60
  276. package/src/avs/utils/contracts.ts +0 -66
  277. package/src/avs/utils/register.ts +0 -125
  278. package/src/avs/utils/tasks.ts +0 -76
  279. package/src/client/create-claim.ts +0 -626
  280. package/src/client/index.ts +0 -3
  281. package/src/client/tunnels/make-rpc-tcp-tunnel.ts +0 -78
  282. package/src/client/tunnels/make-rpc-tls-tunnel.ts +0 -172
  283. package/src/client/utils/attestor-pool.ts +0 -35
  284. package/src/client/utils/client-socket.ts +0 -160
  285. package/src/client/utils/message-handler.ts +0 -116
  286. package/src/config/index.ts +0 -65
  287. package/src/external-rpc/benchmark.ts +0 -102
  288. package/src/external-rpc/event-bus.ts +0 -19
  289. package/src/external-rpc/global.d.ts +0 -20
  290. package/src/external-rpc/handle-incoming-msg.ts +0 -308
  291. package/src/external-rpc/index.ts +0 -3
  292. package/src/external-rpc/jsc-polyfills/1.ts +0 -117
  293. package/src/external-rpc/jsc-polyfills/2.ts +0 -24
  294. package/src/external-rpc/jsc-polyfills/event.ts +0 -16
  295. package/src/external-rpc/jsc-polyfills/index.ts +0 -2
  296. package/src/external-rpc/jsc-polyfills/ws.ts +0 -105
  297. package/src/external-rpc/setup-browser.ts +0 -42
  298. package/src/external-rpc/setup-jsc.ts +0 -48
  299. package/src/external-rpc/types.ts +0 -289
  300. package/src/external-rpc/utils.ts +0 -126
  301. package/src/external-rpc/zk.ts +0 -79
  302. package/src/index.ts +0 -9
  303. package/src/mechain/abis/governanceABI.ts +0 -458
  304. package/src/mechain/abis/taskABI.ts +0 -509
  305. package/src/mechain/client/create-claim-on-mechain.ts +0 -52
  306. package/src/mechain/client/index.ts +0 -1
  307. package/src/mechain/index.ts +0 -2
  308. package/src/mechain/types/index.ts +0 -29
  309. package/src/proto/api.ts +0 -5285
  310. package/src/proto/tee-bundle.ts +0 -1413
  311. package/src/providers/http/index.ts +0 -873
  312. package/src/providers/http/patch-parse5-tree.ts +0 -49
  313. package/src/providers/http/utils.ts +0 -439
  314. package/src/providers/index.ts +0 -8
  315. package/src/scripts/build-browser.sh +0 -9
  316. package/src/scripts/build-browser.ts +0 -40
  317. package/src/scripts/build-jsc.ts +0 -55
  318. package/src/scripts/check-avs-registration.ts +0 -38
  319. package/src/scripts/contract-data-gen.sh +0 -8
  320. package/src/scripts/fallbacks/crypto.ts +0 -1
  321. package/src/scripts/fallbacks/empty.ts +0 -2
  322. package/src/scripts/fallbacks/re2.ts +0 -5
  323. package/src/scripts/fallbacks/snarkjs.ts +0 -5
  324. package/src/scripts/generate-certs.sh +0 -11
  325. package/src/scripts/generate-proto.sh +0 -5
  326. package/src/scripts/generate-provider-types.ts +0 -121
  327. package/src/scripts/generate-receipt.ts +0 -138
  328. package/src/scripts/generate-toprf-keys.ts +0 -30
  329. package/src/scripts/jsc-cli-rpc.ts +0 -48
  330. package/src/scripts/register-avs-operator.ts +0 -5
  331. package/src/scripts/start-server.ts +0 -17
  332. package/src/scripts/update-avs-metadata.ts +0 -26
  333. package/src/scripts/utils.ts +0 -8
  334. package/src/scripts/whitelist-operator.ts +0 -22
  335. package/src/server/create-server.ts +0 -169
  336. package/src/server/handlers/claimTeeBundle.ts +0 -308
  337. package/src/server/handlers/claimTunnel.ts +0 -106
  338. package/src/server/handlers/completeClaimOnChain.ts +0 -36
  339. package/src/server/handlers/createClaimOnChain.ts +0 -39
  340. package/src/server/handlers/createTaskOnMechain.ts +0 -80
  341. package/src/server/handlers/createTunnel.ts +0 -128
  342. package/src/server/handlers/disconnectTunnel.ts +0 -11
  343. package/src/server/handlers/fetchCertificateBytes.ts +0 -66
  344. package/src/server/handlers/index.ts +0 -24
  345. package/src/server/handlers/init.ts +0 -46
  346. package/src/server/handlers/toprf.ts +0 -25
  347. package/src/server/index.ts +0 -4
  348. package/src/server/provider-api.ts +0 -118
  349. package/src/server/provider-store.ts +0 -117
  350. package/src/server/session-api.ts +0 -115
  351. package/src/server/session-store.ts +0 -60
  352. package/src/server/socket.ts +0 -156
  353. package/src/server/tunnels/make-tcp-tunnel.ts +0 -275
  354. package/src/server/utils/apm.ts +0 -49
  355. package/src/server/utils/assert-valid-claim-request.ts +0 -375
  356. package/src/server/utils/config-env.ts +0 -6
  357. package/src/server/utils/dns.ts +0 -25
  358. package/src/server/utils/gcp-attestation.ts +0 -415
  359. package/src/server/utils/generics.ts +0 -68
  360. package/src/server/utils/iso.ts +0 -258
  361. package/src/server/utils/keep-alive.ts +0 -50
  362. package/src/server/utils/nitro-attestation.ts +0 -396
  363. package/src/server/utils/process-handshake.ts +0 -311
  364. package/src/server/utils/proxy-session.ts +0 -6
  365. package/src/server/utils/tee-oprf-verification.ts +0 -231
  366. package/src/server/utils/tee-transcript-reconstruction.ts +0 -254
  367. package/src/server/utils/tee-verification.ts +0 -513
  368. package/src/server/utils/validation.ts +0 -57
  369. package/src/tests/auth.test.ts +0 -105
  370. package/src/tests/bgp-listener.test.ts +0 -193
  371. package/src/tests/claim-creation.test.ts +0 -415
  372. package/src/tests/describe-with-server.ts +0 -94
  373. package/src/tests/gcp-attestation.test.ts +0 -206
  374. package/src/tests/http-parser.test.ts +0 -135
  375. package/src/tests/http-provider-utils.test.ts +0 -3306
  376. package/src/tests/http-provider.test.ts +0 -125
  377. package/src/tests/jsc.test_mac.ts +0 -296
  378. package/src/tests/mock-provider-server.ts +0 -106
  379. package/src/tests/mocks.ts +0 -25
  380. package/src/tests/proof_bundle.bin +0 -0
  381. package/src/tests/rpc-communication.test.ts +0 -115
  382. package/src/tests/rpc-tunnel.test.ts +0 -239
  383. package/src/tests/signatures.test.ts +0 -37
  384. package/src/tests/tcp-tunnel.test.ts +0 -154
  385. package/src/tests/tee-bundle.test.ts +0 -321
  386. package/src/tests/tee-signatures.test.ts +0 -81
  387. package/src/tests/utils.ts +0 -108
  388. package/src/tests/verification_bundle.pb +0 -0
  389. package/src/tests/verification_bundle_tee.pb +0 -0
  390. package/src/tests/zk.test.ts +0 -453
  391. package/src/types/bgp.ts +0 -17
  392. package/src/types/claims.ts +0 -79
  393. package/src/types/client.ts +0 -205
  394. package/src/types/general.ts +0 -61
  395. package/src/types/handlers.ts +0 -16
  396. package/src/types/index.ts +0 -10
  397. package/src/types/providers.gen.ts +0 -135
  398. package/src/types/providers.ts +0 -203
  399. package/src/types/rpc.ts +0 -46
  400. package/src/types/signatures.ts +0 -29
  401. package/src/types/tunnel.ts +0 -25
  402. package/src/types/zk.ts +0 -31
  403. package/src/utils/auth.ts +0 -92
  404. package/src/utils/b64-json.ts +0 -25
  405. package/src/utils/bgp-listener.ts +0 -159
  406. package/src/utils/claims.ts +0 -132
  407. package/src/utils/env.ts +0 -21
  408. package/src/utils/error.ts +0 -76
  409. package/src/utils/generics.ts +0 -429
  410. package/src/utils/http-parser.ts +0 -312
  411. package/src/utils/index.ts +0 -13
  412. package/src/utils/logger.ts +0 -114
  413. package/src/utils/prepare-packets.ts +0 -98
  414. package/src/utils/redactions.ts +0 -203
  415. package/src/utils/retries.ts +0 -41
  416. package/src/utils/signatures/eth.ts +0 -35
  417. package/src/utils/signatures/index.ts +0 -11
  418. package/src/utils/socket-base.ts +0 -132
  419. package/src/utils/ws.ts +0 -30
  420. package/src/utils/zk.ts +0 -908
@@ -0,0 +1,177 @@
1
+ import { HttpsProxyAgent } from 'https-proxy-agent';
2
+ import { Socket } from 'net';
3
+ import { CONNECTION_TIMEOUT_MS } from '../../config/index.js';
4
+ import { resolveHostnames } from '../../server/utils/dns.js';
5
+ import { isValidCountryCode } from '../../server/utils/iso.js';
6
+ import { isValidProxySessionId } from '../../server/utils/proxy-session.js';
7
+ import { getEnvVariable } from '../../utils/env.js';
8
+ import { AttestorError } from '../../utils/index.js';
9
+ const HTTPS_PROXY_URL = getEnvVariable('HTTPS_PROXY_URL');
10
+ /**
11
+ * Builds a TCP tunnel to the given host and port.
12
+ * If a geolocation is provided -- an HTTPS proxy is used
13
+ * to connect to the host.
14
+ * If a proxySessionId is provided -- a static ip is used with HTTPS proxy
15
+ * across multiple requests with this same proxySessionId.
16
+ *
17
+ * HTTPS proxy essentially creates an opaque tunnel to the
18
+ * host using the CONNECT method. Any data can be sent through
19
+ * this tunnel to the end host.
20
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT
21
+ *
22
+ * The tunnel also retains a transcript of all messages sent and received.
23
+ */
24
+ export const makeTcpTunnel = async ({ onClose, onMessage, logger, ...opts }) => {
25
+ const transcript = [];
26
+ const socket = await connectTcp({ ...opts, logger });
27
+ let closed = false;
28
+ socket.on('data', message => {
29
+ if (closed) {
30
+ logger.warn('socket is closed, dropping message');
31
+ return;
32
+ }
33
+ onMessage?.(message);
34
+ transcript.push({ sender: 'server', message });
35
+ });
36
+ // socket.once('error', onSocketClose)
37
+ socket.once('close', () => onSocketClose(undefined));
38
+ return {
39
+ socket,
40
+ transcript,
41
+ createRequest: opts,
42
+ async write(data) {
43
+ transcript.push({ sender: 'client', message: data });
44
+ await new Promise((resolve, reject) => {
45
+ socket.write(data, err => {
46
+ if (err) {
47
+ reject(err);
48
+ }
49
+ else {
50
+ resolve();
51
+ }
52
+ });
53
+ });
54
+ },
55
+ close(err) {
56
+ if (closed) {
57
+ return;
58
+ }
59
+ socket.destroy(err);
60
+ }
61
+ };
62
+ function onSocketClose(err) {
63
+ if (closed) {
64
+ return;
65
+ }
66
+ logger.debug({ err }, 'closing socket');
67
+ closed = true;
68
+ onClose?.(err);
69
+ onClose = undefined;
70
+ }
71
+ };
72
+ async function connectTcp({ host, port, geoLocation, proxySessionId, logger }) {
73
+ let connectTimeout;
74
+ let socket;
75
+ try {
76
+ await new Promise(async (resolve, reject) => {
77
+ try {
78
+ // add a timeout to ensure the connection doesn't hang
79
+ // and cause our gateway to send out a 504
80
+ connectTimeout = setTimeout(() => reject(new AttestorError('ERROR_NETWORK_ERROR', 'Server connection timed out')), CONNECTION_TIMEOUT_MS);
81
+ socket = await getSocket({
82
+ host,
83
+ port,
84
+ geoLocation,
85
+ proxySessionId,
86
+ logger
87
+ });
88
+ socket.once('connect', resolve);
89
+ socket.once('error', reject);
90
+ socket.once('end', () => (reject(new AttestorError('ERROR_NETWORK_ERROR', 'connection closed'))));
91
+ }
92
+ catch (err) {
93
+ reject(err);
94
+ }
95
+ });
96
+ logger.debug({ addr: `${host}:${port}` }, 'connected');
97
+ return socket;
98
+ }
99
+ catch (err) {
100
+ socket?.end();
101
+ throw err;
102
+ }
103
+ finally {
104
+ clearTimeout(connectTimeout);
105
+ }
106
+ }
107
+ async function getSocket(opts) {
108
+ const { logger } = opts;
109
+ try {
110
+ return await _getSocket(opts);
111
+ }
112
+ catch (err) {
113
+ // see if the proxy is blocking the connection
114
+ // due to their own arbitrary rules,
115
+ // if so -- we resolve hostname first &
116
+ // connect directly via address to
117
+ // avoid proxy knowing which host we're connecting to
118
+ if (!(err instanceof AttestorError)
119
+ || err.data?.code !== 403) {
120
+ throw err;
121
+ }
122
+ const addrs = await resolveHostnames(opts.host);
123
+ logger.info({ addrs, host: opts.host }, 'failed to connect due to restricted IP, trying via raw addr');
124
+ for (const addr of addrs) {
125
+ try {
126
+ return await _getSocket({ ...opts, host: addr });
127
+ }
128
+ catch (err) {
129
+ logger.error({ addr, err }, 'failed to connect to host');
130
+ }
131
+ }
132
+ throw err;
133
+ }
134
+ }
135
+ async function _getSocket({ host, port, geoLocation, proxySessionId, logger }) {
136
+ const socket = new Socket();
137
+ if ((proxySessionId || geoLocation) && !HTTPS_PROXY_URL) {
138
+ logger.warn({ geoLocation, proxySessionId }, 'geoLocation or proxySessionId provided but no proxy URL found');
139
+ geoLocation = '';
140
+ proxySessionId = '';
141
+ }
142
+ if (!geoLocation && !proxySessionId) {
143
+ socket.connect({ host, port, });
144
+ return socket;
145
+ }
146
+ if (!isValidCountryCode(geoLocation)) {
147
+ throw AttestorError.badRequest(`Geolocation "${geoLocation}" is invalid. Must be 2 letter ISO country code`, { geoLocation });
148
+ }
149
+ if (proxySessionId && !isValidProxySessionId(proxySessionId)) {
150
+ throw AttestorError.badRequest(`proxySessionId "${proxySessionId}" is invalid. Must be a lowercase alphanumeric string of length 8-14 characters. eg. "mystring12345", "something1234".`, { proxySessionId });
151
+ }
152
+ const agentUrl = HTTPS_PROXY_URL.replace('{{geoLocation}}', geoLocation?.toLowerCase() || '').replace('{{proxySessionId}}', proxySessionId ? `-session-${proxySessionId}` : '');
153
+ const agent = new HttpsProxyAgent(agentUrl);
154
+ const waitForProxyRes = new Promise(resolve => {
155
+ // @ts-ignore
156
+ socket.once('proxyConnect', resolve);
157
+ });
158
+ const proxySocket = await agent.connect(
159
+ // ignore, because https-proxy-agent
160
+ // expects an http request object
161
+ // @ts-ignore
162
+ socket, { host, port, timeout: CONNECTION_TIMEOUT_MS });
163
+ const res = await waitForProxyRes;
164
+ if (res.statusCode !== 200) {
165
+ logger.error({ geoLocation, proxySessionId, res }, 'Proxy geo location or session id failed');
166
+ throw new AttestorError('ERROR_PROXY_ERROR', `Proxy via ${geoLocation ? `geo location "${geoLocation}"` : ''}${geoLocation && proxySessionId ? ', or ' : ''}${proxySessionId ? `session id "${proxySessionId}"` : ''} failed with status code: ${res.statusCode}, message: ${res.statusText}`, {
167
+ code: res.statusCode,
168
+ message: res.statusText,
169
+ });
170
+ }
171
+ process.nextTick(() => {
172
+ // ensure connect event is emitted
173
+ // so it can be captured by the caller
174
+ proxySocket.emit('connect');
175
+ });
176
+ return proxySocket;
177
+ }
@@ -0,0 +1,11 @@
1
+ import type { Agent } from 'elastic-apm-node';
2
+ /**
3
+ * Initialises the APM agent if required,
4
+ * and returns it.
5
+ * If ELASTIC_APM_SERVER_URL & ELASTIC_APM_SECRET_TOKEN
6
+ * are not set will return undefined
7
+ *
8
+ * Utilises the standard env variables mentioned
9
+ * here: https://www.elastic.co/guide/en/apm/agent/nodejs/current/custom-stack.html#custom-stack-advanced-configuration
10
+ */
11
+ export declare function getApm(): Agent | undefined;
@@ -0,0 +1,36 @@
1
+ import ElasticAPM from 'elastic-apm-node';
2
+ import { getEnvVariable } from '../../utils/env.js';
3
+ import { logger } from '../../utils/logger.js';
4
+ let apm;
5
+ /**
6
+ * Initialises the APM agent if required,
7
+ * and returns it.
8
+ * If ELASTIC_APM_SERVER_URL & ELASTIC_APM_SECRET_TOKEN
9
+ * are not set will return undefined
10
+ *
11
+ * Utilises the standard env variables mentioned
12
+ * here: https://www.elastic.co/guide/en/apm/agent/nodejs/current/custom-stack.html#custom-stack-advanced-configuration
13
+ */
14
+ export function getApm() {
15
+ if (!getEnvVariable('ELASTIC_APM_SERVER_URL')
16
+ || !getEnvVariable('ELASTIC_APM_SECRET_TOKEN')) {
17
+ logger.info('ELASTIC_APM_SERVER_URL or ELASTIC_APM_SECRET_TOKEN not found'
18
+ + ' in env, APM agent not initialised');
19
+ return undefined;
20
+ }
21
+ if (!apm) {
22
+ const sampleRate = +(getEnvVariable('ELASTIC_APM_SAMPLE_RATE')
23
+ || '0.1');
24
+ apm = ElasticAPM.start({
25
+ serviceName: 'reclaim_attestor',
26
+ serviceVersion: '4.0.0',
27
+ transactionSampleRate: sampleRate,
28
+ instrumentIncomingHTTPRequests: true,
29
+ usePathAsTransactionName: true,
30
+ instrument: true,
31
+ captureHeaders: true,
32
+ });
33
+ logger.info('initialised APM agent');
34
+ }
35
+ return apm;
36
+ }
@@ -0,0 +1,31 @@
1
+ import type { ZKEngine } from '@joclaim/zk-symmetric-crypto';
2
+ import type { InitRequest, ProviderClaimInfo } from '../../proto/api.js';
3
+ import { ClaimTunnelRequest } from '../../proto/api.js';
4
+ import type { IDecryptedTranscript, Logger, ProviderCtx, TCPSocketProperties, Transcript } from '../../types/index.js';
5
+ /**
6
+ * Asserts that the claim request is valid.
7
+ *
8
+ * 1. We begin by verifying the signature of the claim request.
9
+ * 2. Next, we produce the transcript of the TLS exchange
10
+ * from the proofs provided by the client.
11
+ * 3. We then pull the provider the client is trying to claim
12
+ * from
13
+ * 4. We then use the provider's verification function to verify
14
+ * whether the claim is valid.
15
+ *
16
+ * If any of these steps fail, we throw an error.
17
+ */
18
+ export declare function assertValidClaimRequest(request: ClaimTunnelRequest, metadata: InitRequest, logger: Logger): Promise<import("../../proto/api.js").ClaimRequestData>;
19
+ /**
20
+ * Verify that the transcript contains a valid claim
21
+ * for the provider.
22
+ */
23
+ export declare function assertValidProviderTranscript<T extends ProviderClaimInfo>(applData: Transcript<Uint8Array>, info: T, logger: Logger, providerCtx: ProviderCtx): Promise<T>;
24
+ /**
25
+ * Verify that the transcript provided by the client
26
+ * matches the transcript of the tunnel, the server
27
+ * has created.
28
+ */
29
+ export declare function assertTranscriptsMatch(clientTranscript: ClaimTunnelRequest['transcript'], tunnelTranscript: TCPSocketProperties['transcript']): void;
30
+ export declare function decryptTranscript(transcript: ClaimTunnelRequest['transcript'], logger: Logger, zkEngine: ZKEngine, serverIV: Uint8Array, clientIV: Uint8Array): Promise<IDecryptedTranscript>;
31
+ export declare function getWithoutHeader(message: Uint8Array): Uint8Array<ArrayBuffer>;
@@ -0,0 +1,229 @@
1
+ import { areUint8ArraysEqual, concatenateUint8Arrays } from '@joclaim/tls';
2
+ import { ClaimTunnelRequest, TranscriptMessageSenderType, ZKProofEngine } from '../../proto/api.js';
3
+ import { providers } from '../../providers/index.js';
4
+ import { niceParseJsonObject } from '../../server/utils/generics.js';
5
+ import { processHandshake } from '../../server/utils/process-handshake.js';
6
+ import { assertValidateProviderParams } from '../../server/utils/validation.js';
7
+ import { AttestorError, canonicalStringify, decryptDirect, extractApplicationDataFromTranscript, hashProviderParams, SIGNATURES, verifyZkPacket } from '../../utils/index.js';
8
+ /**
9
+ * Asserts that the claim request is valid.
10
+ *
11
+ * 1. We begin by verifying the signature of the claim request.
12
+ * 2. Next, we produce the transcript of the TLS exchange
13
+ * from the proofs provided by the client.
14
+ * 3. We then pull the provider the client is trying to claim
15
+ * from
16
+ * 4. We then use the provider's verification function to verify
17
+ * whether the claim is valid.
18
+ *
19
+ * If any of these steps fail, we throw an error.
20
+ */
21
+ export async function assertValidClaimRequest(request, metadata, logger) {
22
+ const { data, signatures: { requestSignature } = {}, zkEngine, fixedServerIV, fixedClientIV } = request;
23
+ if (!data) {
24
+ throw new AttestorError('ERROR_INVALID_CLAIM', 'No info provided on claim request');
25
+ }
26
+ if (!requestSignature?.length) {
27
+ throw new AttestorError('ERROR_INVALID_CLAIM', 'No signature provided on claim request');
28
+ }
29
+ // verify request signature
30
+ const serialisedReq = ClaimTunnelRequest
31
+ .encode({ ...request, signatures: undefined })
32
+ .finish();
33
+ const { verify: verifySig } = SIGNATURES[metadata.signatureType];
34
+ const verified = await verifySig(serialisedReq, requestSignature, data.owner);
35
+ if (!verified) {
36
+ throw new AttestorError('ERROR_INVALID_CLAIM', 'Invalid signature on claim request');
37
+ }
38
+ const receipt = await decryptTranscript(request.transcript, logger, zkEngine === ZKProofEngine.ZK_ENGINE_GNARK ? 'gnark' : 'snarkjs', fixedServerIV, fixedClientIV);
39
+ const reqHost = request.request?.host;
40
+ if (receipt.hostname !== reqHost) {
41
+ throw new Error(`Expected server name ${reqHost}, got ${receipt.hostname}`);
42
+ }
43
+ // get all application data messages
44
+ const applData = extractApplicationDataFromTranscript(receipt);
45
+ const newData = await assertValidProviderTranscript(applData, data, logger, { version: metadata.clientVersion });
46
+ if (newData !== data) {
47
+ logger.info({ newData }, 'updated claim info');
48
+ }
49
+ return newData;
50
+ }
51
+ /**
52
+ * Verify that the transcript contains a valid claim
53
+ * for the provider.
54
+ */
55
+ export async function assertValidProviderTranscript(applData, info, logger, providerCtx) {
56
+ const providerName = info.provider;
57
+ const provider = providers[providerName];
58
+ if (!provider) {
59
+ throw new AttestorError('ERROR_INVALID_CLAIM', `Unsupported provider: ${providerName}`);
60
+ }
61
+ const params = niceParseJsonObject(info.parameters, 'params');
62
+ const ctx = niceParseJsonObject(info.context, 'context');
63
+ assertValidateProviderParams(providerName, params);
64
+ const rslt = await provider.assertValidProviderReceipt({
65
+ receipt: applData,
66
+ params,
67
+ logger,
68
+ ctx: providerCtx
69
+ });
70
+ ctx.providerHash = hashProviderParams(params);
71
+ const extractedParameters = rslt?.extractedParameters || {};
72
+ if (Object.keys(extractedParameters).length) {
73
+ ctx.extractedParameters = extractedParameters;
74
+ }
75
+ info.context = canonicalStringify(ctx) ?? '';
76
+ return info;
77
+ }
78
+ /**
79
+ * Verify that the transcript provided by the client
80
+ * matches the transcript of the tunnel, the server
81
+ * has created.
82
+ */
83
+ export function assertTranscriptsMatch(clientTranscript, tunnelTranscript) {
84
+ const clientSends = concatenateUint8Arrays(clientTranscript
85
+ .filter(m => m.sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT)
86
+ .map(m => m.message));
87
+ const tunnelSends = concatenateUint8Arrays(tunnelTranscript
88
+ .filter(m => m.sender === 'client')
89
+ .map(m => m.message));
90
+ if (!areUint8ArraysEqual(clientSends, tunnelSends)) {
91
+ throw AttestorError.badRequest('Outgoing messages from client do not match the tunnel transcript');
92
+ }
93
+ const clientRecvs = concatenateUint8Arrays(clientTranscript
94
+ .filter(m => m.sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER)
95
+ .map(m => m.message));
96
+ const tunnelRecvs = concatenateUint8Arrays(tunnelTranscript
97
+ .filter(m => m.sender === 'server')
98
+ .map(m => m.message))
99
+ // We only need to compare the first N messages
100
+ // that the client claims to have received
101
+ // the rest are not relevant -- so even if they're
102
+ // not present in the tunnel transcript, it's fine
103
+ .slice(0, clientRecvs.length);
104
+ if (!areUint8ArraysEqual(clientRecvs, tunnelRecvs)) {
105
+ throw AttestorError.badRequest('Incoming messages from server do not match the tunnel transcript');
106
+ }
107
+ }
108
+ export async function decryptTranscript(transcript, logger, zkEngine, serverIV, clientIV) {
109
+ const { tlsVersion, cipherSuite, hostname, nextMsgIndex } = await processHandshake(transcript, logger);
110
+ // TLS 1.3 has already one record encrypted at this point
111
+ let clientRecordNumber = tlsVersion === 'TLS1_3' ? -1 : 0;
112
+ let serverRecordNumber = clientRecordNumber;
113
+ transcript = transcript.slice(nextMsgIndex);
114
+ const overshotMap = {};
115
+ const decryptedTranscript = [];
116
+ for (const [i, { sender, message, reveal: { zkReveal, directReveal } = {} }] of transcript.entries()) {
117
+ try {
118
+ //start with first message after last handshake message
119
+ await decryptMessage(sender, message, directReveal, zkReveal, i);
120
+ }
121
+ catch (error) {
122
+ const err = new AttestorError('ERROR_INVALID_CLAIM', `error in handling packet at idx ${i}: ${error}`, { packetIdx: i, error });
123
+ if (error.stack) {
124
+ err.stack = error.stack;
125
+ }
126
+ throw err;
127
+ }
128
+ }
129
+ return {
130
+ transcript: decryptedTranscript,
131
+ hostname: hostname,
132
+ tlsVersion: tlsVersion,
133
+ };
134
+ async function decryptMessage(sender, message, directReveal, zkReveal, i) {
135
+ const isServer = sender === TranscriptMessageSenderType
136
+ .TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER;
137
+ const recordHeader = message.slice(0, 5);
138
+ const content = getWithoutHeader(message);
139
+ if (isServer) {
140
+ serverRecordNumber++;
141
+ }
142
+ else {
143
+ clientRecordNumber++;
144
+ }
145
+ let redacted = true;
146
+ let plaintext = undefined;
147
+ let plaintextLength;
148
+ if (directReveal?.key?.length) {
149
+ const result = await decryptDirect(directReveal, cipherSuite, recordHeader, tlsVersion, content);
150
+ plaintext = result.plaintext;
151
+ redacted = false;
152
+ plaintextLength = plaintext.length;
153
+ const decoder = new TextDecoder('utf-8', { fatal: false });
154
+ const keyHex = Buffer.from(directReveal.key).toString('hex');
155
+ const ciphertextPreview = Buffer.from(content.slice(0, 64)).toString('hex');
156
+ const plaintextStr = decoder.decode(plaintext);
157
+ logger.info(`\n=======================================================================\n` +
158
+ `[directReveal] packet #${i} | sender: ${isServer ? 'server' : 'client'}\n` +
159
+ `session key: ${keyHex}\n` +
160
+ `ciphertext size: ${content.length} bytes | preview: ${ciphertextPreview}...\n` +
161
+ `plaintext (${plaintextLength} bytes):\n${plaintextStr}\n` +
162
+ `=======================================================================`);
163
+ }
164
+ else if (zkReveal?.proofs?.length) {
165
+ const iv = sender === TranscriptMessageSenderType
166
+ .TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER
167
+ ? serverIV
168
+ : clientIV;
169
+ const recordNumber = isServer
170
+ ? serverRecordNumber
171
+ : clientRecordNumber;
172
+ const result = await verifyZkPacket({
173
+ ciphertext: content,
174
+ zkReveal,
175
+ iv,
176
+ recordNumber,
177
+ toprfOvershotNullifier: overshotMap[i]?.data,
178
+ getNextPacket(overshot) {
179
+ const nextIdx = transcript
180
+ .findIndex((t, j) => t.sender === sender && j > i);
181
+ if (nextIdx < 0) {
182
+ return;
183
+ }
184
+ overshotMap[nextIdx] = { data: overshot };
185
+ return getWithoutHeader(transcript[nextIdx].message);
186
+ },
187
+ logger,
188
+ cipherSuite,
189
+ zkEngine: zkEngine,
190
+ });
191
+ plaintext = result.redactedPlaintext;
192
+ redacted = false;
193
+ plaintextLength = plaintext.length;
194
+ const decoder2 = new TextDecoder('utf-8', { fatal: false });
195
+ const ciphertextPreview2 = Buffer.from(content.slice(0, 64)).toString('hex');
196
+ const plaintextStr2 = decoder2.decode(plaintext);
197
+ logger.info(`\n=======================================================================\n` +
198
+ `[zkReveal] packet #${i} | sender: ${isServer ? 'server' : 'client'}\n` +
199
+ `zk proofs count: ${zkReveal.proofs.length}\n` +
200
+ `ciphertext size: ${content.length} bytes | preview: ${ciphertextPreview2}...\n` +
201
+ `redacted plaintext (${plaintextLength} bytes):\n${plaintextStr2}\n` +
202
+ `=======================================================================`);
203
+ }
204
+ else {
205
+ plaintext = content;
206
+ plaintextLength = plaintext.length;
207
+ const decoder3 = new TextDecoder('utf-8', { fatal: false });
208
+ logger.info(`\n=======================================================================\n` +
209
+ `[noReveal] packet #${i} | sender: ${isServer ? 'server' : 'client'}\n` +
210
+ `raw content size: ${content.length} bytes\n` +
211
+ `content:\n${decoder3.decode(plaintext)}\n` +
212
+ `=======================================================================`);
213
+ }
214
+ decryptedTranscript.push({
215
+ sender: sender === TranscriptMessageSenderType
216
+ .TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT
217
+ ? 'client'
218
+ : 'server',
219
+ redacted,
220
+ message: plaintext,
221
+ recordHeader,
222
+ plaintextLength,
223
+ });
224
+ }
225
+ }
226
+ export function getWithoutHeader(message) {
227
+ // strip the record header (xx 03 03 xx xx)
228
+ return message.slice(5);
229
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { config } from 'dotenv';
2
+ import { getEnvVariable } from '../../utils/env.js';
3
+ const nodeEnv = getEnvVariable('NODE_ENV') || 'development';
4
+ config({ path: `.env.${nodeEnv}` });
@@ -0,0 +1 @@
1
+ export declare function resolveHostnames(hostname: string): Promise<string[]>;
@@ -0,0 +1,18 @@
1
+ import { resolve, setServers } from 'dns';
2
+ import { DNS_SERVERS } from '../../config/index.js';
3
+ setDnsServers();
4
+ export async function resolveHostnames(hostname) {
5
+ return new Promise((_resolve, reject) => {
6
+ resolve(hostname, (err, addresses) => {
7
+ if (err) {
8
+ reject(new Error(`Could not resolve hostname: ${hostname}, ${err.message}`));
9
+ }
10
+ else {
11
+ _resolve(addresses);
12
+ }
13
+ });
14
+ });
15
+ }
16
+ function setDnsServers() {
17
+ setServers(DNS_SERVERS);
18
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * GCP attestation validation utilities
3
+ * Validates JWT tokens from Google Confidential Computing
4
+ */
5
+ import type { Logger } from '../../types/general.js';
6
+ export interface GcpValidationResult {
7
+ isValid: boolean;
8
+ errors: string[];
9
+ ethAddress?: Uint8Array;
10
+ userDataType?: string;
11
+ pcr0?: string;
12
+ envVars?: Record<string, string>;
13
+ }
14
+ /**
15
+ * Validates GCP JWT attestation and extracts ETH address
16
+ */
17
+ export declare function validateGcpAttestationAndExtractKey(attestationBytes: Uint8Array, logger?: Logger): Promise<GcpValidationResult>;