Skip to content

Commit

Permalink
Merge branch 'main' into tokens-update
Browse files Browse the repository at this point in the history
  • Loading branch information
schimih committed Nov 18, 2022
2 parents 622fd51 + 92cd4a8 commit 86a0496
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 4 deletions.
14 changes: 13 additions & 1 deletion src-network-providers/apiNetworkProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { defaultAxiosConfig, defaultPagination } from "./config";
import { NetworkStatus } from "./networkStatus";
import { ContractQueryResponse } from "./contractQueryResponse";
import { ContractQueryRequest } from "./contractQueryRequest";
import {PairOnNetwork} from "./pairs";

// TODO: Find & remove duplicate code between "ProxyNetworkProvider" and "ApiNetworkProvider".
export class ApiNetworkProvider implements INetworkProvider {
Expand Down Expand Up @@ -91,6 +92,17 @@ export class ApiNetworkProvider implements INetworkProvider {
return tokenData;
}

async getMexPairs(pagination?: IPagination): Promise<PairOnNetwork[]> {
let url = `mex/pairs`;
if (pagination) {
url = `${url}?from=${pagination.from}&size=${pagination.size}`;
}

let response: any[] = await this.doGetGeneric(url);

return response.map(item => PairOnNetwork.fromApiHttpResponse(item));
}

async getTransaction(txHash: string): Promise<TransactionOnNetwork> {
let response = await this.doGetGeneric(`transactions/${txHash}`);
let transaction = TransactionOnNetwork.fromApiHttpResponse(txHash, response);
Expand Down Expand Up @@ -174,6 +186,7 @@ export class ApiNetworkProvider implements INetworkProvider {
...this.config,
headers: {
"Content-Type": "application/json",
...this.config.headers,
},
});
let responsePayload = response.data;
Expand All @@ -185,7 +198,6 @@ export class ApiNetworkProvider implements INetworkProvider {

private handleApiError(error: any, resourceUrl: string) {
if (!error.response) {
console.warn(error);
throw new ErrNetworkProvider(resourceUrl, error.toString(), error);
}

Expand Down
4 changes: 2 additions & 2 deletions src-network-providers/config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { IPagination } from "./interface";

const JSONbig = require("json-bigint");
const JSONbig = require("json-bigint")({ constructorAction: 'ignore' });

export const defaultAxiosConfig = {
timeout: 1000,
timeout: 5000,
// See: https://github.com/axios/axios/issues/983 regarding transformResponse
transformResponse: [
function (data: any) {
Expand Down
55 changes: 55 additions & 0 deletions src-network-providers/pairs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import {Address} from "./primitives";
import {IAddress} from "./interface";
import BigNumber from "bignumber.js";

export class PairOnNetwork {
address: IAddress = new Address("");
id: string = "";
symbol: string = "";
name: string = "";
price: BigNumber = new BigNumber(0);
baseId: string = "";
basePrice: BigNumber = new BigNumber(0);
baseSymbol: string = "";
baseName: string = "";
quoteId: string = "";
quotePrice: BigNumber = new BigNumber(0);
quoteSymbol: string = "";
quoteName: string = "";
totalValue: BigNumber = new BigNumber(0);
volume24h: BigNumber = new BigNumber(0);
state: string = "";
type: string = "";

rawResponse: any = {};

constructor(init?: Partial<PairOnNetwork>) {
Object.assign(this, init);
}

static fromApiHttpResponse(payload: any): PairOnNetwork {
let result = new PairOnNetwork();

result.address = new Address(payload.address || "");
result.id = payload.id || "";
result.symbol = payload.symbol || "";
result.name = payload.name || "";
result.price = new BigNumber(payload.price || 0);
result.baseId = payload.baseId || "";
result.basePrice = new BigNumber(payload.basePrice || 0);
result.baseSymbol = payload.baseSymbol || "";
result.baseName = payload.baseName || "";
result.quoteId = payload.quoteId || "";
result.quotePrice = new BigNumber(payload.quotePrice || 0);
result.quoteSymbol = payload.quoteSymbol || "";
result.quoteName = payload.quoteName || "";
result.totalValue = new BigNumber(payload.totalValue || 0);
result.volume24h = new BigNumber(payload.volume24h || 0);
result.state = payload.state || "";
result.type = payload.type || "";

result.rawResponse = payload;

return result;
}
}
2 changes: 2 additions & 0 deletions src-network-providers/primitives.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ describe("test primitives", function () {

assert.equal(new Address(aliceBech32).bech32(), Address.fromPubkey(alicePubkey).bech32());
assert.equal(new Address(bobBech32).bech32(), Address.fromPubkey(bobPubkey).bech32());
assert.equal(new Address(aliceBech32).toString(), aliceBech32);
assert.equal(new Address(bobBech32).toString(), bobBech32);
});
});

4 changes: 4 additions & 0 deletions src-network-providers/primitives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ export class Address implements IAddress {
bech32(): string {
return this.value;
}

toString() {
return this.bech32();
}
}

export class Nonce {
Expand Down
2 changes: 1 addition & 1 deletion src-network-providers/proxyNetworkProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ export class ProxyNetworkProvider implements INetworkProvider {
...this.config,
headers: {
"Content-Type": "application/json",
...this.config.headers,
},
});
let responsePayload = response.data.data;
Expand All @@ -208,7 +209,6 @@ export class ProxyNetworkProvider implements INetworkProvider {

private handleApiError(error: any, resourceUrl: string) {
if (!error.response) {
console.warn(error);
throw new ErrNetworkProvider(resourceUrl, error.toString(), error);
}

Expand Down
16 changes: 16 additions & 0 deletions src-network-providers/serialization.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import assert from "assert";

describe("test JSON serialization", function () {
it("should not deserialize", async function () {
const JSONbig = require("json-bigint");
const data = `{"Costum":{"foo_constructor":1}}`;
assert.throws(() => JSONbig.parse(data));
});

it("should deserialize", async function () {
const JSONbig = require("json-bigint")({ constructorAction: 'ignore' });
const data = `{"Costum":{"foo_constructor":1}}`;
JSONbig.parse(data);
});
});

4 changes: 4 additions & 0 deletions src-network-providers/tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ import { IAddress } from "./interface";
export class FungibleTokenOfAccountOnNetwork {
identifier: string = "";
balance: BigNumber = new BigNumber(0);
rawResponse: any = {};

static fromHttpResponse(payload: any): FungibleTokenOfAccountOnNetwork {
let result = new FungibleTokenOfAccountOnNetwork();

result.identifier = payload.tokenIdentifier || payload.identifier || "";
result.balance = new BigNumber(payload.balance || 0);
result.rawResponse = payload;

return result;
}
Expand All @@ -29,6 +31,7 @@ export class NonFungibleTokenOfAccountOnNetwork {
decimals: number = 0;
royalties: BigNumber = new BigNumber(0);
assets: string[] = [];
balance: BigNumber = new BigNumber(0);

constructor(init?: Partial<NonFungibleTokenOfAccountOnNetwork>) {
Object.assign(this, init);
Expand Down Expand Up @@ -78,6 +81,7 @@ export class NonFungibleTokenOfAccountOnNetwork {
result.supply = new BigNumber(payload.balance || 1);
result.royalties = new BigNumber(payload.royalties || 0);
result.assets = payload.assets || [];
result.balance = new BigNumber(payload.balance || 0);

return result;
}
Expand Down

0 comments on commit 86a0496

Please sign in to comment.