@rsksmart/rif-storage-pinning
Version:
Application for providing your storage space to other to use in exchange of RIF Tokens
98 lines (97 loc) • 5.4 kB
JavaScript
;
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const logger_1 = require("../../logger");
const utils_1 = require("../../utils");
const agreement_model_1 = __importDefault(require("../../models/agreement.model"));
const errors_1 = require("../../errors");
const definitions_1 = require("../../definitions");
const communication_1 = require("../../communication");
const logger = logger_1.loggingFactory('processor:cache:agreement');
const handlers = {
NewAgreement(event, options) {
return __awaiter(this, void 0, void 0, function* () {
const newAgreement = event.payload;
const [agreement] = yield agreement_model_1.default.upsert(newAgreement); // Agreement might already exist
logger.info(`Created new Agreement with ID ${newAgreement.agreementReference} for offer ${newAgreement.offerId}`);
if (options.manager) {
yield communication_1.broadcast(definitions_1.MessageCodesEnum.I_AGREEMENT_NEW, { agreementReference: newAgreement.agreementReference });
yield options.manager.pin(newAgreement.dataReference, agreement.size, agreement.agreementReference);
}
});
},
AgreementStopped(event, options) {
return __awaiter(this, void 0, void 0, function* () {
const { agreementReference } = event.payload;
const agreement = yield agreement_model_1.default.findByPk(agreementReference);
if (!agreement) {
throw new errors_1.EventError(`Agreement with ID ${agreementReference} was not found!`, 'AgreementStopped');
}
agreement.isActive = false;
yield agreement.save();
if (options.manager) {
try {
yield options.manager.unpin(agreement.dataReference);
}
catch (e) {
// We ignore not-pinned errors because the files might be already GCed
if (e.code !== errors_1.NotPinnedError.code) {
throw e;
}
}
yield communication_1.broadcast(definitions_1.MessageCodesEnum.I_AGREEMENT_STOPPED, { agreementReference: agreement.agreementReference });
}
logger.info(`Agreement ${agreementReference} was stopped.`);
});
},
AgreementFundsDeposited(event) {
return __awaiter(this, void 0, void 0, function* () {
const { agreementReference: id, availableFunds } = event.payload;
const agreement = yield agreement_model_1.default.findByPk(id);
if (!agreement) {
throw new errors_1.EventError(`Agreement with ID ${id} was not found!`, 'AgreementFundsDeposited');
}
agreement.availableFunds = new bignumber_js_1.default(availableFunds);
yield agreement.save();
logger.info(`Agreement ${id} was topped up with ${availableFunds}.`);
});
},
AgreementFundsWithdrawn(event) {
return __awaiter(this, void 0, void 0, function* () {
const { agreementReference: id, availableFunds } = event.payload;
const agreement = yield agreement_model_1.default.findByPk(id);
if (!agreement) {
throw new errors_1.EventError(`Agreement with ID ${id} was not found!`, 'AgreementFundsWithdrawn');
}
agreement.availableFunds = new bignumber_js_1.default(availableFunds);
yield agreement.save();
logger.info(`${availableFunds} was withdrawn from funds of Agreement ${id}.`);
});
},
AgreementFundsPayout(event) {
return __awaiter(this, void 0, void 0, function* () {
const { agreementReference: id, availableFunds, lastPayout } = event.payload;
const agreement = yield agreement_model_1.default.findByPk(id);
if (!agreement) {
throw new errors_1.EventError(`Agreement with ID ${id} was not found!`, 'AgreementFundsWithdrawn');
}
agreement.lastPayout = lastPayout;
agreement.availableFunds = new bignumber_js_1.default(availableFunds);
yield agreement.save();
logger.info(`${availableFunds} was payed out from funds of Agreement ${id}.`);
});
}
};
exports.default = utils_1.buildHandler(handlers, ['NewAgreement', 'AgreementFundsDeposited', 'AgreementFundsWithdrawn', 'AgreementFundsPayout', 'AgreementStopped']);