@helium/http
Version:
HTTP library for interacting with the Helium blockchain API
292 lines • 13 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.rewardSumListFixture = exports.rewardSumFixture = exports.rewardsFixture = exports.validatorFixture = void 0;
const nock_1 = __importDefault(require("nock"));
const address_1 = __importStar(require("@helium/address"));
const Client_1 = __importDefault(require("../../Client"));
// eslint-disable-next-line import/prefer-default-export
const validatorFixture = (params = {}) => (Object.assign({ version_heartbeat: 10000008, status: { online: 'online', listen_addrs: ['/ip4/11.111.111.111/tcp/2154'], height: 923303 }, stake_status: 'staked', stake: 1000000000000, penalty: 1.123, penalties: [
{ type: 'performance', height: 921773, amount: 0.099 },
{ type: 'tenure', height: 921622, amount: 0.5 },
], owner: 'fake-owner-address', name: 'fake-name', last_heartbeat: 923338, block_added: 123456, block: 923409, address: 'fake-validator-address' }, params));
exports.validatorFixture = validatorFixture;
const rewardsFixture = () => ({
data: [
{
timestamp: '2020-12-17T19:23:30.000000Z',
hash: 'mock-hash',
gateway: 'mock-gateway',
block: 681810,
amount: 206665349,
account: 'mock-account',
},
{
timestamp: '2020-12-17T17:31:36.000000Z',
hash: 'mock-hash',
gateway: 'mock-gateway',
block: 681693,
amount: 240226051,
account: 'mock-account',
},
{
timestamp: '2020-12-17T16:51:34.000000Z',
hash: 'mock-hash',
gateway: 'mock-gateway',
block: 681645,
amount: 6454681,
account: 'mock-account',
},
],
});
exports.rewardsFixture = rewardsFixture;
const rewardSumFixture = () => ({
meta: {
min_time: '2020-12-17T00:00:00Z',
max_time: '2020-12-18T00:00:00Z',
},
data: {
total: 13.17717245,
sum: 1317717245,
stddev: 1.10445133,
min: 0,
median: 1.98726309,
max: 2,
avg: 1.4641302722222223,
},
});
exports.rewardSumFixture = rewardSumFixture;
const rewardSumListFixture = () => ({
meta: {
min_time: '2020-12-17T00:00:00Z',
max_time: '2020-12-18T00:00:00Z',
},
data: [
{
total: 13.17717245,
sum: 1317717245,
stddev: 1.10445133,
min: 0,
median: 1.98726309,
max: 2,
avg: 1.4641302722222223,
},
],
});
exports.rewardSumListFixture = rewardSumListFixture;
address_1.default.fromB58 = jest.fn(() => new address_1.default(0, address_1.NetTypes.MAINNET, 0, new Uint8Array()));
describe('get', () => {
(0, nock_1.default)('https://api.helium.io').get('/v1/validators/fake-validator-address').reply(200, {
data: (0, exports.validatorFixture)(),
});
it('retrieves a validator by address', async () => {
const client = new Client_1.default();
const validator = await client.validators.get('fake-validator-address');
expect(validator.name).toBe('fake-name');
expect(validator.owner).toBe('fake-owner-address');
});
});
describe('list', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators')
.reply(200, {
data: [(0, exports.validatorFixture)({ name: 'validator-1' }), (0, exports.validatorFixture)({ name: 'validator-2' })],
});
it('lists validators', async () => {
var _a, _b;
const client = new Client_1.default();
const list = await client.validators.list();
const validators = await list.take(2);
expect(validators[0].name).toBe('validator-1');
expect((_a = validators[0].status) === null || _a === void 0 ? void 0 : _a.listenAddrs[0]).toBe('/ip4/11.111.111.111/tcp/2154');
expect(validators[1].name).toBe('validator-2');
expect((_b = validators[1].status) === null || _b === void 0 ? void 0 : _b.listenAddrs[0]).toBe('/ip4/11.111.111.111/tcp/2154');
});
});
describe('list from account', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/accounts/fake-address/validators')
.reply(200, {
data: [(0, exports.validatorFixture)({ name: 'validator-1' }), (0, exports.validatorFixture)({ name: 'validator-2' })],
});
it('lists validators from an account', async () => {
const client = new Client_1.default();
const list = await client.account('fake-address').validators.list();
const validators = await list.take(2);
expect(validators[0].name).toBe('validator-1');
expect(validators[1].name).toBe('validator-2');
});
});
describe('listJson', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators')
.reply(200, {
data: [
(0, exports.validatorFixture)({ name: 'validator-1' }),
(0, exports.validatorFixture)({ name: 'validator-2' }),
(0, exports.validatorFixture)({ name: 'validator-3' }),
(0, exports.validatorFixture)({ name: 'validator-4' }),
],
});
it('lists validators', async () => {
const client = new Client_1.default();
const list = await client.validators.list();
const validators = await list.takeJSON(2);
expect(validators[0].name).toBe('validator-1');
expect(validators[1].name).toBe('validator-2');
const validators2 = await list.takeJSON(2);
expect(validators2[0].name).toBe('validator-3');
expect(validators2[1].name).toBe('validator-4');
});
});
describe('search by validator name', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/name')
.query({ search: 'chicken-burrito' })
.reply(200, {
data: [
(0, exports.validatorFixture)({ name: 'chicken-burrito-guacamole' }),
(0, exports.validatorFixture)({ name: 'chicken-burrito-salsa' }),
],
});
it('lists validators', async () => {
const client = new Client_1.default();
const list = await client.validators.search('chicken-burrito');
const validators = await list.take(2);
expect(validators[0].name).toBe('chicken-burrito-guacamole');
expect(validators[1].name).toBe('chicken-burrito-salsa');
});
});
describe('elected', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/elected/123456')
.reply(200, {
data: [
(0, exports.validatorFixture)({ name: 'previous-consensus-validator-1' }),
(0, exports.validatorFixture)({ name: 'previous-consensus-validator-2' }),
(0, exports.validatorFixture)({ name: 'previous-consensus-validator-3' }),
],
});
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/elected')
.reply(200, {
data: [
(0, exports.validatorFixture)({ name: 'current-consensus-validator-1' }),
(0, exports.validatorFixture)({ name: 'current-consensus-validator-2' }),
(0, exports.validatorFixture)({ name: 'current-consensus-validator-3' }),
],
});
it('retrieves elected validators at a given block height', async () => {
const client = new Client_1.default();
const list = await client.validators.elected(123456);
const elected = await list.take(3);
expect(elected.length).toBe(3);
expect(elected[0].name).toBe('previous-consensus-validator-1');
expect(elected[elected.length - 1].name).toBe('previous-consensus-validator-3');
});
it('retrieves currently elected validators', async () => {
const client = new Client_1.default();
const list = await client.validators.elected();
const elected = await list.take(3);
expect(elected.length).toBe(3);
expect(elected[0].name).toBe('current-consensus-validator-1');
expect(elected[elected.length - 1].name).toBe('current-consensus-validator-3');
});
});
describe('get rewards', () => {
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/fake-address/rewards/sum?min_time=2020-12-17T00%3A00%3A00.000Z&max_time=2020-12-18T00%3A00%3A00.000Z')
.reply(200, (0, exports.rewardSumFixture)());
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/fake-address/rewards?min_time=2020-12-17T00%3A00%3A00.000Z&max_time=2020-12-18T00%3A00%3A00.000Z')
.reply(200, (0, exports.rewardsFixture)());
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/fake-address/rewards/sum?min_time=2020-12-17T00%3A00%3A00.000Z&max_time=2020-12-18T00%3A00%3A00.000Z&bucket=day')
.reply(200, (0, exports.rewardSumListFixture)());
(0, nock_1.default)('https://api.helium.io')
.get('/v1/validators/fake-address/rewards/sum?min_time=-1%20day&bucket=day')
.reply(200, (0, exports.rewardSumListFixture)());
it('gets validator rewards sum', async () => {
const minTime = new Date('2020-12-17T00:00:00Z');
const maxTime = new Date('2020-12-18T00:00:00Z');
const client = new Client_1.default();
const rewards = await client.validator('fake-address').rewards.sum.get(minTime, maxTime);
expect(rewards.balanceTotal.floatBalance).toBe(13.17717245);
expect(rewards.total).toBe(13.17717245);
expect(rewards.data.total).toBe(13.17717245);
});
it('list validator rewards', async () => {
const minTime = new Date('2020-12-17T00:00:00Z');
const maxTime = new Date('2020-12-18T00:00:00Z');
const client = new Client_1.default();
const rewardsList = await client.validator('fake-address').rewards.list({ minTime, maxTime });
const rewards = await rewardsList.take(5);
expect(rewards.length).toBe(3);
expect(rewards[0].gateway).toBe('mock-gateway');
expect(rewards[1].gateway).toBe('mock-gateway');
expect(rewards[2].gateway).toBe('mock-gateway');
expect(rewards[0].gateway).toBe('mock-gateway');
});
it('list validator reward sums no bucket', async () => {
const minTime = new Date('2020-12-17T00:00:00Z');
const maxTime = new Date('2020-12-18T00:00:00Z');
const client = new Client_1.default();
expect.assertions(1);
try {
await client.validator('fake-address').rewards.sum.list({ minTime, maxTime });
}
catch (error) {
// @ts-ignore
expect(error.message).toBe('missing bucket param');
}
});
it('list validator reward sums by date', async () => {
const minTime = new Date('2020-12-17T00:00:00Z');
const maxTime = new Date('2020-12-18T00:00:00Z');
const client = new Client_1.default();
const rewardsList = await client
.validator('fake-address')
.rewards.sum.list({ minTime, maxTime, bucket: 'day' });
const rewards = await rewardsList.take(5);
expect(rewards.length).toBe(1);
expect(rewards[0].balanceTotal.floatBalance).toBe(13.17717245);
expect(rewards[0].total).toBe(13.17717245);
});
it('list validator reward sums by bucket', async () => {
const minTime = '-1 day';
const client = new Client_1.default();
const rewardsList = await client
.validator('fake-address')
.rewards.sum.list({ minTime, bucket: 'day' });
const rewards = await rewardsList.take(5);
expect(rewards.length).toBe(1);
expect(rewards[0].balanceTotal.floatBalance).toBe(13.17717245);
expect(rewards[0].total).toBe(13.17717245);
});
});
//# sourceMappingURL=Validators.spec.js.map