@payburner/keyburner-sidewinder-core
Version:
Core library for Keyburner Sidewinder
139 lines • 8.72 kB
JavaScript
"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