@cenoa/waas-js-sdk
Version:
Official Cenoa Wallet as a Service SDK
459 lines (458 loc) • 22.9 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());
});
};
import Types from '../types';
import Errors from '../errors';
import { apiHelper } from '../api';
import SignManager from '../wallet-manager/sign-manager/SignManager';
import { WalletManager } from '../sdk';
import { getWebUiOptions } from './web-ui-options';
var TransactionManager;
(function (TransactionManager) {
function transfer(payload) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (!((_a = payload === null || payload === void 0 ? void 0 : payload.fundingWallet) === null || _a === void 0 ? void 0 : _a.privateKey)) {
throw new Errors.InvalidPrivateKeyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoCurrency)) {
throw new Errors.InvalidCryptoCurrencyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoAmount)) {
throw new Errors.InvalidCryptoAmountError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.network)) {
throw new Errors.InvalidNetworkError();
}
// get the sign credentials from the server
const signCredentialsResp = yield apiHelper.getSignCredentialsForTransfer(payload);
// sign the transactions
const signedTransactions = yield SignManager.signTransactions(payload.fundingWallet, signCredentialsResp.data);
// send the signed transactions to the server
const transferStatusResp = yield apiHelper.transfer({
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
});
return transferStatusResp.data;
});
}
function transferToClientWallet(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.toCenoaUserId)) {
throw new Errors.InvalidCenoaUserIdError();
}
const partnerWalletResp = yield WalletManager.getPartnerWallet();
if (partnerWalletResp.address.toLocaleLowerCase() !==
payload.fundingWallet.address.toLocaleLowerCase()) {
throw new Errors.InvalidSenderWalletAddressError();
}
return transfer(payload);
});
}
TransactionManager.transferToClientWallet = transferToClientWallet;
function transferFromClientWallet(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.fromCenoaUserId)) {
throw new Errors.InvalidCenoaUserIdError();
}
const userWalletResp = yield WalletManager.getUserWallet({
cenoaUserId: payload.fromCenoaUserId,
});
if (userWalletResp.address.toLocaleLowerCase() !==
payload.fundingWallet.address.toLocaleLowerCase()) {
throw new Errors.InvalidSenderWalletAddressError();
}
return transfer(payload);
});
}
TransactionManager.transferFromClientWallet = transferFromClientWallet;
/**
* @deprecated This method is deprecated. For user transactions, use {@link getTransaction} with the params `getTransaction({txId, type})`.
* For partner transactions, use {@link getPartnerTransaction} with the params `getPartnerTransaction({txId, type})`.
* This method may be removed in a future release.
*/
function get(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
// get transaction details from the server
const transferStatusResp = yield apiHelper.getTransferStatus({
txId: payload.txId,
});
return transferStatusResp.data;
});
}
TransactionManager.get = get;
function initiateTransaction(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) {
throw new Errors.InvalidCenoaUserIdError();
}
let initiateTransactionResponse;
if (payload.type === Types.TransactionType.BUY) {
initiateTransactionResponse = yield apiHelper.initiateDepositTransaction({
cenoaUserId: payload.cenoaUserId,
});
}
else if (payload.type === Types.TransactionType.SELL) {
initiateTransactionResponse = yield apiHelper.initiateWithdrawTransaction({
cenoaUserId: payload.cenoaUserId,
});
}
else {
throw new Errors.InvalidTransactionTypeError();
}
const webUiOptions = getWebUiOptions();
if (!webUiOptions) {
return initiateTransactionResponse;
}
// append webUiOptions to the URL
const url = new URL(initiateTransactionResponse.url);
Object.keys(webUiOptions).forEach(key => url.searchParams.append(key, webUiOptions[key]));
return Object.assign(Object.assign({}, initiateTransactionResponse), { url: url.toString() });
});
}
TransactionManager.initiateTransaction = initiateTransaction;
function signAndCompleteTransaction(payload) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) {
throw new Errors.InvalidCenoaUserIdError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.type)) {
throw new Errors.InvalidTransactionTypeError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
if (!((_a = payload === null || payload === void 0 ? void 0 : payload.fundingWallet) === null || _a === void 0 ? void 0 : _a.privateKey)) {
throw new Errors.InvalidPrivateKeyError();
}
// check if the funding wallet belongs to the right user
const userWalletResp = yield WalletManager.getUserWallet({
cenoaUserId: payload.cenoaUserId,
});
if (userWalletResp.address.toLocaleLowerCase() !==
payload.fundingWallet.address.toLocaleLowerCase()) {
throw new Errors.InvalidSenderWalletAddressError();
}
// get the sign credentials from the server
let signCredentialsResp;
if (payload.type === Types.TransactionType.BUY) {
signCredentialsResp = yield apiHelper.getUserDepositTransaction({
txId: payload.txId,
});
}
else if (payload.type === Types.TransactionType.SELL) {
signCredentialsResp = yield apiHelper.getUserWithdrawTransaction({
txId: payload.txId,
});
}
else {
throw new Errors.InvalidTransactionTypeError();
}
if (signCredentialsResp.data.status === Types.TransactionStatus.FAILED) {
throw new Errors.AttemptedToSignFailedTransactionError();
}
if (signCredentialsResp.data.status === Types.TransactionStatus.COMPLETED) {
throw new Errors.AttemptedToSignCompletedTransactionError();
}
if (signCredentialsResp.data.status === Types.TransactionStatus.IN_PROGRESS) {
throw new Errors.AttemptedToSignInProgressTransactionError();
}
if (signCredentialsResp.data.status !== Types.TransactionStatus.UNSIGNED) {
throw new Errors.InvalidTransactionStatusError();
}
if (!signCredentialsResp.data.signs ||
signCredentialsResp.data.signs.length === 0) {
throw new Errors.InvalidSignsFieldError();
}
// sign the transactions
const signedTransactions = yield SignManager.signTransactions(payload.fundingWallet, signCredentialsResp.data);
// send the signed transactions to the server
if (payload.type === Types.TransactionType.BUY) {
return apiHelper
.patchDepositWithSignature({
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
})
.then(resp => resp.data);
}
else if (payload.type === Types.TransactionType.SELL) {
return apiHelper
.patchWithdrawWithSignature({
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
})
.then(resp => resp.data);
}
else {
throw new Errors.InvalidTransactionTypeError();
}
});
}
TransactionManager.signAndCompleteTransaction = signAndCompleteTransaction;
function isValidAccountType(accountType) {
return accountType === 'USER' || accountType === 'PARTNER';
}
function moveFundsToYieldAccount(accountType, payload) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
if (!isValidAccountType(accountType)) {
throw new Errors.InvalidAccountTypeError();
}
if (!((_a = payload === null || payload === void 0 ? void 0 : payload.fundingWallet) === null || _a === void 0 ? void 0 : _a.privateKey)) {
throw new Errors.InvalidPrivateKeyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoCurrency)) {
throw new Errors.InvalidCryptoCurrencyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoAmount)) {
throw new Errors.InvalidCryptoAmountError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.network)) {
throw new Errors.InvalidNetworkError();
}
// get the sign credentials from the server
let signCredentialsResp;
if (accountType === 'PARTNER') {
signCredentialsResp = yield apiHelper.getSignCredentialsForPartnerDeposit(payload);
}
else {
signCredentialsResp = yield apiHelper.getSignCredentialsForUserDeposit(payload);
}
// sign the transactions
const signedTransactions = yield SignManager.signTransactions(payload.fundingWallet, signCredentialsResp.data);
// send the signed transactions to the server
const patchPayload = {
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
};
if (accountType === 'PARTNER') {
return apiHelper
.patchPartnerDeposit(patchPayload)
.then(resp => resp.data);
}
return apiHelper
.patchDepositWithSignature(patchPayload)
.then(resp => resp.data);
});
}
function moveFundsToActiveYieldAccount(wallet) {
return __awaiter(this, void 0, void 0, function* () {
// get the sign credentials from the server
const signCredentialsResp = yield apiHelper.getSignCredentialsForReinvest();
// sign the transactions
const signedTransactions = yield SignManager.signTransactions(wallet, signCredentialsResp.data);
// send the signed transactions to the server
const patchPayload = {
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
};
return apiHelper
.patchReinvestWithSignature(patchPayload)
.then(resp => resp.data);
});
}
TransactionManager.moveFundsToActiveYieldAccount = moveFundsToActiveYieldAccount;
function userMoveFundsToYieldAccount(payload) {
return __awaiter(this, void 0, void 0, function* () {
return moveFundsToYieldAccount('USER', payload);
});
}
TransactionManager.userMoveFundsToYieldAccount = userMoveFundsToYieldAccount;
function partnerMoveFundsToYieldAccount(payload) {
return __awaiter(this, void 0, void 0, function* () {
return moveFundsToYieldAccount('PARTNER', payload);
});
}
TransactionManager.partnerMoveFundsToYieldAccount = partnerMoveFundsToYieldAccount;
function getPartnerMoveFundsToYieldAccountTransactionDetails(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
// get transaction details from the server
const depositTransactionResp = yield apiHelper.getPartnerDepositTransaction({
txId: payload.txId,
});
return depositTransactionResp.data;
});
}
TransactionManager.getPartnerMoveFundsToYieldAccountTransactionDetails = getPartnerMoveFundsToYieldAccountTransactionDetails;
function moveFundsFromYieldAccountToMainAccount(accountType, payload) {
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {
if (!isValidAccountType(accountType)) {
throw new Errors.InvalidAccountTypeError();
}
if (!((_a = payload === null || payload === void 0 ? void 0 : payload.fundingWallet) === null || _a === void 0 ? void 0 : _a.privateKey)) {
throw new Errors.InvalidPrivateKeyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoCurrency)) {
throw new Errors.InvalidCryptoCurrencyError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.cryptoAmount)) {
throw new Errors.InvalidCryptoAmountError();
}
if (!(payload === null || payload === void 0 ? void 0 : payload.network)) {
throw new Errors.InvalidNetworkError();
}
// if the toWalletAddress is not provided, use the funding wallet address
if (!(payload === null || payload === void 0 ? void 0 : payload.toWalletAddress)) {
payload.toWalletAddress = (_b = payload === null || payload === void 0 ? void 0 : payload.fundingWallet) === null || _b === void 0 ? void 0 : _b.address;
}
// get the sign credentials from the server
let signCredentialsResp;
if (accountType === 'PARTNER') {
signCredentialsResp =
yield apiHelper.getSignCredentialsForPartnerWithdraw(payload);
}
else {
signCredentialsResp = yield apiHelper.getSignCredentialsForUserWithdraw(payload);
}
// sign the transactions
const signedTransactions = yield SignManager.signTransactions(payload.fundingWallet, signCredentialsResp.data);
// send the signed transactions to the server
const patchPayload = {
id: signCredentialsResp.data.id,
signedTransactionsPayload: {
signedTransactions,
},
};
if (accountType === 'PARTNER') {
return apiHelper
.patchPartnerWithdraw(patchPayload)
.then(resp => resp.data);
}
return apiHelper
.patchWithdrawWithSignature(patchPayload)
.then(resp => resp.data);
});
}
function userMoveFundsFromYieldAccountToMainAccount(payload) {
return __awaiter(this, void 0, void 0, function* () {
return moveFundsFromYieldAccountToMainAccount('USER', payload);
});
}
TransactionManager.userMoveFundsFromYieldAccountToMainAccount = userMoveFundsFromYieldAccountToMainAccount;
function partnerMoveFundsFromYieldAccountToMainAccount(payload) {
return __awaiter(this, void 0, void 0, function* () {
return moveFundsFromYieldAccountToMainAccount('PARTNER', payload);
});
}
TransactionManager.partnerMoveFundsFromYieldAccountToMainAccount = partnerMoveFundsFromYieldAccountToMainAccount;
function getPartnerMoveFundsFromYieldAccountToMainAccountTransactionDetails(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
// get transaction details from the server
const withdrawTransactionResp = yield apiHelper.getPartnerWithdrawTransaction({
txId: payload.txId,
});
return withdrawTransactionResp.data;
});
}
TransactionManager.getPartnerMoveFundsFromYieldAccountToMainAccountTransactionDetails = getPartnerMoveFundsFromYieldAccountToMainAccountTransactionDetails;
function getPartnerTransactions(payload) {
return __awaiter(this, void 0, void 0, function* () {
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.BUY) {
return apiHelper.getPartnerDepositTransactions();
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.SELL) {
return apiHelper.getPartnerWithdrawTransactions();
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.TRANSFER) {
return apiHelper.getUserTransferTransactions(payload);
}
throw new Errors.InvalidTransactionTypeError();
});
}
TransactionManager.getPartnerTransactions = getPartnerTransactions;
function getPartnerTransaction(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.BUY) {
return apiHelper
.getPartnerDepositTransaction(payload)
.then(resp => resp.data);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.SELL) {
return apiHelper
.getPartnerWithdrawTransaction(payload)
.then(resp => resp.data);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.TRANSFER) {
return apiHelper
.getTransferStatus({
txId: payload.txId,
})
.then(resp => resp.data);
}
throw new Errors.InvalidTransactionTypeError();
});
}
TransactionManager.getPartnerTransaction = getPartnerTransaction;
function getTransactions(payload) {
return __awaiter(this, void 0, void 0, function* () {
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.BUY) {
return apiHelper.getUserDepositTransactions(payload);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.SELL) {
return apiHelper.getUserWithdrawTransactions(payload);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.TRANSFER) {
return apiHelper.getUserTransferTransactions(payload);
}
throw new Errors.InvalidTransactionTypeError();
});
}
TransactionManager.getTransactions = getTransactions;
function getTransaction(payload) {
return __awaiter(this, void 0, void 0, function* () {
if (!(payload === null || payload === void 0 ? void 0 : payload.txId)) {
throw new Errors.InvalidTransactionIdError();
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.BUY) {
return apiHelper
.getUserDepositTransaction(payload)
.then(resp => resp.data);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.SELL) {
return apiHelper
.getUserDepositTransaction(payload)
.then(resp => resp.data);
}
if ((payload === null || payload === void 0 ? void 0 : payload.type) === Types.TransactionType.TRANSFER) {
return apiHelper
.getTransferStatus({
txId: payload.txId,
})
.then(resp => resp.data);
}
throw new Errors.InvalidTransactionTypeError();
});
}
TransactionManager.getTransaction = getTransaction;
})(TransactionManager || (TransactionManager = {}));
export default TransactionManager;