@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.
Files changed (204) hide show
  1. package/README.md +39 -0
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +344 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +5 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +729 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
  9. package/lib/avs/client/create-claim-on-avs.js +147 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +24 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +3 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/lib/avs/contracts/factories/index.js +9 -0
  20. package/lib/avs/contracts/index.d.ts +3 -0
  21. package/lib/avs/contracts/index.js +30 -0
  22. package/lib/avs/tests/test.operator.d.ts +11 -0
  23. package/lib/avs/tests/test.operator.js +313 -0
  24. package/lib/avs/tests/utils.d.ts +2 -0
  25. package/lib/avs/tests/utils.js +50 -0
  26. package/lib/avs/types/index.d.ts +55 -0
  27. package/lib/avs/types/index.js +3 -0
  28. package/lib/avs/utils/contracts.d.ts +21 -0
  29. package/lib/avs/utils/contracts.js +38 -0
  30. package/lib/avs/utils/register.d.ts +27 -0
  31. package/lib/avs/utils/register.js +76 -0
  32. package/lib/avs/utils/tasks.d.ts +22 -0
  33. package/lib/avs/utils/tasks.js +45 -0
  34. package/lib/client/create-claim.d.ts +5 -0
  35. package/lib/client/create-claim.js +357 -0
  36. package/lib/client/index.d.ts +3 -0
  37. package/lib/client/index.js +20 -0
  38. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  39. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
  40. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
  41. package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
  42. package/lib/client/utils/attestor-pool.d.ts +6 -0
  43. package/lib/client/utils/attestor-pool.js +28 -0
  44. package/lib/client/utils/client-socket.d.ts +9 -0
  45. package/lib/client/utils/client-socket.js +77 -0
  46. package/lib/client/utils/message-handler.d.ts +4 -0
  47. package/lib/client/utils/message-handler.js +93 -0
  48. package/lib/config/index.d.ts +23 -0
  49. package/lib/config/index.js +35 -0
  50. package/lib/index.d.ts +9 -0
  51. package/lib/index.js +39 -0
  52. package/lib/proto/api.d.ts +414 -0
  53. package/lib/proto/api.js +2756 -0
  54. package/lib/providers/http/index.d.ts +3 -0
  55. package/lib/providers/http/index.js +472 -0
  56. package/lib/providers/http/utils.d.ts +44 -0
  57. package/lib/providers/http/utils.js +302 -0
  58. package/lib/providers/index.d.ts +4 -0
  59. package/lib/providers/index.js +11 -0
  60. package/lib/scripts/check-avs-registration.d.ts +1 -0
  61. package/lib/scripts/check-avs-registration.js +28 -0
  62. package/lib/scripts/generate-provider-types.d.ts +5 -0
  63. package/lib/scripts/generate-provider-types.js +82 -0
  64. package/lib/scripts/generate-receipt.d.ts +9 -0
  65. package/lib/scripts/generate-receipt.js +93 -0
  66. package/lib/scripts/register-avs-operator.d.ts +1 -0
  67. package/lib/scripts/register-avs-operator.js +6 -0
  68. package/lib/scripts/start-server.d.ts +1 -0
  69. package/lib/scripts/start-server.js +6 -0
  70. package/lib/scripts/verify-root-ca.d.ts +1 -0
  71. package/lib/scripts/verify-root-ca.js +51 -0
  72. package/lib/server/create-server.d.ts +7 -0
  73. package/lib/server/create-server.js +85 -0
  74. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  75. package/lib/server/handlers/claimTunnel.js +55 -0
  76. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  77. package/lib/server/handlers/completeClaimOnChain.js +28 -0
  78. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  79. package/lib/server/handlers/createClaimOnChain.js +31 -0
  80. package/lib/server/handlers/createTunnel.d.ts +2 -0
  81. package/lib/server/handlers/createTunnel.js +65 -0
  82. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  83. package/lib/server/handlers/disconnectTunnel.js +10 -0
  84. package/lib/server/handlers/index.d.ts +4 -0
  85. package/lib/server/handlers/index.js +18 -0
  86. package/lib/server/handlers/init.d.ts +2 -0
  87. package/lib/server/handlers/init.js +21 -0
  88. package/lib/server/index.d.ts +4 -0
  89. package/lib/server/index.js +21 -0
  90. package/lib/server/socket.d.ts +11 -0
  91. package/lib/server/socket.js +95 -0
  92. package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
  93. package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
  94. package/lib/server/utils/apm.d.ts +11 -0
  95. package/lib/server/utils/apm.js +39 -0
  96. package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
  97. package/lib/server/utils/assert-valid-claim-request.js +189 -0
  98. package/lib/server/utils/config-env.d.ts +1 -0
  99. package/lib/server/utils/config-env.js +7 -0
  100. package/lib/server/utils/generics.d.ts +22 -0
  101. package/lib/server/utils/generics.js +59 -0
  102. package/lib/server/utils/iso.d.ts +1 -0
  103. package/lib/server/utils/iso.js +260 -0
  104. package/lib/server/utils/keep-alive.d.ts +7 -0
  105. package/lib/server/utils/keep-alive.js +42 -0
  106. package/lib/server/utils/process-handshake.d.ts +13 -0
  107. package/lib/server/utils/process-handshake.js +179 -0
  108. package/lib/server/utils/verify-server-certificates.d.ts +7 -0
  109. package/lib/server/utils/verify-server-certificates.js +102 -0
  110. package/lib/tests/describe-with-server.d.ts +21 -0
  111. package/lib/tests/describe-with-server.js +67 -0
  112. package/lib/tests/mock-provider-server.d.ts +13 -0
  113. package/lib/tests/mock-provider-server.js +65 -0
  114. package/lib/tests/mocks.d.ts +4 -0
  115. package/lib/tests/mocks.js +23 -0
  116. package/lib/tests/test.claim-creation.d.ts +1 -0
  117. package/lib/tests/test.claim-creation.js +187 -0
  118. package/lib/tests/test.http-parser.d.ts +1 -0
  119. package/lib/tests/test.http-parser.js +118 -0
  120. package/lib/tests/test.http-provider-utils.d.ts +1 -0
  121. package/lib/tests/test.http-provider-utils.js +1932 -0
  122. package/lib/tests/test.http-provider.d.ts +1 -0
  123. package/lib/tests/test.http-provider.js +43 -0
  124. package/lib/tests/test.rpc-communication.d.ts +1 -0
  125. package/lib/tests/test.rpc-communication.js +64 -0
  126. package/lib/tests/test.rpc-tunnel.d.ts +1 -0
  127. package/lib/tests/test.rpc-tunnel.js +168 -0
  128. package/lib/tests/test.signatures.d.ts +1 -0
  129. package/lib/tests/test.signatures.js +24 -0
  130. package/lib/tests/test.tcp-tunnel.d.ts +1 -0
  131. package/lib/tests/test.tcp-tunnel.js +64 -0
  132. package/lib/tests/test.zk.d.ts +1 -0
  133. package/lib/tests/test.zk.js +169 -0
  134. package/lib/tests/utils.d.ts +12 -0
  135. package/lib/tests/utils.js +49 -0
  136. package/lib/types/claims.d.ts +64 -0
  137. package/lib/types/claims.js +3 -0
  138. package/lib/types/client.d.ts +136 -0
  139. package/lib/types/client.js +3 -0
  140. package/lib/types/general.d.ts +39 -0
  141. package/lib/types/general.js +3 -0
  142. package/lib/types/handlers.d.ts +10 -0
  143. package/lib/types/handlers.js +3 -0
  144. package/lib/types/index.d.ts +9 -0
  145. package/lib/types/index.js +26 -0
  146. package/lib/types/providers.d.ts +135 -0
  147. package/lib/types/providers.gen.d.ts +414 -0
  148. package/lib/types/providers.gen.js +14 -0
  149. package/lib/types/providers.js +3 -0
  150. package/lib/types/rpc.d.ts +35 -0
  151. package/lib/types/rpc.js +3 -0
  152. package/lib/types/signatures.d.ts +28 -0
  153. package/lib/types/signatures.js +3 -0
  154. package/lib/types/tunnel.d.ts +18 -0
  155. package/lib/types/tunnel.js +3 -0
  156. package/lib/types/zk.d.ts +16 -0
  157. package/lib/types/zk.js +3 -0
  158. package/lib/utils/benchmark.d.ts +1 -0
  159. package/lib/utils/benchmark.js +70 -0
  160. package/lib/utils/claims.d.ts +33 -0
  161. package/lib/utils/claims.js +112 -0
  162. package/lib/utils/env.d.ts +3 -0
  163. package/lib/utils/env.js +20 -0
  164. package/lib/utils/error.d.ts +27 -0
  165. package/lib/utils/error.js +43 -0
  166. package/lib/utils/generics.d.ts +112 -0
  167. package/lib/utils/generics.js +348 -0
  168. package/lib/utils/http-parser.d.ts +55 -0
  169. package/lib/utils/http-parser.js +249 -0
  170. package/lib/utils/index.d.ts +10 -0
  171. package/lib/utils/index.js +27 -0
  172. package/lib/utils/logger.d.ts +13 -0
  173. package/lib/utils/logger.js +100 -0
  174. package/lib/utils/prepare-packets.d.ts +16 -0
  175. package/lib/utils/prepare-packets.js +61 -0
  176. package/lib/utils/redactions.d.ts +41 -0
  177. package/lib/utils/redactions.js +111 -0
  178. package/lib/utils/retries.d.ts +12 -0
  179. package/lib/utils/retries.js +28 -0
  180. package/lib/utils/signatures/eth.d.ts +2 -0
  181. package/lib/utils/signatures/eth.js +33 -0
  182. package/lib/utils/signatures/index.d.ts +5 -0
  183. package/lib/utils/signatures/index.js +11 -0
  184. package/lib/utils/socket-base.d.ts +21 -0
  185. package/lib/utils/socket-base.js +89 -0
  186. package/lib/utils/tls.d.ts +2 -0
  187. package/lib/utils/tls.js +32 -0
  188. package/lib/utils/validation.d.ts +2 -0
  189. package/lib/utils/validation.js +46 -0
  190. package/lib/utils/ws.d.ts +12 -0
  191. package/lib/utils/ws.js +21 -0
  192. package/lib/utils/zk.d.ts +50 -0
  193. package/lib/utils/zk.js +282 -0
  194. package/lib/window-rpc/index.d.ts +3 -0
  195. package/lib/window-rpc/index.js +20 -0
  196. package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
  197. package/lib/window-rpc/setup-window-rpc.js +239 -0
  198. package/lib/window-rpc/types.d.ts +184 -0
  199. package/lib/window-rpc/types.js +3 -0
  200. package/lib/window-rpc/utils.d.ts +13 -0
  201. package/lib/window-rpc/utils.js +76 -0
  202. package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
  203. package/lib/window-rpc/window-rpc-zk.js +72 -0
  204. 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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const claimTunnel: RPCHandler<'claimTunnel'>;
