UNPKG

@erc7824/nitrolite

Version:

The Nitrolite SDK empowers developers to build high-performance, scalable web3 applications using state channels. It's designed to provide near-instant transactions and significantly improved user experiences by minimizing direct blockchain interactions.

67 lines (66 loc) 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NitroliteRPC = void 0; const utils_1 = require("./utils"); class NitroliteRPC { static createRequest({ method, params = {}, requestId = (0, utils_1.generateRequestId)(), timestamp = (0, utils_1.getCurrentTimestamp)(), signatures = [], }) { const requestData = [requestId, method, params, timestamp]; const message = { req: requestData, sig: signatures }; return message; } static createAppRequest({ requestId = (0, utils_1.generateRequestId)(), method, params = {}, timestamp = (0, utils_1.getCurrentTimestamp)() }, sid) { const requestData = [requestId, method, params, timestamp]; const message = { req: requestData, sid }; return message; } static getMessagePayload(message) { if (message.req) return message.req; if (message.res) return message.res; throw new Error("Message must contain either 'req' or 'res' field"); } static async signRequestMessage(message, signer) { if (!message.req) { throw new Error("signRequestMessage can only sign request messages containing 'req'."); } const payload = this.getMessagePayload(message); const signature = await signer(payload); message.sig = [signature]; return message; } static async verifySingleSignature(message, expectedSigner, verifier) { if (!message.sig || !Array.isArray(message.sig) || message.sig.length === 0) { return false; } const signature = message.sig[0]; if (message.sig.length > 1) { console.error('verifySingleSignature called on message with multiple signatures. Verifying only the first one.'); } try { const payload = this.getMessagePayload(message); if (typeof signature !== 'string') { return false; } return await verifier(payload, signature, expectedSigner); } catch (error) { console.error('Error during single signature verification:', error); return false; } } static async verifyMultipleSignatures(message, expectedSigners, verifier) { if (!message.sig || !Array.isArray(message.sig)) { return false; } try { const payload = this.getMessagePayload(message); return await verifier(payload, message.sig, expectedSigners); } catch (error) { console.error('Error during multiple signature verification:', error); return false; } } } exports.NitroliteRPC = NitroliteRPC;