Skip to content

Commit

Permalink
- changed ConseilMetadataClient to use ConseilServerInfo for connecti…
Browse files Browse the repository at this point in the history
…on information THIS IS A BREAKING CHANGE

- consolidated around libsodium-wrappers-sumo in CryptoUtils
- updated docs
- normalized quotes
- updated ignore file
  • Loading branch information
anonymoussprocket committed Feb 17, 2019
1 parent 561b070 commit 9d6b05b
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 34 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,5 +1,6 @@
.DS_Store
.nyc_output
.coveralls.yml
node_modules/

**/servers.ts
8 changes: 4 additions & 4 deletions 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();
Expand All @@ -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 => {
Expand Down Expand Up @@ -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 => {
Expand Down
38 changes: 17 additions & 21 deletions 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();
Expand All @@ -11,7 +11,7 @@ export namespace ConseilMetadataClient {
export async function executeMetadataQuery(serverInfo: ConseilServerInfo, route: string): Promise<any> {
return fetch(`${serverInfo.url}/v2/metadata/${route}`, {
method: 'GET',
headers: { "apiKey": serverInfo.apiKey },
headers: { 'apiKey': serverInfo.apiKey },
}).then(response => response.json());
}

Expand All @@ -21,65 +21,61 @@ 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<PlatformDefinition[]> {
return executeMetadataQuery({ "url": server, "apiKey": apiKey }, 'platforms');
export async function getPlatforms(serverInfo: ConseilServerInfo): Promise<PlatformDefinition[]> {
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<NetworkDefinition[]> {
return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/networks`);
export async function getNetworks(serverInfo: ConseilServerInfo, platform: string): Promise<NetworkDefinition[]> {
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<EntityDefinition[]> {
return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/${network}/entities`);
export async function getEntities(serverInfo: ConseilServerInfo, platform: string, network: string): Promise<EntityDefinition[]> {
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<AttributeDefinition[]> {
return executeMetadataQuery({ "url": server, "apiKey": apiKey }, `${platform}/${network}/${entity}/attributes`);
export async function getAttributes(serverInfo: ConseilServerInfo, platform: string, network: string, entity: string): Promise<AttributeDefinition[]> {
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
* @param attribute Attribute of interest
*
* @see {@link getAttributes}
*/
export async function getAttributeValues(server: string, apiKey: string, platform: string, network: string, entity: string, attribute: string): Promise<string[]> {
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<string[]> {
return executeMetadataQuery(serverInfo, `${platform}/${network}/${entity}/${attribute}`);
}
}
16 changes: 7 additions & 9 deletions 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';

/**
Expand All @@ -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)
}

/**
Expand All @@ -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.');
Expand All @@ -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,
Expand All @@ -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;
}
Expand All @@ -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);
}
}

0 comments on commit 9d6b05b

Please sign in to comment.