@reclaimprotocol/attestor-core 5.0.1-beta.2 → 5.0.1-beta.22

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 (145) hide show
  1. package/browser/resources/attestor-browser.min.mjs +4512 -0
  2. package/lib/avs/abis/avsDirectoryABI.js +338 -341
  3. package/lib/avs/abis/delegationABI.js +1 -4
  4. package/lib/avs/abis/registryABI.js +719 -722
  5. package/lib/avs/client/create-claim-on-avs.js +129 -157
  6. package/lib/avs/config.js +18 -24
  7. package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
  8. package/lib/avs/contracts/common.js +1 -0
  9. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1139 -1156
  10. package/lib/avs/contracts/factories/index.js +4 -4
  11. package/lib/avs/contracts/index.js +2 -6
  12. package/lib/avs/types/index.js +1 -0
  13. package/lib/avs/utils/contracts.js +30 -50
  14. package/lib/avs/utils/register.js +75 -70
  15. package/lib/avs/utils/tasks.js +38 -45
  16. package/lib/client/create-claim.js +402 -431
  17. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +46 -48
  18. package/lib/client/tunnels/make-rpc-tls-tunnel.js +125 -121
  19. package/lib/client/utils/attestor-pool.js +23 -22
  20. package/lib/client/utils/client-socket.js +86 -109
  21. package/lib/client/utils/message-handler.js +79 -89
  22. package/lib/config/index.js +40 -58
  23. package/lib/external-rpc/benchmark.js +61 -74
  24. package/lib/external-rpc/event-bus.js +12 -15
  25. package/lib/external-rpc/handle-incoming-msg.js +216 -225
  26. package/lib/external-rpc/jsc-polyfills/1.js +70 -68
  27. package/lib/external-rpc/jsc-polyfills/2.js +17 -12
  28. package/lib/external-rpc/jsc-polyfills/event.js +10 -15
  29. package/lib/external-rpc/jsc-polyfills/index.js +2 -2
  30. package/lib/external-rpc/jsc-polyfills/ws.js +77 -79
  31. package/lib/external-rpc/setup-browser.js +28 -28
  32. package/lib/external-rpc/setup-jsc.js +17 -17
  33. package/lib/external-rpc/types.js +1 -0
  34. package/lib/external-rpc/utils.js +89 -89
  35. package/lib/external-rpc/zk.js +55 -50
  36. package/lib/index.js +2 -6
  37. package/lib/mechain/abis/governanceABI.js +457 -460
  38. package/lib/mechain/abis/taskABI.js +502 -505
  39. package/lib/mechain/client/create-claim-on-mechain.js +24 -29
  40. package/lib/mechain/constants/index.js +3 -8
  41. package/lib/mechain/types/index.js +1 -0
  42. package/lib/proto/api.js +4200 -4087
  43. package/lib/proto/tee-bundle.js +1261 -1241
  44. package/lib/providers/http/index.js +616 -603
  45. package/lib/providers/http/patch-parse5-tree.js +27 -29
  46. package/lib/providers/http/utils.js +289 -248
  47. package/lib/providers/index.js +3 -6
  48. package/lib/server/create-server.js +89 -91
  49. package/lib/server/handlers/claimTeeBundle.js +231 -211
  50. package/lib/server/handlers/claimTunnel.js +66 -73
  51. package/lib/server/handlers/completeClaimOnChain.js +20 -25
  52. package/lib/server/handlers/createClaimOnChain.js +21 -27
  53. package/lib/server/handlers/createTaskOnMechain.js +40 -50
  54. package/lib/server/handlers/createTunnel.js +85 -90
  55. package/lib/server/handlers/disconnectTunnel.js +4 -7
  56. package/lib/server/handlers/fetchCertificateBytes.js +37 -53
  57. package/lib/server/handlers/index.js +21 -24
  58. package/lib/server/handlers/init.js +27 -28
  59. package/lib/server/handlers/toprf.js +13 -16
  60. package/lib/server/socket.js +97 -100
  61. package/lib/server/tunnels/make-tcp-tunnel.js +161 -186
  62. package/lib/server/utils/apm.js +32 -25
  63. package/lib/server/utils/assert-valid-claim-request.js +305 -334
  64. package/lib/server/utils/config-env.js +2 -2
  65. package/lib/server/utils/dns.js +12 -18
  66. package/lib/server/utils/gcp-attestation.js +233 -181
  67. package/lib/server/utils/generics.d.ts +1 -1
  68. package/lib/server/utils/generics.js +43 -37
  69. package/lib/server/utils/iso.js +253 -256
  70. package/lib/server/utils/keep-alive.js +36 -36
  71. package/lib/server/utils/nitro-attestation.js +295 -220
  72. package/lib/server/utils/oprf-raw.js +48 -55
  73. package/lib/server/utils/process-handshake.js +200 -218
  74. package/lib/server/utils/proxy-session.js +5 -5
  75. package/lib/server/utils/tee-oprf-mpc-verification.js +82 -78
  76. package/lib/server/utils/tee-oprf-verification.js +165 -142
  77. package/lib/server/utils/tee-transcript-reconstruction.js +176 -129
  78. package/lib/server/utils/tee-verification.js +397 -334
  79. package/lib/server/utils/validation.js +30 -37
  80. package/lib/types/bgp.js +1 -0
  81. package/lib/types/claims.js +1 -0
  82. package/lib/types/client.js +1 -0
  83. package/lib/types/general.js +1 -0
  84. package/lib/types/handlers.js +1 -0
  85. package/lib/types/providers.d.ts +3 -2
  86. package/lib/types/providers.gen.js +9 -15
  87. package/lib/types/providers.js +1 -0
  88. package/lib/types/rpc.js +1 -0
  89. package/lib/types/signatures.d.ts +1 -2
  90. package/lib/types/signatures.js +1 -0
  91. package/lib/types/tunnel.js +1 -0
  92. package/lib/types/zk.js +1 -0
  93. package/lib/utils/auth.js +54 -66
  94. package/lib/utils/b64-json.js +15 -15
  95. package/lib/utils/bgp-listener.js +107 -111
  96. package/lib/utils/claims.js +89 -80
  97. package/lib/utils/env.js +13 -17
  98. package/lib/utils/error.js +43 -47
  99. package/lib/utils/generics.js +284 -235
  100. package/lib/utils/http-parser.js +232 -187
  101. package/lib/utils/logger.js +80 -71
  102. package/lib/utils/prepare-packets.js +69 -67
  103. package/lib/utils/redactions.js +163 -121
  104. package/lib/utils/retries.js +22 -24
  105. package/lib/utils/signatures/eth.js +29 -28
  106. package/lib/utils/signatures/index.js +5 -10
  107. package/lib/utils/socket-base.js +84 -88
  108. package/lib/utils/tls.js +28 -28
  109. package/lib/utils/ws.js +19 -19
  110. package/lib/utils/zk.js +542 -582
  111. package/package.json +12 -5
  112. package/lib/external-rpc/global.d.js +0 -0
  113. package/lib/scripts/build-browser.d.ts +0 -1
  114. package/lib/scripts/build-jsc.d.ts +0 -1
  115. package/lib/scripts/build-lib.d.ts +0 -1
  116. package/lib/scripts/check-avs-registration.d.ts +0 -1
  117. package/lib/scripts/check-avs-registration.js +0 -28
  118. package/lib/scripts/fallbacks/crypto.d.ts +0 -1
  119. package/lib/scripts/fallbacks/crypto.js +0 -4
  120. package/lib/scripts/fallbacks/empty.d.ts +0 -3
  121. package/lib/scripts/fallbacks/empty.js +0 -4
  122. package/lib/scripts/fallbacks/re2.d.ts +0 -1
  123. package/lib/scripts/fallbacks/re2.js +0 -7
  124. package/lib/scripts/fallbacks/snarkjs.d.ts +0 -1
  125. package/lib/scripts/fallbacks/snarkjs.js +0 -10
  126. package/lib/scripts/fallbacks/stwo.d.ts +0 -6
  127. package/lib/scripts/fallbacks/stwo.js +0 -159
  128. package/lib/scripts/generate-provider-types.d.ts +0 -5
  129. package/lib/scripts/generate-provider-types.js +0 -101
  130. package/lib/scripts/generate-receipt.d.ts +0 -9
  131. package/lib/scripts/generate-receipt.js +0 -101
  132. package/lib/scripts/generate-toprf-keys.d.ts +0 -1
  133. package/lib/scripts/generate-toprf-keys.js +0 -24
  134. package/lib/scripts/jsc-cli-rpc.d.ts +0 -1
  135. package/lib/scripts/jsc-cli-rpc.js +0 -35
  136. package/lib/scripts/register-avs-operator.d.ts +0 -1
  137. package/lib/scripts/register-avs-operator.js +0 -3
  138. package/lib/scripts/start-server.d.ts +0 -1
  139. package/lib/scripts/start-server.js +0 -11
  140. package/lib/scripts/update-avs-metadata.d.ts +0 -1
  141. package/lib/scripts/update-avs-metadata.js +0 -20
  142. package/lib/scripts/utils.d.ts +0 -1
  143. package/lib/scripts/utils.js +0 -10
  144. package/lib/scripts/whitelist-operator.d.ts +0 -1
  145. package/lib/scripts/whitelist-operator.js +0 -16
