laplace-api
Version:
Client library for Laplace API for the US stock market and BIST (Istanbul stock market) fundamental financial data.
134 lines (117 loc) • 3.57 kB
text/typescript
import { Client } from './client';
import { PriceDataPoint, Stock } from './stocks';
export enum CollectionType {
Sector = 'sector',
Industry = 'industry',
Theme = 'theme',
CustomTheme = 'custom-theme',
Collection = 'collection',
}
export enum Region {
Tr = 'tr',
Us = 'us',
}
export enum Locale {
Tr = 'tr',
En = 'en',
}
export enum SortBy {
PriceChange = "price_change"
}
export enum AggregateGraphPeriod {
OneDay = '1G',
OneWeek = '1H',
OneMonth = '1A',
ThreeMonth = '3A',
OneYear = '1Y',
TwoYear = '2Y',
ThreeYear = '3Y',
FiveYear = '5Y',
}
export interface Collection {
id: string;
title: string;
description?: string;
region: Region[];
locale?: Locale;
assetClass?: string;
imageUrl: string;
avatarUrl: string;
numStocks: number;
image?: string;
order?: number;
status?: string;
metaData?: Record<string, any>;
}
export interface CollectionDetail extends Collection {
stocks: Stock[];
}
export interface CollectionPriceGraph {
previous_close: number;
graph: PriceDataPoint[];
}
export class CollectionClient extends Client {
async getAllSectors(region: Region, locale: Locale): Promise<Collection[]> {
return this.sendRequest<Collection[]>({
method: 'GET',
url: `/api/v1/sector`,
params: { region, locale },
});
}
async getAllIndustries(region: Region, locale: Locale): Promise<Collection[]> {
return this.sendRequest<Collection[]>({
method: 'GET',
url: `/api/v1/industry`,
params: { region, locale },
});
}
async getAllThemes(region: Region, locale: Locale): Promise<Collection[]> {
return this.sendRequest<Collection[]>({
method: 'GET',
url: `/api/v1/theme`,
params: { region, locale },
});
}
async getAllCollections(region: Region, locale: Locale): Promise<Collection[]> {
return this.sendRequest<Collection[]>({
method: 'GET',
url: `/api/v1/collection`,
params: { region, locale },
});
}
async getSectorDetail(id: string, region: Region, locale: Locale, sortBy?: SortBy): Promise<CollectionDetail> {
return this.sendRequest<CollectionDetail>({
method: 'GET',
url: `/api/v1/sector/${id}`,
params: { region, locale, ...(sortBy != null && { sortBy }) },
});
}
async getIndustryDetail(id: string, region: Region, locale: Locale, sortBy?: SortBy): Promise<CollectionDetail> {
return this.sendRequest<CollectionDetail>({
method: 'GET',
url: `/api/v1/industry/${id}`,
params: { region, locale, ...(sortBy != null && { sortBy }) },
});
}
async getThemeDetail(id: string, region: Region, locale: Locale, sortBy?: SortBy): Promise<CollectionDetail> {
return this.sendRequest<CollectionDetail>({
method: 'GET',
url: `/api/v1/theme/${id}`,
params: { region, locale, ...(sortBy != null && { sortBy }) },
});
}
async getCollectionDetail(id: string, region: Region, locale: Locale, sortBy?: SortBy): Promise<CollectionDetail> {
return this.sendRequest<CollectionDetail>({
method: 'GET',
url: `/api/v1/collection/${id}`,
params: { region, locale, ...(sortBy != null && { sortBy }) },
});
}
async getAggregateGraph(period: AggregateGraphPeriod, sectorId: string, industryId: string, collectionId: string, region: Region): Promise<CollectionPriceGraph> {
return this.sendRequest<CollectionPriceGraph>({
method: 'GET',
url: `/api/v1/aggregate/graph`,
params: { period, sectorId, industryId, collectionId, region },
});
}
}