UNPKG

@payburner/keyburner-sidewinder-core

Version:
139 lines 8.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CoreProcessor2 = void 0; const npm_1 = require("@payburner/keyburner-core/dist/npm"); const CreateTokenTransactionProcessor_1 = require("./CreateTokenTransactionProcessor"); const UpdateTokenTransactionProcessor_1 = require("./UpdateTokenTransactionProcessor"); const UpdateTokenAccountTransactionProcessor_1 = require("./UpdateTokenAccountTransactionProcessor"); const TransferTransactionProcessor_1 = require("./TransferTransactionProcessor"); const CommonErrorCodes_1 = require("../model/CommonErrorCodes"); const OnRampTransactionProcessor_1 = require("./OnRampTransactionProcessor"); const OffRampRequestTransactionProcessor_1 = require("./OffRampRequestTransactionProcessor"); const OffRampResultTransactionProcessor_1 = require("./OffRampResultTransactionProcessor"); class CoreProcessor2 { constructor(globalAccountService, tokenService, underlyingTransactionService) { this.transactionProcessors = []; this.keyburner = null; this.globalAccountService = null; this.keyburner = new npm_1.KeyBurner(); this.globalAccountService = globalAccountService; this.transactionProcessors.push(new CreateTokenTransactionProcessor_1.CreateTokenTransactionProcessor(globalAccountService, tokenService), new TransferTransactionProcessor_1.TransferTransactionProcessor(globalAccountService, tokenService), new UpdateTokenTransactionProcessor_1.UpdateTokenTransactionProcessor(globalAccountService, tokenService), new UpdateTokenAccountTransactionProcessor_1.UpdateTokenAccountTransactionProcessor(globalAccountService, tokenService), new OnRampTransactionProcessor_1.OnRampTransactionProcessor(globalAccountService, tokenService), new OffRampRequestTransactionProcessor_1.OffRampRequestTransactionProcessor(globalAccountService, tokenService), new OffRampResultTransactionProcessor_1.OffRampResultTransactionProcessor(globalAccountService, tokenService, underlyingTransactionService)); } getTransactionType(decodedTransaction) { return decodedTransaction.payload.transaction_type; } decodeAndProcessTransaction(signedTransaction) { const self = this; return new Promise((resolve, reject) => { const items = []; const decodedTransaction = self.keyburner.decodeTransaction(signedTransaction); self.processTransaction(decodedTransaction) .then((response) => { if (response.serviceResponse.status === 200) { items.push({ Update: { TableName: 'sidewinder_transactions', Key: { environment: decodedTransaction.payload.environment, id: decodedTransaction.id }, UpdateExpression: "set processing_stage = :new_processing_stage, #stat = :status, environment_processing_stage = :environment_processing_stage", ConditionExpression: "processing_stage = :old_processing_stage", ExpressionAttributeNames: { "#stat": "status" }, ExpressionAttributeValues: { ":environment_processing_stage": decodedTransaction.payload.environment + '_' + "PROCESSED", ":new_processing_stage": "PROCESSED", ":old_processing_stage": "PROCESSING", ":status": response.serviceResponse.status } } }); } else { items.push({ Update: { TableName: 'sidewinder_transactions', Key: { environment: decodedTransaction.payload.environment, id: decodedTransaction.id }, UpdateExpression: "set processing_stage = :new_processing_stage, #stat = :status, error_code = :error_code, #err = :error, environment_processing_stage = :environment_processing_stage", ConditionExpression: "processing_stage = :old_processing_stage", ExpressionAttributeNames: { "#stat": "status", "#err": "error" }, ExpressionAttributeValues: { ":environment_processing_stage": decodedTransaction.payload.environment + '_' + "PROCESSED", ":new_processing_stage": "PROCESSED", ":old_processing_stage": "PROCESSING", ":status": response.serviceResponse.status, ":error_code": response.serviceResponse.error_code, ":error": response.serviceResponse.error, } } }); } if (response.serviceResponse.status === 200) { for (var idx in response.transactionItems) { items.push(response.transactionItems[idx]); } } resolve({ serviceResponse: response.serviceResponse, transactionItems: items, decodedTransaction: decodedTransaction }); }).catch((error) => { items.push({ Update: { TableName: 'sidewinder_transactions', Key: { environment: decodedTransaction.payload.environment, id: decodedTransaction.id }, UpdateExpression: "set processing_stage = :new_processing_stage, #stat = :status, error_code = :error_code, #err = :error, environment_processing_stage = :environment_processing_stage", ConditionExpression: "processing_stage = :old_processing_stage", ExpressionAttributeNames: { "#stat": "status", "#err": "error" }, ExpressionAttributeValues: { ":environment_processing_stage": decodedTransaction.payload.environment + '_' + "PROCESSED", ":new_processing_stage": "PROCESSED", ":old_processing_stage": "PROCESSING", ":status": CommonErrorCodes_1.CommonErrorCodes.SYSTEM_PROBLEM_UNKNOWN.status, ":error_code": CommonErrorCodes_1.CommonErrorCodes.SYSTEM_PROBLEM_UNKNOWN.error_code, ":error": CommonErrorCodes_1.CommonErrorCodes.SYSTEM_PROBLEM_UNKNOWN.error, } } }); resolve({ serviceResponse: CommonErrorCodes_1.CommonErrorCodes.SYSTEM_PROBLEM_UNKNOWN, transactionItems: items, decodedTransaction: decodedTransaction }); }); }); } processTransaction(decodedTransaction) { const self = this; return new Promise((resolve, reject) => { if (decodedTransaction.verified) { const transactionType = this.getTransactionType(decodedTransaction); let found = false; self.transactionProcessors.forEach((transactionProcessor) => { if (transactionProcessor.getTransactionType() === transactionType) { found = true; const items = []; transactionProcessor.doProcess(decodedTransaction, items) .then((result) => { resolve({ serviceResponse: result, transactionItems: items }); }).catch((error) => { resolve({ serviceResponse: CommonErrorCodes_1.CommonErrorCodes.SYSTEM_PROBLEM_UNKNOWN, transactionItems: [] }); }); } }); if (!found) { resolve({ serviceResponse: CommonErrorCodes_1.CommonErrorCodes.UNKNOWN_TRANSACTION_TYPE, transactionItems: [] }); } } else { resolve({ serviceResponse: CommonErrorCodes_1.CommonErrorCodes.TRANSACTION_INVALID, transactionItems: [] }); } }); } } exports.CoreProcessor2 = CoreProcessor2; //# sourceMappingURL=CoreProcessor2.js.map