@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
JavaScript
;
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),
};