@reclaimprotocol/attestor-core 5.0.1-beta.21 → 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 (132) hide show
  1. package/browser/resources/attestor-browser.min.mjs +9 -9
  2. package/lib/avs/abis/avsDirectoryABI.js +340 -0
  3. package/lib/avs/abis/delegationABI.js +1 -0
  4. package/lib/avs/abis/registryABI.js +725 -0
  5. package/lib/avs/client/create-claim-on-avs.js +140 -0
  6. package/lib/avs/config.js +20 -0
  7. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1166 -0
  8. package/lib/avs/contracts/factories/index.js +4 -0
  9. package/lib/avs/contracts/index.js +2 -0
  10. package/lib/avs/utils/contracts.js +33 -0
  11. package/lib/avs/utils/register.js +79 -0
  12. package/lib/avs/utils/tasks.js +41 -0
  13. package/lib/client/create-claim.js +432 -0
  14. package/lib/client/index.js +3 -0
  15. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +51 -0
  16. package/lib/client/tunnels/make-rpc-tls-tunnel.js +131 -0
  17. package/lib/client/utils/attestor-pool.js +25 -0
  18. package/lib/client/utils/client-socket.js +97 -0
  19. package/lib/client/utils/message-handler.js +87 -0
  20. package/lib/config/index.js +44 -0
  21. package/lib/external-rpc/benchmark.js +69 -0
  22. package/lib/external-rpc/event-bus.js +14 -0
  23. package/lib/external-rpc/handle-incoming-msg.js +232 -0
  24. package/lib/external-rpc/index.js +3 -10399
  25. package/lib/external-rpc/jsc-polyfills/1.js +82 -0
  26. package/lib/external-rpc/jsc-polyfills/2.js +20 -0
  27. package/lib/external-rpc/jsc-polyfills/event.js +14 -0
  28. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  29. package/lib/external-rpc/jsc-polyfills/ws.js +81 -0
  30. package/lib/external-rpc/setup-browser.js +33 -0
  31. package/lib/external-rpc/setup-jsc.js +22 -0
  32. package/lib/external-rpc/types.js +1 -0
  33. package/lib/external-rpc/utils.js +100 -0
  34. package/lib/external-rpc/zk.js +63 -0
  35. package/lib/index.js +9 -8326
  36. package/lib/mechain/abis/governanceABI.js +458 -0
  37. package/lib/mechain/abis/taskABI.js +509 -0
  38. package/lib/mechain/client/create-claim-on-mechain.js +28 -0
  39. package/lib/mechain/client/index.js +1 -0
  40. package/lib/mechain/constants/index.js +3 -0
  41. package/lib/mechain/index.js +2 -0
  42. package/lib/proto/api.js +4363 -0
  43. package/lib/proto/tee-bundle.js +1316 -0
  44. package/lib/providers/http/index.js +653 -0
  45. package/lib/providers/http/patch-parse5-tree.js +32 -0
  46. package/lib/providers/http/utils.js +324 -0
  47. package/lib/providers/index.js +4 -0
  48. package/lib/server/create-server.js +103 -0
  49. package/lib/server/handlers/claimTeeBundle.js +252 -0
  50. package/lib/server/handlers/claimTunnel.js +73 -0
  51. package/lib/server/handlers/completeClaimOnChain.js +24 -0
  52. package/lib/server/handlers/createClaimOnChain.js +26 -0
  53. package/lib/server/handlers/createTaskOnMechain.js +47 -0
  54. package/lib/server/handlers/createTunnel.js +93 -0
  55. package/lib/server/handlers/disconnectTunnel.js +5 -0
  56. package/lib/server/handlers/fetchCertificateBytes.js +41 -0
  57. package/lib/server/handlers/index.js +22 -0
  58. package/lib/server/handlers/init.js +32 -0
  59. package/lib/server/handlers/toprf.js +16 -0
  60. package/lib/server/index.js +4 -0
  61. package/lib/server/socket.js +109 -0
  62. package/lib/server/tunnels/make-tcp-tunnel.js +177 -0
  63. package/lib/server/utils/apm.js +36 -0
  64. package/lib/server/utils/assert-valid-claim-request.js +325 -0
  65. package/lib/server/utils/config-env.js +4 -0
  66. package/lib/server/utils/dns.js +18 -0
  67. package/lib/server/utils/gcp-attestation.js +289 -0
  68. package/lib/server/utils/generics.d.ts +1 -1
  69. package/lib/server/utils/generics.js +51 -0
  70. package/lib/server/utils/iso.js +256 -0
  71. package/lib/server/utils/keep-alive.js +38 -0
  72. package/lib/server/utils/nitro-attestation.js +324 -0
  73. package/lib/server/utils/oprf-raw.js +54 -0
  74. package/lib/server/utils/process-handshake.js +215 -0
  75. package/lib/server/utils/proxy-session.js +6 -0
  76. package/lib/server/utils/tee-oprf-mpc-verification.js +90 -0
  77. package/lib/server/utils/tee-oprf-verification.js +174 -0
  78. package/lib/server/utils/tee-transcript-reconstruction.js +187 -0
  79. package/lib/server/utils/tee-verification.js +421 -0
  80. package/lib/server/utils/validation.js +38 -0
  81. package/lib/types/bgp.js +1 -0
  82. package/lib/types/claims.js +1 -0
  83. package/lib/types/client.js +1 -0
  84. package/lib/types/general.js +1 -0
  85. package/lib/types/handlers.js +1 -0
  86. package/lib/types/index.js +10 -0
  87. package/lib/types/providers.d.ts +3 -2
  88. package/lib/types/providers.gen.js +10 -0
  89. package/lib/types/providers.js +1 -0
  90. package/lib/types/rpc.js +1 -0
  91. package/lib/types/signatures.d.ts +1 -2
  92. package/lib/types/signatures.js +1 -0
  93. package/lib/types/tunnel.js +1 -0
  94. package/lib/types/zk.js +1 -0
  95. package/lib/utils/auth.js +59 -0
  96. package/lib/utils/b64-json.js +17 -0
  97. package/lib/utils/bgp-listener.js +119 -0
  98. package/lib/utils/claims.js +98 -0
  99. package/lib/utils/env.js +15 -0
  100. package/lib/utils/error.js +50 -0
  101. package/lib/utils/generics.js +317 -0
  102. package/lib/utils/http-parser.js +246 -0
  103. package/lib/utils/index.js +13 -0
  104. package/lib/utils/logger.js +91 -0
  105. package/lib/utils/prepare-packets.js +71 -0
  106. package/lib/utils/redactions.js +177 -0
  107. package/lib/utils/retries.js +24 -0
  108. package/lib/utils/signatures/eth.js +32 -0
  109. package/lib/utils/signatures/index.js +7 -0
  110. package/lib/utils/socket-base.js +92 -0
  111. package/lib/utils/tls.js +58 -0
  112. package/lib/utils/ws.js +22 -0
  113. package/lib/utils/zk.js +585 -0
  114. package/package.json +5 -3
  115. package/lib/scripts/check-avs-registration.d.ts +0 -1
  116. package/lib/scripts/fallbacks/crypto.d.ts +0 -1
  117. package/lib/scripts/fallbacks/empty.d.ts +0 -3
  118. package/lib/scripts/fallbacks/re2.d.ts +0 -1
  119. package/lib/scripts/fallbacks/snarkjs.d.ts +0 -1
  120. package/lib/scripts/fallbacks/stwo.d.ts +0 -6
  121. package/lib/scripts/generate-provider-types.d.ts +0 -5
  122. package/lib/scripts/generate-receipt.d.ts +0 -9
  123. package/lib/scripts/jsc-cli-rpc.d.ts +0 -1
  124. package/lib/scripts/register-avs-operator.d.ts +0 -1
  125. package/lib/scripts/start-server.d.ts +0 -1
  126. package/lib/scripts/update-avs-metadata.d.ts +0 -1
  127. package/lib/scripts/utils.d.ts +0 -1
  128. package/lib/scripts/whitelist-operator.d.ts +0 -1
  129. /package/lib/{scripts/build-browser.d.ts → avs/contracts/ReclaimServiceManager.js} +0 -0
  130. /package/lib/{scripts/build-jsc.d.ts → avs/contracts/common.js} +0 -0
  131. /package/lib/{scripts/build-lib.d.ts → avs/types/index.js} +0 -0
  132. /package/lib/{scripts/generate-toprf-keys.d.ts → mechain/types/index.js} +0 -0