@@ -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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const completeClaimOnChain: RPCHandler<'completeClaimOnChain'>;
@@ -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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const createClaimOnChain: RPCHandler<'createClaimOnChain'>;
@@ -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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const createTunnel: RPCHandler<'createTunnel'>;
@@ -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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const disconnectTunnel: RPCHandler<'disconnectTunnel'>;
@@ -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,4 @@
1
+ import { RPCHandler, RPCType } from 'src/types';
2
+ export declare const HANDLERS: {
3
+ [T in RPCType]: RPCHandler<T>;
4
+ };
@@ -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,2 @@
1
+ import { RPCHandler } from 'src/types';
2
+ export declare const init: RPCHandler<'init'>;
@@ -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,4 @@
1
+ export * from './utils/config-env';
2
+ export * from './create-server';
3
+ export * from './tunnels/make-tcp-tunnel';
4
+ export * from './utils/assert-valid-claim-request';
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9zb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esc0VBQWdFO0FBQ2hFLGtEQUE4QztBQUM5Qyx3REFBdUU7QUFFdkUscUNBQTREO0FBQzVELHVEQUFzRDtBQUN0RCwrQkFBZ0M7QUFHaEMsTUFBYSxvQkFBcUIsU0FBUSw0QkFBYztJQUl2RCxZQUFvQixNQUFVLEVBQVMsU0FBaUIsRUFBRSxNQUFjO1FBQ3ZFLGFBQWE7UUFDYixLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUZhLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFGeEQsWUFBTyxHQUFxQyxFQUFFLENBQUE7UUFLN0Msc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDakUsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2RSxzREFBc0Q7UUFDdEQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7WUFDbkQsS0FBSSxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFBO1lBQ2pELENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0I7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFD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
@@ -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 {};