@payburner/keyburner-sidewinder-core
Version:
Core library for Keyburner Sidewinder
121 lines • 7.85 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateTokenTransactionProcessor = void 0;
const npm_1 = require("@payburner/keyburner-sidewinder-model/dist/npm");
const TransactionProcessorBase_1 = require("./TransactionProcessorBase");
const CommonErrorCodes_1 = require("../model/CommonErrorCodes");
class CreateTokenTransactionProcessor extends TransactionProcessorBase_1.TransactionProcessorBase {
constructor(globalAccountService, tokenService) {
super(globalAccountService, tokenService);
}
doProcess(decodedTransaction) {
const self = this;
return new Promise((resolve, reject) => {
console.log('Processing create token: ' + decodedTransaction.id);
if (typeof decodedTransaction.payload.initial_amount !== 'undefined' &&
typeof decodedTransaction.payload.initial_amount !== 'number') {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MALFORMED_INITIAL_AMOUNT);
return;
}
const createTokenTransaction = decodedTransaction.payload;
console.log('Create Token Request:' + JSON.stringify(createTokenTransaction, null, 2));
self.getTokenService().getToken(createTokenTransaction.environment, createTokenTransaction.token_symbol)
.then((token) => {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_ALREADY_EXISTS);
}).catch((error) => {
if (typeof createTokenTransaction.maximum_transfer_amount !== 'undefined' &&
typeof createTokenTransaction.minimum_transfer_amount !== 'undefined' &&
(createTokenTransaction.minimum_transfer_amount) > (createTokenTransaction.maximum_transfer_amount)) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MINIMUM_TRANSFER_AMOUNTER_GREATER_THAN_MAXIMUM_TRANSFER_AMOUNT);
return;
}
if (typeof createTokenTransaction.minimum_transfer_amount !== 'undefined' && (createTokenTransaction.minimum_transfer_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MINIMUM_TRANSFER_AMOUNT_LESS_THAN_OR_EQUAL_ZERO);
return;
}
if (typeof createTokenTransaction.maximum_transfer_amount !== 'undefined' && (createTokenTransaction.maximum_transfer_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MAXIMUM_TRANSFER_AMOUNT_LESS_THAN_OR_EQUAL_ZERO);
return;
}
if (typeof createTokenTransaction.initial_amount === 'undefined' && typeof createTokenTransaction.underlying_address === 'undefined') {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_NO_INITIAL_AMOUNT_AND_NO_UNDERLYING);
return;
}
if (typeof createTokenTransaction.initial_amount !== 'undefined' && typeof createTokenTransaction.underlying_address !== 'undefined') {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_ON_OFF_RAMP_FEES_BUT_NO_UNDERLYING);
return;
}
if (typeof createTokenTransaction.initial_amount !== 'undefined' && (createTokenTransaction.initial_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INITIAL_LESS_THAN_OR_EQUAL_TO_ZERO);
return;
}
if (createTokenTransaction.decimal_precision < 0 || createTokenTransaction.decimal_precision > 10) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INVALID_DECIMAL_PRECISION);
return;
}
if ((createTokenTransaction.transaction_fee) < 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INVALID_TRANSACTION_FEE);
return;
}
console.log('The token ' + createTokenTransaction.token_symbol + ' does not exist. Creating.');
const token = {
token_symbol: createTokenTransaction.token_symbol,
environment: createTokenTransaction.environment,
token_issuer_address: decodedTransaction.address,
initial_amount: this.formatInt(createTokenTransaction.initial_amount),
transaction_fee: this.formatInt(createTokenTransaction.transaction_fee),
allow_transfers_between_accounts: createTokenTransaction.allow_transfers_between_accounts,
is_permissioned: createTokenTransaction.is_permissioned,
maximum_balance: this.formatInt(createTokenTransaction.maximum_balance),
minimum_transfer_amount: this.formatInt(createTokenTransaction.minimum_transfer_amount),
maximum_transfer_amount: this.formatInt(createTokenTransaction.maximum_transfer_amount),
frozen: createTokenTransaction.frozen,
decimal_precision: (createTokenTransaction.decimal_precision),
underlying_currency: createTokenTransaction.underlying_currency,
underlying_account_id: createTokenTransaction.underlying_address,
underlying_currency_ratio: createTokenTransaction.underlying_address
};
self.getTokenService().createToken(token).then((createResponse) => __awaiter(this, void 0, void 0, function* () {
let ownerAccount = {
token_account_id: npm_1.AccountUtils.calculateTokenAccountId(token.environment, token.token_symbol, decodedTransaction.address),
token_symbol: token.token_symbol,
account_owner_address: decodedTransaction.address,
environment: token.environment,
sequence: 0,
available_balance: createTokenTransaction.initial_amount,
total_balance: createTokenTransaction.initial_amount,
locked_balance: 0,
frozen: false
};
try {
yield this.getTokenService().createTokenAccount(ownerAccount);
resolve({ status: 200, data: createResponse });
}
catch (error) {
resolve({ status: 500, error: 'Problem creating receiver account.' });
return;
}
})).catch((error) => {
resolve({ status: 500, error });
});
});
});
}
formatInt(input) {
return typeof input !== 'undefined' ? parseInt((input).toFixed(0)) : undefined;
}
getTransactionType() {
return npm_1.TransactionTypes.CreateToken;
}
}
exports.CreateTokenTransactionProcessor = CreateTokenTransactionProcessor;
//# sourceMappingURL=CreateTokenTransactionProcessor.js.map