@@ -0,0 +1,92 @@
1
+ import { wsMessageHandler } from "../client/utils/message-handler.js";
2
+ import { RPCMessages } from "../proto/api.js";
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
+ });
33
+ }
34
+ get isOpen() {
35
+ return this.socket.readyState === this.socket.OPEN;
36
+ }
37
+ get isClosed() {
38
+ return this.socket.readyState === this.socket.CLOSED
39
+ || this.socket.readyState === this.socket.CLOSING;
40
+ }
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;
58
+ }
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
+ }
92
+ }
@@ -0,0 +1,58 @@
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
5
+ const ZK_CIPHER_SUITES = [
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'
19
+ ];
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-----
25
+ MIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh
26
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
27
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
28
+ MjAeFw0xNzExMDIxMjI0MzNaFw0yNzExMDIxMjI0MzNaMGAxCzAJBgNVBAYTAlVT
29
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
30
+ b20xHzAdBgNVBAMTFlJhcGlkU1NMIFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3
31
+ DQEBAQUAA4IBDwAwggEKAoIBAQC/uVklRBI1FuJdUEkFCuDL/I3aJQiaZ6aibRHj
32
+ ap/ap9zy1aYNrphe7YcaNwMoPsZvXDR+hNJOo9gbgOYVTPq8gXc84I75YKOHiVA4
33
+ NrJJQZ6p2sJQyqx60HkEIjzIN+1LQLfXTlpuznToOa1hyTD0yyitFyOYwURM+/CI
34
+ 8FNFMpBhw22hpeAQkOOLmsqT5QZJYeik7qlvn8gfD+XdDnk3kkuuu0eG+vuyrSGr
35
+ 5uX5LRhFWlv1zFQDch/EKmd163m6z/ycx/qLa9zyvILc7cQpb+k7TLra9WE17YPS
36
+ n9ANjG+ECo9PDW3N9lwhKQCNvw1gGoguyCQu7HE7BnW8eSSFAgMBAAGjggFmMIIB
37
+ YjAdBgNVHQ4EFgQUDNtsgkkPSmcKuBTuesRIUojrVjgwHwYDVR0jBBgwFoAUTiJU
38
+ IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG
39
+ AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB
40
+ BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud
41
+ HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds
42
+ b2JhbFJvb3RHMi5jcmwwYwYDVR0gBFwwWjA3BglghkgBhv1sAQEwKjAoBggrBgEF
43
+ BQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzALBglghkgBhv1sAQIw
44
+ CAYGZ4EMAQIBMAgGBmeBDAECAjANBgkqhkiG9w0BAQsFAAOCAQEAGUSlOb4K3Wtm
45
+ SlbmE50UYBHXM0SKXPqHMzk6XQUpCheF/4qU8aOhajsyRQFDV1ih/uPIg7YHRtFi
46
+ CTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe
47
+ 0xQCkRKIjbBG80MSyDX/R4uYgj6ZiNT/Zg6GI6RofgqgpDdssLc0XIRQEotxIZcK
48
+ zP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT
49
+ 44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi
50
+ 8o34/m8Fxw==
51
+ -----END CERTIFICATE-----` //RapidSSL TLS RSA CA G1
52
+ );
53
+ export function getDefaultTlsOptions() {
54
+ return {
55
+ cipherSuites: ZK_CIPHER_SUITES,
56
+ namedCurves: NAMED_CURVE_LIST,
57
+ };
58
+ }
@@ -0,0 +1,22 @@
1
+ export function makeWebSocket(url) {
2
+ return new WebSocket(url);
3
+ }
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
+ }));
21
+ return ws;
22
+ }