Major api changes

- Remove of confirmation listener in providers
- Random selector has been capped down to 32 characters
- Monero is now semi-supported
This commit is contained in:
2021-01-24 20:00:08 +01:00
parent 881b350252
commit 868a408a9d
11 changed files with 344 additions and 204 deletions

View File

@@ -3,7 +3,7 @@ import { Subscriber } from 'zeromq';
import * as rpc from 'jayson';
import { invoiceManager, logger } from '../../app';
import { IInvoice } from '../../models/invoice/invoice.interface';
import { BackendProvider, IRawTransaction, ITransaction, ITransactionList } from '../backendProvider';
import { BackendProvider, IRawTransaction, ITransaction, ITransactionDetails, ITransactionList } from '../backendProvider';
import { CryptoUnits, PaymentStatus } from '../types';
export class Provider implements BackendProvider {
@@ -29,7 +29,6 @@ export class Provider implements BackendProvider {
});
this.listener();
this.watchConfirmations();
return true;
}
@@ -47,15 +46,34 @@ export class Provider implements BackendProvider {
});
}
async getTransaction(txId: string): Promise<ITransaction> {
async getTransaction(txId: string, context?: IInvoice): Promise<ITransaction> {
return new Promise<ITransaction>((resolve, reject) => {
this.rpcClient.request('gettransaction', [txId], (err, message) => {
if (err) {
reject(err);
return;
}
// Calculate received funds
const details: ITransactionDetails[] = message.result.details;
let amount = 0;
details.forEach(detail => {
if (detail.category === 'receive' && detail.address === context.receiveAddress) {
amount += detail.amount;
}
})
const ret: ITransaction = {
id: message.result.txid,
amount,
blockhash: message.result.blockhash,
confirmations: message.result.confirmations,
time: message.result.time,
fee: message.result.fee
}
resolve(message.result);
resolve(ret);
});
});
}
@@ -116,18 +134,6 @@ export class Provider implements BackendProvider {
}
}
async watchConfirmations() {
setInterval(() => {
invoiceManager.getUnconfirmedTransactions().filter(item => { return item.paymentMethod === CryptoUnits.LITECOIN }).forEach(async invoice => {
if (invoice.transcationHash.length === 0) return;
const transcation = invoice.transcationHash;
const tx = await this.getTransaction(transcation);
invoiceManager.setConfirmationCount(invoice, tx.confirmations);
});
}, 2_000);
}
async validateInvoice(invoice: IInvoice) {
if (invoice.status === PaymentStatus.DONE || invoice.status === PaymentStatus.CANCELLED) return;