diff --git a/.gitignore b/.gitignore index 9a1767fe..cdad4557 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store .nyc_output +.coveralls.yml node_modules/ **/servers.ts diff --git a/src/reporting/ConseilDataClient.ts b/src/reporting/ConseilDataClient.ts index 25366283..c7186c85 100644 --- a/src/reporting/ConseilDataClient.ts +++ b/src/reporting/ConseilDataClient.ts @@ -1,5 +1,5 @@ -import {ConseilServerInfo, ConseilQuery} from "../types/conseil/QueryTypes"; -import {ConseilRequestError, ConseilResponseError} from "../types/conseil/ErrorTypes"; +import {ConseilServerInfo, ConseilQuery} from '../types/conseil/QueryTypes'; +import {ConseilRequestError, ConseilResponseError} from '../types/conseil/ErrorTypes'; import FetchSelector from '../utils/FetchSelector'; const fetch = FetchSelector.getFetch(); @@ -22,7 +22,7 @@ export namespace ConseilDataClient { return fetch(url, { method: 'post', - headers: { "apiKey": serverInfo.apiKey, "Content-Type": 'application/json' }, + headers: { 'apiKey': serverInfo.apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify(query) }) .then(response => { @@ -50,7 +50,7 @@ export namespace ConseilDataClient { const url = `${serverInfo.url}/v2/query/${platform}/${network}`; return fetch(url, { method: 'post', - headers: { "apiKey": serverInfo.apiKey, "Content-Type": 'application/json' }, + headers: { 'apiKey': serverInfo.apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify(query) }) .then(response => { diff --git a/src/reporting/ConseilMetadataClient.ts b/src/reporting/ConseilMetadataClient.ts index 1091754d..76618052 100644 --- a/src/reporting/ConseilMetadataClient.ts +++ b/src/reporting/ConseilMetadataClient.ts @@ -1,5 +1,5 @@ -import {ConseilServerInfo} from "../types/conseil/QueryTypes" -import {PlatformDefinition, NetworkDefinition, EntityDefinition, AttributeDefinition} from "../types/conseil/MetadataTypes"; +import {ConseilServerInfo} from '../types/conseil/QueryTypes' +import {PlatformDefinition, NetworkDefinition, EntityDefinition, AttributeDefinition} from '../types/conseil/MetadataTypes'; import FetchSelector from '../utils/FetchSelector'; const fetch = FetchSelector.getFetch(); @@ -11,7 +11,7 @@ export namespace ConseilMetadataClient { export async function executeMetadataQuery(serverInfo: ConseilServerInfo, route: string): Promise { return fetch(`${serverInfo.url}/v2/metadata/${route}`, { method: 'GET', - headers: { "apiKey": serverInfo.apiKey }, + headers: { 'apiKey': serverInfo.apiKey }, }).then(response => response.json()); } @@ -21,57 +21,53 @@ export namespace ConseilMetadataClient { * @param server A fully qualified base URL for a Conseil server instance * @param apiKey Conseil API key */ - export async function getPlatforms(server: string, apiKey: string): Promise { - return executeMetadataQuery({ "url": server, "apiKey": apiKey }, 'platforms'); + export async function getPlatforms(serverInfo: ConseilServerInfo): Promise { + return executeMetadataQuery(serverInfo, 'platforms'); } /** * Retrieves the list of available networks given a platform, for example: 'mainnet', 'alphanet', as is the case with tezos. * - * @param server A fully qualified base URL for a Conseil server instance - * @param apiKey Conseil API key + * @param serverInfo Conseil server connection definition. * @param platform Platform of interest * * @see {@link getPlatforms} */ - export async function getNetworks(server: string, apiKey: string, platform: string): Promise { - return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/networks`); + export async function getNetworks(serverInfo: ConseilServerInfo, platform: string): Promise { + return executeMetadataQuery(serverInfo, `${platform}/networks`); } /** * Retrieves a list of entities given a network, for example: 'block', 'operation', 'account'. * - * @param server A fully qualified base URL for a Conseil server instance - * @param apiKey Conseil API key + * @param serverInfo Conseil server connection definition. * @param platform A platform * @param network Network of interest * * @see {@link getNetworks} */ - export async function getEntities(server: string, apiKey: string, platform: string, network: string): Promise { - return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/${network}/entities`); + export async function getEntities(serverInfo: ConseilServerInfo, platform: string, network: string): Promise { + return executeMetadataQuery(serverInfo, `${platform}/${network}/entities`); } /** * Retrieves a list of attributes for an entity. * - * @param server A fully qualified base URL for a Conseil server instance - * @param apiKey Conseil API key + * @param serverInfo Conseil server connection definition. * @param platform A platform * @param network A network * @param entity Entity of interest * * @see {@link getEntities} */ - export async function getAttributes(server: string, apiKey: string, platform: string, network: string, entity: string): Promise { - return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/${network}/${entity}/attributes`); + export async function getAttributes(serverInfo: ConseilServerInfo, platform: string, network: string, entity: string): Promise { + return executeMetadataQuery(serverInfo, `${platform}/${network}/${entity}/attributes`); } /** * Retrieves a list of distinct values for a specific attribute of an entity. This would work on low-cardinality, generally non-date and non-numeric data. The intended use-case for this result set is type-ahead auto-complete. * - * @param server A fully qualified base URL for a Conseil server instance - * @param apiKey Conseil API key + * @param serverInfo Conseil server connection definition. * @param platform A platform * @param network A network * @param entity An entity @@ -79,7 +75,7 @@ export namespace ConseilMetadataClient { * * @see {@link getAttributes} */ - export async function getAttributeValues(server: string, apiKey: string, platform: string, network: string, entity: string, attribute: string): Promise { - return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/${network}/${entity}/${attribute}`); + export async function getAttributeValues(serverInfo: ConseilServerInfo, platform: string, network: string, entity: string, attribute: string): Promise { + return executeMetadataQuery(serverInfo, `${platform}/${network}/${entity}/${attribute}`); } } diff --git a/src/utils/CryptoUtils.ts b/src/utils/CryptoUtils.ts index 11ccf474..4a6e469e 100644 --- a/src/utils/CryptoUtils.ts +++ b/src/utils/CryptoUtils.ts @@ -1,6 +1,4 @@ -import * as sodium from 'libsodium-wrappers'; import * as sodiumsumo from 'libsodium-wrappers-sumo'; -import * as crypto from 'crypto'; import zxcvbn from 'zxcvbn'; /** @@ -12,7 +10,7 @@ export namespace CryptoUtils { * @returns {Buffer} Salt */ export function generateSaltForPwHash() { - return crypto.randomBytes(sodiumsumo.crypto_pwhash_SALTBYTES) + return sodiumsumo.randombytes_buf(sodiumsumo.crypto_pwhash_SALTBYTES) } /** @@ -22,7 +20,7 @@ export namespace CryptoUtils { * @param {Buffer} salt Salt for key derivation * @returns {Buffer} Concatenated bytes of nonce and cipher text */ - export function encryptMessage(message: string, passphrase: string, salt: Buffer) { + export function encryptMessage(message: string, passphrase: string, salt: Buffer) : Buffer { const passwordStrength = getPasswordStrength(passphrase); if (passwordStrength < 3) { throw new Error('The password strength should not be less than 3.'); @@ -45,11 +43,11 @@ export namespace CryptoUtils { /** * Decrypts a given message using a passphrase * @param {Buffer} nonce_and_ciphertext Concatenated bytes of nonce and cipher text - * @param {string} passphrase User-supplied passphrase + * @param {string} passphrase User-supplied passphrase * @param {Buffer} salt Salt for key derivation - * @returns {any} Decrypted message + * @returns {string} Decrypted message */ - export function decryptMessage(nonce_and_ciphertext: Buffer, passphrase: string, salt: Buffer ) { + export function decryptMessage(nonce_and_ciphertext: Buffer, passphrase: string, salt: Buffer) : string { const keyBytes = sodiumsumo.crypto_pwhash( sodiumsumo.crypto_box_SEEDBYTES, passphrase, @@ -74,7 +72,7 @@ export namespace CryptoUtils { * Checking the password strength using zxcvbn * @returns {number} Password score */ - export function getPasswordStrength(password: string): number { + export function getPasswordStrength(password: string) : number { const results = zxcvbn(password); return results.score; } @@ -86,6 +84,6 @@ export namespace CryptoUtils { } export function signDetached(payload: Buffer, privateKey: Buffer) : Buffer { - return sodium.crypto_sign_detached(payload, privateKey); + return sodiumsumo.crypto_sign_detached(payload, privateKey); } } \ No newline at end of file