@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,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.main = main;
|
|
4
|
+
const tls_1 = require("@reclaimprotocol/tls");
|
|
5
|
+
const parse_certificate_1 = require("@reclaimprotocol/tls/lib/utils/parse-certificate");
|
|
6
|
+
const net_1 = require("net");
|
|
7
|
+
const config_1 = require("src/config");
|
|
8
|
+
const utils_1 = require("src/utils");
|
|
9
|
+
const hostPort = process.argv[2];
|
|
10
|
+
async function main() {
|
|
11
|
+
const [host, port] = hostPort.split(':');
|
|
12
|
+
const socket = new net_1.Socket();
|
|
13
|
+
let rootIssuer = '';
|
|
14
|
+
let certError;
|
|
15
|
+
const tls = (0, tls_1.makeTLSClient)({
|
|
16
|
+
host,
|
|
17
|
+
logger: utils_1.logger,
|
|
18
|
+
verifyServerCertificate: false,
|
|
19
|
+
async onRecvCertificates({ certificates }) {
|
|
20
|
+
rootIssuer = certificates[certificates.length - 1].internal.issuer;
|
|
21
|
+
utils_1.logger.info({ rootIssuer }, 'received certificates');
|
|
22
|
+
try {
|
|
23
|
+
await (0, parse_certificate_1.verifyCertificateChain)(certificates, host);
|
|
24
|
+
utils_1.logger.info('root CA in store. Successfully verified certificate chain');
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
certError = err;
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
async onHandshake() {
|
|
31
|
+
await tls.end();
|
|
32
|
+
socket.end();
|
|
33
|
+
if (certError) {
|
|
34
|
+
// wait for everything else to log
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
utils_1.logger.info({ err: certError.message, rootIssuer }, 'error in cert verify');
|
|
37
|
+
}, 500);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
async write({ header, content }) {
|
|
41
|
+
socket.write(header);
|
|
42
|
+
socket.write(content);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
socket.once('connect', () => tls.startHandshake());
|
|
46
|
+
socket.on('data', tls.handleReceivedBytes);
|
|
47
|
+
utils_1.logger.info(`connecting to ${hostPort}`);
|
|
48
|
+
socket.connect({ host, port: +(port || config_1.DEFAULT_HTTPS_PORT) });
|
|
49
|
+
}
|
|
50
|
+
main();
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXJvb3QtY2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy92ZXJpZnktcm9vdC1jYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLG9CQWdEQztBQXhERCw4Q0FBb0Q7QUFDcEQsd0ZBQXlGO0FBQ3pGLDZCQUE0QjtBQUM1Qix1Q0FBK0M7QUFDL0MscUNBQWtDO0FBRWxDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFekIsS0FBSyxVQUFVLElBQUk7SUFDekIsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBTSxFQUFFLENBQUE7SUFDM0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ25CLElBQUksU0FBNEIsQ0FBQTtJQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFhLEVBQUM7UUFDekIsSUFBSTtRQUNKLE1BQU0sRUFBTixjQUFNO1FBQ04sdUJBQXVCLEVBQUUsS0FBSztRQUM5QixLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxZQUFZLEVBQUU7WUFDeEMsVUFBVSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUE7WUFDbEUsY0FBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUE7WUFDcEQsSUFBSSxDQUFDO2dCQUNKLE1BQU0sSUFBQSwwQ0FBc0IsRUFBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2hELGNBQU0sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQTtZQUN6RSxDQUFDO1lBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztnQkFDYixTQUFTLEdBQUcsR0FBRyxDQUFBO1lBQ2hCLENBQUM7UUFDRixDQUFDO1FBQ0QsS0FBSyxDQUFDLFdBQVc7WUFDaEIsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7WUFDZixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFWixJQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUNkLGtDQUFrQztnQkFDbEMsVUFBVSxDQUNULEdBQUcsRUFBRTtvQkFDSixjQUFNLENBQUMsSUFBSSxDQUNWLEVBQUUsR0FBRyxFQUFFLFNBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQ3ZDLHNCQUFzQixDQUN0QixDQUFBO2dCQUNGLENBQUMsRUFDRCxHQUFHLENBQ0gsQ0FBQTtZQUNGLENBQUM7UUFDRixDQUFDO1FBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RCLENBQUM7S0FDRCxDQUFDLENBQUE7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUNsRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUUxQyxjQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksMkJBQWtCLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVELElBQUksRUFBRSxDQUFBIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the WebSocket API server,
|
|
4
|
+
* creates a fileserver to serve the browser RPC client,
|
|
5
|
+
* and listens on the given port.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createServer(port?: number): Promise<import("ws").Server<typeof import("ws"), typeof IncomingMessage>>;
|
|
@@ -0,0 +1,85 @@
|
|
|
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.createServer = createServer;
|
|
7
|
+
const http_1 = require("http");
|
|
8
|
+
const serve_static_1 = __importDefault(require("serve-static"));
|
|
9
|
+
const config_1 = require("src/config");
|
|
10
|
+
const socket_1 = require("src/server/socket");
|
|
11
|
+
const generics_1 = require("src/server/utils/generics");
|
|
12
|
+
const keep_alive_1 = require("src/server/utils/keep-alive");
|
|
13
|
+
const utils_1 = require("src/utils");
|
|
14
|
+
const env_1 = require("src/utils/env");
|
|
15
|
+
const signatures_1 = require("src/utils/signatures");
|
|
16
|
+
const ws_1 = require("ws");
|
|
17
|
+
const PORT = +((0, env_1.getEnvVariable)('PORT') || config_1.API_SERVER_PORT);
|
|
18
|
+
/**
|
|
19
|
+
* Creates the WebSocket API server,
|
|
20
|
+
* creates a fileserver to serve the browser RPC client,
|
|
21
|
+
* and listens on the given port.
|
|
22
|
+
*/
|
|
23
|
+
async function createServer(port = PORT) {
|
|
24
|
+
const http = (0, http_1.createServer)();
|
|
25
|
+
const serveBrowserRpc = (0, serve_static_1.default)('browser', { index: ['index.html'] });
|
|
26
|
+
const wss = new ws_1.WebSocketServer({ noServer: true });
|
|
27
|
+
http.on('upgrade', handleUpgrade.bind(wss));
|
|
28
|
+
http.on('request', (req, res) => {
|
|
29
|
+
var _a;
|
|
30
|
+
// simple way to serve files at the browser RPC path
|
|
31
|
+
if (!((_a = req.url) === null || _a === void 0 ? void 0 : _a.startsWith(config_1.BROWSER_RPC_PATHNAME))) {
|
|
32
|
+
res.statusCode = 404;
|
|
33
|
+
res.end('Not found');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
req.url = req.url.slice(config_1.BROWSER_RPC_PATHNAME.length) || '/';
|
|
37
|
+
serveBrowserRpc(req, res, (err) => {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
if (err) {
|
|
40
|
+
utils_1.logger.error({ err, url: req.url }, 'Failed to serve file');
|
|
41
|
+
}
|
|
42
|
+
res.statusCode = (_a = err === null || err === void 0 ? void 0 : err.statusCode) !== null && _a !== void 0 ? _a : 404;
|
|
43
|
+
res.end((_b = err === null || err === void 0 ? void 0 : err.message) !== null && _b !== void 0 ? _b : 'Not found');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
// wait for us to start listening
|
|
47
|
+
http.listen(port);
|
|
48
|
+
await new Promise((resolve, reject) => {
|
|
49
|
+
http.once('listening', () => resolve());
|
|
50
|
+
http.once('error', reject);
|
|
51
|
+
});
|
|
52
|
+
wss.on('connection', handleNewClient);
|
|
53
|
+
utils_1.logger.info({
|
|
54
|
+
port,
|
|
55
|
+
apiPath: config_1.WS_PATHNAME,
|
|
56
|
+
browserRpcPath: config_1.BROWSER_RPC_PATHNAME,
|
|
57
|
+
signerAddress: (0, generics_1.getAttestorAddress)(signatures_1.SelectedServiceSignatureType)
|
|
58
|
+
}, 'WS server listening');
|
|
59
|
+
const wssClose = wss.close.bind(wss);
|
|
60
|
+
wss.close = (cb) => {
|
|
61
|
+
wssClose(() => http.close(cb));
|
|
62
|
+
};
|
|
63
|
+
return wss;
|
|
64
|
+
}
|
|
65
|
+
async function handleNewClient(ws, req) {
|
|
66
|
+
const client = await socket_1.AttestorServerSocket
|
|
67
|
+
.acceptConnection(ws, req, utils_1.logger);
|
|
68
|
+
// if initialisation fails, don't store the client
|
|
69
|
+
if (!client) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
ws.serverSocket = client;
|
|
73
|
+
(0, keep_alive_1.addKeepAlive)(ws, utils_1.logger.child({ sessionId: client.sessionId }));
|
|
74
|
+
}
|
|
75
|
+
function handleUpgrade(request, socket, head) {
|
|
76
|
+
const { pathname } = new URL(request.url, 'wss://base.url');
|
|
77
|
+
if (pathname === config_1.WS_PATHNAME) {
|
|
78
|
+
this.handleUpgrade(request, socket, head, (ws) => {
|
|
79
|
+
this.emit('connection', ws, request);
|
|
80
|
+
});
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
socket.destroy();
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvY3JlYXRlLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQW1CQSxvQ0EyREM7QUE5RUQsK0JBQXdFO0FBQ3hFLGdFQUFzQztBQUN0Qyx1Q0FBK0U7QUFDL0UsOENBQXdEO0FBQ3hELHdEQUE4RDtBQUM5RCw0REFBMEQ7QUFDMUQscUNBQTRDO0FBQzVDLHVDQUE4QztBQUM5QyxxREFBbUU7QUFFbkUsMkJBQStDO0FBRS9DLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFBLG9CQUFjLEVBQUMsTUFBTSxDQUFDLElBQUksd0JBQWUsQ0FBQyxDQUFBO0FBRXpEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQWdCLEdBQUUsQ0FBQTtJQUMvQixNQUFNLGVBQWUsR0FBRyxJQUFBLHNCQUFXLEVBQ2xDLFNBQVMsRUFDVCxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQ3pCLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLG9CQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDM0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7O1FBQy9CLG9EQUFvRDtRQUNwRCxJQUFHLENBQUMsQ0FBQSxNQUFBLEdBQUcsQ0FBQyxHQUFHLDBDQUFFLFVBQVUsQ0FBQyw2QkFBb0IsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUMvQyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQTtZQUNwQixHQUFH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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.claimTunnel = void 0;
|
|
4
|
+
const config_1 = require("src/config");
|
|
5
|
+
const api_1 = require("src/proto/api");
|
|
6
|
+
const assert_valid_claim_request_1 = require("src/server/utils/assert-valid-claim-request");
|
|
7
|
+
const generics_1 = require("src/server/utils/generics");
|
|
8
|
+
const utils_1 = require("src/utils");
|
|
9
|
+
const claimTunnel = async (claimRequest, { logger, client }) => {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const { request, data: { timestampS } = {}, } = claimRequest;
|
|
12
|
+
const tunnel = client.getTunnel(request === null || request === void 0 ? void 0 : request.id);
|
|
13
|
+
// we throw an error for cases where the attestor cannot prove
|
|
14
|
+
// the user's request is faulty. For eg. if the user sends a
|
|
15
|
+
// "createRequest" that does not match the tunnel's actual
|
|
16
|
+
// create request -- the attestor cannot prove that the user
|
|
17
|
+
// is lying. In such cases, we throw a bad request error.
|
|
18
|
+
// Same goes for matching the transcript.
|
|
19
|
+
if (((_a = tunnel.createRequest) === null || _a === void 0 ? void 0 : _a.host) !== (request === null || request === void 0 ? void 0 : request.host)
|
|
20
|
+
|| ((_b = tunnel.createRequest) === null || _b === void 0 ? void 0 : _b.port) !== (request === null || request === void 0 ? void 0 : request.port)
|
|
21
|
+
|| ((_c = tunnel.createRequest) === null || _c === void 0 ? void 0 : _c.geoLocation) !== (request === null || request === void 0 ? void 0 : request.geoLocation)) {
|
|
22
|
+
throw utils_1.AttestorError.badRequest('Tunnel request does not match');
|
|
23
|
+
}
|
|
24
|
+
(0, assert_valid_claim_request_1.assertTranscriptsMatch)(claimRequest.transcript, tunnel.transcript);
|
|
25
|
+
const res = api_1.ClaimTunnelResponse.create({ request: claimRequest });
|
|
26
|
+
try {
|
|
27
|
+
const now = (0, utils_1.unixTimestampSeconds)();
|
|
28
|
+
if (Math.floor(timestampS - now) > config_1.MAX_CLAIM_TIMESTAMP_DIFF_S) {
|
|
29
|
+
throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', `Timestamp provided ${timestampS} is too far off. Current time is ${now}`);
|
|
30
|
+
}
|
|
31
|
+
const claim = await (0, assert_valid_claim_request_1.assertValidClaimRequest)(claimRequest, client.metadata, logger);
|
|
32
|
+
res.claim = {
|
|
33
|
+
...claim,
|
|
34
|
+
identifier: (0, utils_1.getIdentifierFromClaimInfo)(claim),
|
|
35
|
+
// hardcode for compatibility with V1 claims
|
|
36
|
+
epoch: 1
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.error({ err }, 'invalid claim request');
|
|
41
|
+
const attestorErr = utils_1.AttestorError.fromError(err);
|
|
42
|
+
attestorErr.code = 'ERROR_INVALID_CLAIM';
|
|
43
|
+
res.error = attestorErr.toProto();
|
|
44
|
+
}
|
|
45
|
+
res.signatures = {
|
|
46
|
+
attestorAddress: await (0, generics_1.getAttestorAddress)(client.metadata.signatureType),
|
|
47
|
+
claimSignature: res.claim
|
|
48
|
+
? await (0, generics_1.signAsAttestor)((0, utils_1.createSignDataForClaim)(res.claim), client.metadata.signatureType)
|
|
49
|
+
: new Uint8Array(),
|
|
50
|
+
resultSignature: await (0, generics_1.signAsAttestor)(api_1.ClaimTunnelResponse.encode(res).finish(), client.metadata.signatureType)
|
|
51
|
+
};
|
|
52
|
+
return res;
|
|
53
|
+
};
|
|
54
|
+
exports.claimTunnel = claimTunnel;
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1UdW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL2hhbmRsZXJzL2NsYWltVHVubmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUF1RDtBQUN2RCx1Q0FBbUQ7QUFDbkQsNEZBQTZHO0FBQzdHLHdEQUE4RTtBQUU5RSxxQ0FBbUg7QUFFNUcsTUFBTSxXQUFXLEdBQThCLEtBQUssRUFDMUQsWUFBWSxFQUNaLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNqQixFQUFFOztJQUNILE1BQU0sRUFDTCxPQUFPLEVBQ1AsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUN6QixHQUFHLFlBQVksQ0FBQTtJQUNoQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxFQUFHLENBQUMsQ0FBQTtJQUM3Qyw4REFBOEQ7SUFDOUQsNERBQTREO0lBQzVELDBEQUEwRDtJQUMxRCw0REFBNEQ7SUFDNUQseURBQXlEO0lBQ3pELHlDQUF5QztJQUN6QyxJQUNDLENBQUEsTUFBQSxNQUFNLENBQUMsYUFBYSwwQ0FBRSxJQUFJLE9BQUssT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksQ0FBQTtXQUN6QyxDQUFBLE1BQUEsTUFBTSxDQUFDLGFBQWEsMENBQUUsSUFBSSxPQUFLLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLENBQUE7V0FDNUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxhQUFhLDBDQUFFLFdBQVcsT0FBSyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVyxDQUFBLEVBQzVELENBQUM7UUFDRixNQUFNLHFCQUFhLENBQUMsVUFBVSxDQUFDLCtCQUErQixDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELElBQUEsbURBQXNCLEVBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFbEUsTUFBTSxHQUFHLEdBQUcseUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDakUsSUFBSSxDQUFDO1FBQ0osTUFBTSxHQUFHLEdBQUcsSUFBQSw0QkFBb0IsR0FBRSxDQUFBO1FBQ2xDLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsbUNBQTBCLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUkscUJBQWEsQ0FDdEIscUJBQXFCLEVBQ3JCLHNCQUFzQixVQUFVLG9DQUFvQyxHQUFHLEVBQUUsQ0FDekUsQ0FBQTtRQUNGLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsb0RBQXVCLEVBQzFDLFlBQVksRUFDWixNQUFNLENBQUMsUUFBUSxFQUNmLE1BQU0sQ0FDTixDQUFBO1FBQ0QsR0FBRyxDQUFDLEtBQUssR0FBRztZQUNYLEdBQUcsS0FBSztZQUNSLFVBQVUsRUFBRSxJQUFBLGtDQUEwQixFQUFDLEtBQUssQ0FBQztZQUM3Qyw0Q0FBNEM7WUFDNUMsS0FBSyxFQUFFLENBQUM7U0FDUixDQUFBO0lBQ0YsQ0FBQztJQUFDLE9BQU0sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtRQUM5QyxNQUFNLFdBQVcsR0FBRyxxQkFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxXQUFXLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFBO1FBQ3hDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsVUFBVSxHQUFHO1FBQ2hCLGVBQWUsRUFBRSxNQUFNLElBQUEsNkJBQWtCLEVBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUM3QjtRQUNELGNBQWMsRUFBRSxHQUFHLENBQUMsS0FBSztZQUN4QixDQUFDLENBQUMsTUFBTSxJQUFBLHlCQUFjLEVBQ3JCLElBQUEsOEJBQXNCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDN0I7WUFDRCxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDbkIsZUFBZSxFQUFFLE1BQU0sSUFBQSx5QkFBYyxFQUNwQyx5QkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUM3QjtLQUNELENBQUE7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNYLENBQUMsQ0FBQTtBQXRFWSxRQUFBLFdBQVcsZUFzRXZCIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.completeClaimOnChain = void 0;
|
|
4
|
+
const contracts_1 = require("src/avs/utils/contracts");
|
|
5
|
+
const utils_1 = require("src/utils");
|
|
6
|
+
const env_1 = require("src/utils/env");
|
|
7
|
+
const ACCEPT_CLAIM_PAYMENT_REQUESTS = (0, env_1.getEnvVariable)('ACCEPT_CLAIM_PAYMENT_REQUESTS') === '1';
|
|
8
|
+
const completeClaimOnChain = async ({ chainId: chainIdNum, taskIndex, completedTaskJson }) => {
|
|
9
|
+
var _a;
|
|
10
|
+
if (!ACCEPT_CLAIM_PAYMENT_REQUESTS) {
|
|
11
|
+
throw new utils_1.AttestorError('ERROR_PAYMENT_REFUSED', 'Payment requests are not accepted at this time');
|
|
12
|
+
}
|
|
13
|
+
const chainId = chainIdNum.toString();
|
|
14
|
+
const { contract } = (0, contracts_1.getContracts)(chainId.toString());
|
|
15
|
+
const task = JSON.parse(completedTaskJson);
|
|
16
|
+
const tx = await contract.taskCompleted(task, taskIndex);
|
|
17
|
+
const rslt = await tx.wait();
|
|
18
|
+
// check task created event was emitted
|
|
19
|
+
const ev = (_a = rslt.events) === null || _a === void 0 ? void 0 : _a[0];
|
|
20
|
+
const obj = ev === null || ev === void 0 ? void 0 : ev.args;
|
|
21
|
+
const plainObj = (0, utils_1.ethersStructToPlainObject)(obj);
|
|
22
|
+
return {
|
|
23
|
+
txHash: rslt.transactionHash,
|
|
24
|
+
taskCompletedObjectJson: JSON.stringify(plainObj)
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.completeClaimOnChain = completeClaimOnChain;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVDbGFpbU9uQ2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL2hhbmRsZXJzL2NvbXBsZXRlQ2xhaW1PbkNoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVEQUFzRDtBQUV0RCxxQ0FBb0U7QUFDcEUsdUNBQThDO0FBRTlDLE1BQU0sNkJBQTZCLEdBQUcsSUFBQSxvQkFBYyxFQUFDLCtCQUErQixDQUFDLEtBQUssR0FBRyxDQUFBO0FBRXRGLE1BQU0sb0JBQW9CLEdBQXVDLEtBQUssRUFDNUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxFQUNwRCxFQUFFOztJQUNILElBQUcsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxxQkFBYSxDQUN0Qix1QkFBdUIsRUFDdkIsZ0RBQWdELENBQ2hELENBQUE7SUFDRixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ3JDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFBLHdCQUFZLEVBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDckQsTUFBTSxJQUFJLEdBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFNUIsdUNBQXVDO0lBQ3ZDLE1BQU0sRUFBRSxHQUFHLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUcsQ0FBQyxDQUFDLENBQUE7SUFDM0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLElBQTJDLENBQUE7SUFFM0QsTUFBTSxRQUFRLEdBQUcsSUFBQSxpQ0FBeUIsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUUvQyxPQUFPO1FBQ04sTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlO1FBQzVCLHVCQUF1QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0tBQ2pELENBQUE7QUFDRixDQUFDLENBQUE7QUEzQlksUUFBQSxvQkFBb0Isd0JBMkJoQyJ9
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createClaimOnChain = void 0;
|
|
4
|
+
const contracts_1 = require("src/avs/utils/contracts");
|
|
5
|
+
const tasks_1 = require("src/avs/utils/tasks");
|
|
6
|
+
const utils_1 = require("src/utils");
|
|
7
|
+
const env_1 = require("src/utils/env");
|
|
8
|
+
const ACCEPT_CLAIM_PAYMENT_REQUESTS = (0, env_1.getEnvVariable)('ACCEPT_CLAIM_PAYMENT_REQUESTS') === '1';
|
|
9
|
+
const createClaimOnChain = async ({ chainId: chainIdNum, jsonCreateClaimRequest, requestSignature }) => {
|
|
10
|
+
if (!ACCEPT_CLAIM_PAYMENT_REQUESTS) {
|
|
11
|
+
throw new utils_1.AttestorError('ERROR_PAYMENT_REFUSED', 'Payment requests are not accepted at this time');
|
|
12
|
+
}
|
|
13
|
+
const chainId = chainIdNum.toString();
|
|
14
|
+
const { wallet } = (0, contracts_1.getContracts)(chainId.toString());
|
|
15
|
+
const request = JSON.parse(jsonCreateClaimRequest);
|
|
16
|
+
const { task, tx } = await (0, tasks_1.createNewClaimRequestOnChain)({
|
|
17
|
+
request,
|
|
18
|
+
owner: request.owner,
|
|
19
|
+
payer: wallet,
|
|
20
|
+
chainId,
|
|
21
|
+
requestSignature: requestSignature
|
|
22
|
+
});
|
|
23
|
+
const plainTask = (0, utils_1.ethersStructToPlainObject)(task);
|
|
24
|
+
return {
|
|
25
|
+
txHash: tx.transactionHash,
|
|
26
|
+
taskIndex: task.taskIndex,
|
|
27
|
+
jsonTask: JSON.stringify(plainTask)
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.createClaimOnChain = createClaimOnChain;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ2xhaW1PbkNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci9oYW5kbGVycy9jcmVhdGVDbGFpbU9uQ2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsdURBQXNEO0FBQ3RELCtDQUFrRTtBQUVsRSxxQ0FBb0U7QUFDcEUsdUNBQThDO0FBRTlDLE1BQU0sNkJBQTZCLEdBQUcsSUFBQSxvQkFBYyxFQUFDLCtCQUErQixDQUFDLEtBQUssR0FBRyxDQUFBO0FBRXRGLE1BQU0sa0JBQWtCLEdBQXFDLEtBQUssRUFDeEUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLEVBQ2hFLEVBQUU7SUFDSCxJQUFHLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUkscUJBQWEsQ0FDdEIsdUJBQXVCLEVBQ3ZCLGdEQUFnRCxDQUNoRCxDQUFBO0lBQ0YsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNyQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sT0FBTyxHQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUNyQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sSUFBQSxvQ0FBNEIsRUFBQztRQUN2RCxPQUFPO1FBQ1AsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLEtBQUssRUFBRSxNQUFPO1FBQ2QsT0FBTztRQUNQLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNsQyxDQUFDLENBQUE7SUFFRixNQUFNLFNBQVMsR0FBRyxJQUFBLGlDQUF5QixFQUFDLElBQUksQ0FBQyxDQUFBO0lBRWpELE9BQU87UUFDTixNQUFNLEVBQUUsRUFBRSxDQUFDLGVBQWU7UUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztLQUNuQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBN0JZLFFBQUEsa0JBQWtCLHNCQTZCOUIifQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTunnel = void 0;
|
|
4
|
+
const make_tcp_tunnel_1 = require("src/server/tunnels/make-tcp-tunnel");
|
|
5
|
+
const apm_1 = require("src/server/utils/apm");
|
|
6
|
+
const utils_1 = require("src/utils");
|
|
7
|
+
const createTunnel = async ({ id, ...opts }, { tx, logger, client }) => {
|
|
8
|
+
const apm = (0, apm_1.getApm)();
|
|
9
|
+
const sessionTx = (apm === null || apm === void 0 ? void 0 : apm.startTransaction('tunnel', { childOf: tx })) || undefined;
|
|
10
|
+
sessionTx === null || sessionTx === void 0 ? void 0 : sessionTx.addLabels({ tunnelId: id, ...opts });
|
|
11
|
+
if (client.tunnels[id]) {
|
|
12
|
+
throw utils_1.AttestorError.badRequest(`Tunnel "${id}" already exists`);
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const tunnel = await (0, make_tcp_tunnel_1.makeTcpTunnel)({
|
|
16
|
+
...opts,
|
|
17
|
+
logger,
|
|
18
|
+
onMessage(message) {
|
|
19
|
+
if (!client.isOpen) {
|
|
20
|
+
logger.warn('client is closed, dropping message');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
client.sendMessage({
|
|
24
|
+
tunnelMessage: {
|
|
25
|
+
tunnelId: id,
|
|
26
|
+
message
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
onClose(err) {
|
|
31
|
+
if (err) {
|
|
32
|
+
apm === null || apm === void 0 ? void 0 : apm.captureError(err, { parent: sessionTx });
|
|
33
|
+
tx === null || tx === void 0 ? void 0 : tx.setOutcome('failure');
|
|
34
|
+
}
|
|
35
|
+
tx === null || tx === void 0 ? void 0 : tx.end();
|
|
36
|
+
if (!client.isOpen) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
client.sendMessage({
|
|
40
|
+
tunnelDisconnectEvent: {
|
|
41
|
+
tunnelId: id,
|
|
42
|
+
error: err
|
|
43
|
+
? utils_1.AttestorError
|
|
44
|
+
.fromError(err)
|
|
45
|
+
.toProto()
|
|
46
|
+
: undefined
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
.catch(err => {
|
|
50
|
+
logger.error({ err }, 'failed to send tunnel disconnect event');
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
client.tunnels[id] = tunnel;
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
apm === null || apm === void 0 ? void 0 : apm.captureError(err, { parent: sessionTx });
|
|
59
|
+
tx === null || tx === void 0 ? void 0 : tx.setOutcome('failure');
|
|
60
|
+
tx === null || tx === void 0 ? void 0 : tx.end();
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.createTunnel = createTunnel;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHVubmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci9oYW5kbGVycy9jcmVhdGVUdW5uZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQWtFO0FBQ2xFLDhDQUE2QztBQUU3QyxxQ0FBeUM7QUFFbEMsTUFBTSxZQUFZLEdBQStCLEtBQUssRUFDNUQsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFDZixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQ3JCLEVBQUU7SUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFBLFlBQU0sR0FBRSxDQUFBO0lBQ3BCLE1BQU0sU0FBUyxHQUFHLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLGdCQUFnQixDQUN0QyxRQUFRLEVBQ1IsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQ2YsS0FBSSxTQUFTLENBQUE7SUFDZCxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUE7SUFFL0MsSUFBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxxQkFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0osTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLCtCQUFhLEVBQUM7WUFDbEMsR0FBRyxJQUFJO1lBQ1AsTUFBTTtZQUNOLFNBQVMsQ0FBQyxPQUFPO2dCQUNoQixJQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUE7b0JBQ2pELE9BQU07Z0JBQ1AsQ0FBQztnQkFFRCxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUNsQixhQUFhLEVBQUU7d0JBQ2QsUUFBUSxFQUFFLEVBQUU7d0JBQ1osT0FBTztxQkFDUDtpQkFDRCxDQUFDLENBQUE7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUc7Z0JBQ1YsSUFBRyxHQUFHLEVBQUUsQ0FBQztvQkFDUixHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO29CQUM3QyxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUMxQixDQUFDO2dCQUVELEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxHQUFHLEVBQUUsQ0FBQTtnQkFFVCxJQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixPQUFNO2dCQUNQLENBQUM7Z0JBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQztvQkFDbEIscUJBQXFCLEVBQUU7d0JBQ3RCLFFBQVEsRUFBRSxFQUFFO3dCQUNaLEtBQUssRUFBRSxHQUFHOzRCQUNULENBQUMsQ0FBQyxxQkFBYTtpQ0FDYixTQUFTLENBQUMsR0FBRyxDQUFDO2lDQUNkLE9BQU8sRUFBRTs0QkFDWCxDQUFDLENBQUMsU0FBUztxQkFDWjtpQkFDRCxDQUFDO3FCQUNBLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWixNQUFNLENBQUMsS0FBSyxDQUNYLEVBQUUsR0FBRyxFQUFFLEVBQ1Asd0NBQXdDLENBQ3hDLENBQUE7Z0JBQ0YsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDO1NBQ0QsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUE7UUFFM0IsT0FBTyxFQUFFLENBQUE7SUFDVixDQUFDO0lBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNiLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDN0MsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN6QixFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsR0FBRyxFQUFFLENBQUE7UUFFVCxNQUFNLEdBQUcsQ0FBQTtJQUNWLENBQUM7QUFDRixDQUFDLENBQUE7QUF6RVksUUFBQSxZQUFZLGdCQXlFeEIifQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.disconnectTunnel = void 0;
|
|
4
|
+
const disconnectTunnel = async ({ id }, { client }) => {
|
|
5
|
+
const tunnel = client.getTunnel(id);
|
|
6
|
+
await tunnel.close(new Error('Tunnel disconnected'));
|
|
7
|
+
return {};
|
|
8
|
+
};
|
|
9
|
+
exports.disconnectTunnel = disconnectTunnel;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY29ubmVjdFR1bm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvaGFuZGxlcnMvZGlzY29ubmVjdFR1bm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFTyxNQUFNLGdCQUFnQixHQUFtQyxLQUFLLEVBQ3BFLEVBQUUsRUFBRSxFQUFFLEVBQ04sRUFBRSxNQUFNLEVBQUUsRUFDVCxFQUFFO0lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNuQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFBO0lBRXBELE9BQU8sRUFBRSxDQUFBO0FBQ1YsQ0FBQyxDQUFBO0FBUlksUUFBQSxnQkFBZ0Isb0JBUTVCIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HANDLERS = void 0;
|
|
4
|
+
const claimTunnel_1 = require("src/server/handlers/claimTunnel");
|
|
5
|
+
const completeClaimOnChain_1 = require("src/server/handlers/completeClaimOnChain");
|
|
6
|
+
const createClaimOnChain_1 = require("src/server/handlers/createClaimOnChain");
|
|
7
|
+
const createTunnel_1 = require("src/server/handlers/createTunnel");
|
|
8
|
+
const disconnectTunnel_1 = require("src/server/handlers/disconnectTunnel");
|
|
9
|
+
const init_1 = require("src/server/handlers/init");
|
|
10
|
+
exports.HANDLERS = {
|
|
11
|
+
createTunnel: createTunnel_1.createTunnel,
|
|
12
|
+
disconnectTunnel: disconnectTunnel_1.disconnectTunnel,
|
|
13
|
+
claimTunnel: claimTunnel_1.claimTunnel,
|
|
14
|
+
init: init_1.init,
|
|
15
|
+
createClaimOnChain: createClaimOnChain_1.createClaimOnChain,
|
|
16
|
+
completeClaimOnChain: completeClaimOnChain_1.completeClaimOnChain
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL2hhbmRsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlFQUE2RDtBQUM3RCxtRkFBK0U7QUFDL0UsK0VBQTJFO0FBQzNFLG1FQUErRDtBQUMvRCwyRUFBdUU7QUFDdkUsbURBQStDO0FBR2xDLFFBQUEsUUFBUSxHQUFzQztJQUMxRCxZQUFZLEVBQVosMkJBQVk7SUFDWixnQkFBZ0IsRUFBaEIsbUNBQWdCO0lBQ2hCLFdBQVcsRUFBWCx5QkFBVztJQUNYLElBQUksRUFBSixXQUFJO0lBQ0osa0JBQWtCLEVBQWxCLHVDQUFrQjtJQUNsQixvQkFBb0IsRUFBcEIsMkNBQW9CO0NBQ3BCLENBQUEifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.init = void 0;
|
|
4
|
+
const utils_1 = require("src/utils");
|
|
5
|
+
const signatures_1 = require("src/utils/signatures");
|
|
6
|
+
const init = async (initRequest, { client }) => {
|
|
7
|
+
if (client.isInitialised) {
|
|
8
|
+
throw utils_1.AttestorError.badRequest('Client already initialised');
|
|
9
|
+
}
|
|
10
|
+
if (!signatures_1.SIGNATURES[initRequest.signatureType]) {
|
|
11
|
+
throw utils_1.AttestorError.badRequest('Unsupported signature type');
|
|
12
|
+
}
|
|
13
|
+
if (initRequest.clientVersion <= 0) {
|
|
14
|
+
throw utils_1.AttestorError.badRequest('Unsupported client version');
|
|
15
|
+
}
|
|
16
|
+
client.metadata = initRequest;
|
|
17
|
+
client.isInitialised = true;
|
|
18
|
+
return {};
|
|
19
|
+
};
|
|
20
|
+
exports.init = init;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvaGFuZGxlcnMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FBeUM7QUFDekMscURBQWlEO0FBRTFDLE1BQU0sSUFBSSxHQUF1QixLQUFLLEVBQzVDLFdBQVcsRUFDWCxFQUFFLE1BQU0sRUFBRSxFQUNULEVBQUU7SUFDSCxJQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLHFCQUFhLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELElBQUcsQ0FBQyx1QkFBVSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0scUJBQWEsQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQsSUFBRyxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0scUJBQWEsQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUE7SUFDN0IsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7SUFFM0IsT0FBTyxFQUFFLENBQUE7QUFDVixDQUFDLENBQUE7QUFwQlksUUFBQSxJQUFJLFFBb0JoQiJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
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("./utils/config-env"), exports);
|
|
18
|
+
__exportStar(require("./create-server"), exports);
|
|
19
|
+
__exportStar(require("./tunnels/make-tcp-tunnel"), exports);
|
|
20
|
+
__exportStar(require("./utils/assert-valid-claim-request"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBa0M7QUFDbEMsa0RBQStCO0FBQy9CLDREQUF5QztBQUN6QyxxRUFBa0QifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
|
+
import { IAttestorServerSocket, Logger } from 'src/types';
|
|
3
|
+
import { AttestorSocket } from 'src/utils/socket-base';
|
|
4
|
+
import { WebSocket as WS } from 'ws';
|
|
5
|
+
export declare class AttestorServerSocket extends AttestorSocket implements IAttestorServerSocket {
|
|
6
|
+
sessionId: number;
|
|
7
|
+
tunnels: IAttestorServerSocket['tunnels'];
|
|
8
|
+
private constructor();
|
|
9
|
+
getTunnel(tunnelId: number): import("src/types").Tunnel<import("src/types").TCPSocketProperties>;
|
|
10
|
+
static acceptConnection(socket: WS, req: IncomingMessage, logger: Logger): Promise<AttestorServerSocket | undefined>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AttestorServerSocket = void 0;
|
|
4
|
+
const message_handler_1 = require("src/client/utils/message-handler");
|
|
5
|
+
const handlers_1 = require("src/server/handlers");
|
|
6
|
+
const generics_1 = require("src/server/utils/generics");
|
|
7
|
+
const utils_1 = require("src/utils");
|
|
8
|
+
const socket_base_1 = require("src/utils/socket-base");
|
|
9
|
+
const util_1 = require("util");
|
|
10
|
+
class AttestorServerSocket extends socket_base_1.AttestorSocket {
|
|
11
|
+
constructor(socket, sessionId, logger) {
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
super(socket, {}, logger);
|
|
14
|
+
this.sessionId = sessionId;
|
|
15
|
+
this.tunnels = {};
|
|
16
|
+
// handle RPC requests
|
|
17
|
+
this.addEventListener('rpc-request', handleRpcRequest.bind(this));
|
|
18
|
+
// forward packets to the appropriate tunnel
|
|
19
|
+
this.addEventListener('tunnel-message', handleTunnelMessage.bind(this));
|
|
20
|
+
// close all tunnels when the connection is terminated
|
|
21
|
+
// since this tunnel can no longer be written to
|
|
22
|
+
this.addEventListener('connection-terminated', () => {
|
|
23
|
+
for (const tunnelId in this.tunnels) {
|
|
24
|
+
const tunnel = this.tunnels[tunnelId];
|
|
25
|
+
tunnel.close(new Error('WS session terminated'));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
getTunnel(tunnelId) {
|
|
30
|
+
const tunnel = this.tunnels[tunnelId];
|
|
31
|
+
if (!tunnel) {
|
|
32
|
+
throw new utils_1.AttestorError('ERROR_NOT_FOUND', `Tunnel "${tunnelId}" not found`);
|
|
33
|
+
}
|
|
34
|
+
return tunnel;
|
|
35
|
+
}
|
|
36
|
+
static async acceptConnection(socket, req, logger) {
|
|
37
|
+
// promisify ws.send -- so the sendMessage method correctly
|
|
38
|
+
// awaits the send operation
|
|
39
|
+
const bindSend = socket.send.bind(socket);
|
|
40
|
+
socket.send = (0, util_1.promisify)(bindSend);
|
|
41
|
+
const sessionId = (0, utils_1.generateSessionId)();
|
|
42
|
+
logger = logger.child({ sessionId });
|
|
43
|
+
const client = new AttestorServerSocket(socket, sessionId, logger);
|
|
44
|
+
try {
|
|
45
|
+
const initMsgs = (0, generics_1.getInitialMessagesFromQuery)(req);
|
|
46
|
+
logger.trace({ initMsgs: initMsgs.length }, 'new connection, validating...');
|
|
47
|
+
for (const msg of initMsgs) {
|
|
48
|
+
await message_handler_1.handleMessage.call(client, msg);
|
|
49
|
+
}
|
|
50
|
+
logger.debug('connection accepted');
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
logger.error({ err }, 'error in new connection');
|
|
54
|
+
if (client.isOpen) {
|
|
55
|
+
client.terminateConnection(err instanceof utils_1.AttestorError
|
|
56
|
+
? err
|
|
57
|
+
: utils_1.AttestorError.badRequest(err.message));
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
return client;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AttestorServerSocket = AttestorServerSocket;
|
|
65
|
+
async function handleTunnelMessage({ data: { tunnelId, message } }) {
|
|
66
|
+
var _a;
|
|
67
|
+
try {
|
|
68
|
+
const tunnel = this.getTunnel(tunnelId);
|
|
69
|
+
await tunnel.write(message);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error({
|
|
73
|
+
err,
|
|
74
|
+
tunnelId,
|
|
75
|
+
}, 'error writing to tunnel');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function handleRpcRequest({ data: { data, requestId, respond, type } }) {
|
|
79
|
+
const logger = this.logger.child({
|
|
80
|
+
rpc: type,
|
|
81
|
+
requestId
|
|
82
|
+
});
|
|
83
|
+
try {
|
|
84
|
+
logger.debug({ data }, 'handling RPC request');
|
|
85
|
+
const handler = handlers_1.HANDLERS[type];
|
|
86
|
+
const res = await handler(data, { client: this, logger });
|
|
87
|
+
await respond(res);
|
|
88
|
+
logger.debug({ res }, 'handled RPC request');
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
logger.error({ err }, 'error in RPC request');
|
|
92
|
+
respond(utils_1.AttestorError.fromError(err));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esc0VBQWdFO0FBQ2hFLGtEQUE4QztBQUM5Qyx3REFBdUU7QUFFdkUscUNBQTREO0FBQzVELHVEQUFzRDtBQUN0RCwrQkFBZ0M7QUFHaEMsTUFBYSxvQkFBcUIsU0FBUSw0QkFBYztJQUl2RCxZQUFvQixNQUFVLEVBQVMsU0FBaUIsRUFBRSxNQUFjO1FBQ3ZFLGFBQWE7UUFDYixLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUZhLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFGeEQsWUFBTyxHQUFxQyxFQUFFLENBQUE7UUFLN0Msc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDakUsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2RSxzREFBc0Q7UUFDdEQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7WUFDbkQsS0FBSSxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFBO1lBQ2pELENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0I7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyQyxJQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUkscUJBQWEsQ0FDdEIsaUJBQWlCLEVBQ2pCLFdBQVcsUUFBUSxhQUFhLENBQ2hDLENBQUE7UUFDRixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUIsTUFBVSxFQUNWLEdBQW9CLEVBQ3BCLE1BQWM7UUFFZCwyREFBMkQ7UUFDM0QsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBQSxnQkFBUyxFQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUEseUJBQWlCLEdBQUUsQ0FBQTtRQUNyQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFFcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2xFLElBQUksQ0FBQztZQUNKLE1BQU0sUUFBUSxHQUFHLElBQUEsc0NBQTJCLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFDakQsTUFBTSxDQUFDLEtBQUssQ0FDWCxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQzdCLCtCQUErQixDQUMvQixDQUFBO1lBQ0QsS0FBSSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSwrQkFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDdEMsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO1lBQ2hELElBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixNQUFNLENBQUMsbUJBQW1CLENBQ3pCLEdBQUcsWUFBWSxxQkFBYTtvQkFDM0IsQ0FBQyxDQUFDLEdBQUc7b0JBQ0wsQ0FBQyxDQUFDLHFCQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FDeEMsQ0FBQTtZQUNGLENBQUM7WUFFRCxPQUFNO1FBQ1AsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2QsQ0FBQztDQUNEO0FBekVELG9EQXlFQztBQUVELEtBQUssVUFBVSxtQkFBbUIsQ0FFakMsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQThCOztJQUUzRCxJQUFJLENBQUM7UUFDSixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBQUMsT0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsS0FBSyxDQUNqQjtZQUNDLEdBQUc7WUFDSCxRQUFRO1NBQ1IsRUFDRCx5QkFBeUIsQ0FDekIsQ0FBQTtJQUNGLENBQUM7QUFDRixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUU5QixFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUEyQjtJQUVyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxHQUFHLEVBQUUsSUFBSTtRQUNULFNBQVM7S0FDVCxDQUFDLENBQUE7SUFDRixJQUFJLENBQUM7UUFDSixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUU5QyxNQUFNLE9BQU8sR0FBRyxtQkFBUSxDQUFDLElBQUksQ0FBNEIsQ0FBQTtRQUN6RCxNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDekQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUFDLE9BQU0sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUM3QyxPQUFPLENBQUMscUJBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0FBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CreateTunnelRequest } from 'src/proto/api';
|
|
2
|
+
import type { Logger } from 'src/types';
|
|
3
|
+
import type { MakeTunnelFn, TCPSocketProperties } from 'src/types';
|
|
4
|
+
type ExtraOpts = Omit<CreateTunnelRequest, 'id' | 'initialMessage'> & {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Builds a TCP tunnel to the given host and port.
|
|
9
|
+
* If a geolocation is provided -- an HTTPS proxy is used
|
|
10
|
+
* to connect to the host.
|
|
11
|
+
*
|
|
12
|
+
* HTTPS proxy essentially creates an opaque tunnel to the
|
|
13
|
+
* host using the CONNECT method. Any data can be sent through
|
|
14
|
+
* this tunnel to the end host.
|
|
15
|
+
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT
|
|
16
|
+
*
|
|
17
|
+
* The tunnel also retains a transcript of all messages sent and received.
|
|
18
|
+
*/
|
|
19
|
+
export declare const makeTcpTunnel: MakeTunnelFn<ExtraOpts, TCPSocketProperties>;
|
|
20
|
+
export {};
|