@zkp2p/reclaim-witness-sdk
Version:
<div> <div> <img src="https://raw.githubusercontent.com/reclaimprotocol/.github/main/assets/banners/Attestor-Core.png" /> </div> </div>
94 lines • 8.61 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)
.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) {
this.logger.debug({ type }, 'sending rpc request');
const now = Date.now();
try {
const { messages: [{ id }] } = await this.sendMessage({ [(0, utils_2.getRpcRequestType)(type)]: request });
const rslt = await this.waitForResponse(id);
return rslt;
}
finally {
const timeTakenMs = Date.now() - now;
this.logger.debug({ type, timeTakenMs }, 'received rpc response');
}
}
waitForResponse(id) {
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 removeHandlers = () => {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvdXRpbHMvY2xpZW50LXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBeUM7QUFDekMsdUNBQTZDO0FBQzdDLHVDQUF5RDtBQUV6RCxxQ0FBK0Y7QUFDL0YsdURBQXNEO0FBQ3RELHFDQUFvRTtBQUVwRSxNQUFhLGNBQWUsU0FBUSw0QkFBYztJQU1qRCxZQUFZLEVBQ1gsR0FBRyxFQUNILFlBQVksR0FBRyxFQUFFLEVBQ2pCLGFBQWEsR0FBRyx5QkFBZ0IsQ0FBQyxhQUFhLEVBQzlDLE1BQU0sR0FBRyxjQUFNLEVBQ2YsV0FBVyxFQUNYLGFBQWEsR0FBRyxrQkFBb0IsRUFDVDtRQUMzQixNQUFNLFdBQVcsR0FBRztZQUNuQixHQUFHLHlCQUFnQjtZQUNuQixhQUFhO1lBQ2IsSUFBSSxFQUFFLFdBQVc7U0FDakIsQ0FBQTtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFFdEQsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUVoRCxLQUFLLENBQ0osYUFBYSxDQUFDLEdBQUcsQ0FBYyxFQUMvQixXQUFXLEVBQ1gsTUFBTSxDQUNOLENBQUE7UUE0RkYsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBRyxJQUFJLENBQUMs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
;