@ethersphere/bee-js
Version:
Javascript client for Bee
133 lines (132 loc) • 6.51 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.asBin = exports.pingPeer = exports.getTopology = exports.removePeer = exports.getBlocklist = exports.getPeers = exports.getNodeAddresses = void 0;
const cafe_utility_1 = require("cafe-utility");
const http_1 = require("../../utils/http");
const typed_bytes_1 = require("../../utils/typed-bytes");
async function getNodeAddresses(requestOptions) {
const response = await (0, http_1.http)(requestOptions, {
url: 'addresses',
responseType: 'json',
});
const body = cafe_utility_1.Types.asObject(response.data, { name: 'response.data' });
return {
overlay: new typed_bytes_1.PeerAddress(cafe_utility_1.Types.asString(body.overlay, { name: 'overlay' })),
underlay: cafe_utility_1.Types.asArray(body.underlay, { name: 'underlay' }).map(x => cafe_utility_1.Types.asString(x, { name: 'underlay' })),
ethereum: new typed_bytes_1.EthAddress(cafe_utility_1.Types.asString(body.ethereum, { name: 'ethereum' })),
publicKey: new typed_bytes_1.PublicKey(cafe_utility_1.Types.asString(body.publicKey, { name: 'publicKey' })),
pssPublicKey: new typed_bytes_1.PublicKey(cafe_utility_1.Types.asString(body.pssPublicKey, { name: 'pssPublicKey' })),
};
}
exports.getNodeAddresses = getNodeAddresses;
async function getPeers(requestOptions) {
const response = await (0, http_1.http)(requestOptions, {
url: 'peers',
responseType: 'json',
});
const body = cafe_utility_1.Types.asObject(response.data, { name: 'response.data' });
return cafe_utility_1.Types.asArray(body.peers, { name: 'peers' }).map(x => ({
address: cafe_utility_1.Types.asString(cafe_utility_1.Types.asObject(x, { name: 'peer' }).address, { name: 'address' }),
fullNode: cafe_utility_1.Types.asBoolean(cafe_utility_1.Types.asObject(x, { name: 'peer' }).fullNode, { name: 'fullNode' }),
}));
}
exports.getPeers = getPeers;
async function getBlocklist(requestOptions) {
const response = await (0, http_1.http)(requestOptions, {
url: 'blocklist',
responseType: 'json',
});
return response.data.peers;
}
exports.getBlocklist = getBlocklist;
async function removePeer(requestOptions, peer) {
const response = await (0, http_1.http)(requestOptions, {
url: `peers/${peer}`,
responseType: 'json',
method: 'DELETE',
});
return response.data;
}
exports.removePeer = removePeer;
async function getTopology(requestOptions) {
const response = await (0, http_1.http)(requestOptions, {
url: `topology`,
responseType: 'json',
});
const body = cafe_utility_1.Types.asObject(response.data, { name: 'response.data' });
const bins = cafe_utility_1.Types.asObject(body.bins, { name: 'bins' });
return {
baseAddr: cafe_utility_1.Types.asString(body.baseAddr, { name: 'baseAddr' }),
population: cafe_utility_1.Types.asNumber(body.population, { name: 'population' }),
connected: cafe_utility_1.Types.asNumber(body.connected, { name: 'connected' }),
timestamp: cafe_utility_1.Types.asString(body.timestamp, { name: 'timestamp' }),
nnLowWatermark: cafe_utility_1.Types.asNumber(body.nnLowWatermark, { name: 'nnLowWatermark' }),
depth: cafe_utility_1.Types.asNumber(body.depth, { name: 'depth' }),
reachability: cafe_utility_1.Types.asString(body.reachability, { name: 'reachability' }),
networkAvailability: cafe_utility_1.Types.asString(body.networkAvailability, { name: 'networkAvailability' }),
bins: {
bin_0: asBin(bins.bin_0, 'bin_0'),
bin_1: asBin(bins.bin_1, 'bin_1'),
bin_2: asBin(bins.bin_2, 'bin_2'),
bin_3: asBin(bins.bin_3, 'bin_3'),
bin_4: asBin(bins.bin_4, 'bin_4'),
bin_5: asBin(bins.bin_5, 'bin_5'),
bin_6: asBin(bins.bin_6, 'bin_6'),
bin_7: asBin(bins.bin_7, 'bin_7'),
bin_8: asBin(bins.bin_8, 'bin_8'),
bin_9: asBin(bins.bin_9, 'bin_9'),
bin_10: asBin(bins.bin_10, 'bin_10'),
bin_11: asBin(bins.bin_11, 'bin_11'),
bin_12: asBin(bins.bin_12, 'bin_12'),
bin_13: asBin(bins.bin_13, 'bin_13'),
bin_14: asBin(bins.bin_14, 'bin_14'),
bin_15: asBin(bins.bin_15, 'bin_15'),
bin_16: asBin(bins.bin_16, 'bin_16'),
bin_17: asBin(bins.bin_17, 'bin_17'),
bin_18: asBin(bins.bin_18, 'bin_18'),
bin_19: asBin(bins.bin_19, 'bin_19'),
bin_20: asBin(bins.bin_20, 'bin_20'),
bin_21: asBin(bins.bin_21, 'bin_21'),
bin_22: asBin(bins.bin_22, 'bin_22'),
bin_23: asBin(bins.bin_23, 'bin_23'),
bin_24: asBin(bins.bin_24, 'bin_24'),
bin_25: asBin(bins.bin_25, 'bin_25'),
bin_26: asBin(bins.bin_26, 'bin_26'),
bin_27: asBin(bins.bin_27, 'bin_27'),
bin_28: asBin(bins.bin_28, 'bin_28'),
bin_29: asBin(bins.bin_29, 'bin_29'),
bin_30: asBin(bins.bin_30, 'bin_30'),
bin_31: asBin(bins.bin_31, 'bin_31'),
},
};
}
exports.getTopology = getTopology;
async function pingPeer(requestOptions, peer) {
const response = await (0, http_1.http)(requestOptions, {
url: `pingpong/${peer}`,
responseType: 'json',
method: 'POST',
});
return response.data;
}
exports.pingPeer = pingPeer;
function asBin(value, name) {
const bin = cafe_utility_1.Types.asObject(value, { name });
if (!bin.disconnectedPeers) {
bin.disconnectedPeers = [];
}
if (!bin.connectedPeers) {
bin.connectedPeers = [];
}
return {
population: cafe_utility_1.Types.asNumber(bin.population, { name: 'population' }),
connected: cafe_utility_1.Types.asNumber(bin.connected, { name: 'connected' }),
connectedPeers: cafe_utility_1.Types.asArray(bin.connectedPeers, { name: 'connectedPeers' }).map(x => ({
address: cafe_utility_1.Types.asString(cafe_utility_1.Types.asObject(x, { name: 'connectedPeer' }).address, { name: 'address' }),
})),
disconnectedPeers: cafe_utility_1.Types.asArray(bin.disconnectedPeers, { name: 'disconnectedPeers' }).map(x => ({
address: cafe_utility_1.Types.asString(cafe_utility_1.Types.asObject(x, { name: 'disconnectedPeer' }).address, { name: 'address' }),
})),
};
}
exports.asBin = asBin;