@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,96 +1,92 @@
1
1
  import { wsMessageHandler } from "../client/utils/message-handler.js";
2
2
  import { RPCMessages } from "../proto/api.js";
3
- import { AttestorError, makeRpcEvent, packRpcMessages } from "../utils/index.js";
4
- class AttestorSocket {
5
- eventTarget = new EventTarget();
6
- socket;
7
- logger;
8
- metadata;
9
- isInitialised = false;
10
- constructor(socket, metadata, logger) {
11
- this.socket = socket;
12
- this.metadata = metadata;
13
- this.logger = logger;
14
- socket.addEventListener("error", (event) => {
15
- const witErr = AttestorError.fromError(
16
- event.error || new Error(event.message),
17
- "ERROR_NETWORK_ERROR"
18
- );
19
- this.dispatchRPCEvent("connection-terminated", witErr);
20
- });
21
- socket.addEventListener("close", () => this.dispatchRPCEvent(
22
- "connection-terminated",
23
- new AttestorError(
24
- "ERROR_NO_ERROR",
25
- "connection closed"
26
- )
27
- ));
28
- socket.addEventListener("message", async (event) => {
29
- try {
30
- await wsMessageHandler.call(this, event.data);
31
- } catch (err) {
32
- this.logger.error({ err }, "error processing message");
33
- }
34
- });
35
- }
36
- get isOpen() {
37
- return this.socket.readyState === this.socket.OPEN;
38
- }
39
- get isClosed() {
40
- return this.socket.readyState === this.socket.CLOSED || this.socket.readyState === this.socket.CLOSING;
41
- }
42
- async sendMessage(...msgs) {
43
- if (this.isClosed) {
44
- throw new AttestorError(
45
- "ERROR_NETWORK_ERROR",
46
- "Connection closed, cannot send message"
47
- );
3
+ import { AttestorError, makeRpcEvent, packRpcMessages } from "./index.js";
4
+ /**
5
+ * Common AttestorSocket class used on the client & server side as the
6
+ * base for their respective socket implementations.
7
+ */
8
+ export class AttestorSocket {
9
+ eventTarget = new EventTarget();
10
+ socket;
11
+ logger;
12
+ metadata;
13
+ isInitialised = false;
14
+ constructor(socket, metadata, logger) {
15
+ this.socket = socket;
16
+ this.metadata = metadata;
17
+ this.logger = logger;
18
+ // @ts-expect-error - WebSocket type differs between browser and Node.js
19
+ socket.addEventListener('error', (event) => {
20
+ const witErr = AttestorError.fromError(event.error || new Error(event.message), 'ERROR_NETWORK_ERROR');
21
+ this.dispatchRPCEvent('connection-terminated', witErr);
22
+ });
23
+ socket.addEventListener('close', () => (this.dispatchRPCEvent('connection-terminated', new AttestorError('ERROR_NO_ERROR', 'connection closed'))));
24
+ // @ts-expect-error - WebSocket type differs between browser and Node.js
25
+ socket.addEventListener('message', async (event) => {
26
+ try {
27
+ await wsMessageHandler.call(this, event.data);
28
+ }
29
+ catch (err) {
30
+ this.logger.error({ err }, 'error processing message');
31
+ }
32
+ });
48
33
  }
49
- if (!this.isOpen) {
50
- throw new AttestorError(
51
- "ERROR_NETWORK_ERROR",
52
- "Wait for connection to open before sending message"
53
- );
34
+ get isOpen() {
35
+ return this.socket.readyState === this.socket.OPEN;
54
36
  }
55
- const msg = packRpcMessages(...msgs);
56
- const bytes = RPCMessages.encode(msg).finish();
57
- this.logger.trace({ msg }, "sending messages");
58
- if ("sendPromise" in this.socket && this.socket.sendPromise) {
59
- await this.socket.sendPromise(bytes);
60
- } else {
61
- this.socket.send(bytes);
37
+ get isClosed() {
38
+ return this.socket.readyState === this.socket.CLOSED
39
+ || this.socket.readyState === this.socket.CLOSING;
62
40
  }
63
- return msg;
64
- }
65
- dispatchRPCEvent(type, data) {
66
- const event = makeRpcEvent(type, data);
67
- this.eventTarget.dispatchEvent(event);
68
- }
69
- addEventListener(type, listener) {
70
- this.eventTarget.addEventListener(type, listener);
71
- }
72
- removeEventListener(type, listener) {
73
- this.eventTarget.removeEventListener(type, listener);
74
- }
75
- async terminateConnection(err) {
76
- if (this.isClosed) {
77
- return;
41
+ async sendMessage(...msgs) {
42
+ if (this.isClosed) {
43
+ throw new AttestorError('ERROR_NETWORK_ERROR', 'Connection closed, cannot send message');
44
+ }
45
+ if (!this.isOpen) {
46
+ throw new AttestorError('ERROR_NETWORK_ERROR', 'Wait for connection to open before sending message');
47
+ }
48
+ const msg = packRpcMessages(...msgs);
49
+ const bytes = RPCMessages.encode(msg).finish();
50
+ this.logger.trace({ msg }, 'sending messages');
51
+ if ('sendPromise' in this.socket && this.socket.sendPromise) {
52
+ await this.socket.sendPromise(bytes);
53
+ }
54
+ else {
55
+ this.socket.send(bytes);
56
+ }
57
+ return msg;
78
58
  }
79
- try {
80
- const witErr = err ? AttestorError.fromError(err) : new AttestorError("ERROR_NO_ERROR", "");
81
- this.dispatchRPCEvent("connection-terminated", witErr);
82
- if (this.isOpen) {
83
- await this.sendMessage({
84
- connectionTerminationAlert: witErr.toProto()
85
- });
86
- }
87
- } catch (err2) {
88
- this.logger?.error({ err: err2 }, "error terminating connection");
89
- } finally {
90
- this.socket.close();
59
+ dispatchRPCEvent(type, data) {
60
+ const event = makeRpcEvent(type, data);
61
+ this.eventTarget.dispatchEvent(event);
62
+ }
63
+ addEventListener(type, listener) {
64
+ this.eventTarget.addEventListener(type, listener);
65
+ }
66
+ removeEventListener(type, listener) {
67
+ this.eventTarget.removeEventListener(type, listener);
68
+ }
69
+ async terminateConnection(err) {
70
+ // connection already closed
71
+ if (this.isClosed) {
72
+ return;
73
+ }
74
+ try {
75
+ const witErr = err
76
+ ? AttestorError.fromError(err)
77
+ : new AttestorError('ERROR_NO_ERROR', '');
78
+ this.dispatchRPCEvent('connection-terminated', witErr);
79
+ if (this.isOpen) {
80
+ await this.sendMessage({
81
+ connectionTerminationAlert: witErr.toProto()
82
+ });
83
+ }
84
+ }
85
+ catch (err) {
86
+ this.logger?.error({ err }, 'error terminating connection');
87
+ }
88
+ finally {
89
+ this.socket.close();
90
+ }
91
91
  }
92
- }
93
92
  }
94
- export {
95
- AttestorSocket
96
- };
package/lib/utils/tls.js CHANGED
@@ -1,23 +1,27 @@
1
- import { SUPPORTED_NAMED_CURVES } from "@reclaimprotocol/tls";
2
- import { detectEnvironment } from "../utils/env.js";
1
+ import { SUPPORTED_NAMED_CURVES } from '@reclaimprotocol/tls';
2
+ import { detectEnvironment } from "./env.js";
3
+ // we only support the following cipher suites
4
+ // for ZK proof generation
3
5
  const ZK_CIPHER_SUITES = [
4
- // chacha-20
5
- "TLS_CHACHA20_POLY1305_SHA256",
6
- "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
7
- "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
8
- // aes-256
9
- "TLS_AES_256_GCM_SHA384",
10
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
11
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
12
- // aes-128
13
- "TLS_AES_128_GCM_SHA256",
14
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
15
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
16
- "TLS_RSA_WITH_AES_128_GCM_SHA256"
6
+ // chacha-20
7
+ 'TLS_CHACHA20_POLY1305_SHA256',
8
+ 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256',
9
+ 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256',
10
+ // aes-256
11
+ 'TLS_AES_256_GCM_SHA384',
12
+ 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
13
+ 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384',
14
+ // aes-128
15
+ 'TLS_AES_128_GCM_SHA256',
16
+ 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
17
+ 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
18
+ 'TLS_RSA_WITH_AES_128_GCM_SHA256'
17
19
  ];
18
- const NAMED_CURVE_LIST = detectEnvironment() === "node" ? SUPPORTED_NAMED_CURVES : SUPPORTED_NAMED_CURVES.filter((c) => c !== "X25519");
19
- TLS_ADDITIONAL_ROOT_CA_LIST.push(
20
- `-----BEGIN CERTIFICATE-----
20
+ const NAMED_CURVE_LIST = detectEnvironment() === 'node'
21
+ ? SUPPORTED_NAMED_CURVES
22
+ // X25519 is not supported in the browser
23
+ : SUPPORTED_NAMED_CURVES.filter(c => c !== 'X25519');
24
+ TLS_ADDITIONAL_ROOT_CA_LIST.push(`-----BEGIN CERTIFICATE-----
21
25
  MIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh
22
26
  MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
23
27
  d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
@@ -44,15 +48,11 @@ CTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe
44
48
  zP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT
45
49
  44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi
46
50
  8o34/m8Fxw==
47
- -----END CERTIFICATE-----`
48
- //RapidSSL TLS RSA CA G1
51
+ -----END CERTIFICATE-----` //RapidSSL TLS RSA CA G1
49
52
  );
50
- function getDefaultTlsOptions() {
51
- return {
52
- cipherSuites: ZK_CIPHER_SUITES,
53
- namedCurves: NAMED_CURVE_LIST
54
- };
53
+ export function getDefaultTlsOptions() {
54
+ return {
55
+ cipherSuites: ZK_CIPHER_SUITES,
56
+ namedCurves: NAMED_CURVE_LIST,
57
+ };
55
58
  }
56
- export {
57
- getDefaultTlsOptions
58
- };
package/lib/utils/ws.js CHANGED
@@ -1,22 +1,22 @@
1
- function makeWebSocket(url) {
2
- return new WebSocket(url);
1
+ export function makeWebSocket(url) {
2
+ return new WebSocket(url);
3
3
  }
4
- function promisifySend(ws) {
5
- if (ws.sendPromise) {
4
+ /**
5
+ * Adds the "sendPromise" fn to the given WebSocket instance,
6
+ * if not already present.
7
+ */
8
+ export function promisifySend(ws) {
9
+ if (ws.sendPromise) {
10
+ return ws;
11
+ }
12
+ ws.sendPromise = (data) => (new Promise((resolve, reject) => {
13
+ ws.send(data, err => {
14
+ if (err) {
15
+ reject(err);
16
+ return;
17
+ }
18
+ resolve();
19
+ });
20
+ }));
6
21
  return ws;
7
- }
8
- ws.sendPromise = (data) => new Promise((resolve, reject) => {
9
- ws.send(data, (err) => {
10
- if (err) {
11
- reject(err);
12
- return;
13
- }
14
- resolve();
15
- });
16
- });
17
- return ws;
18
22
  }
19
- export {
20
- makeWebSocket,
21
- promisifySend
22
- };