UNPKG

@reclaimprotocol/attestor-core

Version:

<div> <div> <img src="https://raw.githubusercontent.com/reclaimprotocol/.github/main/assets/banners/Attestor-Core.png" /> </div> </div>

100 lines 9.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AttestorClient = void 0; const utils_1 = require("ethers/lib/utils"); const config_1 = require("../../config"); const api_1 = require("../../proto/api"); const utils_2 = require("../../utils"); const socket_base_1 = require("../../utils/socket-base"); const ws_1 = require("../../utils/ws"); class AttestorClient extends socket_base_1.AttestorSocket { constructor({ url, initMessages = [], signatureType = config_1.DEFAULT_METADATA.signatureType, logger = utils_2.logger, authRequest, makeWebSocket = ws_1.makeWebSocket }) { const initRequest = { ...config_1.DEFAULT_METADATA, signatureType, auth: authRequest }; const msg = (0, utils_2.packRpcMessages)({ initRequest }, ...initMessages); const initRequestBytes = api_1.RPCMessages.encode(msg).finish(); const initRequestB64 = utils_1.base64.encode(initRequestBytes); url = new URL(url.toString()); url.searchParams.set('messages', initRequestB64); super(makeWebSocket(url), initRequest, logger); this.waitForInit = () => { if (this.isClosed) { throw new utils_2.AttestorError('ERROR_NETWORK_ERROR', 'Client connection already closed'); } return this.waitForInitPromise; }; const initReqId = msg.messages[0].id; this.waitForInitPromise = this .waitForResponse(initReqId, config_1.DEFAULT_RPC_TIMEOUT_MS) .then(res => { logger.info('client initialised'); this.isInitialised = true; this.initResponse = res; }); // swallow the error if anything bad happens, and we've no // catch block to handle it this.waitForInitPromise .catch(() => { }); this.addEventListener('connection-terminated', ev => (logger.info({ err: ev.data }, 'connection terminated'))); } async rpc(type, request, timeoutMs = config_1.DEFAULT_RPC_TIMEOUT_MS) { const msgId = (0, utils_2.generateRpcMessageId)(); this.logger.debug({ type, id: msgId }, 'sending rpc request'); const now = Date.now(); try { const rslt = this.waitForResponse(msgId, timeoutMs); await this.sendMessage({ id: msgId, [(0, utils_2.getRpcRequestType)(type)]: request }); return await rslt; } finally { const timeTakenMs = Date.now() - now; this.logger.debug({ type, timeTakenMs }, 'received rpc response'); } } waitForResponse(id, timeoutMs = config_1.DEFAULT_RPC_TIMEOUT_MS) { if (this.isClosed) { throw new utils_2.AttestorError('ERROR_NETWORK_ERROR', 'Client connection already closed'); } // setup a promise to wait for the response return new Promise((resolve, reject) => { const handler = (event) => { if (event.data.id !== id) { return; } removeHandlers(); if ('error' in event.data) { reject(event.data.error); return; } // @ts-expect-error resolve(event.data.data); }; const terminateHandler = (event) => { removeHandlers(); // if the connection was terminated, reject the promise // but update the error code to reflect the network error if (event.data.code === 'ERROR_NO_ERROR') { reject(new utils_2.AttestorError('ERROR_NETWORK_ERROR', event.data.message, event.data.data)); return; } reject(event.data); }; const timeout = setTimeout(() => { removeHandlers(); reject(new utils_2.AttestorError('ERROR_TIMEOUT', `RPC request timed out after ${timeoutMs}ms`, { id })); }, timeoutMs); const removeHandlers = () => { clearTimeout(timeout); this.removeEventListener('rpc-response', handler); this.removeEventListener('connection-terminated', terminateHandler); }; this.addEventListener('rpc-response', handler); this.addEventListener('connection-terminated', terminateHandler); }); } } exports.AttestorClient = AttestorClient; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvdXRpbHMvY2xpZW50LXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUM7QUFDekMsdUNBQXFFO0FBQ3JFLHVDQUF5RDtBQUV6RCxxQ0FBcUg7QUFDckgsdURBQXNEO0FBQ3RELHFDQUFvRTtBQUVwRSxNQUFhLGNBQWUsU0FBUSw0QkFBYztJQU1qRCxZQUFZLEVBQ1gsR0FBRyxFQUNILFlBQVksR0FBRyxFQUFFLEVBQ2pCLGFBQWEsR0FBRyx5QkFBZ0IsQ0FBQyxhQUFhLEVBQzlDLE1BQU0sR0FBRyxjQUFNLEVBQ2YsV0FBVyxFQUNYLGFBQWEsR0FBRyxrQkFBb0IsRUFDVDtRQUMzQixNQUFNLFdBQVcsR0FBRztZQUNuQixHQUFHLHlCQUFnQjtZQUNuQixhQUFhO1lBQ2IsSUFBSSxFQUFFLFdBQVc7U0FDakIsQ0FBQTtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFdEQsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUVoRCxLQUFLLENBQ0osYUFBYSxDQUFDLEdBQUcsQ0FBYyxFQUMvQixXQUFXLEVBQ1gsTUFBTSxDQUNOLENBQUE7UUE0R0YsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBRyxJQUFJLENBQUMs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