UNPKG

@helium/http

Version:

HTTP library for interacting with the Helium blockchain API

292 lines 13 kB
"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