@@ -1,105 +1,103 @@
1
- import { createServer as createHttpServer } from "http";
2
- import serveStatic from "serve-static";
3
- import { WebSocketServer } from "ws";
1
+ import { createServer as createHttpServer } from 'http';
2
+ import serveStatic from 'serve-static';
3
+ import { WebSocketServer } from 'ws';
4
4
  import { API_SERVER_PORT, ATTESTOR_ADDRESS_PATHNAME, BROWSER_RPC_PATHNAME, WS_PATHNAME } from "../config/index.js";
5
- import { AttestorServerSocket } from "../server/socket.js";
6
- import { getAttestorAddress } from "../server/utils/generics.js";
7
- import { addKeepAlive } from "../server/utils/keep-alive.js";
5
+ import { AttestorServerSocket } from "./socket.js";
6
+ import { getAttestorAddress } from "./utils/generics.js";
7
+ import { addKeepAlive } from "./utils/keep-alive.js";
8
8
  import { createBgpListener } from "../utils/bgp-listener.js";
9
9
  import { getEnvVariable } from "../utils/env.js";
10
10
  import { logger as LOGGER } from "../utils/index.js";
11
11
  import { SelectedServiceSignatureType } from "../utils/signatures/index.js";
12
12
  import { promisifySend } from "../utils/ws.js";
