blockfrost-js-ratelimited
Version:
A JavaScript/TypeScript SDK for interacting with the https://blockfrost.io API
124 lines (123 loc) • 4.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addressesUtxosAll = exports.addressesUtxos = exports.addressesTransactionsAll = exports.addressesTransactions = exports.addressesTotal = exports.addresses = void 0;
const utils_1 = require("../../../utils");
const config_1 = require("../../../config");
async function addresses(address) {
return new Promise((resolve, reject) => {
this.axiosInstance(`${this.apiUrl}/addresses/${address}`)
.then(resp => {
resolve(resp.data);
})
.catch(err => reject(utils_1.handleError(err)));
});
}
exports.addresses = addresses;
async function addressesTotal(address) {
return new Promise((resolve, reject) => {
this.axiosInstance(`${this.apiUrl}/addresses/${address}/total`)
.then(resp => {
resolve(resp.data);
})
.catch(err => reject(utils_1.handleError(err)));
});
}
exports.addressesTotal = addressesTotal;
async function addressesTransactions(address, pagination, additionalOptions) {
const additionalParams = utils_1.getAdditionalParams(additionalOptions);
const paginationOptions = utils_1.getPaginationOptions(pagination);
return new Promise((resolve, reject) => {
this.axiosInstance(`${this.apiUrl}/addresses/${address}/transactions`, {
params: {
page: paginationOptions.page,
count: paginationOptions.count,
order: paginationOptions.order,
from: additionalParams.from,
to: additionalParams.to,
},
})
.then(resp => {
resolve(resp.data);
})
.catch(err => {
if (err && err.response && err.response.data.status_code === 404) {
resolve([]);
}
reject(utils_1.handleError(err));
});
});
}
exports.addressesTransactions = addressesTransactions;
async function addressesTransactionsAll(address, allMethodOptions, additionalOptions) {
let page = 1;
const count = config_1.DEFAULT_PAGINATION_PAGE_ITEMS_COUNT;
const res = [];
const options = utils_1.getAllMethodOptions(allMethodOptions);
const getPromiseBundle = () => {
const promises = [...Array(options.batchSize).keys()].map(i => this.addressesTransactions(address, {
page: page + i,
count,
order: options.order,
}, {
from: additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.from,
to: additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.to,
}));
page += options.batchSize;
return promises;
};
// eslint-disable-next-line no-constant-condition
while (true) {
const promiseBundle = getPromiseBundle();
const pages = await Promise.all(promiseBundle);
for (const page of pages) {
res.push(...page);
if (page.length < config_1.DEFAULT_PAGINATION_PAGE_ITEMS_COUNT) {
return res;
}
}
}
}
exports.addressesTransactionsAll = addressesTransactionsAll;
async function addressesUtxos(address, pagination) {
const paginationOptions = utils_1.getPaginationOptions(pagination);
return new Promise((resolve, reject) => {
this.axiosInstance(`${this.apiUrl}/addresses/${address}/utxos`, {
params: {
page: paginationOptions.page,
count: paginationOptions.count,
order: paginationOptions.order,
},
})
.then(resp => {
resolve(resp.data);
})
.catch(err => reject(utils_1.handleError(err)));
});
}
exports.addressesUtxos = addressesUtxos;
async function addressesUtxosAll(address, allMethodOptions) {
let page = 1;
const res = [];
const options = utils_1.getAllMethodOptions(allMethodOptions);
const getPromiseBundle = () => {
const promises = [...Array(options.batchSize).keys()].map(i => this.addressesUtxos(address, {
page: page + i,
count: config_1.DEFAULT_PAGINATION_PAGE_ITEMS_COUNT,
order: options.order,
}));
page += options.batchSize || config_1.DEFAULT_BATCH_SIZE;
return promises;
};
// eslint-disable-next-line no-constant-condition
while (true) {
const promiseBundle = getPromiseBundle();
const pages = await Promise.all(promiseBundle);
for (const page of pages) {
res.push(...page);
if (page.length < config_1.DEFAULT_PAGINATION_PAGE_ITEMS_COUNT) {
return res;
}
}
}
}
exports.addressesUtxosAll = addressesUtxosAll;