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.

69 lines (68 loc) 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.rpcResponseParser = exports.parseAnyRPCResponse = void 0; const types_1 = require("../types"); const index_1 = require("./index"); const parseAnyRPCResponse = (response) => { try { const parsed = JSON.parse(response); if (!Array.isArray(parsed.res) || parsed.res.length !== 4) { throw new Error('Invalid RPC response format'); } const method = parsed.res[1]; const parse = index_1.paramsParsers[method]; if (!parse) { throw new Error(`No parser found for method ${method}`); } const params = parse(parsed.res[2]); const responseObj = { method, requestId: parsed.res[0], timestamp: parsed.res[3], signatures: parsed.sig || [], params, }; return responseObj; } catch (e) { throw new Error(`Failed to parse RPC response: ${e instanceof Error ? e.message : e}`); } }; exports.parseAnyRPCResponse = parseAnyRPCResponse; const _parseSpecificRPCResponse = (response, expectedMethod) => { const result = (0, exports.parseAnyRPCResponse)(response); if (result.method !== expectedMethod) { throw new Error(`Expected RPC method to be '${expectedMethod}', but received '${result.method}'`); } return result; }; exports.rpcResponseParser = { authChallenge: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.AuthChallenge), authVerify: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.AuthVerify), authRequest: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.AuthRequest), error: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Error), getConfig: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetConfig), getLedgerBalances: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetLedgerBalances), getLedgerEntries: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetLedgerEntries), getLedgerTransactions: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetLedgerTransactions), getUserTag: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetUserTag), createAppSession: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.CreateAppSession), submitAppState: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.SubmitAppState), closeAppSession: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.CloseAppSession), getAppDefinition: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetAppDefinition), getAppSessions: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetAppSessions), resizeChannel: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.ResizeChannel), closeChannel: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.CloseChannel), getChannels: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetChannels), getRPCHistory: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetRPCHistory), getAssets: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.GetAssets), assets: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Assets), message: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Message), balanceUpdate: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.BalanceUpdate), channelsUpdate: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.ChannelsUpdate), channelUpdate: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.ChannelUpdate), ping: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Ping), pong: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Pong), transfer: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.Transfer), transferNotification: (raw) => _parseSpecificRPCResponse(raw, types_1.RPCMethod.TransferNotification), };