13
- const PORT = +(getEnvVariable("PORT") || API_SERVER_PORT);
14
- const DISABLE_BGP_CHECKS = getEnvVariable("DISABLE_BGP_CHECKS") === "1";
13
+ const PORT = +(getEnvVariable('PORT') || API_SERVER_PORT);
14
+ const DISABLE_BGP_CHECKS = getEnvVariable('DISABLE_BGP_CHECKS') === '1';
15
15
  const ATTESTOR_ADDRESS_JSON_RES = JSON.stringify({
16
- address: getAttestorAddress(SelectedServiceSignatureType),
17
- signatureType: SelectedServiceSignatureType
16
+ address: getAttestorAddress(SelectedServiceSignatureType),
17
+ signatureType: SelectedServiceSignatureType
18
18
  });
19
- async function createServer(port = PORT) {
20
- const http = createHttpServer();
21
- const serveBrowserRpc = serveStatic(
22
- "browser",
23
- {
24
- index: ["index.html"],
25
- setHeaders(res) {
26
- res.setHeader("Access-Control-Allow-Origin", "*");
27
- }
28
- }
29
- );
30
- const bgpListener = !DISABLE_BGP_CHECKS ? createBgpListener(LOGGER.child({ service: "bgp-listener" })) : void 0;
31
- const wss = new WebSocketServer({ noServer: true });
32
- http.on("upgrade", handleUpgrade.bind(wss));
33
- http.on("request", (req, res) => {
34
- const url = URL.parse(req.url || "", "http://localhost");
35
- if (!url) {
36
- res.statusCode = 422;
37
- res.end("Invalid URL");
38
- return;
39
- }
40
- if (url.pathname === ATTESTOR_ADDRESS_PATHNAME) {
41
- res.writeHead(200, { "Content-Type": "application/json" });
42
- res.end(ATTESTOR_ADDRESS_JSON_RES);
43
- return;
44
- }
45
- if (!url.pathname?.startsWith(BROWSER_RPC_PATHNAME)) {
46
- res.statusCode = 404;
47
- res.end("Not found");
48
- return;
49
- }
50
- req.url = req.url.slice(BROWSER_RPC_PATHNAME.length) || "/";
51
- serveBrowserRpc(req, res, (err) => {
52
- if (err) {
53
- LOGGER.error({ err, url: req.url }, "Failed to serve file");
54
- }
55
- res.statusCode = err?.statusCode ?? 404;
56
- res.end(err?.message ?? "Not found");
19
+ /**
20
+ * Creates the WebSocket API server,
21
+ * creates a fileserver to serve the browser RPC client,
22
+ * and listens on the given port.
23
+ */
24
+ export async function createServer(port = PORT) {
25
+ const http = createHttpServer();
26
+ const serveBrowserRpc = serveStatic('browser', {
27
+ index: ['index.html'],
28
+ setHeaders(res) {
29
+ res.setHeader('Access-Control-Allow-Origin', '*');
30
+ },
31
+ });
32
+ const bgpListener = !DISABLE_BGP_CHECKS
33
+ ? createBgpListener(LOGGER.child({ service: 'bgp-listener' }))
34
+ : undefined;
35
+ const wss = new WebSocketServer({ noServer: true });
36
+ http.on('upgrade', handleUpgrade.bind(wss));
37
+ http.on('request', (req, res) => {
38
+ const url = URL.parse(req.url || '', 'http://localhost');
39
+ if (!url) {
40
+ res.statusCode = 422;
41
+ res.end('Invalid URL');
42
+ return;
43
+ }
44
+ if (url.pathname === ATTESTOR_ADDRESS_PATHNAME) {
45
+ res.writeHead(200, { 'Content-Type': 'application/json' });
46
+ res.end(ATTESTOR_ADDRESS_JSON_RES);
47
+ return;
48
+ }
49
+ // simple way to serve files at the browser RPC path
50
+ if (!url.pathname?.startsWith(BROWSER_RPC_PATHNAME)) {
51
+ res.statusCode = 404;
52
+ res.end('Not found');
53
+ return;
54
+ }
55
+ req.url = req.url.slice(BROWSER_RPC_PATHNAME.length) || '/';
56
+ serveBrowserRpc(req, res, (err) => {
57
+ if (err) {
58
+ LOGGER.error({ err, url: req.url }, 'Failed to serve file');
59
+ }
60
+ res.statusCode = err?.statusCode ?? 404;
61
+ res.end(err?.message ?? 'Not found');
62
+ });
57
63
  });
58
- });
59
- http.listen(port);
60
- await new Promise((resolve, reject) => {
61
- http.once("listening", () => resolve());
62
- http.once("error", reject);
63
- });
64
- wss.on("connection", (ws, req) => handleNewClient(ws, req, bgpListener));
65
- LOGGER.info(
66
- {
67
- port,
68
- apiPath: WS_PATHNAME,
69
- browserRpcPath: BROWSER_RPC_PATHNAME,
70
- signerAddress: getAttestorAddress(SelectedServiceSignatureType)
71
- },
72
- "WS server listening"
73
- );
74
- const wssClose = wss.close.bind(wss);
75
- wss.close = (cb) => {
76
- wssClose(() => http.close(cb));
77
- bgpListener?.close();
78
- };
79
- return wss;
64
+ // wait for us to start listening
65
+ http.listen(port);
66
+ await new Promise((resolve, reject) => {
67
+ http.once('listening', () => resolve());
68
+ http.once('error', reject);
69
+ });
70
+ wss.on('connection', (ws, req) => handleNewClient(ws, req, bgpListener));
71
+ LOGGER.info({
72
+ port,
73
+ apiPath: WS_PATHNAME,
74
+ browserRpcPath: BROWSER_RPC_PATHNAME,
75
+ signerAddress: getAttestorAddress(SelectedServiceSignatureType)
76
+ }, 'WS server listening');
77
+ const wssClose = wss.close.bind(wss);
78
+ wss.close = (cb) => {
79
+ wssClose(() => http.close(cb));
80
+ bgpListener?.close();
81
+ };
82
+ return wss;
80
83
  }
81
84
  async function handleNewClient(ws, req, bgpListener) {
82
- promisifySend(ws);
83
- const client = await AttestorServerSocket.acceptConnection(
84
- ws,
85
- { req, bgpListener, logger: LOGGER }
86
- );
87
- if (!client) {
88
- return;
89
- }
90
- ws.serverSocket = client;
91
- addKeepAlive(ws, LOGGER.child({ sessionId: client.sessionId }));
85
+ promisifySend(ws);
86
+ const client = await AttestorServerSocket.acceptConnection(ws, { req, bgpListener, logger: LOGGER });
87
+ // if initialisation fails, don't store the client
88
+ if (!client) {
89
+ return;
90
+ }
91
+ ws.serverSocket = client;
92
+ addKeepAlive(ws, LOGGER.child({ sessionId: client.sessionId }));
92
93
  }
93
94
  function handleUpgrade(request, socket, head) {
94
- const { pathname } = new URL(request.url, "wss://base.url");
95
- if (pathname === WS_PATHNAME) {
96
- this.handleUpgrade(request, socket, head, (ws) => {
97
- this.emit("connection", ws, request);
98
- });
99
- return;
100
- }
101
- socket.destroy();
95
+ const { pathname } = new URL(request.url, 'wss://base.url');
96
+ if (pathname === WS_PATHNAME) {
97
+ this.handleUpgrade(request, socket, head, (ws) => {
98
+ this.emit('connection', ws, request);
99
+ });
100
+ return;
101
+ }
102
+ socket.destroy();
102
103
  }
103
- export {
104
- createServer
105
- };