@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
JavaScript
;
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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