UNPKG

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
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 }, }); } }