Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 19x 19x 19x 19x 19x | import {
Cardano,
ProviderError,
ProviderFailure,
Serialization,
SubmitTxArgs,
TxSubmitProvider
} from '@cardano-sdk/core';
import { Logger } from 'ts-log';
import { hexStringToBuffer } from '@cardano-sdk/util';
import { mapCardanoTxSubmitError } from './cardanoTxSubmitErrorMapper';
import axios, { AxiosAdapter, AxiosInstance } from 'axios';
export type TxSubmitApiProviderProperties = {
baseUrl: URL;
path?: string;
};
export type TxSubmitApiProviderDependencies = {
logger: Logger;
adapter?: AxiosAdapter;
};
export class TxSubmitApiProvider implements TxSubmitProvider {
#axios: AxiosInstance;
#healthStatus = true;
#logger: Logger;
#path: string;
#adapter?: AxiosAdapter;
constructor(
{ baseUrl, path = '/api/submit/tx' }: TxSubmitApiProviderProperties,
{ logger, adapter }: TxSubmitApiProviderDependencies
) {
this.#axios = axios.create({ baseURL: baseUrl.origin });
this.#logger = logger;
this.#path = path;
this.#adapter = adapter;
}
async submitTx({ signedTransaction }: SubmitTxArgs) {
let txId: Cardano.TransactionId | undefined;
try {
txId = Serialization.Transaction.fromCbor(signedTransaction).getId();
this.#logger.debug(`Submitting tx ${txId} ...`);
await this.#axios({
adapter: this.#adapter,
data: hexStringToBuffer(signedTransaction),
headers: { 'Content-Type': 'application/cbor' },
method: 'post',
url: this.#path
});
this.#healthStatus = true;
this.#logger.debug(`Tx ${txId} submitted`);
} catch (error) {
this.#healthStatus = false;
this.#logger.error(`Tx ${txId} submission error`);
this.#logger.error(error);
Iif (axios.isAxiosError(error) && error.response) {
const { data, status } = error.response;
Iif (typeof status === 'number' && status >= 400 && status < 500) this.#healthStatus = true;
throw new ProviderError(
ProviderFailure.BadRequest,
mapCardanoTxSubmitError(data),
typeof data === 'string' ? data : JSON.stringify(data)
);
}
throw new ProviderError(ProviderFailure.Unknown, error, 'submitting tx');
}
}
healthCheck() {
return Promise.resolve({ ok: this.#healthStatus });
}
}
|