UNPKG

@frakt-protocol/frakt-sdk

Version:

Frakt SDK for interacting with frakt.xyz protocols

141 lines (140 loc) 6.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.onAccountsChange = exports.LOAN_STATE_PRIORITY = void 0; const transactionParsers_1 = require("./transactionParsers"); // Proposed, // Rejected, // Activated, // PaidBack, // Liquidated, // PaidBackWithGrace, exports.LOAN_STATE_PRIORITY = { proposed: 0, rejected: 1, activated: 2, paidBack: 3, liquidated: 4, paidBackWithGrace: 5, }; const onAccountsChange = ({ programId, timeoutOfCalls, fromThisSignature, connection, onAccountsChange, }) => __awaiter(void 0, void 0, void 0, function* () { console.log('onAccountsChange'); let lastSignature = fromThisSignature || (yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'))[0].signature; while (true) { try { // console.log('args: ', { // limit: 50, // until: lastSignature, // }); // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; // lastSignature = latestConfirmedSignatures[0].signature; if (!lastSignature) { const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) { yield new Promise((f) => setTimeout(f, 200)); continue; } lastSignature = latestConfirmedSignatures[0].signature; } // console.log('args: ', { // limit: 50, // until: lastSignature, // }); const newSignatureInfos = yield connection.getSignaturesForAddress(programId, { limit: 50, until: lastSignature, }, 'confirmed'); // console.log('result: ', newSignatureInfos.length); if (!newSignatureInfos) { yield new Promise((f) => setTimeout(f, 200)); continue; } if (newSignatureInfos.length > 10) { console.log('more than 10 signatures error: ', newSignatureInfos.length); const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) continue; lastSignature = latestConfirmedSignatures[0].signature; yield new Promise((f) => setTimeout(f, 200)); continue; } // console.log('result: ', newSignatureInfos); for (let signatureInfo of [...newSignatureInfos].reverse()) { yield new Promise((f) => setTimeout(f, 100)); const currentTransactionInfo = yield connection.getParsedTransaction(signatureInfo.signature, 'confirmed'); if (!currentTransactionInfo) { // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; // await new Promise((f) => setTimeout(f, 100)); lastSignature = signatureInfo.signature; yield new Promise((f) => setTimeout(f, 100)); continue; } if (!currentTransactionInfo.meta) { // lastSignature = signatureInfo.signature; // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; lastSignature = signatureInfo.signature; yield new Promise((f) => setTimeout(f, 100)); continue; } const instructionLog = currentTransactionInfo.meta.logMessages[1] != "Program ComputeBudget111111111111111111111111111111 success" ? currentTransactionInfo.meta.logMessages[1] : currentTransactionInfo.meta.logMessages[3]; if (transactionParsers_1.TRANSACTION_ACCOUNT_PARSERS[instructionLog]) { try { onAccountsChange(yield transactionParsers_1.TRANSACTION_ACCOUNT_PARSERS[instructionLog]({ transaction: currentTransactionInfo, programId: programId, connection: connection, }), instructionLog); lastSignature = signatureInfo.signature; } catch (err) { // const latestConfirmedSignatures = await connection.getConfirmedSignaturesForAddress2(programId, { // limit: 1, // }); // if (!latestConfirmedSignatures[0]) continue; lastSignature = signatureInfo.signature; console.log('onAccountsChange Error in ', instructionLog, ': ', err); yield new Promise((f) => setTimeout(f, 100)); continue; } } } } catch (err) { const latestConfirmedSignatures = yield connection.getSignaturesForAddress(programId, { limit: 1, }, 'confirmed'); if (!latestConfirmedSignatures[0]) continue; lastSignature = latestConfirmedSignatures[0].signature; console.log('onAccountsChange Error: ', err); } yield new Promise((f) => setTimeout(f, timeoutOfCalls || 5000)); } }); exports.onAccountsChange = onAccountsChange;