@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,10 @@
|
|
|
1
|
+
export * from './generics';
|
|
2
|
+
export * from './logger';
|
|
3
|
+
export * from './redactions';
|
|
4
|
+
export * from './http-parser';
|
|
5
|
+
export * from './zk';
|
|
6
|
+
export * from './claims';
|
|
7
|
+
export * from './error';
|
|
8
|
+
export * from './prepare-packets';
|
|
9
|
+
export * from './validation';
|
|
10
|
+
export * from './signatures';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./generics"), exports);
|
|
18
|
+
__exportStar(require("./logger"), exports);
|
|
19
|
+
__exportStar(require("./redactions"), exports);
|
|
20
|
+
__exportStar(require("./http-parser"), exports);
|
|
21
|
+
__exportStar(require("./zk"), exports);
|
|
22
|
+
__exportStar(require("./claims"), exports);
|
|
23
|
+
__exportStar(require("./error"), exports);
|
|
24
|
+
__exportStar(require("./prepare-packets"), exports);
|
|
25
|
+
__exportStar(require("./validation"), exports);
|
|
26
|
+
__exportStar(require("./signatures"), exports);
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEwQjtBQUMxQiwyQ0FBd0I7QUFDeEIsK0NBQTRCO0FBQzVCLGdEQUE2QjtBQUM3Qix1Q0FBb0I7QUFDcEIsMkNBQXdCO0FBQ3hCLDBDQUF1QjtBQUN2QixvREFBaUM7QUFDakMsK0NBQTRCO0FBQzVCLCtDQUE0QiJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LogLevel } from 'src/types';
|
|
2
|
+
export declare let logger: import("pino").Logger<never, boolean>;
|
|
3
|
+
/**
|
|
4
|
+
* Creates a logger instance with optional redaction of PII.
|
|
5
|
+
* Replaces default logger
|
|
6
|
+
* See PII_PROPERTIES for the list of properties that will be redacted.
|
|
7
|
+
*
|
|
8
|
+
* @param redactPii - whether to redact PII from logs
|
|
9
|
+
* @param level - the log level to use
|
|
10
|
+
* @param onLog - a callback to call when a log is written
|
|
11
|
+
*/
|
|
12
|
+
export declare function makeLogger(redactPii: boolean, level?: LogLevel, onLog?: (level: LogLevel, log: any) => void): import("pino").Logger<never, boolean>;
|
|
13
|
+
export declare function redact(json: any): any;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
exports.makeLogger = makeLogger;
|
|
8
|
+
exports.redact = redact;
|
|
9
|
+
const pino_1 = __importDefault(require("pino"));
|
|
10
|
+
const env_1 = require("src/utils/env");
|
|
11
|
+
const PII_PROPERTIES = ['ownerPrivateKey', 'secretParams'];
|
|
12
|
+
const redactedText = '[REDACTED]';
|
|
13
|
+
const envLevel = (0, env_1.getEnvVariable)('LOG_LEVEL');
|
|
14
|
+
exports.logger = (0, pino_1.default)();
|
|
15
|
+
makeLogger(false, envLevel);
|
|
16
|
+
/**
|
|
17
|
+
* Creates a logger instance with optional redaction of PII.
|
|
18
|
+
* Replaces default logger
|
|
19
|
+
* See PII_PROPERTIES for the list of properties that will be redacted.
|
|
20
|
+
*
|
|
21
|
+
* @param redactPii - whether to redact PII from logs
|
|
22
|
+
* @param level - the log level to use
|
|
23
|
+
* @param onLog - a callback to call when a log is written
|
|
24
|
+
*/
|
|
25
|
+
function makeLogger(redactPii, level, onLog) {
|
|
26
|
+
const opts = {
|
|
27
|
+
// Log human readable time stamps instead of epoch time
|
|
28
|
+
timestamp: pino_1.default.stdTimeFunctions.isoTime,
|
|
29
|
+
};
|
|
30
|
+
if (redactPii) {
|
|
31
|
+
opts.formatters = { log: redact };
|
|
32
|
+
opts.serializers = { redact };
|
|
33
|
+
opts.browser = {
|
|
34
|
+
write: {
|
|
35
|
+
fatal: log => writeLog('fatal', log),
|
|
36
|
+
error: log => writeLog('error', log),
|
|
37
|
+
warn: log => writeLog('warn', log),
|
|
38
|
+
info: log => writeLog('info', log),
|
|
39
|
+
debug: log => writeLog('debug', log),
|
|
40
|
+
trace: log => writeLog('trace', log),
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const pLogger = (0, pino_1.default)(opts);
|
|
45
|
+
pLogger.level = level || 'info';
|
|
46
|
+
exports.logger = pLogger;
|
|
47
|
+
return pLogger;
|
|
48
|
+
function writeLog(level, log) {
|
|
49
|
+
log = redact(log);
|
|
50
|
+
const { msg, ...obj } = log;
|
|
51
|
+
if (console[level]) {
|
|
52
|
+
console[level](obj, msg);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log(obj, msg);
|
|
56
|
+
}
|
|
57
|
+
onLog === null || onLog === void 0 ? void 0 : onLog(level, log);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function isObjectProperty(property) {
|
|
61
|
+
return (typeof property) === 'object'
|
|
62
|
+
&& !Array.isArray(property)
|
|
63
|
+
&& property !== null;
|
|
64
|
+
}
|
|
65
|
+
function getReplacer() {
|
|
66
|
+
// Store references to previously visited objects
|
|
67
|
+
const references = new WeakSet();
|
|
68
|
+
return function (key, value) {
|
|
69
|
+
const isObject = (typeof value) === 'object' && value !== null;
|
|
70
|
+
if (isObject) {
|
|
71
|
+
if (references.has(value)) {
|
|
72
|
+
return '[CIRCULAR]';
|
|
73
|
+
}
|
|
74
|
+
references.add(value);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function redact(json) {
|
|
80
|
+
const isObject = isObjectProperty(json);
|
|
81
|
+
if (!isObject && !Array.isArray(json)) {
|
|
82
|
+
return json;
|
|
83
|
+
}
|
|
84
|
+
const redacted = JSON.parse(JSON.stringify(json, getReplacer()));
|
|
85
|
+
for (const prop in redacted) {
|
|
86
|
+
if (PII_PROPERTIES.includes(prop)) {
|
|
87
|
+
redacted[prop] = redactedText;
|
|
88
|
+
}
|
|
89
|
+
if (Array.isArray(redacted[prop])) {
|
|
90
|
+
for (const [index, value] of redacted[prop].entries()) {
|
|
91
|
+
redacted[prop][index] = redact(value);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (isObjectProperty(redacted[prop])) {
|
|
95
|
+
redacted[prop] = redact(redacted[prop]);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return redacted;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFxQkEsZ0NBeUNDO0FBMEJELHdCQXdCQztBQWhIRCxnREFBdUM7QUFFdkMsdUNBQThDO0FBRTlDLE1BQU0sY0FBYyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDMUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFBO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUEsb0JBQWMsRUFBQyxXQUFXLENBQWEsQ0FBQTtBQUU3QyxRQUFBLE1BQU0sR0FBRyxJQUFBLGNBQUMsR0FBRSxDQUFBO0FBRXZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFFM0I7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixVQUFVLENBQ3pCLFNBQWtCLEVBQ2xCLEtBQWdCLEVBQ2hCLEtBQTJDO0lBRTNDLE1BQU0sSUFBSSxHQUFrQjtRQUMzQix1REFBdUQ7UUFDdkQsU0FBUyxFQUFFLGNBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO0tBQ3JDLENBQUE7SUFDRCxJQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNkLEtBQUssRUFBRTtnQkFDTixLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztnQkFDcEMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7Z0JBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVB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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CipherSuite, TLSPacketContext } from '@reclaimprotocol/tls';
|
|
2
|
+
import { ClaimTunnelRequest_TranscriptMessage as TranscriptMessage } from 'src/proto/api';
|
|
3
|
+
import { CompleteTLSPacket, Logger, MessageRevealInfo, PrepareZKProofsBaseOpts, Transcript } from 'src/types';
|
|
4
|
+
export type PreparePacketsForRevealOpts = {
|
|
5
|
+
cipherSuite: CipherSuite;
|
|
6
|
+
logger: Logger;
|
|
7
|
+
/**
|
|
8
|
+
* Progress of Zk proof generation
|
|
9
|
+
*/
|
|
10
|
+
onZkProgress?(blocksDone: number, totalBlocks: number): void;
|
|
11
|
+
} & PrepareZKProofsBaseOpts;
|
|
12
|
+
/**
|
|
13
|
+
* Prepares the packets for reveal to the server
|
|
14
|
+
* according to the specified reveal type
|
|
15
|
+
*/
|
|
16
|
+
export declare function preparePacketsForReveal(tlsTranscript: Transcript<CompleteTLSPacket>, reveals: Map<TLSPacketContext, MessageRevealInfo>, { onZkProgress, ...opts }: PreparePacketsForRevealOpts): Promise<TranscriptMessage[]>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.preparePacketsForReveal = preparePacketsForReveal;
|
|
4
|
+
const tls_1 = require("@reclaimprotocol/tls");
|
|
5
|
+
const api_1 = require("src/proto/api");
|
|
6
|
+
const zk_1 = require("src/utils/zk");
|
|
7
|
+
/**
|
|
8
|
+
* Prepares the packets for reveal to the server
|
|
9
|
+
* according to the specified reveal type
|
|
10
|
+
*/
|
|
11
|
+
async function preparePacketsForReveal(tlsTranscript, reveals, { onZkProgress, ...opts }) {
|
|
12
|
+
const transcript = [];
|
|
13
|
+
const proofGenerator = await (0, zk_1.makeZkProofGenerator)(opts);
|
|
14
|
+
let zkPacketsDone = 0;
|
|
15
|
+
await Promise.all(tlsTranscript.map(async ({ message, sender }) => {
|
|
16
|
+
const msg = {
|
|
17
|
+
sender: sender === 'client'
|
|
18
|
+
? api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT
|
|
19
|
+
: api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER,
|
|
20
|
+
message: message.data,
|
|
21
|
+
reveal: undefined
|
|
22
|
+
};
|
|
23
|
+
transcript.push(msg);
|
|
24
|
+
const reveal = reveals.get(message);
|
|
25
|
+
if (!reveal || message.type === 'plaintext') {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
switch (reveal === null || reveal === void 0 ? void 0 : reveal.type) {
|
|
29
|
+
case 'complete':
|
|
30
|
+
msg.reveal = {
|
|
31
|
+
directReveal: {
|
|
32
|
+
key: await tls_1.crypto.exportKey(message.encKey),
|
|
33
|
+
iv: message.fixedIv,
|
|
34
|
+
recordNumber: message.recordNumber,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
break;
|
|
38
|
+
case 'zk':
|
|
39
|
+
// the redacted section can be smaller than the actual
|
|
40
|
+
// plaintext encrypted, in case of TLS1.3 as it has a
|
|
41
|
+
// content type suffix
|
|
42
|
+
reveal.redactedPlaintext = (0, tls_1.concatenateUint8Arrays)([
|
|
43
|
+
reveal.redactedPlaintext,
|
|
44
|
+
message.plaintext.slice(reveal.redactedPlaintext.length)
|
|
45
|
+
]);
|
|
46
|
+
await proofGenerator.addPacketToProve(message, reveal, proofs => (msg.reveal = { zkReveal: { proofs } }));
|
|
47
|
+
break;
|
|
48
|
+
default:
|
|
49
|
+
// no reveal
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
const zkPacketsTotal = proofGenerator.getTotalChunksToProve();
|
|
54
|
+
onZkProgress === null || onZkProgress === void 0 ? void 0 : onZkProgress(zkPacketsDone, zkPacketsTotal);
|
|
55
|
+
await proofGenerator.generateProofs(() => {
|
|
56
|
+
zkPacketsDone += 1;
|
|
57
|
+
onZkProgress === null || onZkProgress === void 0 ? void 0 : onZkProgress(zkPacketsDone, zkPacketsTotal);
|
|
58
|
+
});
|
|
59
|
+
return transcript;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1wYWNrZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3ByZXBhcmUtcGFja2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSwwREFtRUM7QUF4RkQsOENBQW9HO0FBQ3BHLHVDQUdzQjtBQUV0QixxQ0FBbUQ7QUFXbkQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QixDQUM1QyxhQUE0QyxFQUM1QyxPQUFpRCxFQUNqRCxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksRUFBK0I7SUFFdEQsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQTtJQUMxQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEseUJBQW9CLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFFdkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFBO0lBRXJCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ2hFLE1BQU0sR0FBRyxHQUFzQjtZQUM5QixNQUFNLEVBQUUsTUFBTSxLQUFLLFFBQVE7Z0JBQzFCLENBQUMsQ0FBQyxpQ0FBMkIsQ0FBQyxxQ0FBcUM7Z0JBQ25FLENBQUMsQ0FBQyxpQ0FBMkIsQ0FBQyxxQ0FBcUM7WUFDcEUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxTQUFTO1NBQ2pCLENBQUE7UUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXBCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzVDLE9BQU07UUFDUCxDQUFDO1FBRUQsUUFBUSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxVQUFVO2dCQUNkLEdBQUcsQ0FBQyxNQUFNLEdBQUc7b0JBQ1osWUFBWSxFQUFFO3dCQUNiLEdBQUcsRUFBRSxNQUFNLFlBQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDM0MsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPO3dCQUNuQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7cUJBQ2xDO2lCQUNELENBQUE7Z0JBQ0QsTUFBSztZQUNOLEtBQUssSUFBSTtnQkFDUixzREFBc0Q7Z0JBQ3RELHFEQUFxRDtnQkFDckQsc0JBQXNCO2dCQUN0QixNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBQSw0QkFBc0IsRUFBQztvQkFDakQsTUFBTSxDQUFDLGlCQUFpQjtvQkFDeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztpQkFDeEQsQ0FBQyxDQUFBO2dCQUVGLE1BQU0sY0FBYyxDQUFDLGdCQUFnQixDQUNwQyxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUNqRCxDQUFBO2dCQUNELE1BQUs7WUFDTjtnQkFDQyxZQUFZO2dCQUNaLE1BQUs7UUFDTixDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVILE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO0lBQzdELFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFN0MsTUFBTSxjQUFjLENBQUMsY0FBYyxDQUNsQyxHQUFHLEVBQUU7UUFDSixhQUFhLElBQUksQ0FBQyxDQUFBO1FBQ2xCLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDOUMsQ0FBQyxDQUNELENBQUE7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNsQixDQUFDIn0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ArraySlice } from 'src/types';
|
|
2
|
+
export declare const REDACTION_CHAR = "*";
|
|
3
|
+
export declare const REDACTION_CHAR_CODE: number;
|
|
4
|
+
/**
|
|
5
|
+
* Check if a redacted string is congruent with the original string.
|
|
6
|
+
* @param redacted the redacted content, redacted content is replaced by '*'
|
|
7
|
+
* @param original the original content
|
|
8
|
+
*/
|
|
9
|
+
export declare function isRedactionCongruent<T extends string | Uint8Array>(redacted: T, original: T): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Is the string fully redacted?
|
|
12
|
+
*/
|
|
13
|
+
export declare function isFullyRedacted<T extends string | Uint8Array>(redacted: T): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Given some plaintext blocks and a redaction function, return the blocks that
|
|
16
|
+
* need to be revealed to the other party
|
|
17
|
+
*
|
|
18
|
+
* Use case: we get the response for a request in several blocks, and want to redact
|
|
19
|
+
* pieces that go through multiple blocks. We can use this function to get the
|
|
20
|
+
* blocks that need to be revealed to the other party
|
|
21
|
+
*
|
|
22
|
+
* @example if we received ["secret is 12","345","678. Thanks"]. We'd want
|
|
23
|
+
* to redact the "12345678" and reveal the rest. We'd pass in the blocks and
|
|
24
|
+
* the redact function will return the redactions, namely [10,19].
|
|
25
|
+
* The function will return the blocks ["secret is **","***. Thanks"].
|
|
26
|
+
* The middle block is fully redacted, so it's not returned
|
|
27
|
+
*
|
|
28
|
+
* @param blocks blocks to reveal
|
|
29
|
+
* @param redact function that returns the redactions
|
|
30
|
+
* @returns blocks to reveal
|
|
31
|
+
*/
|
|
32
|
+
export declare function getBlocksToReveal<T extends {
|
|
33
|
+
plaintext: Uint8Array;
|
|
34
|
+
}>(blocks: T[], redact: (total: Uint8Array) => ArraySlice[]): {
|
|
35
|
+
block: T;
|
|
36
|
+
redactedPlaintext: Uint8Array;
|
|
37
|
+
}[] | "all";
|
|
38
|
+
/**
|
|
39
|
+
* Redact the following slices from the total
|
|
40
|
+
*/
|
|
41
|
+
export declare function redactSlices(total: Uint8Array, slices: ArraySlice[]): Uint8Array;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REDACTION_CHAR_CODE = exports.REDACTION_CHAR = void 0;
|
|
4
|
+
exports.isRedactionCongruent = isRedactionCongruent;
|
|
5
|
+
exports.isFullyRedacted = isFullyRedacted;
|
|
6
|
+
exports.getBlocksToReveal = getBlocksToReveal;
|
|
7
|
+
exports.redactSlices = redactSlices;
|
|
8
|
+
const tls_1 = require("@reclaimprotocol/tls");
|
|
9
|
+
exports.REDACTION_CHAR = '*';
|
|
10
|
+
exports.REDACTION_CHAR_CODE = exports.REDACTION_CHAR.charCodeAt(0);
|
|
11
|
+
/**
|
|
12
|
+
* Check if a redacted string is congruent with the original string.
|
|
13
|
+
* @param redacted the redacted content, redacted content is replaced by '*'
|
|
14
|
+
* @param original the original content
|
|
15
|
+
*/
|
|
16
|
+
function isRedactionCongruent(redacted, original) {
|
|
17
|
+
// eslint-disable-next-line unicorn/no-for-loop
|
|
18
|
+
for (let i = 0; i < redacted.length; i++) {
|
|
19
|
+
const element = redacted[i];
|
|
20
|
+
const areSame = element === original[i]
|
|
21
|
+
|| (typeof element === 'string' && element === exports.REDACTION_CHAR)
|
|
22
|
+
|| (typeof element === 'number' && element === exports.REDACTION_CHAR_CODE);
|
|
23
|
+
if (!areSame) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Is the string fully redacted?
|
|
31
|
+
*/
|
|
32
|
+
function isFullyRedacted(redacted) {
|
|
33
|
+
for (const element of redacted) {
|
|
34
|
+
if (element !== exports.REDACTION_CHAR
|
|
35
|
+
&& element !== exports.REDACTION_CHAR_CODE) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Given some plaintext blocks and a redaction function, return the blocks that
|
|
43
|
+
* need to be revealed to the other party
|
|
44
|
+
*
|
|
45
|
+
* Use case: we get the response for a request in several blocks, and want to redact
|
|
46
|
+
* pieces that go through multiple blocks. We can use this function to get the
|
|
47
|
+
* blocks that need to be revealed to the other party
|
|
48
|
+
*
|
|
49
|
+
* @example if we received ["secret is 12","345","678. Thanks"]. We'd want
|
|
50
|
+
* to redact the "12345678" and reveal the rest. We'd pass in the blocks and
|
|
51
|
+
* the redact function will return the redactions, namely [10,19].
|
|
52
|
+
* The function will return the blocks ["secret is **","***. Thanks"].
|
|
53
|
+
* The middle block is fully redacted, so it's not returned
|
|
54
|
+
*
|
|
55
|
+
* @param blocks blocks to reveal
|
|
56
|
+
* @param redact function that returns the redactions
|
|
57
|
+
* @returns blocks to reveal
|
|
58
|
+
*/
|
|
59
|
+
function getBlocksToReveal(blocks, redact) {
|
|
60
|
+
const slicesWithReveal = blocks.map(block => ({
|
|
61
|
+
block,
|
|
62
|
+
// copy the plaintext to avoid mutating the original
|
|
63
|
+
redactedPlaintext: new Uint8Array(block.plaintext)
|
|
64
|
+
}));
|
|
65
|
+
const total = (0, tls_1.concatenateUint8Arrays)(blocks.map(b => b.plaintext));
|
|
66
|
+
const redactions = redact(total);
|
|
67
|
+
if (!redactions.length) {
|
|
68
|
+
return 'all';
|
|
69
|
+
}
|
|
70
|
+
let blockIdx = 0;
|
|
71
|
+
let cursorInBlock = 0;
|
|
72
|
+
let cursor = 0;
|
|
73
|
+
for (const redaction of redactions) {
|
|
74
|
+
redactBlocks(redaction);
|
|
75
|
+
}
|
|
76
|
+
// only reveal blocks that have some data to reveal,
|
|
77
|
+
// or are completely plaintext
|
|
78
|
+
return slicesWithReveal
|
|
79
|
+
.filter(s => !isFullyRedacted(s.redactedPlaintext));
|
|
80
|
+
function redactBlocks(slice) {
|
|
81
|
+
while (cursor < slice.fromIndex) {
|
|
82
|
+
advance();
|
|
83
|
+
}
|
|
84
|
+
while (cursor < slice.toIndex) {
|
|
85
|
+
slicesWithReveal[blockIdx]
|
|
86
|
+
.redactedPlaintext[cursorInBlock] = exports.REDACTION_CHAR_CODE;
|
|
87
|
+
advance();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function advance() {
|
|
91
|
+
cursor += 1;
|
|
92
|
+
cursorInBlock += 1;
|
|
93
|
+
if (cursorInBlock >= blocks[blockIdx].plaintext.length) {
|
|
94
|
+
blockIdx += 1;
|
|
95
|
+
cursorInBlock = 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Redact the following slices from the total
|
|
101
|
+
*/
|
|
102
|
+
function redactSlices(total, slices) {
|
|
103
|
+
const redacted = new Uint8Array(total);
|
|
104
|
+
for (const slice of slices) {
|
|
105
|
+
for (let i = slice.fromIndex; i < slice.toIndex; i++) {
|
|
106
|
+
redacted[i] = exports.REDACTION_CHAR_CODE;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return redacted;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZWRhY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLG9EQWdCQztBQUtELDBDQWFDO0FBb0JELDhDQXNEQztBQUtELG9DQVVDO0FBdElELDhDQUE2RDtBQUdoRCxRQUFBLGNBQWMsR0FBRyxHQUFHLENBQUE7QUFDcEIsUUFBQSxtQkFBbUIsR0FBRyxzQkFBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUUvRDs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ25DLFFBQVcsRUFDWCxRQUFXO0lBRVgsK0NBQStDO0lBQy9DLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO2VBQ25DLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxzQkFBYyxDQUFDO2VBQzNELENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSywyQkFBbUIsQ0FBQyxDQUFBO1FBQ3BFLElBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNGLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNaLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FDOUIsUUFBVztJQUVYLEtBQUksTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFDQyxPQUFPLEtBQUssc0JBQWM7ZUFDdkIsT0FBTyxLQUFLLDJCQUFtQixFQUNqQyxDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUE7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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Logger } from 'src/types';
|
|
2
|
+
type RetryLoopOptions = {
|
|
3
|
+
maxRetries?: number;
|
|
4
|
+
logger: Logger;
|
|
5
|
+
shouldRetry: (error: Error) => boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Execute a function, and upon failure -- retry
|
|
9
|
+
* based on specified options.
|
|
10
|
+
*/
|
|
11
|
+
export declare function executeWithRetries<T>(code: (attempt: number) => Promise<T>, { maxRetries, shouldRetry, logger, }: RetryLoopOptions): Promise<T>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeWithRetries = executeWithRetries;
|
|
4
|
+
/**
|
|
5
|
+
* Execute a function, and upon failure -- retry
|
|
6
|
+
* based on specified options.
|
|
7
|
+
*/
|
|
8
|
+
async function executeWithRetries(code, { maxRetries = 3, shouldRetry, logger, }) {
|
|
9
|
+
let retries = 0;
|
|
10
|
+
while (retries < maxRetries) {
|
|
11
|
+
try {
|
|
12
|
+
const result = await code(retries);
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
retries += 1;
|
|
17
|
+
if (retries >= maxRetries) {
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
if (!shouldRetry(err)) {
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
23
|
+
logger.info({ err, retries }, 'retrying failed operation');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
throw new Error('retries exhausted');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZXRyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsZ0RBNEJDO0FBaENEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FDdkMsSUFBcUMsRUFDckMsRUFDQyxVQUFVLEdBQUcsQ0FBQyxFQUNkLFdBQVcsRUFDWCxNQUFNLEdBQ1k7SUFFbkIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsT0FBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDbEMsT0FBTyxNQUFNLENBQUE7UUFDZCxDQUFDO1FBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDLENBQUE7WUFDWixJQUFHLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxHQUFHLENBQUE7WUFDVixDQUFDO1lBRUQsSUFBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEdBQUcsQ0FBQTtZQUNWLENBQUM7WUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLDJCQUEyQixDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNGLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDckMsQ0FBQyJ9
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ETH_SIGNATURE_PROVIDER = void 0;
|
|
4
|
+
const ethers_1 = require("ethers");
|
|
5
|
+
const utils_1 = require("ethers/lib/utils");
|
|
6
|
+
exports.ETH_SIGNATURE_PROVIDER = {
|
|
7
|
+
getPublicKey(privateKey) {
|
|
8
|
+
const pub = (0, utils_1.computePublicKey)(privateKey, true);
|
|
9
|
+
return ethers_1.utils.arrayify(pub);
|
|
10
|
+
},
|
|
11
|
+
getAddress(publicKey) {
|
|
12
|
+
return (0, utils_1.computeAddress)(publicKey).toLowerCase();
|
|
13
|
+
},
|
|
14
|
+
async sign(data, privateKey) {
|
|
15
|
+
const wallet = getEthWallet(privateKey);
|
|
16
|
+
const signature = await wallet.signMessage(data);
|
|
17
|
+
return ethers_1.utils.arrayify(signature);
|
|
18
|
+
},
|
|
19
|
+
async verify(data, signature, addressBytes) {
|
|
20
|
+
const address = typeof addressBytes === 'string'
|
|
21
|
+
? addressBytes
|
|
22
|
+
: ethers_1.utils.hexlify(addressBytes);
|
|
23
|
+
const signerAddress = ethers_1.utils.verifyMessage(data, signature);
|
|
24
|
+
return signerAddress.toLowerCase() === address.toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
function getEthWallet(privateKey) {
|
|
28
|
+
if (!privateKey) {
|
|
29
|
+
throw new Error('Private key missing');
|
|
30
|
+
}
|
|
31
|
+
return new ethers_1.Wallet(privateKey);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NpZ25hdHVyZXMvZXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFzQztBQUN0Qyw0Q0FBbUU7QUFHdEQsUUFBQSxzQkFBc0IsR0FBNkI7SUFDL0QsWUFBWSxDQUFDLFVBQVU7UUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDOUMsT0FBTyxjQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFDRCxVQUFVLENBQUMsU0FBUztRQUNuQixPQUFPLElBQUEsc0JBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMvQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUMxQixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hELE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVk7UUFDekMsTUFBTSxPQUFPLEdBQUcsT0FBTyxZQUFZLEtBQUssUUFBUTtZQUMvQyxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxjQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzlCLE1BQU0sYUFBYSxHQUFHLGNBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQzFELE9BQU8sYUFBYSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM3RCxDQUFDO0NBQ0QsQ0FBQTtBQUVELFNBQVMsWUFBWSxDQUFDLFVBQWtCO0lBQ3ZDLElBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVELE9BQU8sSUFBSSxlQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDOUIsQ0FBQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ServiceSignatureType } from 'src/proto/api';
|
|
2
|
+
import { ServiceSignatureProvider } from 'src/types';
|
|
3
|
+
export declare const SIGNATURES: { [key in ServiceSignatureType]: ServiceSignatureProvider; };
|
|
4
|
+
export declare const SelectedServiceSignatureType = ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH;
|
|
5
|
+
export declare const SelectedServiceSignature: ServiceSignatureProvider;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectedServiceSignature = exports.SelectedServiceSignatureType = exports.SIGNATURES = void 0;
|
|
4
|
+
const api_1 = require("src/proto/api");
|
|
5
|
+
const eth_1 = require("src/utils/signatures/eth");
|
|
6
|
+
exports.SIGNATURES = {
|
|
7
|
+
[api_1.ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH]: eth_1.ETH_SIGNATURE_PROVIDER,
|
|
8
|
+
};
|
|
9
|
+
exports.SelectedServiceSignatureType = api_1.ServiceSignatureType.SERVICE_SIGNATURE_TYPE_ETH;
|
|
10
|
+
exports.SelectedServiceSignature = exports.SIGNATURES[exports.SelectedServiceSignatureType];
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvc2lnbmF0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBb0Q7QUFFcEQsa0RBQWlFO0FBRXBELFFBQUEsVUFBVSxHQUFHO0lBQ3pCLENBQUMsMEJBQW9CLENBQUMsMEJBQTBCLENBQUMsRUFBRSw0QkFBc0I7Q0FDVixDQUFBO0FBRW5ELFFBQUEsNEJBQTRCLEdBQUcsMEJBQW9CLENBQUMsMEJBQTBCLENBQUE7QUFFOUUsUUFBQSx3QkFBd0IsR0FBRyxrQkFBVSxDQUFDLG9DQUE0QixDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InitRequest, RPCMessage, RPCMessages } from 'src/proto/api';
|
|
2
|
+
import { IAttestorSocket, Logger, RPCEvent, RPCEventMap } from 'src/types';
|
|
3
|
+
/**
|
|
4
|
+
* Common AttestorSocket class used on the client & server side as the
|
|
5
|
+
* base for their respective socket implementations.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AttestorSocket implements IAttestorSocket {
|
|
8
|
+
protected socket: WebSocket;
|
|
9
|
+
metadata: InitRequest;
|
|
10
|
+
logger: Logger;
|
|
11
|
+
private eventTarget;
|
|
12
|
+
isInitialised: boolean;
|
|
13
|
+
constructor(socket: WebSocket, metadata: InitRequest, logger: Logger);
|
|
14
|
+
get isOpen(): boolean;
|
|
15
|
+
get isClosed(): boolean;
|
|
16
|
+
sendMessage(...msgs: Partial<RPCMessage>[]): Promise<RPCMessages>;
|
|
17
|
+
dispatchRPCEvent<K extends keyof RPCEventMap>(type: K, data: RPCEventMap[K]): void;
|
|
18
|
+
addEventListener<K extends keyof RPCEventMap>(type: K, listener: (data: RPCEvent<K>) => void): void;
|
|
19
|
+
removeEventListener<K extends keyof RPCEventMap>(type: K, listener: (data: RPCEvent<K>) => void): void;
|
|
20
|
+
terminateConnection(err?: Error): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AttestorSocket = void 0;
|
|
4
|
+
const message_handler_1 = require("src/client/utils/message-handler");
|
|
5
|
+
const api_1 = require("src/proto/api");
|
|
6
|
+
const utils_1 = require("src/utils");
|
|
7
|
+
/**
|
|
8
|
+
* Common AttestorSocket class used on the client & server side as the
|
|
9
|
+
* base for their respective socket implementations.
|
|
10
|
+
*/
|
|
11
|
+
class AttestorSocket {
|
|
12
|
+
constructor(socket, metadata, logger) {
|
|
13
|
+
this.socket = socket;
|
|
14
|
+
this.metadata = metadata;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
this.eventTarget = new EventTarget();
|
|
17
|
+
this.isInitialised = false;
|
|
18
|
+
socket.addEventListener('error', (event) => {
|
|
19
|
+
const witErr = utils_1.AttestorError.fromError(event.error
|
|
20
|
+
|| new Error(event.message));
|
|
21
|
+
witErr.code = 'ERROR_NETWORK_ERROR';
|
|
22
|
+
this.dispatchRPCEvent('connection-terminated', witErr);
|
|
23
|
+
});
|
|
24
|
+
socket.addEventListener('close', () => (this.dispatchRPCEvent('connection-terminated', new utils_1.AttestorError('ERROR_NO_ERROR', 'connection closed'))));
|
|
25
|
+
socket.addEventListener('message', async ({ data }) => {
|
|
26
|
+
try {
|
|
27
|
+
await message_handler_1.wsMessageHandler.call(this, 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 utils_1.AttestorError('ERROR_NETWORK_ERROR', 'Connection closed, cannot send message');
|
|
44
|
+
}
|
|
45
|
+
if (!this.isOpen) {
|
|
46
|
+
throw new utils_1.AttestorError('ERROR_NETWORK_ERROR', 'Wait for connection to open before sending message');
|
|
47
|
+
}
|
|
48
|
+
const msg = (0, utils_1.packRpcMessages)(...msgs);
|
|
49
|
+
const bytes = api_1.RPCMessages.encode(msg).finish();
|
|
50
|
+
await this.socket.send(bytes);
|
|
51
|
+
return msg;
|
|
52
|
+
}
|
|
53
|
+
dispatchRPCEvent(type, data) {
|
|
54
|
+
const event = (0, utils_1.makeRpcEvent)(type, data);
|
|
55
|
+
this.eventTarget.dispatchEvent(event);
|
|
56
|
+
}
|
|
57
|
+
addEventListener(type, listener) {
|
|
58
|
+
this.eventTarget.addEventListener(type, listener);
|
|
59
|
+
}
|
|
60
|
+
removeEventListener(type, listener) {
|
|
61
|
+
this.eventTarget.removeEventListener(type, listener);
|
|
62
|
+
}
|
|
63
|
+
async terminateConnection(err) {
|
|
64
|
+
var _a;
|
|
65
|
+
// connection already closed
|
|
66
|
+
if (this.isClosed) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const witErr = err
|
|
71
|
+
? utils_1.AttestorError.fromError(err)
|
|
72
|
+
: new utils_1.AttestorError('ERROR_NO_ERROR', '');
|
|
73
|
+
this.dispatchRPCEvent('connection-terminated', witErr);
|
|
74
|
+
if (this.isOpen) {
|
|
75
|
+
await this.sendMessage({
|
|
76
|
+
connectionTerminationAlert: witErr.toProto()
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error({ err }, 'error terminating connection');
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
this.socket.close();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.AttestorSocket = AttestorSocket;
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc29ja2V0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0VBQW1FO0FBQ25FLHVDQUFvRTtBQUVwRSxxQ0FBd0U7QUFFeEU7OztHQUdHO0FBQ0gsTUFBYSxjQUFjO0lBTTFCLFlBQ1csTUFBaUIsRUFDcEIsUUFBcUIsRUFDckIsTUFBYztRQUZYLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBUGQsZ0JBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBRXZDLGtCQUFhLEdBQUcsS0FBSyxDQUFBO1FBT3BCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDdEQsTUFBTSxNQUFNLEdBQUcscUJBQWEsQ0FBQyxTQUFTLENBQ3JDLEtBQUssQ0FBQyxLQUFLO21CQUNQLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDNUIsQ0FBQTtZQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUE7WUFFbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZELENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLHFCQUFhLENBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsQ0FDbkIsQ0FDRCxDQUNELENBQUMsQ0FBQTtRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUM7Z0JB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
|