Update json-schemas, update HTTPClient types

This commit is contained in:
fragosti 2018-08-14 14:59:53 -07:00
parent ce88086e08
commit 5c40c466f6
11 changed files with 81 additions and 85 deletions

View File

@ -52,7 +52,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md", "homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
"dependencies": { "dependencies": {
"@0xproject/assert": "^0.2.14", "@0xproject/assert": "^0.2.14",
"@0xproject/json-schemas": "^0.8.3", "@0xproject/json-schemas": "^1.0.1-rc.4",
"@0xproject/types": "^0.8.2", "@0xproject/types": "^0.8.2",
"@0xproject/typescript-typings": "^1.0.4", "@0xproject/typescript-typings": "^1.0.4",
"@0xproject/utils": "^1.0.5", "@0xproject/utils": "^1.0.5",

View File

@ -7,17 +7,19 @@ import * as queryString from 'query-string';
import { schemas as clientSchemas } from './schemas/schemas'; import { schemas as clientSchemas } from './schemas/schemas';
import { import {
APIOrder,
AssetPairsItem,
AssetPairsRequestOpts, AssetPairsRequestOpts,
Client, Client,
OrderConfigRequest,
OrderConfigResponse,
HttpRequestOptions, HttpRequestOptions,
HttpRequestType, HttpRequestType,
OrderbookRequest, OrderbookRequest,
OrderbookResponse, OrderbookResponse,
OrderConfigRequest,
OrderConfigResponse,
OrdersRequestOpts, OrdersRequestOpts,
PagedRequestOpts, PagedRequestOpts,
TokenPairsItem, PaginatedCollection,
} from './types'; } from './types';
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers'; import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
@ -26,12 +28,6 @@ const DEFAULT_PAGED_REQUEST_OPTS: PagedRequestOpts = {
page: 1, page: 1,
perPage: 100, perPage: 100,
}; };
/**
* This mapping defines how an option property name gets converted into an HTTP request query field
*/
const OPTS_TO_QUERY_FIELD_MAP = {
perPage: 'per_page',
};
/** /**
* This class includes all the functionality related to interacting with a set of HTTP endpoints * This class includes all the functionality related to interacting with a set of HTTP endpoints
@ -47,12 +43,8 @@ export class HttpClient implements Client {
if (_.isUndefined(params) || _.isEmpty(params)) { if (_.isUndefined(params) || _.isEmpty(params)) {
return ''; return '';
} }
// format params into a form the api expects
const formattedParams = _.mapKeys(params, (_value: any, key: string) => {
return _.get(OPTS_TO_QUERY_FIELD_MAP, key, key);
});
// stringify the formatted object // stringify the formatted object
const stringifiedParams = queryString.stringify(formattedParams); const stringifiedParams = queryString.stringify(params);
return `?${stringifiedParams}`; return `?${stringifiedParams}`;
} }
/** /**
@ -67,9 +59,9 @@ export class HttpClient implements Client {
/** /**
* Retrieve assetData pair info from the API * Retrieve assetData pair info from the API
* @param requestOpts Options specifying assetData information to retrieve and page information, defaults to { page: 1, perPage: 100 } * @param requestOpts Options specifying assetData information to retrieve and page information, defaults to { page: 1, perPage: 100 }
* @return The resulting TokenPairsItems that match the request * @return The resulting AssetPairsItems that match the request
*/ */
public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<TokenPairsItem[]> { public async getAssetPairsAsync(requestOpts?: AssetPairsRequestOpts & PagedRequestOpts): Promise<PaginatedCollection<AssetPairsItem>> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.AssetPairsRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.AssetPairsRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
@ -78,7 +70,7 @@ export class HttpClient implements Client {
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS), params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
}; };
const responseJson = await this._requestAsync('/assetData_pairs', HttpRequestType.Get, httpRequestOpts); const responseJson = await this._requestAsync('/assetData_pairs', HttpRequestType.Get, httpRequestOpts);
const assetDataPairs = relayerResponseJsonParsers.parseTokenPairsJson(responseJson); const assetDataPairs = relayerResponseJsonParsers.parseAssetDataPairsJson(responseJson);
return assetDataPairs; return assetDataPairs;
} }
/** /**
@ -86,7 +78,7 @@ export class HttpClient implements Client {
* @param requestOpts Options specifying orders to retrieve and page information, defaults to { page: 1, perPage: 100 } * @param requestOpts Options specifying orders to retrieve and page information, defaults to { page: 1, perPage: 100 }
* @return The resulting SignedOrders that match the request * @return The resulting SignedOrders that match the request
*/ */
public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<SignedOrder[]> { public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<PaginatedCollection<APIOrder>> {
if (!_.isUndefined(requestOpts)) { if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema); assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
@ -103,7 +95,7 @@ export class HttpClient implements Client {
* @param orderHash An orderHash generated from the desired order * @param orderHash An orderHash generated from the desired order
* @return The SignedOrder that matches the supplied orderHash * @return The SignedOrder that matches the supplied orderHash
*/ */
public async getOrderAsync(orderHash: string): Promise<SignedOrder> { public async getOrderAsync(orderHash: string): Promise<APIOrder> {
assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema); assert.doesConformToSchema('orderHash', orderHash, schemas.orderHashSchema);
const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get); const responseJson = await this._requestAsync(`/order/${orderHash}`, HttpRequestType.Get);
const order = relayerResponseJsonParsers.parseOrderJson(responseJson); const order = relayerResponseJsonParsers.parseOrderJson(responseJson);
@ -144,6 +136,12 @@ export class HttpClient implements Client {
const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson); const fees = relayerResponseJsonParsers.parseOrderConfigResponseJson(responseJson);
return fees; return fees;
} }
public async getFeeRecipientsAsync(): Promise<PaginatedCollection<string>> {
// TODO
return;
}
/** /**
* Submit a signed order to the API * Submit a signed order to the API
* @param signedOrder A SignedOrder instance to submit * @param signedOrder A SignedOrder instance to submit

View File

@ -11,7 +11,7 @@ export {
OrderbookResponse, OrderbookResponse,
OrdersRequestOpts, OrdersRequestOpts,
PagedRequestOpts, PagedRequestOpts,
TokenPairsItem, AssetPairsItem,
AssetPairsRequestOpts, AssetPairsRequestOpts,
Asset, Asset,
} from './types'; } from './types';

View File

@ -2,12 +2,12 @@ import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
export interface Client { export interface Client {
getAssetPairsAsync: (requestOpts?: AssetPairsRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<TokenPairsItem>>; getAssetPairsAsync: (requestOpts?: AssetPairsRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<AssetPairsItem>>;
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<APIOrder>>; getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<PaginatedCollection<APIOrder>>;
getOrderAsync: (orderHash: string) => Promise<APIOrder>; getOrderAsync: (orderHash: string) => Promise<APIOrder>;
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>; getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
getOrderConfigAsync: (request: OrderConfigRequest) => Promise<OrderConfigResponse>; getOrderConfigAsync: (request: OrderConfigRequest) => Promise<OrderConfigResponse>;
getFeeRecipients: () => Promise<PaginatedCollection<string>>; getFeeRecipientsAsync: () => Promise<PaginatedCollection<string>>;
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>; submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
} }
@ -81,7 +81,7 @@ export interface AssetPairsRequestOpts {
assetDataB?: string; assetDataB?: string;
} }
export interface TokenPairsItem { export interface AssetPairsItem {
assetDataA: Asset; assetDataA: Asset;
assetDataB: Asset; assetDataB: Asset;
} }

View File

@ -6,7 +6,7 @@ import { OrdersChannelMessage, OrdersChannelMessageTypes } from '../types';
import { relayerResponseJsonParsers } from './relayer_response_json_parsers'; import { relayerResponseJsonParsers } from './relayer_response_json_parsers';
export const orderbookChannelMessageParser = { export const ordersChannelMessageParser = {
parse(utf8Data: string): OrdersChannelMessage { parse(utf8Data: string): OrdersChannelMessage {
// parse the message // parse the message
const messageObj = JSON.parse(utf8Data); const messageObj = JSON.parse(utf8Data);
@ -19,14 +19,8 @@ export const orderbookChannelMessageParser = {
assert.assert(!_.isUndefined(requestId), `Message is missing a requestId parameter: ${utf8Data}`); assert.assert(!_.isUndefined(requestId), `Message is missing a requestId parameter: ${utf8Data}`);
assert.isNumber('requestId', requestId); assert.isNumber('requestId', requestId);
switch (type) { switch (type) {
case OrdersChannelMessageTypes.Snapshot: {
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelSnapshotSchema);
const orderbookJson = messageObj.payload;
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(orderbookJson);
return _.assign(messageObj, { payload: orderbook });
}
case OrdersChannelMessageTypes.Update: { case OrdersChannelMessageTypes.Update: {
assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrderbookChannelUpdateSchema); assert.doesConformToSchema('message', messageObj, schemas.relayerApiOrdersChannelUpdateSchema);
const orderJson = messageObj.payload; const orderJson = messageObj.payload;
const order = relayerResponseJsonParsers.parseOrderJson(orderJson); const order = relayerResponseJsonParsers.parseOrderJson(orderJson);
return _.assign(messageObj, { payload: order }); return _.assign(messageObj, { payload: order });

View File

@ -2,13 +2,13 @@ import { assert } from '@0xproject/assert';
import { schemas } from '@0xproject/json-schemas'; import { schemas } from '@0xproject/json-schemas';
import { SignedOrder } from '@0xproject/types'; import { SignedOrder } from '@0xproject/types';
import { OrderConfigResponse, OrderbookResponse, TokenPairsItem } from '../types'; import { AssetPairsItem, OrderbookResponse, OrderConfigResponse } from '../types';
import { typeConverters } from './type_converters'; import { typeConverters } from './type_converters';
export const relayerResponseJsonParsers = { export const relayerResponseJsonParsers = {
parseTokenPairsJson(json: any): TokenPairsItem[] { parseAssetDataPairsJson(json: any): AssetPairsItem[] {
assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiTokenPairsResponseSchema); assert.doesConformToSchema('assetDataPairs', json, schemas.relayerApiAssetDataPairsResponseSchema);
return json.map((assetDataPair: any) => { return json.map((assetDataPair: any) => {
return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [ return typeConverters.convertStringsFieldsToBigNumbers(assetDataPair, [
'assetDataA.minAmount', 'assetDataA.minAmount',
@ -27,7 +27,7 @@ export const relayerResponseJsonParsers = {
return typeConverters.convertOrderStringFieldsToBigNumber(json); return typeConverters.convertOrderStringFieldsToBigNumber(json);
}, },
parseOrderbookResponseJson(json: any): OrderbookResponse { parseOrderbookResponseJson(json: any): OrderbookResponse {
assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrderBookResponseSchema); assert.doesConformToSchema('orderBook', json, schemas.relayerApiOrdersResponseSchema);
return typeConverters.convertOrderbookStringFieldsToBigNumber(json); return typeConverters.convertOrderbookStringFieldsToBigNumber(json);
}, },
parseOrderConfigResponseJson(json: any): OrderConfigResponse { parseOrderConfigResponseJson(json: any): OrderConfigResponse {

View File

@ -8,7 +8,7 @@ import {
OrdersChannelMessageTypes, OrdersChannelMessageTypes,
} from './types'; } from './types';
import { assert } from './utils/assert'; import { assert } from './utils/assert';
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser'; import { ordersChannelMessageParser } from './utils/orderbook_channel_message_parser';
/** /**
* This class includes all the functionality related to interacting with a websocket endpoint * This class includes all the functionality related to interacting with a websocket endpoint
@ -72,7 +72,7 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
} }
try { try {
const data = message.data; const data = message.data;
const parserResult = orderbookChannelMessageParser.parse(data); const parserResult = ordersChannelMessageParser.parse(data);
const subscriptionOpts = this._subscriptionOptsList[parserResult.requestId]; const subscriptionOpts = this._subscriptionOptsList[parserResult.requestId];
if (_.isUndefined(subscriptionOpts)) { if (_.isUndefined(subscriptionOpts)) {
this._handler.onError( this._handler.onError(
@ -82,10 +82,6 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
return; return;
} }
switch (parserResult.type) { switch (parserResult.type) {
case OrdersChannelMessageTypes.Snapshot: {
this._handler.onSnapshot(this, subscriptionOpts, parserResult.payload);
break;
}
case OrdersChannelMessageTypes.Update: { case OrdersChannelMessageTypes.Update: {
this._handler.onUpdate(this, subscriptionOpts, parserResult.payload); this._handler.onUpdate(this, subscriptionOpts, parserResult.payload);
break; break;

View File

@ -1,8 +1,8 @@
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { TokenPairsItem } from '../../../src/types'; import { AssetPairsItem } from '../../../src/types';
export const assetDataPairsResponse: TokenPairsItem[] = [ export const assetDataPairsResponse: AssetPairsItem[] = [
{ {
assetDataA: { assetDataA: {
address: '0x323b5d4c32345ced77393b3530b1eed0f346429d', address: '0x323b5d4c32345ced77393b3530b1eed0f346429d',

View File

@ -7,6 +7,8 @@ import 'mocha';
import { HttpClient } from '../src/index'; import { HttpClient } from '../src/index';
import { assetDataPairsResponse } from './fixtures/standard_relayer_api/assetData_pairs';
import * as assetDataPairsResponseJSON from './fixtures/standard_relayer_api/assetData_pairs.json';
import { feesResponse } from './fixtures/standard_relayer_api/fees'; import { feesResponse } from './fixtures/standard_relayer_api/fees';
import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json'; import * as feesResponseJSON from './fixtures/standard_relayer_api/fees.json';
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f'; import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
@ -15,8 +17,6 @@ import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json'; import * as orderbookJSON from './fixtures/standard_relayer_api/orderbook.json';
import { ordersResponse } from './fixtures/standard_relayer_api/orders'; import { ordersResponse } from './fixtures/standard_relayer_api/orders';
import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json'; import * as ordersResponseJSON from './fixtures/standard_relayer_api/orders.json';
import { assetDataPairsResponse } from './fixtures/standard_relayer_api/assetData_pairs';
import * as assetDataPairsResponseJSON from './fixtures/standard_relayer_api/assetData_pairs.json';
chai.config.includeStack = true; chai.config.includeStack = true;
chai.use(dirtyChai); chai.use(dirtyChai);

View File

@ -2,7 +2,7 @@ import * as chai from 'chai';
import * as dirtyChai from 'dirty-chai'; import * as dirtyChai from 'dirty-chai';
import 'mocha'; import 'mocha';
import { orderbookChannelMessageParser } from '../src/utils/orderbook_channel_message_parser'; import { ordersChannelMessageParser } from '../src/utils/orderbook_channel_message_parser';
import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f'; import { orderResponse } from './fixtures/standard_relayer_api/order/0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook'; import { orderbookResponse } from './fixtures/standard_relayer_api/orderbook';
@ -20,20 +20,20 @@ chai.config.includeStack = true;
chai.use(dirtyChai); chai.use(dirtyChai);
const expect = chai.expect; const expect = chai.expect;
describe('orderbookChannelMessageParser', () => { describe('ordersChannelMessageParser', () => {
describe('#parser', () => { describe('#parser', () => {
it('parses snapshot messages', () => { it('parses snapshot messages', () => {
const snapshotMessage = orderbookChannelMessageParser.parse(snapshotOrdersChannelMessage); const snapshotMessage = ordersChannelMessageParser.parse(snapshotOrdersChannelMessage);
expect(snapshotMessage.type).to.be.equal('snapshot'); expect(snapshotMessage.type).to.be.equal('snapshot');
expect(snapshotMessage.payload).to.be.deep.equal(orderbookResponse); expect(snapshotMessage.payload).to.be.deep.equal(orderbookResponse);
}); });
it('parses update messages', () => { it('parses update messages', () => {
const updateMessage = orderbookChannelMessageParser.parse(updateOrdersChannelMessage); const updateMessage = ordersChannelMessageParser.parse(updateOrdersChannelMessage);
expect(updateMessage.type).to.be.equal('update'); expect(updateMessage.type).to.be.equal('update');
expect(updateMessage.payload).to.be.deep.equal(orderResponse); expect(updateMessage.payload).to.be.deep.equal(orderResponse);
}); });
it('returns unknown message for messages with unsupported types', () => { it('returns unknown message for messages with unsupported types', () => {
const unknownMessage = orderbookChannelMessageParser.parse(unknownOrdersChannelMessage); const unknownMessage = ordersChannelMessageParser.parse(unknownOrdersChannelMessage);
expect(unknownMessage.type).to.be.equal('unknown'); expect(unknownMessage.type).to.be.equal('unknown');
expect(unknownMessage.payload).to.be.undefined(); expect(unknownMessage.payload).to.be.undefined();
}); });
@ -43,7 +43,7 @@ describe('orderbookChannelMessageParser', () => {
"requestId": 1, "requestId": 1,
"payload": {} "payload": {}
}`; }`;
const badCall = () => orderbookChannelMessageParser.parse(typelessMessage); const badCall = () => ordersChannelMessageParser.parse(typelessMessage);
expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`); expect(badCall).throws(`Message is missing a type parameter: ${typelessMessage}`);
}); });
it('throws when type is not a string', () => { it('throws when type is not a string', () => {
@ -53,23 +53,23 @@ describe('orderbookChannelMessageParser', () => {
"requestId": 1, "requestId": 1,
"payload": {} "payload": {}
}`; }`;
const badCall = () => orderbookChannelMessageParser.parse(messageWithBadType); const badCall = () => ordersChannelMessageParser.parse(messageWithBadType);
expect(badCall).throws('Expected type to be of type string, encountered: 1'); expect(badCall).throws('Expected type to be of type string, encountered: 1');
}); });
it('throws when snapshot message has malformed payload', () => { it('throws when snapshot message has malformed payload', () => {
const badCall = () => orderbookChannelMessageParser.parse(malformedSnapshotOrdersChannelMessage); const badCall = () => ordersChannelMessageParser.parse(malformedSnapshotOrdersChannelMessage);
// tslint:disable-next-line:max-line-length // tslint:disable-next-line:max-line-length
const errMsg = const errMsg =
'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"'; 'Validation errors: instance.payload requires property "bids", instance.payload requires property "asks"';
expect(badCall).throws(errMsg); expect(badCall).throws(errMsg);
}); });
it('throws when update message has malformed payload', () => { it('throws when update message has malformed payload', () => {
const badCall = () => orderbookChannelMessageParser.parse(malformedUpdateOrdersChannelMessage); const badCall = () => ordersChannelMessageParser.parse(malformedUpdateOrdersChannelMessage);
expect(badCall).throws(/^Expected message to conform to schema/); expect(badCall).throws(/^Expected message to conform to schema/);
}); });
it('throws when input message is not valid JSON', () => { it('throws when input message is not valid JSON', () => {
const nonJsonString = 'h93b{sdfs9fsd f'; const nonJsonString = 'h93b{sdfs9fsd f';
const badCall = () => orderbookChannelMessageParser.parse(nonJsonString); const badCall = () => ordersChannelMessageParser.parse(nonJsonString);
expect(badCall).throws('Unexpected assetData h in JSON at position 0'); expect(badCall).throws('Unexpected assetData h in JSON at position 0');
}); });
}); });

View File

@ -1369,9 +1369,9 @@ aes-js@3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
aes-js@^0.2.3: aes-js@^3.1.1:
version "0.2.4" version "3.1.1"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-0.2.4.tgz#94b881ab717286d015fa219e08fb66709dda5a3d" resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.1.1.tgz#89fd1f94ae51b4c72d62466adc1a7323ff52f072"
ajv-keywords@^2.1.0: ajv-keywords@^2.1.0:
version "2.1.1" version "2.1.1"
@ -2429,10 +2429,6 @@ balanced-match@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
base-x@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac"
base-x@^3.0.2: base-x@^3.0.2:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77"
@ -2836,7 +2832,7 @@ browserslist@^2.1.2:
caniuse-lite "^1.0.30000792" caniuse-lite "^1.0.30000792"
electron-to-chromium "^1.3.30" electron-to-chromium "^1.3.30"
bs58@=4.0.1: bs58@=4.0.1, bs58@^4.0.0:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
dependencies: dependencies:
@ -2846,18 +2842,13 @@ bs58@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
bs58@^3.1.0: bs58check@^2.1.2:
version "3.1.0" version "2.1.2"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-3.1.0.tgz#d4c26388bf4804cac714141b1945aa47e5eb248e" resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
dependencies: dependencies:
base-x "^1.1.0" bs58 "^4.0.0"
bs58check@^1.0.8:
version "1.3.4"
resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-1.3.4.tgz#c52540073749117714fa042c3047eb8f9151cbf8"
dependencies:
bs58 "^3.1.0"
create-hash "^1.1.0" create-hash "^1.1.0"
safe-buffer "^5.1.2"
btoa@1.1.2: btoa@1.1.2:
version "1.1.2" version "1.1.2"
@ -5209,7 +5200,7 @@ ethereumjs-util@5.1.5, ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumj
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
secp256k1 "^3.0.1" secp256k1 "^3.0.1"
ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0: ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6"
dependencies: dependencies:
@ -5263,17 +5254,18 @@ ethereumjs-vm@^2.0.2, ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4:
rustbn.js "~0.1.1" rustbn.js "~0.1.1"
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
ethereumjs-wallet@0.6.0: ethereumjs-wallet@~0.6.0:
version "0.6.0" version "0.6.2"
resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz#82763b1697ee7a796be7155da9dfb49b2f98cfdb" resolved "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.2.tgz#67244b6af3e8113b53d709124b25477b64aeccda"
dependencies: dependencies:
aes-js "^0.2.3" aes-js "^3.1.1"
bs58check "^1.0.8" bs58check "^2.1.2"
ethereumjs-util "^4.4.0" ethereumjs-util "^5.2.0"
hdkey "^0.7.0" hdkey "^1.0.0"
safe-buffer "^5.1.2"
scrypt.js "^0.2.0" scrypt.js "^0.2.0"
utf8 "^2.1.1" utf8 "^3.0.0"
uuid "^2.0.1" uuid "^3.3.2"
ethers@3.0.22: ethers@3.0.22:
version "3.0.22" version "3.0.22"
@ -6693,13 +6685,21 @@ hawk@~6.0.2:
hoek "4.x.x" hoek "4.x.x"
sntp "2.x.x" sntp "2.x.x"
hdkey@^0.7.0, hdkey@^0.7.1: hdkey@^0.7.1:
version "0.7.1" version "0.7.1"
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632" resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632"
dependencies: dependencies:
coinstring "^2.0.0" coinstring "^2.0.0"
secp256k1 "^3.0.1" secp256k1 "^3.0.1"
hdkey@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/hdkey/-/hdkey-1.1.0.tgz#e74e7b01d2c47f797fa65d1d839adb7a44639f29"
dependencies:
coinstring "^2.0.0"
safe-buffer "^5.1.1"
secp256k1 "^3.0.1"
he@1.1.1: he@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
@ -14036,6 +14036,10 @@ utf8@^2.1.1:
version "2.1.2" version "2.1.2"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
utf8@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
util-deprecate@~1.0.1: util-deprecate@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@ -14081,6 +14085,10 @@ uuid@^2.0.1:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
uuid@^3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
uvm@1.7.0: uvm@1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/uvm/-/uvm-1.7.0.tgz#685d3a149ec7118fb73a73dfdc158ab46b0f0634" resolved "https://registry.yarnpkg.com/uvm/-/uvm-1.7.0.tgz#685d3a149ec7118fb73a73dfdc158ab46b0f0634"