@ethersphere/bee-js
Version:
Javascript client for Bee
117 lines • 3.34 kB
JavaScript
import { Types } from 'cafe-utility';
import { http } from "../../utils/http.js";
import { asNumberString } from "../../utils/type.js";
import { TransactionId } from "../../utils/typed-bytes.js";
const transactionsEndpoint = 'transactions';
/**
* Get list of all pending transactions
*
* @param requestOptions Options for making requests
*/
export async function getAllTransactions(requestOptions) {
const response = await http(requestOptions, {
url: transactionsEndpoint,
responseType: 'json'
});
const body = Types.asObject(response.data, {
name: 'response.data'
});
const pendingTransactions = Types.asArray(body.pendingTransactions, {
name: 'pendingTransactions'
});
return pendingTransactions.map(toTransaction);
}
/**
* Get information for specific pending transactions
*
* @param requestOptions Options for making requests
* @param transactionHash Hash of the transaction
*/
export async function getTransaction(requestOptions, transactionHash) {
const response = await http(requestOptions, {
url: `${transactionsEndpoint}/${transactionHash}`,
responseType: 'json'
});
const body = Types.asObject(response.data, {
name: 'response.data'
});
return toTransaction(body);
}
function toTransaction(value) {
const object = Types.asObject(value, {
name: 'transaction'
});
return {
transactionHash: new TransactionId(Types.asString(object.transactionHash, {
name: 'transactionHash'
})),
to: Types.asString(object.to, {
name: 'to'
}),
nonce: Types.asNumber(object.nonce, {
name: 'nonce'
}),
gasPrice: asNumberString(object.gasPrice, {
name: 'gasPrice'
}),
gasLimit: Types.asNumber(object.gasLimit, {
name: 'gasLimit'
}),
data: Types.asString(object.data, {
name: 'data'
}),
created: Types.asString(object.created, {
name: 'created'
}),
description: Types.asString(object.description, {
name: 'description'
}),
value: asNumberString(object.value, {
name: 'value'
})
};
}
/**
* Rebroadcast existing transaction
*
* @param requestOptions Options for making requests
* @param transactionHash Hash of the transaction
*/
export async function rebroadcastTransaction(requestOptions, transactionHash) {
const response = await http(requestOptions, {
method: 'post',
url: `${transactionsEndpoint}/${transactionHash}`,
responseType: 'json'
});
const body = Types.asObject(response.data, {
name: 'response.data'
});
return new TransactionId(Types.asString(body.transactionHash, {
name: 'transactionHash'
}));
}
/**
* Cancel existing transaction
*
* @param requestOptions Options for making requests
* @param transactionHash Hash of the transaction
* @param gasPrice Optional gas price
*/
export async function cancelTransaction(requestOptions, transactionHash, gasPrice) {
const headers = {};
if (gasPrice) {
headers['gas-price'] = gasPrice.toString();
}
const response = await http(requestOptions, {
method: 'delete',
headers,
url: `${transactionsEndpoint}/${transactionHash}`,
responseType: 'json'
});
const body = Types.asObject(response.data, {
name: 'response.data'
});
return new TransactionId(Types.asString(body.transactionHash, {
name: 'transactionHash'
}));
}