@reclaimprotocol/attestor-core 3.0.1
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.
- package/README.md +39 -0
- package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
- package/lib/avs/abis/avsDirectoryABI.js +344 -0
- package/lib/avs/abis/delegationABI.d.ts +126 -0
- package/lib/avs/abis/delegationABI.js +5 -0
- package/lib/avs/abis/registryABI.d.ts +136 -0
- package/lib/avs/abis/registryABI.js +729 -0
- package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
- package/lib/avs/client/create-claim-on-avs.js +147 -0
- package/lib/avs/config.d.ts +7 -0
- package/lib/avs/config.js +24 -0
- package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
- package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
- package/lib/avs/contracts/common.d.ts +21 -0
- package/lib/avs/contracts/common.js +3 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
- package/lib/avs/contracts/factories/index.d.ts +1 -0
- package/lib/avs/contracts/factories/index.js +9 -0
- package/lib/avs/contracts/index.d.ts +3 -0
- package/lib/avs/contracts/index.js +30 -0
- package/lib/avs/tests/test.operator.d.ts +11 -0
- package/lib/avs/tests/test.operator.js +313 -0
- package/lib/avs/tests/utils.d.ts +2 -0
- package/lib/avs/tests/utils.js +50 -0
- package/lib/avs/types/index.d.ts +55 -0
- package/lib/avs/types/index.js +3 -0
- package/lib/avs/utils/contracts.d.ts +21 -0
- package/lib/avs/utils/contracts.js +38 -0
- package/lib/avs/utils/register.d.ts +27 -0
- package/lib/avs/utils/register.js +76 -0
- package/lib/avs/utils/tasks.d.ts +22 -0
- package/lib/avs/utils/tasks.js +45 -0
- package/lib/client/create-claim.d.ts +5 -0
- package/lib/client/create-claim.js +357 -0
- package/lib/client/index.d.ts +3 -0
- package/lib/client/index.js +20 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
- package/lib/client/utils/attestor-pool.d.ts +6 -0
- package/lib/client/utils/attestor-pool.js +28 -0
- package/lib/client/utils/client-socket.d.ts +9 -0
- package/lib/client/utils/client-socket.js +77 -0
- package/lib/client/utils/message-handler.d.ts +4 -0
- package/lib/client/utils/message-handler.js +93 -0
- package/lib/config/index.d.ts +23 -0
- package/lib/config/index.js +35 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +39 -0
- package/lib/proto/api.d.ts +414 -0
- package/lib/proto/api.js +2756 -0
- package/lib/providers/http/index.d.ts +3 -0
- package/lib/providers/http/index.js +472 -0
- package/lib/providers/http/utils.d.ts +44 -0
- package/lib/providers/http/utils.js +302 -0
- package/lib/providers/index.d.ts +4 -0
- package/lib/providers/index.js +11 -0
- package/lib/scripts/check-avs-registration.d.ts +1 -0
- package/lib/scripts/check-avs-registration.js +28 -0
- package/lib/scripts/generate-provider-types.d.ts +5 -0
- package/lib/scripts/generate-provider-types.js +82 -0
- package/lib/scripts/generate-receipt.d.ts +9 -0
- package/lib/scripts/generate-receipt.js +93 -0
- package/lib/scripts/register-avs-operator.d.ts +1 -0
- package/lib/scripts/register-avs-operator.js +6 -0
- package/lib/scripts/start-server.d.ts +1 -0
- package/lib/scripts/start-server.js +6 -0
- package/lib/scripts/verify-root-ca.d.ts +1 -0
- package/lib/scripts/verify-root-ca.js +51 -0
- package/lib/server/create-server.d.ts +7 -0
- package/lib/server/create-server.js +85 -0
- package/lib/server/handlers/claimTunnel.d.ts +2 -0
- package/lib/server/handlers/claimTunnel.js +55 -0
- package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/completeClaimOnChain.js +28 -0
- package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/createClaimOnChain.js +31 -0
- package/lib/server/handlers/createTunnel.d.ts +2 -0
- package/lib/server/handlers/createTunnel.js +65 -0
- package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
- package/lib/server/handlers/disconnectTunnel.js +10 -0
- package/lib/server/handlers/index.d.ts +4 -0
- package/lib/server/handlers/index.js +18 -0
- package/lib/server/handlers/init.d.ts +2 -0
- package/lib/server/handlers/init.js +21 -0
- package/lib/server/index.d.ts +4 -0
- package/lib/server/index.js +21 -0
- package/lib/server/socket.d.ts +11 -0
- package/lib/server/socket.js +95 -0
- package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
- package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
- package/lib/server/utils/apm.d.ts +11 -0
- package/lib/server/utils/apm.js +39 -0
- package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
- package/lib/server/utils/assert-valid-claim-request.js +189 -0
- package/lib/server/utils/config-env.d.ts +1 -0
- package/lib/server/utils/config-env.js +7 -0
- package/lib/server/utils/generics.d.ts +22 -0
- package/lib/server/utils/generics.js +59 -0
- package/lib/server/utils/iso.d.ts +1 -0
- package/lib/server/utils/iso.js +260 -0
- package/lib/server/utils/keep-alive.d.ts +7 -0
- package/lib/server/utils/keep-alive.js +42 -0
- package/lib/server/utils/process-handshake.d.ts +13 -0
- package/lib/server/utils/process-handshake.js +179 -0
- package/lib/server/utils/verify-server-certificates.d.ts +7 -0
- package/lib/server/utils/verify-server-certificates.js +102 -0
- package/lib/tests/describe-with-server.d.ts +21 -0
- package/lib/tests/describe-with-server.js +67 -0
- package/lib/tests/mock-provider-server.d.ts +13 -0
- package/lib/tests/mock-provider-server.js +65 -0
- package/lib/tests/mocks.d.ts +4 -0
- package/lib/tests/mocks.js +23 -0
- package/lib/tests/test.claim-creation.d.ts +1 -0
- package/lib/tests/test.claim-creation.js +187 -0
- package/lib/tests/test.http-parser.d.ts +1 -0
- package/lib/tests/test.http-parser.js +118 -0
- package/lib/tests/test.http-provider-utils.d.ts +1 -0
- package/lib/tests/test.http-provider-utils.js +1932 -0
- package/lib/tests/test.http-provider.d.ts +1 -0
- package/lib/tests/test.http-provider.js +43 -0
- package/lib/tests/test.rpc-communication.d.ts +1 -0
- package/lib/tests/test.rpc-communication.js +64 -0
- package/lib/tests/test.rpc-tunnel.d.ts +1 -0
- package/lib/tests/test.rpc-tunnel.js +168 -0
- package/lib/tests/test.signatures.d.ts +1 -0
- package/lib/tests/test.signatures.js +24 -0
- package/lib/tests/test.tcp-tunnel.d.ts +1 -0
- package/lib/tests/test.tcp-tunnel.js +64 -0
- package/lib/tests/test.zk.d.ts +1 -0
- package/lib/tests/test.zk.js +169 -0
- package/lib/tests/utils.d.ts +12 -0
- package/lib/tests/utils.js +49 -0
- package/lib/types/claims.d.ts +64 -0
- package/lib/types/claims.js +3 -0
- package/lib/types/client.d.ts +136 -0
- package/lib/types/client.js +3 -0
- package/lib/types/general.d.ts +39 -0
- package/lib/types/general.js +3 -0
- package/lib/types/handlers.d.ts +10 -0
- package/lib/types/handlers.js +3 -0
- package/lib/types/index.d.ts +9 -0
- package/lib/types/index.js +26 -0
- package/lib/types/providers.d.ts +135 -0
- package/lib/types/providers.gen.d.ts +414 -0
- package/lib/types/providers.gen.js +14 -0
- package/lib/types/providers.js +3 -0
- package/lib/types/rpc.d.ts +35 -0
- package/lib/types/rpc.js +3 -0
- package/lib/types/signatures.d.ts +28 -0
- package/lib/types/signatures.js +3 -0
- package/lib/types/tunnel.d.ts +18 -0
- package/lib/types/tunnel.js +3 -0
- package/lib/types/zk.d.ts +16 -0
- package/lib/types/zk.js +3 -0
- package/lib/utils/benchmark.d.ts +1 -0
- package/lib/utils/benchmark.js +70 -0
- package/lib/utils/claims.d.ts +33 -0
- package/lib/utils/claims.js +112 -0
- package/lib/utils/env.d.ts +3 -0
- package/lib/utils/env.js +20 -0
- package/lib/utils/error.d.ts +27 -0
- package/lib/utils/error.js +43 -0
- package/lib/utils/generics.d.ts +112 -0
- package/lib/utils/generics.js +348 -0
- package/lib/utils/http-parser.d.ts +55 -0
- package/lib/utils/http-parser.js +249 -0
- package/lib/utils/index.d.ts +10 -0
- package/lib/utils/index.js +27 -0
- package/lib/utils/logger.d.ts +13 -0
- package/lib/utils/logger.js +100 -0
- package/lib/utils/prepare-packets.d.ts +16 -0
- package/lib/utils/prepare-packets.js +61 -0
- package/lib/utils/redactions.d.ts +41 -0
- package/lib/utils/redactions.js +111 -0
- package/lib/utils/retries.d.ts +12 -0
- package/lib/utils/retries.js +28 -0
- package/lib/utils/signatures/eth.d.ts +2 -0
- package/lib/utils/signatures/eth.js +33 -0
- package/lib/utils/signatures/index.d.ts +5 -0
- package/lib/utils/signatures/index.js +11 -0
- package/lib/utils/socket-base.d.ts +21 -0
- package/lib/utils/socket-base.js +89 -0
- package/lib/utils/tls.d.ts +2 -0
- package/lib/utils/tls.js +32 -0
- package/lib/utils/validation.d.ts +2 -0
- package/lib/utils/validation.js +46 -0
- package/lib/utils/ws.d.ts +12 -0
- package/lib/utils/ws.js +21 -0
- package/lib/utils/zk.d.ts +50 -0
- package/lib/utils/zk.js +282 -0
- package/lib/window-rpc/index.d.ts +3 -0
- package/lib/window-rpc/index.js +20 -0
- package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
- package/lib/window-rpc/setup-window-rpc.js +239 -0
- package/lib/window-rpc/types.d.ts +184 -0
- package/lib/window-rpc/types.js +3 -0
- package/lib/window-rpc/utils.d.ts +13 -0
- package/lib/window-rpc/utils.js +76 -0
- package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
- package/lib/window-rpc/window-rpc-zk.js +72 -0
- package/package.json +117 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupWindowRpc = setupWindowRpc;
|
|
4
|
+
const tls_1 = require("@reclaimprotocol/tls");
|
|
5
|
+
const create_claim_on_avs_1 = require("src/avs/client/create-claim-on-avs");
|
|
6
|
+
const client_1 = require("src/client");
|
|
7
|
+
const utils_1 = require("src/providers/http/utils");
|
|
8
|
+
const utils_2 = require("src/utils");
|
|
9
|
+
const benchmark_1 = require("src/utils/benchmark");
|
|
10
|
+
const utils_3 = require("src/window-rpc/utils");
|
|
11
|
+
const window_rpc_zk_1 = require("src/window-rpc/window-rpc-zk");
|
|
12
|
+
class WindowRPCEvent extends Event {
|
|
13
|
+
constructor(data) {
|
|
14
|
+
super('message');
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const VALID_MODULES = [
|
|
19
|
+
'attestor-core',
|
|
20
|
+
'witness-sdk'
|
|
21
|
+
];
|
|
22
|
+
let logger = (0, utils_2.makeLogger)(true);
|
|
23
|
+
/**
|
|
24
|
+
* Sets up the current window to listen for RPC requests
|
|
25
|
+
* from React Native or other windows
|
|
26
|
+
*/
|
|
27
|
+
function setupWindowRpc() {
|
|
28
|
+
window.addEventListener('message', handleMessage, false);
|
|
29
|
+
const windowMsgs = new EventTarget();
|
|
30
|
+
const defaultUrl = (0, utils_3.getWsApiUrlFromLocation)();
|
|
31
|
+
logger.info({ defaultUrl }, 'window RPC setup');
|
|
32
|
+
async function handleMessage(event) {
|
|
33
|
+
let id = '';
|
|
34
|
+
let channel = '';
|
|
35
|
+
try {
|
|
36
|
+
if (!event.data) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const req = (typeof event.data === 'string'
|
|
40
|
+
? JSON.parse(event.data)
|
|
41
|
+
: event.data);
|
|
42
|
+
// ignore any messages not for us
|
|
43
|
+
if (!VALID_MODULES.includes(req.module)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
id = req.id;
|
|
47
|
+
channel = req.channel || '';
|
|
48
|
+
windowMsgs.dispatchEvent(new WindowRPCEvent(req));
|
|
49
|
+
// ignore response messages
|
|
50
|
+
if (('isResponse' in req && req.isResponse)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!req.id) {
|
|
54
|
+
logger.warn({ req }, 'Window RPC request missing ID');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
logger.info({ req, origin: event.origin }, 'processing RPC request');
|
|
58
|
+
switch (req.type) {
|
|
59
|
+
case 'createClaim':
|
|
60
|
+
const claimTunnelRes = await (0, client_1.createClaimOnAttestor)({
|
|
61
|
+
...req.request,
|
|
62
|
+
context: req.request.context
|
|
63
|
+
? JSON.parse(req.request.context)
|
|
64
|
+
: undefined,
|
|
65
|
+
zkOperators: getZkOperators(req.request.zkOperatorMode, req.request.zkEngine),
|
|
66
|
+
client: { url: defaultUrl },
|
|
67
|
+
logger,
|
|
68
|
+
onStep(step) {
|
|
69
|
+
sendMessage({
|
|
70
|
+
type: 'createClaimStep',
|
|
71
|
+
step: {
|
|
72
|
+
name: req.module.includes('witness')
|
|
73
|
+
// backwards compatibility
|
|
74
|
+
? 'witness-progress'
|
|
75
|
+
: 'attestor-progress',
|
|
76
|
+
step,
|
|
77
|
+
},
|
|
78
|
+
module: req.module,
|
|
79
|
+
id: req.id,
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
updateProviderParams: req.request.updateProviderParams
|
|
83
|
+
? updateProviderParams
|
|
84
|
+
: undefined
|
|
85
|
+
});
|
|
86
|
+
const response = (0, utils_3.mapToCreateClaimResponse)(claimTunnelRes);
|
|
87
|
+
respond({
|
|
88
|
+
type: 'createClaimDone',
|
|
89
|
+
response,
|
|
90
|
+
});
|
|
91
|
+
break;
|
|
92
|
+
case 'createClaimOnAvs':
|
|
93
|
+
const avsRes = await (0, create_claim_on_avs_1.createClaimOnAvs)({
|
|
94
|
+
...req.request,
|
|
95
|
+
payer: req.request.payer === 'attestor'
|
|
96
|
+
? { attestor: defaultUrl }
|
|
97
|
+
: undefined,
|
|
98
|
+
context: req.request.context
|
|
99
|
+
? JSON.parse(req.request.context)
|
|
100
|
+
: undefined,
|
|
101
|
+
zkOperators: getZkOperators(req.request.zkOperatorMode, req.request.zkEngine),
|
|
102
|
+
logger,
|
|
103
|
+
onStep(step) {
|
|
104
|
+
sendMessage({
|
|
105
|
+
type: 'createClaimOnAvsStep',
|
|
106
|
+
step,
|
|
107
|
+
module: req.module,
|
|
108
|
+
id: req.id,
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
respond({
|
|
113
|
+
type: 'createClaimOnAvsDone',
|
|
114
|
+
response: avsRes,
|
|
115
|
+
});
|
|
116
|
+
break;
|
|
117
|
+
case 'extractHtmlElement':
|
|
118
|
+
respond({
|
|
119
|
+
type: 'extractHtmlElementDone',
|
|
120
|
+
response: (0, utils_1.extractHTMLElement)(req.request.html, req.request.xpathExpression, req.request.contentsOnly),
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
case 'extractJSONValueIndex':
|
|
124
|
+
respond({
|
|
125
|
+
type: 'extractJSONValueIndexDone',
|
|
126
|
+
response: (0, utils_1.extractJSONValueIndex)(req.request.json, req.request.jsonPath),
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
case 'getCurrentMemoryUsage':
|
|
130
|
+
respond({
|
|
131
|
+
type: 'getCurrentMemoryUsageDone',
|
|
132
|
+
response: await (0, utils_3.getCurrentMemoryUsage)(),
|
|
133
|
+
});
|
|
134
|
+
break;
|
|
135
|
+
case 'setLogLevel':
|
|
136
|
+
logger = (0, utils_2.makeLogger)(true, req.request.logLevel, req.request.sendLogsToApp
|
|
137
|
+
? (level, message) => (sendMessage({
|
|
138
|
+
type: 'log',
|
|
139
|
+
level,
|
|
140
|
+
message,
|
|
141
|
+
module: req.module,
|
|
142
|
+
id: req.id,
|
|
143
|
+
}))
|
|
144
|
+
: undefined);
|
|
145
|
+
respond({
|
|
146
|
+
type: 'setLogLevelDone',
|
|
147
|
+
response: undefined
|
|
148
|
+
});
|
|
149
|
+
break;
|
|
150
|
+
case 'benchmarkZK':
|
|
151
|
+
respond({
|
|
152
|
+
type: 'benchmarkZKDone',
|
|
153
|
+
response: await (0, benchmark_1.Benchmark)(),
|
|
154
|
+
});
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
logger.error({ msg: err.message, err, data: event.data }, 'error in RPC');
|
|
162
|
+
respond({
|
|
163
|
+
type: 'error',
|
|
164
|
+
data: {
|
|
165
|
+
message: err.message,
|
|
166
|
+
stack: err.stack,
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function getZkOperators(zkOperatorMode = 'default', zkEngine = 'snarkJS') {
|
|
171
|
+
// use default snarkJS ops
|
|
172
|
+
if (zkOperatorMode === 'default') {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// the native app/window calling implements
|
|
176
|
+
// a ZK operator & wants to use it
|
|
177
|
+
const operators = {};
|
|
178
|
+
for (const alg of window_rpc_zk_1.ALL_ENC_ALGORITHMS) {
|
|
179
|
+
operators[alg] = (0, window_rpc_zk_1.makeWindowRpcZkOperator)(alg, makeCommunicationBridge(), zkEngine);
|
|
180
|
+
}
|
|
181
|
+
return operators;
|
|
182
|
+
}
|
|
183
|
+
function makeCommunicationBridge() {
|
|
184
|
+
return {
|
|
185
|
+
send: sendMessage,
|
|
186
|
+
onMessage(cb) {
|
|
187
|
+
windowMsgs.addEventListener('message', handle);
|
|
188
|
+
return () => {
|
|
189
|
+
windowMsgs.removeEventListener('message', handle);
|
|
190
|
+
};
|
|
191
|
+
function handle(msg) {
|
|
192
|
+
cb(msg.data);
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function respond(data) {
|
|
198
|
+
const res = {
|
|
199
|
+
...data,
|
|
200
|
+
id,
|
|
201
|
+
module: 'attestor-core',
|
|
202
|
+
isResponse: true
|
|
203
|
+
};
|
|
204
|
+
return sendMessage(res);
|
|
205
|
+
}
|
|
206
|
+
function sendMessage(data) {
|
|
207
|
+
var _a;
|
|
208
|
+
const str = JSON.stringify(data);
|
|
209
|
+
if (channel) {
|
|
210
|
+
(_a = window[channel]) === null || _a === void 0 ? void 0 : _a.postMessage(str);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
event.source.postMessage(str);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function updateProviderParams(transcript, tlsVersion) {
|
|
217
|
+
const { req, res } = (0, utils_1.generateRequstAndResponseFromTranscript)(transcript, tlsVersion);
|
|
218
|
+
const bridge = makeCommunicationBridge();
|
|
219
|
+
const id = (0, utils_3.generateRpcRequestId)();
|
|
220
|
+
const waitForRes = (0, window_rpc_zk_1.waitForResponse)('updateProviderParams', id, bridge);
|
|
221
|
+
bridge.send({
|
|
222
|
+
type: 'updateProviderParams',
|
|
223
|
+
id,
|
|
224
|
+
request: {
|
|
225
|
+
request: {
|
|
226
|
+
...req,
|
|
227
|
+
body: req.body
|
|
228
|
+
? (0, tls_1.uint8ArrayToStr)(req.body)
|
|
229
|
+
: undefined
|
|
230
|
+
},
|
|
231
|
+
response: { ...res, body: (0, tls_1.uint8ArrayToStr)(res.body) },
|
|
232
|
+
},
|
|
233
|
+
module: 'attestor-core'
|
|
234
|
+
});
|
|
235
|
+
return await waitForRes;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtd2luZG93LXJwYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5kb3ctcnBjL3NldHVwLXdpbmRvdy1ycGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0QkEsd0NBaVJDO0FBN1NELDhDQUFzRDtBQUN0RCw0RUFBcUU7QUFDckUsdUNBQWtEO0FBQ2xELG9EQUE2SDtBQUU3SCxxQ0FBc0M7QUFDdEMsbURBQStDO0FBRS9DLGdEQUFxSTtBQUNySSxnRUFBMkc7QUFFM0csTUFBTSxjQUFlLFNBQVEsS0FBSztJQUNqQyxZQUE0QixJQUEwQjtRQUNyRCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7UUFEVyxTQUFJLEdBQUosSUFBSSxDQUFzQjtJQUV0RCxDQUFDO0NBQ0Q7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNyQixlQUFlO0lBQ2YsYUFBYTtDQUNiLENBQUE7QUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFBLGtCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7QUFFN0I7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYztJQUM3QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBRXBDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQXVCLEdBQUUsQ0FBQTtJQUU1QyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUUvQyxLQUFLLFVBQVUsYUFBYSxDQUFDLEtBQXdCO1FBQ3BELElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUNYLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNoQixJQUFJLENBQUM7WUFDSixJQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixPQUFNO1lBQ1AsQ0FBQztZQUVELE1BQU0sR0FBRyxHQUF5QixDQUNqQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2IsQ0FBQTtZQUNELGlDQUFpQztZQUNqQyxJQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTTtZQUNQLENBQUM7WUFFRCxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQTtZQUNYLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQTtZQUUzQixVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDakQsMkJBQTJCO1lBQzNCLElBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFNO1lBQ1AsQ0FBQztZQUVELElBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLCtCQUErQixDQUFDLENBQUE7Z0JBQ3JELE9BQU07WUFDUCxDQUFDO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FDVixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUM3Qix3QkFBd0IsQ0FDeEIsQ0FBQTtZQUVELFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixLQUFLLGFBQWE7b0JBQ2pCLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBQSw4QkFBcUIsRUFBQzt3QkFDbEQsR0FBRyxHQUFHLENBQUMsT0FBTzt3QkFDZCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPOzRCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzs0QkFDakMsQ0FBQyxDQUFDLFNBQVM7d0JBQ1osV0FBVyxFQUFFLGNBQWMsQ0FDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQ2hEO3dCQUNELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7d0JBQzNCLE1BQU07d0JBQ04sTUFBTSxDQUFDLElBQUk7NEJBQ1YsV0FBVyxDQUFDO2dDQUNYLElBQUksRUFBRSxpQkFBaUI7Z0NBQ3ZCLElBQUksRUFBRTtvQ0FDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO3dDQUNuQywwQkFBMEI7d0NBQzFCLENBQUMsQ0FBQyxrQkFBa0I7d0NBQ3BCLENBQUMsQ0FBQyxtQkFBbUI7b0NBQ3RCLElBQUk7aUNBQ0o7Z0NBQ0QsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dDQUNsQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7NkJBQ1YsQ0FBQyxDQUFBO3dCQUNILENBQUM7d0JBQ0Qsb0JBQW9CLEVBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0I7NEJBQ3RELENBQUMsQ0FBQyxvQkFBb0I7NEJBQ3RCLENBQUMsQ0FBQyxTQUFTO3FCQUNaLENBQUMsQ0FBQTtvQkFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLGdDQUF3QixFQUN4QyxjQUFjLENBQ2QsQ0FBQTtvQkFDRCxPQUFPLENBQUM7d0JBQ1AsSUFBSSxFQUFFLGlCQUFpQjt3QkFDdkIsUUFBUTtxQkFDUixDQUFDLENBQUE7b0JBQ0YsTUFBSztnQkFDTixLQUFLLGtCQUFrQjtvQkFDdEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHNDQUFnQixFQUFDO3dCQUNyQyxHQUFHLEdBQUcsQ0FBQyxPQUFPO3dCQUNkLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVOzRCQUN0QyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFOzRCQUMxQixDQUFDLENBQUMsU0FBUzt3QkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPOzRCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQzs0QkFDakMsQ0FBQyxDQUFDLFNBQVM7d0JBQ1osV0FBVyxFQUFFLGNBQWMsQ0FDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQ2hEO3dCQUNELE1BQU07d0JBQ04sTUFBTSxDQUFDLElBQUk7NEJBQ1YsV0FBVyxDQUFDO2dDQUNYLElBQUksRUFBRSxzQkFBc0I7Z0NBQzVCLElBQUk7Z0NBQ0osTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2dDQUNsQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7NkJBQ1YsQ0FBQyxDQUFBO3dCQUNILENBQUM7cUJBQ0QsQ0FBQyxDQUFBO29CQUNGLE9BQU8sQ0FBQzt3QkFDUCxJQUFJLEVBQUUsc0JBQXNCO3dCQUM1QixRQUFRLEVBQUUsTUFBTTtxQkFDaEIsQ0FBQyxDQUFBO29CQUNGLE1BQUs7Z0JBQ04sS0FBSyxvQkFBb0I7b0JBQ3hCLE9BQU8sQ0FBQzt3QkFDUCxJQUFJLEVBQUUsd0JBQXdCO3dCQUM5QixRQUFRLEVBQUUsSUFBQSwwQkFBa0IsRUFDM0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQ2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FDeEI7cUJBQ0QsQ0FBQyxDQUFBO29CQUNGLE1BQUs7Z0JBQ04sS0FBSyx1QkFBdUI7b0JBQzNCLE9BQU8sQ0FBQzt3QkFDUCxJQUFJLEVBQUUsMkJBQTJCO3dCQUNqQyxRQUFRLEVBQUUsSUFBQSw2QkFBcUIsRUFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQ2hCLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUNwQjtxQkFDRCxDQUFDLENBQUE7b0JBQ0YsTUFBSztnQkFDTixLQUFLLHVCQUF1QjtvQkFDM0IsT0FBTyxDQUFDO3dCQUNQLElBQUksRUFBRSwyQkFBMkI7d0JBQ2pDLFFBQVEsRUFBRSxNQUFNLElBQUEsNkJBQXFCLEdBQUU7cUJBQ3ZDLENBQUMsQ0FBQTtvQkFDRixNQUFLO2dCQUNOLEtBQUssYUFBYTtvQkFDakIsTUFBTSxHQUFHLElBQUEsa0JBQVUsRUFDbEIsSUFBSSxFQUNKLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUNwQixHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWE7d0JBQ3hCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQ3JCLFdBQVcsQ0FBQzs0QkFDWCxJQUFJLEVBQUUsS0FBSzs0QkFDWCxLQUFLOzRCQUNMLE9BQU87NEJBQ1AsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNOzRCQUNsQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7eUJBQ1YsQ0FBQyxDQUNGO3dCQUNELENBQUMsQ0FBQyxTQUFTLENBQ1osQ0FBQTtvQkFDRCxPQUFPLENBQUM7d0JBQ1AsSUFBSSxFQUFFLGlCQUFpQjt3QkFDdkIsUUFBUSxFQUFFLFNBQVM7cUJBQ25CLENBQUMsQ0FBQTtvQkFDRixNQUFLO2dCQUNOLEtBQUssYUFBYTtvQkFDakIsT0FBTyxDQUFDO3dCQUNQLElBQUksRUFBRSxpQkFBaUI7d0JBQ3ZCLFFBQVEsRUFBRSxNQUFNLElBQUEscUJBQVMsR0FBRTtxQkFDM0IsQ0FBQyxDQUFBO29CQUNGLE1BQUs7Z0JBQ047b0JBQ0MsTUFBSztZQUNOLENBQUM7UUFDRixDQUFDO1FBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxLQUFLLENBQ1gsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFDM0MsY0FBYyxDQUNkLENBQUE7WUFDRCxPQUFPLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFO29CQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztvQkFDcEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2lCQUNoQjthQUNELENBQUMsQ0FBQTtRQUNILENBQUM7UUFFRCxTQUFTLGNBQWMsQ0FDdEIsaUJBQ0UsU0FBUyxFQUNYLFdBQXFCLFNBQVM7WUFFOUIsMEJBQTBCO1lBQzFCLElBQUcsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxPQUFNO1lBQ1AsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxrQ0FBa0M7WUFDbEMsTUFBTSxTQUFTLEdBQWdCLEVBQUUsQ0FBQTtZQUNqQyxLQUFJLE1BQU0sR0FBRyxJQUFJLGtDQUFrQixFQUFFLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFBLHVDQUF1QixFQUN2QyxHQUFHLEVBQ0gsdUJBQXVCLEVBQUUsRUFDekIsUUFBUSxDQUNSLENBQUE7WUFDRixDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUE7UUFDakIsQ0FBQztRQUVELFNBQVMsdUJBQXVCO1lBQy9CLE9BQU87Z0JBQ04sSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFNBQVMsQ0FBQyxFQUFFO29CQUNYLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7b0JBRTlDLE9BQU8sR0FBRyxFQUFFO3dCQUNYLFVBQVUsQ0FBQyxtQkFBbUIsQ0FDN0IsU0FBUyxFQUNULE1BQU0sQ0FDTixDQUFBO29CQUNGLENBQUMsQ0FBQTtvQkFFRCxTQUFTLE1BQU0sQ0FBQyxHQUFtQjt3QkFDbEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDYixDQUFDO2dCQUNGLENBQUM7YUFDRCxDQUFBO1FBQ0YsQ0FBQztRQUVELFNBQVMsT0FBTyxDQUNmLElBQ3lCO1lBRXpCLE1BQU0sR0FBRyxHQUFHO2dCQUNYLEdBQUcsSUFBSTtnQkFDUCxFQUFFO2dCQUNGLE1BQU0sRUFBRSxlQUFlO2dCQUN2QixVQUFVLEVBQUUsSUFBSTthQUNRLENBQUE7WUFDekIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsQ0FBQztRQUVELFNBQVMsV0FBVyxDQUFDLElBQTBCOztZQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2hDLElBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQ1osTUFBQSxNQUFNLENBQUMsT0FBTyxDQUFDLDBDQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsS0FBSyxDQUFDLE1BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0IsQ0FBQztRQUNGLENBQUM7UUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFVBQVU7WUFJekQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLCtDQUF1QyxFQUMzRCxVQUFVLEVBQ1YsVUFBVSxDQUNWLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFBO1lBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUEsNEJBQW9CLEdBQUUsQ0FBQTtZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFlLEVBQUMsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsRUFBRTtnQkFDRixPQUFPLEVBQUU7b0JBQ1IsT0FBTyxFQUFFO3dCQUNSLEdBQUcsR0FBRzt3QkFDTixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7NEJBQ2IsQ0FBQyxDQUFDLElBQUEscUJBQWUsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDOzRCQUMzQixDQUFDLENBQUMsU0FBUztxQkFDWjtvQkFDRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUcsSUFBQSxxQkFBZSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDdEQ7Z0JBQ0QsTUFBTSxFQUFFLGVBQWU7YUFDdkIsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxNQUFNLFVBQVUsQ0FBQTtRQUN4QixDQUFDO0lBQ0YsQ0FBQztBQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { EncryptionAlgorithm, ZKOperator } from '@reclaimprotocol/circom-symmetric-crypto';
|
|
2
|
+
import type { TaskCompletedEventObject } from 'src/avs/contracts/ReclaimServiceManager';
|
|
3
|
+
import type { CreateClaimOnAvsOpts, CreateClaimOnAvsStep } from 'src/avs/types';
|
|
4
|
+
import type { extractHTMLElement, extractJSONValueIndex } from 'src/providers/http/utils';
|
|
5
|
+
import type { AttestorData, CompleteClaimData, CreateClaimOnAttestorOpts, LogLevel, ProofGenerationStep, ProviderName, ProviderParams, ProviderSecretParams, ZKEngine } from 'src/types';
|
|
6
|
+
import { HttpRequest, HttpResponse } from 'src/utils';
|
|
7
|
+
type IdentifiedMessage = {
|
|
8
|
+
module: 'attestor-core';
|
|
9
|
+
/**
|
|
10
|
+
* Optionally, name of the channel to respond to
|
|
11
|
+
* Useful for specifying 'flutter_webview'
|
|
12
|
+
* channel
|
|
13
|
+
*/
|
|
14
|
+
channel?: string;
|
|
15
|
+
id: string;
|
|
16
|
+
};
|
|
17
|
+
type CreateClaimRPCBaseOpts = {
|
|
18
|
+
/**
|
|
19
|
+
* Specify the mode for the ZK operator,
|
|
20
|
+
* 'default' -> will use the default ZK operator included in the SDK
|
|
21
|
+
* (presently that's SnarkJS supported by FFs running on WASM)
|
|
22
|
+
* 'rpc' -> if you've access to a native ZK operator, you can use this mode
|
|
23
|
+
* For eg. on React Native
|
|
24
|
+
*/
|
|
25
|
+
zkOperatorMode?: 'default' | 'rpc';
|
|
26
|
+
context?: string;
|
|
27
|
+
zkEngine?: ZKEngine;
|
|
28
|
+
updateProviderParams?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type RPCCreateClaimOptions<N extends ProviderName = any> = Omit<CreateClaimOnAttestorOpts<N>, 'zkOperators' | 'context'> & CreateClaimRPCBaseOpts;
|
|
31
|
+
export type RPCCreateClaimOnAvsOptions<N extends ProviderName = any> = Omit<CreateClaimOnAvsOpts<N>, 'zkOperators' | 'context' | 'payer'> & {
|
|
32
|
+
payer?: 'attestor';
|
|
33
|
+
} & CreateClaimRPCBaseOpts;
|
|
34
|
+
type ExtractHTMLElementOptions = {
|
|
35
|
+
html: string;
|
|
36
|
+
xpathExpression: string;
|
|
37
|
+
contentsOnly: boolean;
|
|
38
|
+
};
|
|
39
|
+
type ExtractJSONValueIndexOptions = {
|
|
40
|
+
json: string;
|
|
41
|
+
jsonPath: string;
|
|
42
|
+
};
|
|
43
|
+
type ZKProveOpts = {
|
|
44
|
+
algorithm: EncryptionAlgorithm;
|
|
45
|
+
input: {
|
|
46
|
+
/** Base64 encoded attestor */
|
|
47
|
+
witnessB64: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
type UpdateProviderParamsOpts = {
|
|
51
|
+
request: Omit<HttpRequest, 'body'> & {
|
|
52
|
+
body: string | undefined;
|
|
53
|
+
};
|
|
54
|
+
response: Omit<HttpResponse, 'body'> & {
|
|
55
|
+
body: string | undefined;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
type ZKVerifyOpts = {
|
|
59
|
+
algorithm: EncryptionAlgorithm;
|
|
60
|
+
publicSignals: number[];
|
|
61
|
+
proof: {
|
|
62
|
+
[key: string]: string;
|
|
63
|
+
} | string;
|
|
64
|
+
};
|
|
65
|
+
type LogLevelOptions = {
|
|
66
|
+
logLevel: LogLevel;
|
|
67
|
+
/**
|
|
68
|
+
* If true, log messages will be sent back to the app
|
|
69
|
+
* via postMessage
|
|
70
|
+
*/
|
|
71
|
+
sendLogsToApp: boolean;
|
|
72
|
+
};
|
|
73
|
+
type AVSCreateResult = {
|
|
74
|
+
object: TaskCompletedEventObject;
|
|
75
|
+
txHash: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Legacy V1 create claim response
|
|
79
|
+
*/
|
|
80
|
+
export type CreateClaimResponse = {
|
|
81
|
+
identifier: string;
|
|
82
|
+
claimData: CompleteClaimData;
|
|
83
|
+
signatures: string[];
|
|
84
|
+
/**
|
|
85
|
+
* @deprecated no longer valid
|
|
86
|
+
*/
|
|
87
|
+
witnesses: AttestorData[];
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Fns the app calls on the attestor.
|
|
91
|
+
* These are things done inside the attestor
|
|
92
|
+
*/
|
|
93
|
+
export type WindowRPCClient = {
|
|
94
|
+
/**
|
|
95
|
+
* Create a claim on the attestor where the RPC SDK is hosted.
|
|
96
|
+
*/
|
|
97
|
+
createClaim(options: RPCCreateClaimOptions): Promise<CreateClaimResponse>;
|
|
98
|
+
/**
|
|
99
|
+
* Create a claim on the AVS
|
|
100
|
+
*/
|
|
101
|
+
createClaimOnAvs(opts: RPCCreateClaimOnAvsOptions): Promise<AVSCreateResult>;
|
|
102
|
+
/**
|
|
103
|
+
* Extract an HTML element from a string of HTML
|
|
104
|
+
*/
|
|
105
|
+
extractHtmlElement(options: ExtractHTMLElementOptions): Promise<ReturnType<typeof extractHTMLElement>>;
|
|
106
|
+
extractJSONValueIndex(options: ExtractJSONValueIndexOptions): Promise<ReturnType<typeof extractJSONValueIndex>>;
|
|
107
|
+
getCurrentMemoryUsage(): Promise<{
|
|
108
|
+
available: boolean;
|
|
109
|
+
content: string;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Set the log level for the attestor,
|
|
113
|
+
* optionally set "sendLogsToApp" to true to send logs
|
|
114
|
+
* back to the app
|
|
115
|
+
*/
|
|
116
|
+
setLogLevel(options: LogLevelOptions): Promise<void>;
|
|
117
|
+
benchmarkZK(): Promise<string>;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Fns the attestor calls on the app
|
|
121
|
+
*/
|
|
122
|
+
export type WindowRPCAppClient = {
|
|
123
|
+
zkProve(opts: ZKProveOpts): ReturnType<ZKOperator['groth16Prove']>;
|
|
124
|
+
zkVerify(opts: ZKVerifyOpts): ReturnType<ZKOperator['groth16Verify']>;
|
|
125
|
+
updateProviderParams(opts: UpdateProviderParamsOpts): Promise<{
|
|
126
|
+
params: Partial<ProviderParams<'http'>>;
|
|
127
|
+
secretParams: Partial<ProviderSecretParams<'http'>>;
|
|
128
|
+
}>;
|
|
129
|
+
};
|
|
130
|
+
type AnyRPCClient = {
|
|
131
|
+
[_: string]: (opts: any) => any;
|
|
132
|
+
};
|
|
133
|
+
export type WindowRPCRequest<T extends AnyRPCClient, K extends keyof T> = {
|
|
134
|
+
type: K;
|
|
135
|
+
request: Parameters<T[K]>[0];
|
|
136
|
+
};
|
|
137
|
+
export type WindowRPCResponse<T extends AnyRPCClient, K extends (keyof T) & string> = {
|
|
138
|
+
type: `${K}Done`;
|
|
139
|
+
response: Awaited<ReturnType<T[K]>>;
|
|
140
|
+
};
|
|
141
|
+
export type WindowRPCErrorResponse = {
|
|
142
|
+
type: 'error';
|
|
143
|
+
data: {
|
|
144
|
+
message: string;
|
|
145
|
+
stack: string;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
type AsResponse<T> = T & {
|
|
149
|
+
isResponse: true;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Data sent to the attestor from the window/application
|
|
153
|
+
*/
|
|
154
|
+
export type WindowRPCIncomingMsg = (WindowRPCRequest<WindowRPCClient, 'createClaim'> | WindowRPCRequest<WindowRPCClient, 'createClaimOnAvs'> | WindowRPCRequest<WindowRPCClient, 'extractHtmlElement'> | WindowRPCRequest<WindowRPCClient, 'extractJSONValueIndex'> | WindowRPCRequest<WindowRPCClient, 'getCurrentMemoryUsage'> | WindowRPCRequest<WindowRPCClient, 'setLogLevel'> | WindowRPCRequest<WindowRPCClient, 'benchmarkZK'> | AsResponse<WindowRPCResponse<WindowRPCAppClient, 'zkProve'>> | AsResponse<WindowRPCResponse<WindowRPCAppClient, 'zkVerify'>> | AsResponse<WindowRPCResponse<WindowRPCAppClient, 'updateProviderParams'>> | AsResponse<WindowRPCErrorResponse>) & IdentifiedMessage;
|
|
155
|
+
/**
|
|
156
|
+
* Data sent back from the attestor to
|
|
157
|
+
* the window/application containing the attestor
|
|
158
|
+
*/
|
|
159
|
+
export type WindowRPCOutgoingMsg = (AsResponse<WindowRPCResponse<WindowRPCClient, 'createClaim'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'createClaimOnAvs'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'extractHtmlElement'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'extractJSONValueIndex'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'getCurrentMemoryUsage'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'setLogLevel'>> | AsResponse<WindowRPCResponse<WindowRPCClient, 'benchmarkZK'>> | WindowRPCRequest<WindowRPCAppClient, 'zkProve'> | WindowRPCRequest<WindowRPCAppClient, 'zkVerify'> | WindowRPCRequest<WindowRPCAppClient, 'updateProviderParams'> | ({
|
|
160
|
+
type: 'createClaimStep';
|
|
161
|
+
step: {
|
|
162
|
+
name: 'attestor-progress' | 'witness-progress';
|
|
163
|
+
step: ProofGenerationStep;
|
|
164
|
+
};
|
|
165
|
+
}) | ({
|
|
166
|
+
type: 'createClaimOnAvsStep';
|
|
167
|
+
step: CreateClaimOnAvsStep;
|
|
168
|
+
}) | ({
|
|
169
|
+
type: 'log';
|
|
170
|
+
level: LogLevelOptions['logLevel'];
|
|
171
|
+
message: object;
|
|
172
|
+
}) | AsResponse<WindowRPCErrorResponse>) & IdentifiedMessage;
|
|
173
|
+
export type CommunicationBridge = {
|
|
174
|
+
send(msg: WindowRPCOutgoingMsg): void;
|
|
175
|
+
onMessage(cb: (msg: WindowRPCIncomingMsg) => void): (() => void);
|
|
176
|
+
};
|
|
177
|
+
declare global {
|
|
178
|
+
interface Performance {
|
|
179
|
+
measureUserAgentSpecificMemory(): {
|
|
180
|
+
bytes: number;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2luZG93LXJwYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ClaimTunnelResponse } from 'src/proto/api';
|
|
2
|
+
import { CreateClaimResponse } from 'src/window-rpc/types';
|
|
3
|
+
export declare function getCurrentMemoryUsage(): Promise<{
|
|
4
|
+
available: boolean;
|
|
5
|
+
content: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function generateRpcRequestId(): string;
|
|
8
|
+
/**
|
|
9
|
+
* The window RPC will be served from the same origin as the API server.
|
|
10
|
+
* so we can get the API server's origin from the location.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getWsApiUrlFromLocation(): string;
|
|
13
|
+
export declare function mapToCreateClaimResponse(res: ClaimTunnelResponse): CreateClaimResponse;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentMemoryUsage = getCurrentMemoryUsage;
|
|
4
|
+
exports.generateRpcRequestId = generateRpcRequestId;
|
|
5
|
+
exports.getWsApiUrlFromLocation = getWsApiUrlFromLocation;
|
|
6
|
+
exports.mapToCreateClaimResponse = mapToCreateClaimResponse;
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
8
|
+
const config_1 = require("src/config");
|
|
9
|
+
const utils_1 = require("src/utils");
|
|
10
|
+
// track memory usage
|
|
11
|
+
async function getCurrentMemoryUsage() {
|
|
12
|
+
if (!window.crossOriginIsolated) {
|
|
13
|
+
return {
|
|
14
|
+
available: false,
|
|
15
|
+
content: 'N/A (page not cross-origin-isolated)'
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
else if (!performance.measureUserAgentSpecificMemory) {
|
|
19
|
+
return {
|
|
20
|
+
available: false,
|
|
21
|
+
content: 'N/A (performance.measureUserAgentSpecificMemory() is not available)',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
try {
|
|
26
|
+
const result = await performance.measureUserAgentSpecificMemory();
|
|
27
|
+
const totalmb = Math.round(result.bytes / 1024 / 1024);
|
|
28
|
+
return {
|
|
29
|
+
available: true,
|
|
30
|
+
content: `${totalmb}mb`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof DOMException && error.name === 'SecurityError') {
|
|
35
|
+
return {
|
|
36
|
+
available: false,
|
|
37
|
+
content: `N/A (${error.message})`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function generateRpcRequestId() {
|
|
45
|
+
return Math.random().toString(36).slice(2);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The window RPC will be served from the same origin as the API server.
|
|
49
|
+
* so we can get the API server's origin from the location.
|
|
50
|
+
*/
|
|
51
|
+
function getWsApiUrlFromLocation() {
|
|
52
|
+
const { host, protocol } = location;
|
|
53
|
+
const wsProtocol = protocol === 'https:' ? 'wss:' : 'ws:';
|
|
54
|
+
return `${wsProtocol}//${host}${config_1.WS_PATHNAME}`;
|
|
55
|
+
}
|
|
56
|
+
function mapToCreateClaimResponse(res) {
|
|
57
|
+
if (!res.claim) {
|
|
58
|
+
throw utils_1.AttestorError.fromProto(res.error);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
identifier: (0, utils_1.getIdentifierFromClaimInfo)(res.claim),
|
|
62
|
+
claimData: res.claim,
|
|
63
|
+
witnesses: [
|
|
64
|
+
{
|
|
65
|
+
id: res.signatures.attestorAddress,
|
|
66
|
+
url: getWsApiUrlFromLocation()
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
signatures: [
|
|
70
|
+
ethers_1.ethers.utils
|
|
71
|
+
.hexlify(res.signatures.claimSignature)
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
]
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2luZG93LXJwYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLHNEQStCQztBQUVELG9EQUVDO0FBTUQsMERBSUM7QUFFRCw0REFzQkM7QUE1RUQsbUNBQStCO0FBQy9CLHVDQUF3QztBQUV4QyxxQ0FBcUU7QUFHckUscUJBQXFCO0FBQ2QsS0FBSyxVQUFVLHFCQUFxQjtJQUMxQyxJQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEMsT0FBTztZQUNOLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE9BQU8sRUFBRSxzQ0FBc0M7U0FDL0MsQ0FBQTtJQUNGLENBQUM7U0FBTSxJQUFHLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdkQsT0FBTztZQUNOLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE9BQU8sRUFBRSxxRUFBcUU7U0FDOUUsQ0FBQTtJQUNGLENBQUM7U0FBTSxDQUFDO1FBQ1AsSUFBSSxDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFBO1lBRXRELE9BQU87Z0JBQ04sU0FBUyxFQUFFLElBQUk7Z0JBQ2YsT0FBTyxFQUFFLEdBQUcsT0FBTyxJQUFJO2FBQ3ZCLENBQUE7UUFDRixDQUFDO1FBQUMsT0FBTSxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUcsS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUNwRSxPQUFPO29CQUNOLFNBQVMsRUFBRSxLQUFLO29CQUNoQixPQUFPLEVBQUUsUUFBUSxLQUFLLENBQUMsT0FBTyxHQUFHO2lCQUNqQyxDQUFBO1lBQ0YsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFBO1FBQ1osQ0FBQztJQUNGLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CO0lBQ25DLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QjtJQUN0QyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQTtJQUNuQyxNQUFNLFVBQVUsR0FBRyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUN6RCxPQUFPLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxvQkFBVyxFQUFFLENBQUE7QUFDOUMsQ0FBQztBQUVELFNBQWdCLHdCQUF3QixDQUN2QyxHQUF3QjtJQUV4QixJQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxxQkFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELE9BQU87UUFDTixVQUFVLEVBQUUsSUFBQSxrQ0FBMEIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2pELFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSztRQUNwQixTQUFTLEVBQUU7WUFDVjtnQkFDQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVcsQ0FBQyxlQUFlO2dCQUNuQyxHQUFHLEVBQUUsdUJBQXVCLEVBQUU7YUFDOUI7U0FDRDtRQUNELFVBQVUsRUFBRTtZQUNYLGVBQU0sQ0FBQyxLQUFLO2lCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVyxDQUFDLGNBQWMsQ0FBQztpQkFDdkMsV0FBVyxFQUFFO1NBQ2Y7S0FDRCxDQUFBO0FBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EncryptionAlgorithm, ZKOperator } from '@reclaimprotocol/circom-symmetric-crypto';
|
|
2
|
+
import { ZKEngine } from 'src/types';
|
|
3
|
+
import { CommunicationBridge, WindowRPCAppClient } from 'src/window-rpc/types';
|
|
4
|
+
export declare const ALL_ENC_ALGORITHMS: EncryptionAlgorithm[];
|
|
5
|
+
/**
|
|
6
|
+
* The goal of this RPC operator is if the attestor client
|
|
7
|
+
* is running in a WebView, it can call the native
|
|
8
|
+
* application to perform the ZK operations
|
|
9
|
+
*/
|
|
10
|
+
export declare function makeWindowRpcZkOperator(algorithm: EncryptionAlgorithm, bridge: CommunicationBridge, zkEngine?: ZKEngine): ZKOperator;
|
|
11
|
+
export declare function waitForResponse<T extends keyof WindowRPCAppClient>(type: T, requestId: string, bridge: CommunicationBridge): Promise<Awaited<ReturnType<WindowRPCAppClient[T]>>>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ALL_ENC_ALGORITHMS = void 0;
|
|
4
|
+
exports.makeWindowRpcZkOperator = makeWindowRpcZkOperator;
|
|
5
|
+
exports.waitForResponse = waitForResponse;
|
|
6
|
+
const utils_1 = require("ethers/lib/utils");
|
|
7
|
+
const utils_2 = require("src/utils");
|
|
8
|
+
const utils_3 = require("src/window-rpc/utils");
|
|
9
|
+
exports.ALL_ENC_ALGORITHMS = [
|
|
10
|
+
'aes-256-ctr',
|
|
11
|
+
'aes-128-ctr',
|
|
12
|
+
'chacha20',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* The goal of this RPC operator is if the attestor client
|
|
16
|
+
* is running in a WebView, it can call the native
|
|
17
|
+
* application to perform the ZK operations
|
|
18
|
+
*/
|
|
19
|
+
function makeWindowRpcZkOperator(algorithm, bridge, zkEngine = 'snarkJS') {
|
|
20
|
+
return {
|
|
21
|
+
async generateWitness(input) {
|
|
22
|
+
const operator = await (0, utils_2.makeDefaultZkOperator)(algorithm, zkEngine, utils_2.logger);
|
|
23
|
+
return operator.generateWitness(input);
|
|
24
|
+
},
|
|
25
|
+
groth16Prove(input) {
|
|
26
|
+
const id = (0, utils_3.generateRpcRequestId)();
|
|
27
|
+
const waitForRes = waitForResponse('zkProve', id, bridge);
|
|
28
|
+
bridge.send({
|
|
29
|
+
type: 'zkProve',
|
|
30
|
+
id,
|
|
31
|
+
request: {
|
|
32
|
+
algorithm,
|
|
33
|
+
input: { witnessB64: utils_1.base64.encode(input) },
|
|
34
|
+
},
|
|
35
|
+
module: 'attestor-core'
|
|
36
|
+
});
|
|
37
|
+
return waitForRes;
|
|
38
|
+
},
|
|
39
|
+
groth16Verify(publicSignals, proof) {
|
|
40
|
+
const id = (0, utils_3.generateRpcRequestId)();
|
|
41
|
+
const waitForRes = waitForResponse('zkVerify', id, bridge);
|
|
42
|
+
bridge.send({
|
|
43
|
+
type: 'zkVerify',
|
|
44
|
+
id,
|
|
45
|
+
request: {
|
|
46
|
+
algorithm,
|
|
47
|
+
publicSignals,
|
|
48
|
+
proof,
|
|
49
|
+
},
|
|
50
|
+
module: 'attestor-core'
|
|
51
|
+
});
|
|
52
|
+
return waitForRes;
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function waitForResponse(type, requestId, bridge) {
|
|
57
|
+
const returnType = `${type}Done`;
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
const cancel = bridge.onMessage(msg => {
|
|
60
|
+
if (msg.id === requestId) {
|
|
61
|
+
if (msg.type === 'error') {
|
|
62
|
+
reject(new Error(msg.data.message));
|
|
63
|
+
}
|
|
64
|
+
else if (msg.type === returnType) {
|
|
65
|
+
resolve(msg.response);
|
|
66
|
+
}
|
|
67
|
+
cancel();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJwYy16ay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5kb3ctcnBjL3dpbmRvdy1ycGMtemsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0JBLDBEQThDQztBQUVELDBDQW9CQztBQXJGRCw0Q0FBeUM7QUFFekMscUNBQXlEO0FBRXpELGdEQUEyRDtBQUU5QyxRQUFBLGtCQUFrQixHQUEwQjtJQUN4RCxhQUFhO0lBQ2IsYUFBYTtJQUNiLFVBQVU7Q0FDVixDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUN0QyxTQUE4QixFQUM5QixNQUEyQixFQUMzQixXQUFxQixTQUFTO0lBRTlCLE9BQU87UUFDTixLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUs7WUFDMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLDZCQUFxQixFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsY0FBTSxDQUFDLENBQUE7WUFDekUsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7UUFDRCxZQUFZLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsR0FBRyxJQUFBLDRCQUFvQixHQUFFLENBQUE7WUFDakMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFekQsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDWCxJQUFJLEVBQUUsU0FBUztnQkFDZixFQUFFO2dCQUNGLE9BQU8sRUFBRTtvQkFDUixTQUFTO29CQUNULEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2lCQUMzQztnQkFDRCxNQUFNLEVBQUUsZUFBZTthQUN2QixDQUFDLENBQUE7WUFFRixPQUFPLFVBQVUsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsYUFBYSxDQUFDLGFBQWEsRUFBRSxLQUFLO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUEsNEJBQW9CLEdBQUUsQ0FBQTtZQUNqQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUUxRCxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNYLElBQUksRUFBRSxVQUFVO2dCQUNoQixFQUFFO2dCQUNGLE9BQU8sRUFBRTtvQkFDUixTQUFTO29CQUNULGFBQWE7b0JBQ2IsS0FBSztpQkFDTDtnQkFDRCxNQUFNLEVBQUUsZUFBZTthQUN2QixDQUFDLENBQUE7WUFFRixPQUFPLFVBQVUsQ0FBQTtRQUNsQixDQUFDO0tBQ0QsQ0FBQTtBQUdGLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzlCLElBQU8sRUFDUCxTQUFpQixFQUNqQixNQUEyQjtJQUczQixNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksTUFBZSxDQUFBO0lBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxJQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLElBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtnQkFDcEMsQ0FBQztxQkFBTSxJQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBYSxDQUFDLENBQUE7Z0JBQzNCLENBQUM7Z0JBRUQsTUFBTSxFQUFFLENBQUE7WUFDVCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|