@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,232 @@
1
+ import { hexlify } from 'ethers';
2
+ import { createClaimOnAvs } from "../avs/client/create-claim-on-avs.js";
3
+ import { createClaimOnAttestor } from "../client/index.js";
4
+ import { benchmark } from "./benchmark.js";
5
+ import { generateRpcRequestId, getCurrentMemoryUsage, getWsApiUrlFromBaseUrl, RPC_MSG_BRIDGE, sendMessageToApp, waitForResponse } from "./utils.js";
6
+ import { ALL_ENC_ALGORITHMS, makeExternalRpcOprfOperator, makeExternalRpcZkOperator } from "./zk.js";
7
+ import { createClaimOnMechain } from "../mechain/client/create-claim-on-mechain.js";
8
+ import { extractHTMLElement, extractJSONValueIndex, generateRequstAndResponseFromTranscript } from "../providers/http/utils.js";
9
+ import { B64_JSON_REVIVER } from "../utils/b64-json.js";
10
+ import { AttestorError, getIdentifierFromClaimInfo, logger, makeLogger, uint8ArrayToStr } from "../utils/index.js";
11
+ export async function handleIncomingMessage(data) {
12
+ let id = '';
13
+ try {
14
+ const req = (typeof data === 'string'
15
+ ? JSON.parse(data, B64_JSON_REVIVER)
16
+ : data);
17
+ id = req.id || '';
18
+ const rslt = await _handleIncomingMessage(req);
19
+ if (!rslt) {
20
+ return;
21
+ }
22
+ respond(rslt);
23
+ }
24
+ catch (err) {
25
+ console.error('Error in RPC', { id, error: err });
26
+ respond({
27
+ type: 'error',
28
+ data: {
29
+ message: err.message,
30
+ stack: err.stack,
31
+ }
32
+ });
33
+ }
34
+ function respond(data) {
35
+ const res = {
36
+ ...data,
37
+ id,
38
+ isResponse: true
39
+ };
40
+ return sendMessageToApp(res);
41
+ }
42
+ }
43
+ async function _handleIncomingMessage(req) {
44
+ const { id: reqId, type: reqType } = req;
45
+ // ignore any messages not for us
46
+ if (!reqId || !reqType) {
47
+ return;
48
+ }
49
+ RPC_MSG_BRIDGE.dispatch(req);
50
+ // ignore response messages
51
+ if (('isResponse' in req && req.isResponse)) {
52
+ return;
53
+ }
54
+ if (!reqId) {
55
+ logger.warn({ req }, 'Window RPC request missing ID');
56
+ return;
57
+ }
58
+ logger.info({ req }, 'processing RPC request');
59
+ switch (req.type) {
60
+ case 'createClaim':
61
+ const claimTunnelRes = await createClaimOnAttestor({
62
+ ...req.request,
63
+ context: req.request.context
64
+ ? JSON.parse(req.request.context)
65
+ : undefined,
66
+ zkOperators: getZkOperators(req.request.zkOperatorMode, req.request.zkEngine),
67
+ oprfOperators: getOprfOperators(req.request.zkOperatorMode, req.request.zkEngine),
68
+ client: {
69
+ url: getWsApiUrlFromBaseUrl(),
70
+ authRequest: req.request.authRequest
71
+ },
72
+ logger,
73
+ onStep(step) {
74
+ sendMessageToApp({
75
+ type: 'createClaimStep',
76
+ step: { name: 'attestor-progress', step },
77
+ id: req.id,
78
+ });
79
+ },
80
+ updateProviderParams: req.request.updateProviderParams
81
+ ? updateProviderParams
82
+ : undefined,
83
+ });
84
+ const response = mapToCreateClaimResponse(claimTunnelRes);
85
+ return { type: 'createClaimDone', response };
86
+ case 'createClaimOnAvs':
87
+ const avsRes = await createClaimOnAvs({
88
+ ...req.request,
89
+ payer: req.request.payer === 'attestor'
90
+ ? { attestor: getWsApiUrlFromBaseUrl() }
91
+ : undefined,
92
+ context: req.request.context
93
+ ? JSON.parse(req.request.context)
94
+ : undefined,
95
+ zkOperators: getZkOperators(req.request.zkOperatorMode, req.request.zkEngine),
96
+ oprfOperators: getOprfOperators(req.request.zkOperatorMode, req.request.zkEngine),
97
+ logger,
98
+ onStep(step) {
99
+ sendMessageToApp({
100
+ type: 'createClaimOnAvsStep',
101
+ step,
102
+ id: req.id,
103
+ });
104
+ },
105
+ });
106
+ return {
107
+ type: 'createClaimOnAvsDone',
108
+ response: avsRes,
109
+ };
110
+ case 'createClaimOnMechain':
111
+ const mechainRes = await createClaimOnMechain({
112
+ ...req.request,
113
+ context: req.request.context
114
+ ? JSON.parse(req.request.context)
115
+ : undefined,
116
+ zkOperators: getZkOperators(req.request.zkOperatorMode, req.request.zkEngine),
117
+ oprfOperators: getOprfOperators(req.request.zkOperatorMode, req.request.zkEngine),
118
+ client: { url: getWsApiUrlFromBaseUrl() },
119
+ logger,
120
+ onStep(step) {
121
+ sendMessageToApp({
122
+ type: 'createClaimOnMechainStep',
123
+ step,
124
+ id: req.id,
125
+ });
126
+ },
127
+ });
128
+ const claimResponses = [];
129
+ for (let i = 0; i < mechainRes.responses.length; i++) {
130
+ claimResponses[i] = mapToCreateClaimResponse(mechainRes.responses[i]);
131
+ }
132
+ return {
133
+ type: 'createClaimOnMechainDone',
134
+ response: { taskId: mechainRes.taskId, data: claimResponses },
135
+ };
136
+ case 'extractHtmlElement':
137
+ return {
138
+ type: 'extractHtmlElementDone',
139
+ response: extractHTMLElement(req.request.html, req.request.xpathExpression, req.request.contentsOnly),
140
+ };
141
+ case 'extractJSONValueIndex':
142
+ return {
143
+ type: 'extractJSONValueIndexDone',
144
+ response: extractJSONValueIndex(req.request.json, req.request.jsonPath),
145
+ };
146
+ case 'getCurrentMemoryUsage':
147
+ return {
148
+ type: 'getCurrentMemoryUsageDone',
149
+ response: await getCurrentMemoryUsage(),
150
+ };
151
+ case 'setLogLevel':
152
+ makeLogger(true, req.request.logLevel, req.request.sendLogsToApp
153
+ ? (level, message) => (sendMessageToApp({
154
+ type: 'log',
155
+ level,
156
+ message,
157
+ id: req.id,
158
+ }))
159
+ : undefined);
160
+ return { type: 'setLogLevelDone', response: undefined };
161
+ case 'benchmarkZK':
162
+ return { type: 'benchmarkZKDone', response: await benchmark() };
163
+ case 'ping':
164
+ return { type: 'pingDone', response: { pong: new Date().toJSON() } };
165
+ default:
166
+ break;
167
+ }
168
+ }
169
+ function getZkOperators(mode = 'default', zkEngine = 'snarkjs') {
170
+ // use default snarkJS ops
171
+ if (mode === 'default') {
172
+ return;
173
+ }
174
+ // the native app/window calling implements
175
+ // a ZK operator & wants to use it
176
+ const operators = {};
177
+ for (const alg of ALL_ENC_ALGORITHMS) {
178
+ operators[alg] = makeExternalRpcZkOperator(alg, zkEngine);
179
+ }
180
+ return operators;
181
+ }
182
+ function getOprfOperators(mode = 'default', zkEngine = 'snarkjs') {
183
+ // use default webview ops
184
+ if (mode === 'default') {
185
+ return;
186
+ }
187
+ // the native app/window calling implements
188
+ // a ZK operator & wants to use it
189
+ const operators = {};
190
+ for (const alg of ALL_ENC_ALGORITHMS) {
191
+ operators[alg] = makeExternalRpcOprfOperator(alg, zkEngine);
192
+ }
193
+ return operators;
194
+ }
195
+ async function updateProviderParams(transcript, tlsVersion) {
196
+ const { req, res } = generateRequstAndResponseFromTranscript(transcript, tlsVersion);
197
+ const id = generateRpcRequestId();
198
+ const waitForRes = waitForResponse('updateProviderParams', id);
199
+ sendMessageToApp({
200
+ type: 'updateProviderParams',
201
+ id,
202
+ request: {
203
+ request: {
204
+ ...req,
205
+ body: req.body
206
+ ? uint8ArrayToStr(req.body)
207
+ : undefined
208
+ },
209
+ response: { ...res, body: uint8ArrayToStr(res.body) },
210
+ }
211
+ });
212
+ return waitForRes;
213
+ }
214
+ function mapToCreateClaimResponse(res) {
215
+ if (!res.claim) {
216
+ throw AttestorError.fromProto(res.error);
217
+ }
218
+ return {
219
+ identifier: getIdentifierFromClaimInfo(res.claim),
220
+ claimData: res.claim,
221
+ witnesses: [
222
+ {
223
+ id: res.signatures.attestorAddress,
224
+ url: getWsApiUrlFromBaseUrl()
225
+ }
226
+ ],
227
+ signatures: [
228
+ hexlify(res.signatures.claimSignature)
229
+ .toLowerCase()
230
+ ]
231
+ };
232
+ }