Skip to content

Commit

Permalink
npm run format
Browse files Browse the repository at this point in the history
  • Loading branch information
ankurdotb committed Nov 24, 2023
1 parent 38bef28 commit 0ad9238
Show file tree
Hide file tree
Showing 26 changed files with 578 additions and 665 deletions.
39 changes: 16 additions & 23 deletions src/api/bigDipperApi.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,33 @@
import { GraphQLClient } from '../helpers/graphql';
import {
TotalSupplyResponse,
TotalStakedCoinsResponse,
ActiveValidatorsResponse,
} from '../types/bigDipper';
import { TotalSupplyResponse, TotalStakedCoinsResponse, ActiveValidatorsResponse } from '../types/bigDipper';

export class BigDipperApi {
constructor(public readonly graphql_client: GraphQLClient) {}
constructor(public readonly graphql_client: GraphQLClient) {}

async getTotalSupply(): Promise<number> {
let query = `query TotalSupply {
async getTotalSupply(): Promise<number> {
let query = `query TotalSupply {
supply {
coins
}
}`;

let resp = await this.graphql_client.query<{
data: TotalSupplyResponse;
}>(query);
let resp = await this.graphql_client.query<{
data: TotalSupplyResponse;
}>(query);

return Number(
resp.data.supply[0].coins.find((coin) => coin.denom === 'ncheq')
?.amount || '0'
);
}
return Number(resp.data.supply[0].coins.find((coin) => coin.denom === 'ncheq')?.amount || '0');
}

getTotalStakedCoins = async (): Promise<string> => {
let query = `query StakingInfo{
getTotalStakedCoins = async (): Promise<string> => {
let query = `query StakingInfo{
staking_pool {
bonded_tokens
}
}`;

const resp = await this.graphql_client.query<{
data: TotalStakedCoinsResponse;
}>(query);
return resp.data.staking_pool[0].bonded_tokens;
};
const resp = await this.graphql_client.query<{
data: TotalStakedCoinsResponse;
}>(query);
return resp.data.staking_pool[0].bonded_tokens;
};
}
19 changes: 8 additions & 11 deletions src/api/marketMonitorApi.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import { MarketMonitorData } from '../types/marketMonitor';
export class MarketMonitorApi {
constructor(public readonly base_market_monitor_api_url: string) {}
constructor(public readonly base_market_monitor_api_url: string) {}

async getMarketMonitoringData(): Promise<MarketMonitorData> {
const requestOptions = {
method: 'GET',
};
const response = await fetch(
`${this.base_market_monitor_api_url}`,
requestOptions
);
return (await response.json()) as MarketMonitorData;
}
async getMarketMonitoringData(): Promise<MarketMonitorData> {
const requestOptions = {
method: 'GET',
};
const response = await fetch(`${this.base_market_monitor_api_url}`, requestOptions);
return (await response.json()) as MarketMonitorData;
}
}
129 changes: 53 additions & 76 deletions src/api/nodeApi.ts
Original file line number Diff line number Diff line change
@@ -1,79 +1,56 @@
import {
Account,
Coin,
DelegationsResponse,
UnbondingResponse,
RewardsResponse
} from '../types/node';
import { Account, Coin, DelegationsResponse, UnbondingResponse, RewardsResponse } from '../types/node';

export class NodeApi {
constructor(public readonly base_rest_api_url: string) {}

async getAccountInfo(address: string): Promise<Account> {
let resp = await fetch(
`${this.base_rest_api_url}/cosmos/auth/v1beta1/accounts/${address}`
);
let respJson = (await resp.json()) as { account: Account };

return respJson.account;
}

async getAvailableBalance(address: string): Promise<Coin[]> {
let resp = await fetch(
`${this.base_rest_api_url}/cosmos/bank/v1beta1/balances/${address}`
);
let respJson = (await resp.json()) as { balances: Coin[] };

return respJson.balances;
}

async distributionGetRewards(address: string): Promise<number> {
let resp = await fetch(
`${this.base_rest_api_url}/cosmos/distribution/v1beta1/delegators/${address}/rewards`
);
let respJson = (await resp.json()) as RewardsResponse;

return Number(respJson?.total?.[0]?.amount ?? '0');
}

async getAllDelegations(
address: string,
offset: number,
should_count_total: boolean,
limit?: number
) {
// order of query params: count_total -> offset -> limit
const pagination_count_total = should_count_total
? 'pagination.count_total=true'
: 'pagination.count_total=false';
const pagination_limit = `pagination.limit=${
limit ? limit : REST_API_PAGINATION_LIMIT
}`;
const pagination_offset = `pagination.offset=${offset}`;
// NOTE: be cautious of newlines or spaces. Might make the request URL malformed
const resp = await fetch(
`${this.base_rest_api_url}/cosmos/staking/v1beta1/delegations/${address}?${pagination_count_total}&${pagination_limit}&${pagination_offset}`
);

return (await resp.json()) as DelegationsResponse;
}

async getAllUnbondingDelegations(
address: string,
offset: number,
should_count_total: boolean
) {
// order of query params: count_total -> offset -> limit
const pagination_count_total = should_count_total
? 'pagination.count_total=true'
: 'pagination.count_total=false';
const pagination_limit = `pagination.limit=${REST_API_PAGINATION_LIMIT}`;
const pagination_offset = `pagination.offset=${offset}`;
// NOTE: be cautious of new lines or spaces. Might make the request URL malformed
const resp = await fetch(
`${this.base_rest_api_url}/cosmos/staking/v1beta1/delegators/${address}/unbonding_delegations?${pagination_count_total}&${pagination_limit}&${pagination_offset}`
);

return (await resp.json()) as UnbondingResponse;
}
constructor(public readonly base_rest_api_url: string) {}

async getAccountInfo(address: string): Promise<Account> {
let resp = await fetch(`${this.base_rest_api_url}/cosmos/auth/v1beta1/accounts/${address}`);
let respJson = (await resp.json()) as { account: Account };

return respJson.account;
}

async getAvailableBalance(address: string): Promise<Coin[]> {
let resp = await fetch(`${this.base_rest_api_url}/cosmos/bank/v1beta1/balances/${address}`);
let respJson = (await resp.json()) as { balances: Coin[] };

return respJson.balances;
}

async distributionGetRewards(address: string): Promise<number> {
let resp = await fetch(`${this.base_rest_api_url}/cosmos/distribution/v1beta1/delegators/${address}/rewards`);
let respJson = (await resp.json()) as RewardsResponse;

return Number(respJson?.total?.[0]?.amount ?? '0');
}

async getAllDelegations(address: string, offset: number, should_count_total: boolean, limit?: number) {
// order of query params: count_total -> offset -> limit
const pagination_count_total = should_count_total
? 'pagination.count_total=true'
: 'pagination.count_total=false';
const pagination_limit = `pagination.limit=${limit ? limit : REST_API_PAGINATION_LIMIT}`;
const pagination_offset = `pagination.offset=${offset}`;
// NOTE: be cautious of newlines or spaces. Might make the request URL malformed
const resp = await fetch(
`${this.base_rest_api_url}/cosmos/staking/v1beta1/delegations/${address}?${pagination_count_total}&${pagination_limit}&${pagination_offset}`
);

return (await resp.json()) as DelegationsResponse;
}

async getAllUnbondingDelegations(address: string, offset: number, should_count_total: boolean) {
// order of query params: count_total -> offset -> limit
const pagination_count_total = should_count_total
? 'pagination.count_total=true'
: 'pagination.count_total=false';
const pagination_limit = `pagination.limit=${REST_API_PAGINATION_LIMIT}`;
const pagination_offset = `pagination.offset=${offset}`;
// NOTE: be cautious of new lines or spaces. Might make the request URL malformed
const resp = await fetch(
`${this.base_rest_api_url}/cosmos/staking/v1beta1/delegators/${address}/unbonding_delegations?${pagination_count_total}&${pagination_limit}&${pagination_offset}`
);

return (await resp.json()) as UnbondingResponse;
}
}
16 changes: 8 additions & 8 deletions src/bindings.d.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
declare global {
const TOKEN_EXPONENT: number;
const REST_API: string;
const REST_API_PAGINATION_LIMIT: number;
const GRAPHQL_API: string;
const CIRCULATING_SUPPLY_WATCHLIST: KVNamespace;
const CIRCULATING_SUPPLY_GROUPS: number;
const MARKET_MONITORING_API: string;
const WEBHOOK_URL: string;
const TOKEN_EXPONENT: number;
const REST_API: string;
const REST_API_PAGINATION_LIMIT: number;
const GRAPHQL_API: string;
const CIRCULATING_SUPPLY_WATCHLIST: KVNamespace;
const CIRCULATING_SUPPLY_GROUPS: number;
const MARKET_MONITORING_API: string;
const WEBHOOK_URL: string;
}

export {};
20 changes: 9 additions & 11 deletions src/handlers/allArbitrageOpportunities.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { MarketMonitorApi } from "../api/marketMonitorApi";
import { MarketMonitorApi } from '../api/marketMonitorApi';

export async function fetchPrices() {
let market_monitor_api = new MarketMonitorApi(
`${MARKET_MONITORING_API}`
);
return await market_monitor_api.getMarketMonitoringData();
let market_monitor_api = new MarketMonitorApi(`${MARKET_MONITORING_API}`);
return await market_monitor_api.getMarketMonitoringData();
}
export async function handler(request: Request): Promise<Response> {
const payload = await fetchPrices();
return new Response(JSON.stringify(payload, null, 2), {
headers: {
"content-type": "application/json;charset=UTF-8",
},
});
const payload = await fetchPrices();
return new Response(JSON.stringify(payload, null, 2), {
headers: {
'content-type': 'application/json;charset=UTF-8',
},
});
}
38 changes: 17 additions & 21 deletions src/handlers/arbitrageOpportunities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,25 @@ import { MarketMonitorApi } from '../api/marketMonitorApi';
import { ArbitrageOpportunity } from '../types/marketMonitor';

async function fetchPrices() {
let market_monitor_api = new MarketMonitorApi(
`${MARKET_MONITORING_API}`
);
return await market_monitor_api.getMarketMonitoringData();
let market_monitor_api = new MarketMonitorApi(`${MARKET_MONITORING_API}`);
return await market_monitor_api.getMarketMonitoringData();
}

export async function filterArbitrageOpportunities(): Promise<
ArbitrageOpportunity[]
> {
const payload = await fetchPrices();
const arbitrage_opportunities = [];
for (let i = 0; i < payload.arbitrageOpportunities.length; i++) {
if (payload.arbitrageOpportunities[i].arbitragePossible) {
arbitrage_opportunities.push(payload.arbitrageOpportunities[i]);
}
}
return arbitrage_opportunities;
export async function filterArbitrageOpportunities(): Promise<ArbitrageOpportunity[]> {
const payload = await fetchPrices();
const arbitrage_opportunities = [];
for (let i = 0; i < payload.arbitrageOpportunities.length; i++) {
if (payload.arbitrageOpportunities[i].arbitragePossible) {
arbitrage_opportunities.push(payload.arbitrageOpportunities[i]);
}
}
return arbitrage_opportunities;
}
export async function handler(request: Request): Promise<Response> {
const arbitrage_opportunities = await filterArbitrageOpportunities();
return new Response(JSON.stringify(arbitrage_opportunities, null, 2), {
headers: {
'content-type': 'application/json;charset=UTF-8',
},
});
const arbitrage_opportunities = await filterArbitrageOpportunities();
return new Response(JSON.stringify(arbitrage_opportunities, null, 2), {
headers: {
'content-type': 'application/json;charset=UTF-8',
},
});
}
15 changes: 7 additions & 8 deletions src/handlers/circulatingSupply.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ import { Request } from 'itty-router';
import { getCirculatingSupply } from '../helpers/circulating';

export async function handler(request: Request): Promise<Response> {
try {
let circulating_supply = await getCirculatingSupply();
return new Response(circulating_supply);
}
catch (err: any) {
console.log(err);
throw new Error(err.message);
}
try {
let circulating_supply = await getCirculatingSupply();
return new Response(circulating_supply);
} catch (err: any) {
console.log(err);
throw new Error(err.message);
}
}
Loading

0 comments on commit 0ad9238

Please sign in to comment.