c1e809fd99
* Made client compile again + set auto fees * Simplified client construction by allowing only a single URL * wip * Simplified signing assertion * Initial implementation of queries * Implemented all basic nymd queries * Validator API queries * Signing related queries * Using default arguments * Removed redundant else branches * `eslint` and `prettier` formatting on Typescript validator client * Removed cyclic import on Coin type * Missing direct dependencies * Ingoring cyclic imports * Removed unused argument Co-authored-by: Mark Sinclair <mmsinclair@gmail.com>
76 lines
2.4 KiB
TypeScript
76 lines
2.4 KiB
TypeScript
/*
|
|
* Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import axios from 'axios';
|
|
import { GatewayBond, MixNodeBond } from './types';
|
|
|
|
export const VALIDATOR_API_VERSION = '/v1';
|
|
export const VALIDATOR_API_GATEWAYS_PATH = `${VALIDATOR_API_VERSION}/gateways`;
|
|
export const VALIDATOR_API_MIXNODES_PATH = `${VALIDATOR_API_VERSION}/mixnodes`;
|
|
export const VALIDATOR_API_ACTIVE_MIXNODES_PATH = `${VALIDATOR_API_VERSION}/mixnodes/active`;
|
|
export const VALIDATOR_API_REWARDED_MIXNODES_PATH = `${VALIDATOR_API_VERSION}/mixnodes/rewarded`;
|
|
|
|
export interface IValidatorApiQuery {
|
|
getCachedMixnodes(): Promise<MixNodeBond[]>;
|
|
|
|
getCachedGateways(): Promise<GatewayBond[]>;
|
|
|
|
getActiveMixnodes(): Promise<MixNodeBond[]>;
|
|
|
|
getRewardedMixnodes(): Promise<MixNodeBond[]>;
|
|
}
|
|
|
|
export default class ValidatorApiQuerier implements IValidatorApiQuery {
|
|
validatorApiUrl: string;
|
|
|
|
constructor(validatorApiUrl: string) {
|
|
this.validatorApiUrl = validatorApiUrl;
|
|
}
|
|
|
|
async getCachedMixnodes(): Promise<MixNodeBond[]> {
|
|
const url = new URL(this.validatorApiUrl);
|
|
url.pathname += VALIDATOR_API_MIXNODES_PATH;
|
|
|
|
const response = await axios.get(url.toString());
|
|
if (response.status === 200) {
|
|
return response.data;
|
|
}
|
|
throw new Error('None of the provided validator APIs seem to be alive');
|
|
}
|
|
|
|
async getCachedGateways(): Promise<GatewayBond[]> {
|
|
const url = new URL(this.validatorApiUrl);
|
|
url.pathname += VALIDATOR_API_GATEWAYS_PATH;
|
|
|
|
const response = await axios.get(url.toString());
|
|
if (response.status === 200) {
|
|
return response.data;
|
|
}
|
|
throw new Error('None of the provided validator APIs seem to be alive');
|
|
}
|
|
|
|
async getActiveMixnodes(): Promise<MixNodeBond[]> {
|
|
const url = new URL(this.validatorApiUrl);
|
|
url.pathname += VALIDATOR_API_ACTIVE_MIXNODES_PATH;
|
|
|
|
const response = await axios.get(url.toString());
|
|
if (response.status === 200) {
|
|
return response.data;
|
|
}
|
|
throw new Error('None of the provided validator APIs seem to be alive');
|
|
}
|
|
|
|
async getRewardedMixnodes(): Promise<MixNodeBond[]> {
|
|
const url = new URL(this.validatorApiUrl);
|
|
url.pathname += VALIDATOR_API_REWARDED_MIXNODES_PATH;
|
|
|
|
const response = await axios.get(url.toString());
|
|
if (response.status === 200) {
|
|
return response.data;
|
|
}
|
|
throw new Error('None of the provided validator APIs seem to be alive');
|
|
}
|
|
}
|