New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@getracker/api

Package Overview
Dependencies
Maintainers
1
Versions
88
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@getracker/api - npm Package Compare versions

Comparing version
6.3.2
to
6.3.3
+64
-19
dist/index.d.mts

@@ -42,4 +42,3 @@ import { AxiosInstance, CreateAxiosDefaults } from 'axios';

type ItemField = 'approxProfit' | 'buyLimit' | 'buyPriceCurrent' | 'buySellRatio' | 'buying' | 'buyingQuantity' | 'cachedUntil' | 'highAlch' | 'icon' | 'id' | 'itemId' | 'lastKnownBuyTime' | 'lastKnownSellTime' | 'lowAlch' | 'members' | 'name' | 'overall' | 'sellPriceCurrent' | 'selling' | 'sellingQuantity' | 'slug' | 'updatedAt' | 'url';
interface Item {
type Item = {
approxProfit: number;

@@ -70,3 +69,22 @@ buyLimit: number;

wikiUrl: string;
}
};
type ItemField = keyof Item;
type CalculatorItem<TItem = Item, TMethods extends object = null> = {
target: {
materials: Record<string, number>;
methods: TMethods;
baseCost: number;
perHr: number;
item: {
data: TItem;
};
};
cost: {
xp: number;
cost: number;
baseCost: number;
profit: number;
profitHr: number;
};
};
type MetaCount = {

@@ -76,2 +94,3 @@ count: number;

type ItemListPromise<T = Item> = Promise<T[]>;
type CalculatorListPromise<T = CalculatorItem> = Promise<T[]>;
type ItemPromise<T = Item> = Promise<T>;

@@ -207,6 +226,19 @@ type DataWrapped<T> = {

declare class CraftingSmithingWrapper extends APIBaseWrapper {
getBlastFurnace(): ItemListPromise;
getCookingBrewing(): ItemListPromise;
getTanLeather(): ItemListPromise;
getBlastFurnace(): CalculatorListPromise;
getCookingBrewing(): CalculatorListPromise;
getTanLeather(): Promise<TanLeather[]>;
}
type TanLeather = {
leather: {
data: Item;
};
tanned: {
data: Item;
};
cost: {
xp: number;
cost: number;
profit: number;
};
};

@@ -273,6 +305,14 @@ type DashboardTotal = {

declare class FletchingWrapper extends APIBaseWrapper {
getAmmo(): ItemListPromise;
getBows(): ItemListPromise;
getShields(): ItemListPromise;
getAmmo(): CalculatorListPromise;
getBows(): CalculatorListPromise<CalculatorItem<Item, FletchingBowsMethods>>;
getShields(): CalculatorListPromise;
}
type FletchingBowsMethods = {
all: {
negate: string[];
};
string_only: {
negate: string[];
};
};

@@ -330,7 +370,7 @@ declare class SuggestedItemsWrapper extends APIBaseWrapper {

interface ItemCombinationPiece {
type ItemCombinationPiece = {
qty: number;
item: DataWrapped<Item>;
}
interface ItemCombination {
};
type ItemCombination = {
qty: number;

@@ -349,6 +389,6 @@ label: string | null;

pieces: ItemCombinationPiece[];
}
};
type ItemCombinationResponse = ItemCombination[];
declare class ItemConversionsWrapper extends APIBaseWrapper {
getBarrowsRepair(): ItemListPromise;
getBarrowsRepair(): CalculatorListPromise;
getItemSets(opts?: {

@@ -399,13 +439,18 @@ filters: boolean;

filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
getMagicTablets(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise<CalculatorItem<Item, MagicTabletMethods>>;
getPlankMaking(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
getTreeSapling(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
}
type MagicTabletMethods = {
staff: {
negate: string[];
};
};

@@ -671,2 +716,2 @@ declare class MarketWatchWrapper extends APIBaseWrapper {

export { APIBaseWrapper, ApiKey, Dashboard, DashboardTiles, DashboardTotal, DataWrapped, DataWrappedWithMeta, DaysOption, DeathsCofferItem, DefaultOptions, FavouriteItem, FavouriteItemReorder, FavouriteItemReorderRequest, FswTransferItem, GeTrackerApi, GraphDayDuration, GraphDuration, GraphField, GraphRequestParams, GraphResponse, GraphResponseItem, GraphResponseWithError, GraphSource, ImportTransaction, Item, ItemArrayDataWrapped, ItemCombination, ItemCombinationPiece, ItemCombinationResponse, ItemDataWrapped, ItemField, ItemListParams, ItemListPromise, ItemPeriod, ItemPromise, LeaderboardSlug, LegacyPaginated, MaybePromise, MetaCount, OnlineUsers, OnlineUsersResponse, Paginated, PaginatedResponse, PopularItem, PriceAlertField, PriceAlertMethod, PriceAlertType, ProfitTransaction, RsUpdate, StatsResponse, StatusResponse, StatusResponseWithData, StatusResponseWithResourceUrl, Tag, TransactionStatus, TransactionsResponse, UpdateStatus, User, UserClass, UserPermissions, UserPremium, createClient$1 as createAxios, createClient, createClientFromEnv, handleResponseBody };
export { APIBaseWrapper, ApiKey, CalculatorItem, CalculatorListPromise, Dashboard, DashboardTiles, DashboardTotal, DataWrapped, DataWrappedWithMeta, DaysOption, DeathsCofferItem, DefaultOptions, FavouriteItem, FavouriteItemReorder, FavouriteItemReorderRequest, FletchingBowsMethods, FswTransferItem, GeTrackerApi, GraphDayDuration, GraphDuration, GraphField, GraphRequestParams, GraphResponse, GraphResponseItem, GraphResponseWithError, GraphSource, ImportTransaction, Item, ItemArrayDataWrapped, ItemCombination, ItemCombinationPiece, ItemCombinationResponse, ItemDataWrapped, ItemField, ItemListParams, ItemListPromise, ItemPeriod, ItemPromise, LeaderboardSlug, LegacyPaginated, MagicTabletMethods, MaybePromise, MetaCount, OnlineUsers, OnlineUsersResponse, Paginated, PaginatedResponse, PopularItem, PriceAlertField, PriceAlertMethod, PriceAlertType, ProfitTransaction, RsUpdate, StatsResponse, StatusResponse, StatusResponseWithData, StatusResponseWithResourceUrl, Tag, TanLeather, TransactionStatus, TransactionsResponse, UpdateStatus, User, UserClass, UserPermissions, UserPremium, createClient$1 as createAxios, createClient, createClientFromEnv, handleResponseBody };

@@ -42,4 +42,3 @@ import { AxiosInstance, CreateAxiosDefaults } from 'axios';

type ItemField = 'approxProfit' | 'buyLimit' | 'buyPriceCurrent' | 'buySellRatio' | 'buying' | 'buyingQuantity' | 'cachedUntil' | 'highAlch' | 'icon' | 'id' | 'itemId' | 'lastKnownBuyTime' | 'lastKnownSellTime' | 'lowAlch' | 'members' | 'name' | 'overall' | 'sellPriceCurrent' | 'selling' | 'sellingQuantity' | 'slug' | 'updatedAt' | 'url';
interface Item {
type Item = {
approxProfit: number;

@@ -70,3 +69,22 @@ buyLimit: number;

wikiUrl: string;
}
};
type ItemField = keyof Item;
type CalculatorItem<TItem = Item, TMethods extends object = null> = {
target: {
materials: Record<string, number>;
methods: TMethods;
baseCost: number;
perHr: number;
item: {
data: TItem;
};
};
cost: {
xp: number;
cost: number;
baseCost: number;
profit: number;
profitHr: number;
};
};
type MetaCount = {

@@ -76,2 +94,3 @@ count: number;

type ItemListPromise<T = Item> = Promise<T[]>;
type CalculatorListPromise<T = CalculatorItem> = Promise<T[]>;
type ItemPromise<T = Item> = Promise<T>;

@@ -207,6 +226,19 @@ type DataWrapped<T> = {

declare class CraftingSmithingWrapper extends APIBaseWrapper {
getBlastFurnace(): ItemListPromise;
getCookingBrewing(): ItemListPromise;
getTanLeather(): ItemListPromise;
getBlastFurnace(): CalculatorListPromise;
getCookingBrewing(): CalculatorListPromise;
getTanLeather(): Promise<TanLeather[]>;
}
type TanLeather = {
leather: {
data: Item;
};
tanned: {
data: Item;
};
cost: {
xp: number;
cost: number;
profit: number;
};
};

@@ -273,6 +305,14 @@ type DashboardTotal = {

declare class FletchingWrapper extends APIBaseWrapper {
getAmmo(): ItemListPromise;
getBows(): ItemListPromise;
getShields(): ItemListPromise;
getAmmo(): CalculatorListPromise;
getBows(): CalculatorListPromise<CalculatorItem<Item, FletchingBowsMethods>>;
getShields(): CalculatorListPromise;
}
type FletchingBowsMethods = {
all: {
negate: string[];
};
string_only: {
negate: string[];
};
};

@@ -330,7 +370,7 @@ declare class SuggestedItemsWrapper extends APIBaseWrapper {

interface ItemCombinationPiece {
type ItemCombinationPiece = {
qty: number;
item: DataWrapped<Item>;
}
interface ItemCombination {
};
type ItemCombination = {
qty: number;

@@ -349,6 +389,6 @@ label: string | null;

pieces: ItemCombinationPiece[];
}
};
type ItemCombinationResponse = ItemCombination[];
declare class ItemConversionsWrapper extends APIBaseWrapper {
getBarrowsRepair(): ItemListPromise;
getBarrowsRepair(): CalculatorListPromise;
getItemSets(opts?: {

@@ -399,13 +439,18 @@ filters: boolean;

filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
getMagicTablets(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise<CalculatorItem<Item, MagicTabletMethods>>;
getPlankMaking(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
getTreeSapling(opts?: {
filters: boolean;
}): ItemListPromise;
}): CalculatorListPromise;
}
type MagicTabletMethods = {
staff: {
negate: string[];
};
};

@@ -671,2 +716,2 @@ declare class MarketWatchWrapper extends APIBaseWrapper {

export { APIBaseWrapper, ApiKey, Dashboard, DashboardTiles, DashboardTotal, DataWrapped, DataWrappedWithMeta, DaysOption, DeathsCofferItem, DefaultOptions, FavouriteItem, FavouriteItemReorder, FavouriteItemReorderRequest, FswTransferItem, GeTrackerApi, GraphDayDuration, GraphDuration, GraphField, GraphRequestParams, GraphResponse, GraphResponseItem, GraphResponseWithError, GraphSource, ImportTransaction, Item, ItemArrayDataWrapped, ItemCombination, ItemCombinationPiece, ItemCombinationResponse, ItemDataWrapped, ItemField, ItemListParams, ItemListPromise, ItemPeriod, ItemPromise, LeaderboardSlug, LegacyPaginated, MaybePromise, MetaCount, OnlineUsers, OnlineUsersResponse, Paginated, PaginatedResponse, PopularItem, PriceAlertField, PriceAlertMethod, PriceAlertType, ProfitTransaction, RsUpdate, StatsResponse, StatusResponse, StatusResponseWithData, StatusResponseWithResourceUrl, Tag, TransactionStatus, TransactionsResponse, UpdateStatus, User, UserClass, UserPermissions, UserPremium, createClient$1 as createAxios, createClient, createClientFromEnv, handleResponseBody };
export { APIBaseWrapper, ApiKey, CalculatorItem, CalculatorListPromise, Dashboard, DashboardTiles, DashboardTotal, DataWrapped, DataWrappedWithMeta, DaysOption, DeathsCofferItem, DefaultOptions, FavouriteItem, FavouriteItemReorder, FavouriteItemReorderRequest, FletchingBowsMethods, FswTransferItem, GeTrackerApi, GraphDayDuration, GraphDuration, GraphField, GraphRequestParams, GraphResponse, GraphResponseItem, GraphResponseWithError, GraphSource, ImportTransaction, Item, ItemArrayDataWrapped, ItemCombination, ItemCombinationPiece, ItemCombinationResponse, ItemDataWrapped, ItemField, ItemListParams, ItemListPromise, ItemPeriod, ItemPromise, LeaderboardSlug, LegacyPaginated, MagicTabletMethods, MaybePromise, MetaCount, OnlineUsers, OnlineUsersResponse, Paginated, PaginatedResponse, PopularItem, PriceAlertField, PriceAlertMethod, PriceAlertType, ProfitTransaction, RsUpdate, StatsResponse, StatusResponse, StatusResponseWithData, StatusResponseWithResourceUrl, Tag, TanLeather, TransactionStatus, TransactionsResponse, UpdateStatus, User, UserClass, UserPermissions, UserPremium, createClient$1 as createAxios, createClient, createClientFromEnv, handleResponseBody };

@@ -720,3 +720,3 @@ var __create = Object.create;

headers: {
"X-Api-Client": "ge-tracker-api client v6.3.2",
"X-Api-Client": "ge-tracker-api client v6.3.3",
Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`

@@ -723,0 +723,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/lib/handlers.ts","../src/lib/query-string.ts","../src/endpoints/APIBaseWrapper.ts","../src/endpoints/APIUptimeWrapper.ts","../src/endpoints/CalculatorWrapper.ts","../src/endpoints/CraftingSmithingWrapper.ts","../src/endpoints/DashboardWrapper.ts","../src/endpoints/FavouriteItemsWrapper.ts","../src/endpoints/FletchingWrapper.ts","../src/endpoints/SuggestedItemsWrapper.ts","../src/endpoints/FlipFinderWrapper.ts","../src/endpoints/GraphWrapper.ts","../src/endpoints/HerbloreWrapper.ts","../src/endpoints/ItemConversionsWrapper.ts","../src/endpoints/ItemsWrapper.ts","../src/endpoints/LeaderboardWrapper.ts","../src/endpoints/MagicWrapper.ts","../src/endpoints/MarketWatchWrapper.ts","../src/endpoints/NotificationsWrapper.ts","../src/endpoints/PriceAlertWrapper.ts","../src/endpoints/ProfitTrackerWrapper.ts","../src/endpoints/RSUpdatesWrapper.ts","../src/endpoints/StatsWrapper.ts","../src/endpoints/StoreProfitWrapper.ts","../src/endpoints/TagWrapper.ts","../src/endpoints/UserWrapper.ts","../src/lib/api.ts","../src/lib/client.ts","../src/lib/errors.ts","../src/lib/config.ts"],"sourcesContent":["import {createApi, type GeTrackerApi} from './lib/api';\nimport {\n type ApiKey,\n createClient as createAxios,\n DefaultOptions,\n} from './lib/client';\nimport {getApiKeyFromEnv} from './lib/config';\nimport type {CreateAxiosDefaults} from 'axios';\n\nconst createInstance = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerApi => {\n return createApi(createAxios(apiKey, opts));\n};\n\nconst createClient = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n) => createInstance(apiKey, opts);\nconst createClientFromEnv = (opts: CreateAxiosDefaults | null = null) =>\n createInstance(getApiKeyFromEnv(), opts);\n\nexport * from './types';\nexport * from './endpoints/types';\nexport {APIBaseWrapper} from './endpoints';\nexport {handleResponseBody} from './lib/handlers';\nexport type {GeTrackerApi};\nexport {createClient, createClientFromEnv, createAxios, DefaultOptions};\n\nexport type {ApiKey};\n","export function handleResponseBody(body: any) {\n if (!body) {\n return null;\n }\n\n if (!('data' in body)) {\n return body;\n }\n\n return body.data;\n}\n","export type ParamObject = {\n [index: string]: any;\n};\n\ntype FlattenedObject = {\n path: string | Array<string>;\n val?: string;\n};\n\ntype FlattenedObjectArray = Array<FlattenedObject>;\n\n/**\n * Returns `true` if an object is empty\n *\n * @param obj\n * @return {boolean}\n */\nfunction isEmptyObject(obj: object) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\nfunction parseOptions(url: string, opts: ParamObject): string {\n if (isEmptyObject(opts)) {\n return url;\n }\n\n const params = toQueryString(opts);\n const sep = url.indexOf('?') === -1 ? '?' : '&';\n\n return `${url}${sep}${params}`;\n}\n\n/**\n * Convert an object to query string format\n *\n * @see https://stackoverflow.com/a/31415775/639665\n *\n * @param obj\n * @param urlEncode\n * @returns {string}\n */\nfunction toQueryString(obj: ParamObject, urlEncode: boolean = false) {\n //\n // Helper function that flattens an object, retaining key structure as a path array:\n //\n // Input: { prop1: 'x', prop2: { y: 1, z: 2 } }\n // Example output: [\n // { path: [ 'prop1' ], val: 'x' },\n // { path: [ 'prop2', 'y' ], val: '1' },\n // { path: [ 'prop2', 'z' ], val: '2' }\n // ]\n //\n function flattenObj(\n x: ParamObject,\n path: Array<string | number> = [],\n ): FlattenedObjectArray {\n let result: Array<object> = [];\n\n path = path || [];\n Object.keys(x).forEach(function (key) {\n if (!x.hasOwnProperty(key)) return;\n\n let newPath = path.slice();\n newPath.push(key);\n\n let vals = [];\n if (typeof x[key] === 'object') {\n // @ts-ignore\n vals = flattenObj(x[key], newPath);\n } else {\n vals.push({path: newPath, val: x[key]});\n }\n // @ts-ignore\n vals.forEach(function (obj) {\n return result.push(obj);\n });\n });\n\n // @ts-ignore\n return result;\n }\n\n // start with flattening `obj`\n let parts = flattenObj(obj); // [ { path: [ ...parts ], val: ... }, ... ]\n\n // convert to array notation:\n parts = parts.map(function (varInfo: FlattenedObject) {\n if (varInfo.path.length === 1) {\n varInfo.path = varInfo.path[0];\n } else {\n let first = varInfo.path[0];\n let rest = varInfo.path.slice(1);\n // @ts-ignore\n varInfo.path = first + '[' + rest.join('][') + ']';\n }\n return varInfo;\n }); // parts.map\n\n // join the parts to a query-string url-component\n let queryString = parts\n .map(function (varInfo) {\n return varInfo.path + '=' + varInfo.val;\n })\n .join('&');\n\n return urlEncode ? encodeURIComponent(queryString) : queryString;\n}\n\nexport {isEmptyObject, parseOptions};\n","import {handleResponseBody} from '../lib/handlers';\nimport {type ParamObject, parseOptions} from '../lib/query-string';\nimport type {AxiosInstance} from 'axios';\n\nexport interface ApiBase {\n onRequest(method: string, path: string, params: object): void;\n\n parseOptions(url: string, opts: ParamObject): string;\n}\n\nexport default class APIBaseWrapper {\n /**\n * @type {Function|null}\n */\n static onRequestCb: Function | null = null;\n protected client: AxiosInstance;\n protected baseUrl: string = '';\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n /**\n * Callback fired before a request is made (breadcrumb logging)\n *\n * @param {String} method\n * @param {String} path\n * @param {Object} params\n */\n protected onRequest(method: string, path: string, params: object = {}): void {\n if (typeof APIBaseWrapper.onRequestCb !== 'function') {\n return;\n }\n\n APIBaseWrapper.onRequestCb(method, path, params);\n }\n\n protected _wrapGet<T>(path: string): Promise<T> {\n this.onRequest('GET', path);\n\n return this.client\n .get(path)\n .then(({data}) => data)\n .then(handleResponseBody);\n }\n\n protected _wrapPost<T>(path: string, params = {}): Promise<T> {\n this.onRequest('POST', path, params);\n\n return this.client.post(path, params).then(({data}) => data);\n }\n\n protected _wrapPatch<T>(path: string, params = {}): Promise<T> {\n this.onRequest('PATCH', path, params);\n\n return this.client.patch(path, params).then(({data}) => data);\n }\n\n protected _wrapDelete<T>(path: string): Promise<T> {\n this.onRequest('DELETE', path);\n\n return this.client.delete(path).then(({data}) => data);\n }\n\n /**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\n protected parseOptions(url: string, opts: ParamObject): string {\n return parseOptions(url, opts);\n }\n\n protected getBaseUrl(): string {\n this.baseUrl = this.client.defaults.baseURL?.replace('/api', '') ?? '';\n return this.baseUrl;\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class APIUptimeWrapper extends APIBaseWrapper {\n getStatus() {\n return this._wrapGet('osb-uptime/status');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\n\nexport interface DeathsCofferItem extends Item {\n deathsCoffer: {\n cofferValue: number;\n cofferProfit: number;\n roi: number;\n limitPurchaseCost: number;\n potentialProfit: number;\n };\n}\n\nexport interface FswTransferItem {\n fsw: {\n overall: number;\n selling: number;\n buying: number;\n diff: number;\n buying_quantity: number;\n selling_quantity: number;\n };\n}\n\nexport default class CalculatorWrapper extends APIBaseWrapper {\n getDeathsCoffer(): Promise<DeathsCofferItem[]> {\n return this._wrapGet('deaths-coffer');\n }\n\n getFswTransfer(): Promise<FswTransferItem[]> {\n return this._wrapGet('fsw-transfer');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class CraftingSmithingWrapper extends APIBaseWrapper {\n getBlastFurnace(): ItemListPromise {\n return this._wrapGet('blast-furnace');\n }\n\n getCookingBrewing(): ItemListPromise {\n return this._wrapGet('crafting/cooking-brewing');\n }\n\n getTanLeather(): ItemListPromise {\n return this._wrapGet('tan-leather');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrappedWithMeta, ItemDataWrapped} from '../types';\n\nexport type DashboardTotal = {\n invested: number;\n profit: number;\n revenue: number;\n sales: number;\n};\n\nexport type DashboardTiles = {\n activeTransactions: number;\n mostFrequent: {item: ItemDataWrapped | null; qty: number};\n mostProfit: {item: ItemDataWrapped | null; gp: number};\n mostSold: {item: ItemDataWrapped | null; qty: number};\n total: DashboardTotal;\n};\n\nexport type Dashboard = {\n favouriteItems: DataWrappedWithMeta;\n suggestedItems: DataWrappedWithMeta;\n tiles: {\n data: DashboardTiles;\n };\n};\n\nexport default class DashboardWrapper extends APIBaseWrapper {\n getDashboard(): Promise<Dashboard> {\n return this._wrapGet('/dashboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, ItemListPromise} from '../types';\n\nexport type FavouriteItemReorder = {\n item_id: number;\n order: number;\n};\n\nexport type FavouriteItemReorderRequest = Array<FavouriteItemReorder>;\n\nexport type FavouriteItem = Item & {favouriteItemsId: number};\n\nexport default class FavouriteItemsWrapper extends APIBaseWrapper {\n getItems(): ItemListPromise<FavouriteItem> {\n return this._wrapGet('favourite-items');\n }\n\n /**\n * Add one or multiple items to favourites\n * @param itemId\n */\n addItem(itemId: number | number[]) {\n return this._wrapPost(`favourite-items`, {\n item_id: itemId,\n });\n }\n\n deleteItem(favouriteItemsId: number) {\n return this._wrapDelete(`favourite-items/${favouriteItemsId}`);\n }\n\n deleteItemByItemId(itemId: number) {\n return this._wrapDelete(`favourite-items/itemId/${itemId}`);\n }\n\n /**\n * Update favourite items sort order\n *\n * @param update\n * @returns {*}\n */\n reorder(update: FavouriteItemReorderRequest) {\n return this._wrapPost('favourite-items/reorder', {\n update,\n });\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class FletchingWrapper extends APIBaseWrapper {\n getAmmo(): ItemListPromise {\n return this._wrapGet('fletching/ammo');\n }\n\n getBows(): ItemListPromise {\n return this._wrapGet('fletching/bows');\n }\n\n getShields(): ItemListPromise {\n return this._wrapGet('fletching/shields');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ParamObject} from '../lib/query-string';\nimport type {ItemListPromise} from '../types';\n\nexport default class SuggestedItemsWrapper extends APIBaseWrapper {\n refresh() {\n return this._wrapGet('suggested-items/refresh');\n }\n\n getItems(opts: ParamObject = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('suggested-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListParams, ItemListPromise} from '../types';\nimport SuggestedItemsWrapper from './SuggestedItemsWrapper';\nimport FavouriteItemsWrapper from './FavouriteItemsWrapper';\n\nexport default class FlipFinderWrapper extends APIBaseWrapper {\n get SuggestedItems() {\n return new SuggestedItemsWrapper(this.client);\n }\n\n get FavouriteItems() {\n return new FavouriteItemsWrapper(this.client);\n }\n\n getGELimits(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('ge-limits', opts));\n }\n\n getHighestMargins(opts: ItemListParams = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('highest-margins', opts));\n }\n\n getHighVolume(opts = {filters: false}) {\n return this._wrapGet(this.parseOptions('high-volume', opts));\n }\n\n getNewItems(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('new-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport dayjs from 'dayjs';\nimport {handleResponseBody} from '../lib/handlers';\nimport type {\n GraphDuration,\n GraphRequestParams,\n GraphResponse,\n GraphSource,\n} from '../types';\n\nexport default class GraphWrapper extends APIBaseWrapper {\n private _dmm = false;\n\n protected _wrapGet<T>(path: string): Promise<T> {\n return this.client.get(this._wrapUrl(path)).then(handleResponseBody);\n }\n\n getDuration(\n duration: GraphDuration,\n itemId: number,\n source: GraphSource = null,\n ): Promise<GraphResponse> {\n let url = `graph/${itemId}/${duration}`;\n\n if (source !== null) {\n url = url + '?source=' + source;\n }\n\n return this._wrapGet(this._wrapUrl(url));\n }\n\n getDay(\n itemId: number,\n tenMinute: boolean = false,\n params: GraphRequestParams = {},\n ): Promise<GraphResponse> {\n if (!tenMinute) {\n const source =\n params.hasOwnProperty('source') && params.source !== null\n ? params.source\n : null;\n return this.getDuration('day', itemId, source);\n }\n\n const currentDate = dayjs().format('YYYY-MM-DD');\n\n const startDate = params.start\n ? dayjs(params.start).format('YYYY-MM-DD')\n : currentDate;\n const endDate = params.end\n ? dayjs(params.end).format('YYYY-MM-DD')\n : currentDate;\n\n let url = `graph/${itemId}/day?day=10&duration[start]=${startDate}&duration[end]=${endDate}`;\n\n if (params.hasOwnProperty('source') && params.source !== null) {\n url = url + '&source=' + params.source;\n }\n\n return this._wrapGet(url);\n }\n\n getWeek(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('week', itemId, source);\n }\n\n getMonth(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('month', itemId, source);\n }\n\n getQuarter(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('quarter', itemId, source);\n }\n\n getYear(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('year', itemId, source);\n }\n\n getAll(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('all', itemId, source);\n }\n\n getCandlestick(\n duration: GraphDuration,\n itemId: number,\n ): Promise<GraphResponse> {\n return this._wrapGet(`graph/candlestick/${itemId}/${duration}`);\n }\n\n getIndicators(duration: GraphDuration, itemId: number) {\n return this._wrapGet(`graph/indicators/${itemId}/${duration}`);\n }\n\n forceReload(duration: GraphDuration, itemId: number) {\n return this._wrapPost(`graph/force-reload`, {\n itemId,\n duration,\n });\n }\n\n dmm(enabled: boolean = true) {\n this._dmm = enabled;\n return this;\n }\n\n /**\n * Wrap URLs to support DMM endpoints\n *\n * @param path\n */\n _wrapUrl(path: string) {\n if (!this._dmm || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class HerbloreWrapper extends APIBaseWrapper {\n getCleanHerbs() {\n return this._wrapGet('herblore/clean-herbs');\n }\n\n getMakePotions() {\n return this._wrapGet('herblore/make-potions');\n }\n\n getUnfinishedPotions() {\n return this._wrapGet('herblore/unfinished-potions');\n }\n\n getDecantPotions(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('decant-potions', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrapped, Item, ItemListPromise} from '../types';\n\nexport interface ItemCombinationPiece {\n qty: number;\n item: DataWrapped<Item>;\n}\n\nexport interface ItemCombination {\n qty: number;\n label: string | null;\n conversionCost: number;\n avgSellingQuantity: number;\n ratio: number;\n total: {\n cost: number;\n profit: number;\n pieces: number;\n piecesCost: number;\n };\n item: DataWrapped<Item>;\n pieces: ItemCombinationPiece[];\n}\n\nexport type ItemCombinationResponse = ItemCombination[];\n\nexport default class ItemConversionsWrapper extends APIBaseWrapper {\n getBarrowsRepair(): ItemListPromise {\n return this._wrapGet('barrows-repair');\n }\n\n getItemSets(opts = {filters: false}): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('item-sets', opts));\n }\n\n getCombinationItems(\n opts = {filters: false},\n ): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('combination-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise, ItemPromise} from '../types';\n\nexport type ItemPeriod = {\n price: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n volume: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n};\n\nexport default class ItemsWrapper extends APIBaseWrapper {\n getAllItems(): ItemListPromise {\n return this._wrapGet('items');\n }\n\n getItem(itemId: number, detail: boolean = false): ItemPromise {\n const url = !detail ? `items/${itemId}` : `items/${itemId}?detail=true`;\n return this._wrapGet(url);\n }\n\n getItems(...itemIds: Array<number>): ItemListPromise {\n return this._wrapGet(`items/multi/${itemIds.join(',')}`);\n }\n\n search(query: string): ItemListPromise {\n return this._wrapGet(`items/search/${query}`);\n }\n\n getItemPeriod(itemId: number): Promise<ItemPeriod> {\n return this._wrapGet(`items/${itemId}/period`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type LeaderboardSlug = 'global' | 'monthly' | 'weekly' | 'daily';\n\nexport default class LeaderboardWrapper extends APIBaseWrapper {\n getLeaderboard(slug: LeaderboardSlug, opts = {}) {\n return this.client\n .get(this.parseOptions(`leaderboard/${slug}`, opts))\n .then(({data}) => data);\n }\n\n getRank(slug: LeaderboardSlug) {\n return this._wrapGet(`leaderboard/rank/${slug}`);\n }\n\n getSummary() {\n return this._wrapGet('leaderboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class MagicWrapper extends APIBaseWrapper {\n getHighAlchemy(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('high-alchemy', opts));\n }\n\n getEnchanting(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('magic/enchanting', opts));\n }\n\n getMagicTablets(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('magic-tablets', opts));\n }\n\n getPlankMaking(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('plank-making', opts));\n }\n\n getTreeSapling(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('tree-sapling', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class MarketWatchWrapper extends APIBaseWrapper {\n getIndex(indexId: number | string) {\n return this._wrapGet(`market-watch/${indexId}`);\n }\n\n getSummary() {\n return this._wrapGet('market-watch');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class NotificationsWrapper extends APIBaseWrapper {\n getNotifications() {\n return this._wrapGet('notifications');\n }\n\n getNotification(notificationId: string) {\n return this._wrapGet(`notifications/${notificationId}`);\n }\n\n markAllAsRead() {\n return this._wrapPost(`notifications/mark-read`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type PriceAlertField = 'current' | 'selling' | 'buying' | 'profit';\nexport type PriceAlertType = 'above' | 'below';\nexport type PriceAlertMethod = {\n sms?: boolean;\n email?: boolean;\n app?: boolean;\n};\n\nexport default class PriceAlertWrapper extends APIBaseWrapper {\n /**\n * Get Price Alerts\n *\n * `itemId` can be specified to load price alerts for a single item\n *\n * @param {Number} itemId\n * @return {*}\n */\n getAlerts(itemId = null) {\n const url = itemId ? `/price-alerts/${itemId}` : '/price-alerts';\n return this._wrapGet(url);\n }\n\n /**\n * Create Price Alert\n *\n * @return {*}\n */\n createAlert(\n itemId: number,\n field: PriceAlertField,\n type: PriceAlertType,\n price: number,\n methods: PriceAlertMethod = {},\n maxTriggers: number = 10,\n ) {\n return this._wrapPost('/price-alerts', {\n itemId,\n field,\n type,\n price,\n methods,\n maxTriggers,\n });\n }\n\n updateAlert(id: number, status: string, params = {}) {\n return this._wrapPost(`/price-alerts/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteAlert(id: number) {\n return this._wrapDelete(`/price-alerts/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, LegacyPaginated, PaginatedResponse} from '../types';\n\nexport type UpdateStatus = 'bought' | 'selling' | 'sold';\nexport type TransactionStatus = 'buying' & UpdateStatus;\n\nexport default class ProfitTrackerWrapper extends APIBaseWrapper {\n getTransactions<P = LegacyPaginated>(\n opts = {},\n ): Promise<TransactionsResponse<P>> {\n return this.client\n .get(this.parseOptions('/profit-tracker', opts))\n .then(({data}) => data);\n }\n\n getTransaction(id: string) {\n return this._wrapGet(`/profit-tracker/${id}`);\n }\n\n createTransaction(\n itemId: number,\n qty: number,\n buyPrice: number,\n params = {},\n ) {\n return this._wrapPost('/profit-tracker', {\n item_id: itemId,\n qty: qty,\n buy_price: buyPrice,\n ...params,\n });\n }\n\n updateTransaction(id: string, status: UpdateStatus, params = {}) {\n return this._wrapPost(`/profit-tracker/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteTransaction(id: string) {\n return this._wrapDelete(`/profit-tracker/${id}`);\n }\n\n getBuyingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/buying', opts))\n .then(({data}) => data);\n }\n\n getBoughtTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/bought', opts))\n .then(({data}) => data);\n }\n\n getSellingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/selling', opts))\n .then(({data}) => data);\n }\n\n getSoldTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/sold', opts))\n .then(({data}) => data);\n }\n\n getActiveTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/active-transactions', opts))\n .then(({data}) => data);\n }\n\n getPreviousTransactions(itemId: number) {\n return this._wrapGet(`/profit-tracker/previous-transactions/${itemId}`);\n }\n\n getSummary() {\n return this._wrapGet('/profit-tracker/summary');\n }\n\n getMostProfitable() {\n return this._wrapGet('/profit-tracker/most-profitable');\n }\n\n clear() {\n return this._wrapPost('/profit-tracker/clear');\n }\n\n import(transactions: ImportTransaction[]) {\n return this._wrapPost('/profit-tracker/import', {transactions});\n }\n}\n\nexport type ProfitTransaction = {\n id: string;\n status: TransactionStatus;\n order: {\n itemId: number;\n qty: number;\n buyPrice: number;\n sellPrice: number | null;\n intendedSellPrice: number | null;\n };\n dates: {\n buy: string | null;\n bought: string | null;\n sell: string | null;\n sold: string | null;\n };\n merchLog: {\n public: boolean | null;\n verified: boolean | null;\n rejected: boolean | null;\n };\n item: {\n data: Item;\n };\n};\n\nexport type TransactionsResponse<P = LegacyPaginated> = PaginatedResponse<\n ProfitTransaction,\n P\n>;\n\nexport type ImportTransaction = {\n id: string;\n itemId: number;\n qty: number | string;\n buyPrice: number | string;\n sellPrice?: number | string | null;\n status?: string | null;\n buyDate?: string | null;\n boughtDate?: string | null;\n sellDate?: string | null;\n soldDate?: string | null;\n intendedSellPrice?: number | string | null;\n changePivot?: number | null;\n threshold?: number | null;\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {PaginatedResponse} from '../types';\n\nexport type DaysOption = number | 'all';\n\ntype RsUpdateOptions = {\n days?: DaysOption;\n};\n\nexport type RsUpdate = {\n id: number;\n title: string;\n description: string;\n category: string;\n link: string;\n createdAt: string;\n};\n\nexport default class RSUpdatesWrapper extends APIBaseWrapper {\n get(opts: RsUpdateOptions = {}): Promise<PaginatedResponse<RsUpdate>> {\n return this.client\n .get(this.parseOptions('rs-updates', opts))\n .then(({data}) => data);\n }\n\n getUpdate(id: number) {\n return this._wrapGet(`rs-updates/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\nimport type {UserClass} from './UserWrapper';\nimport {handleResponseBody} from '../lib/handlers';\n\nexport interface PopularItem {\n item: Item;\n views: number;\n}\n\nexport interface StatsResponse {\n totalProfit: number;\n avgProfit: number;\n totalTransactions: number;\n totalItems: number;\n usersActive: number;\n usersOnline: number;\n users: {\n accountsOnline: number;\n premiumUsersOnline: number;\n standardUsersOnline: number;\n trialUsersOnline: number;\n registeredUsers: number;\n };\n popularItems: PopularItem[];\n}\n\ninterface OnlineUser {\n name: string;\n slug: string;\n class: UserClass;\n}\n\nexport type OnlineUsers = Record<UserClass, OnlineUser[]>;\n\nexport interface OnlineUsersResponse {\n onlineCount: {\n usersOnline: number;\n premium: number;\n standard: number;\n trial: number;\n guest: number;\n registeredUsers: number;\n };\n users: OnlineUsers;\n}\n\nexport default class StatsWrapper extends APIBaseWrapper {\n getGlobalStats(): Promise<StatsResponse> {\n return new Promise(async resolve => {\n const data = await this._wrapGet<StatsResponse>('stats');\n\n // Remove the `data` property from the item's response\n data.popularItems = data.popularItems.map(item => ({\n views: item.views,\n item: handleResponseBody(item.item),\n }));\n\n resolve(data);\n });\n }\n\n getOnlineUsers(): Promise<OnlineUsersResponse> {\n return this._wrapGet('stats/online');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class StoreProfitWrapper extends APIBaseWrapper {\n getStores() {\n return this._wrapGet('stores');\n }\n\n getItems() {\n return this._wrapGet('stores/profit');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport type Tag = {\n id: number;\n slug: string;\n name: string;\n};\n\nexport default class TagWrapper extends APIBaseWrapper {\n getTags(): Promise<Array<Tag>> {\n return this._wrapGet('tags');\n }\n\n addTag(itemId: number, tag: string) {\n return this._wrapPost(`tags`, {\n item_id: itemId,\n tag,\n });\n }\n\n deleteTag(itemId: number, tag: string) {\n return this._wrapDelete(`tags/item/${itemId}/${tag}`);\n }\n\n getTaggedItems(tag: string | Array<string>): ItemListPromise {\n // Join an array to a CSV list\n if (Array.isArray(tag)) {\n tag = tag.join(',');\n }\n\n return this._wrapGet(`tags/${tag}`);\n }\n\n getItemTags(itemId: number): Promise<Array<Tag>> {\n return this._wrapGet(`tags/item/${itemId}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type UserPremium = {\n premium: boolean;\n trial: boolean;\n view: boolean;\n};\n\nexport type UserPermissions = {\n moderator: boolean;\n staff: boolean;\n admin: boolean;\n disabled: boolean;\n temp?: boolean;\n};\n\nexport type UserClass =\n | 'admin'\n | 'staff'\n | 'moderator'\n | 'high-roller'\n | 'youtube'\n | 'twitch'\n | 'affiliate'\n | 'discord'\n | 'premium'\n | 'standard'\n | 'trial'\n | string;\n\nexport type User = {\n userId: string;\n name: string;\n email: string;\n totalProfit: number;\n registeredOn: Date | string;\n trialEndsOn: Date | string | null;\n emailVerified: boolean;\n profilePic: string;\n slug: string;\n apiKey: string;\n url: string;\n class: UserClass;\n premium: UserPremium;\n permissions: UserPermissions;\n avatars: Array<string>;\n};\n\nexport default class UserWrapper extends APIBaseWrapper {\n getById(userId: string): Promise<Array<User>> {\n return this._wrapGet(`users/${userId}`);\n }\n\n search(query: string): Promise<Array<User>> {\n return this._wrapPost(`users/search`, {\n query,\n });\n }\n\n getAuthenticateUser(): Promise<User> {\n return this._wrapGet('users/me');\n }\n}\n","import * as Endpoint from '../endpoints';\nimport APIBaseWrapper from '../endpoints/APIBaseWrapper';\nimport type {GeTrackerAxios} from './client';\n\nexport interface GeTrackerApi {\n APIUptime: Endpoint.APIUptimeWrapper;\n Calculator: Endpoint.CalculatorWrapper;\n CraftingSmithing: Endpoint.CraftingSmithingWrapper;\n Dashboard: Endpoint.DashboardWrapper;\n FavouriteItems: Endpoint.FavouriteItemsWrapper;\n FlipFinder: Endpoint.FlipFinderWrapper;\n Fletching: Endpoint.FletchingWrapper;\n Graphs: Endpoint.GraphWrapper;\n Herblore: Endpoint.HerbloreWrapper;\n ItemConversions: Endpoint.ItemConversionsWrapper;\n Items: Endpoint.ItemsWrapper;\n Leaderboard: Endpoint.LeaderboardWrapper;\n Magic: Endpoint.MagicWrapper;\n MarketWatch: Endpoint.MarketWatchWrapper;\n Notifications: Endpoint.NotificationsWrapper;\n PriceAlert: Endpoint.PriceAlertWrapper;\n ProfitTracker: Endpoint.ProfitTrackerWrapper;\n RSUpdates: Endpoint.RSUpdatesWrapper;\n Stats: Endpoint.StatsWrapper;\n StoreProfit: Endpoint.StoreProfitWrapper;\n Tags: Endpoint.TagWrapper;\n Users: Endpoint.UserWrapper;\n getManifest: () => Promise<any>;\n attachOnRequest: (\n callback: (method: string, path: string, params: object) => void,\n ) => void;\n getClient: () => GeTrackerAxios;\n dmm: (enabled: boolean) => void;\n}\n\nconst createApi = (client: GeTrackerAxios): GeTrackerApi => {\n return {\n APIUptime: new Endpoint.APIUptimeWrapper(client),\n Calculator: new Endpoint.CalculatorWrapper(client),\n CraftingSmithing: new Endpoint.CraftingSmithingWrapper(client),\n Dashboard: new Endpoint.DashboardWrapper(client),\n FavouriteItems: new Endpoint.FavouriteItemsWrapper(client),\n FlipFinder: new Endpoint.FlipFinderWrapper(client),\n Fletching: new Endpoint.FletchingWrapper(client),\n Graphs: new Endpoint.GraphWrapper(client),\n Herblore: new Endpoint.HerbloreWrapper(client),\n ItemConversions: new Endpoint.ItemConversionsWrapper(client),\n Items: new Endpoint.ItemsWrapper(client),\n Leaderboard: new Endpoint.LeaderboardWrapper(client),\n Magic: new Endpoint.MagicWrapper(client),\n MarketWatch: new Endpoint.MarketWatchWrapper(client),\n Notifications: new Endpoint.NotificationsWrapper(client),\n PriceAlert: new Endpoint.PriceAlertWrapper(client),\n ProfitTracker: new Endpoint.ProfitTrackerWrapper(client),\n RSUpdates: new Endpoint.RSUpdatesWrapper(client),\n Stats: new Endpoint.StatsWrapper(client),\n StoreProfit: new Endpoint.StoreProfitWrapper(client),\n Tags: new Endpoint.TagWrapper(client),\n Users: new Endpoint.UserWrapper(client),\n\n /**\n * Get GT App Manifest JSON\n *\n * @return {Promise<any>}\n */\n getManifest(): Promise<any> {\n // @ts-ignore\n const apiUrl = client.defaults.baseURL.replace('/api', '');\n return new Promise((resolve, reject) => {\n client\n .get(`${apiUrl}app_manifest.json`)\n .then(data => {\n if (data.hasOwnProperty('data')) {\n resolve(data.data);\n } else {\n reject(null);\n }\n })\n .catch(err => reject(err));\n });\n },\n\n /**\n * Attach a callback to each request.\n *\n * Used for error logging via Bugsnag or Sentry\n *\n * `callback` will be called with 3 parameters: `method`, `path`, `params`\n *\n * @param {Function} callback\n */\n attachOnRequest(\n callback: (method: string, path: string, params: object) => void,\n ): void {\n APIBaseWrapper.onRequestCb = callback;\n },\n\n /**\n * Get underlying Axios client instance\n */\n getClient(): GeTrackerAxios {\n return client;\n },\n\n dmm(enabled: boolean = true): void {\n client.dmm(enabled);\n },\n };\n};\n\nexport {createApi};\n","import Axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type CreateAxiosDefaults,\n} from 'axios';\nimport merge from 'deepmerge';\nimport * as errors from './errors';\n\nconst GE_TRACKER_API_URL = 'https://www.ge-tracker.com/api';\nconst GE_TRACKER_API_VERSION = 'v2.1';\n\nexport type ApiKey = string | null | undefined;\n\nconst DefaultOptions: CreateAxiosDefaults = {\n // set the base URL for all API calls made on this Axios instance\n baseURL: GE_TRACKER_API_URL,\n\n // set a sane default for the request TTL\n timeout: 30e3,\n\n // disable redirects -- API should NOT return a redirect response\n maxRedirects: 0,\n\n // explicitly set the default response type to JSON\n responseType: 'json',\n\n // set api client headers\n headers: {\n 'X-Api-Client': 'ge-tracker-api client v6.3.2',\n Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`,\n },\n};\n\nfunction isUnauthorizedResponse(error: AxiosError) {\n return error.response && error.response.status === 401;\n}\n\nfunction createAuthHeader(apiKey: ApiKey): object {\n // if (apiKey === null) {\n // return {};\n // }\n\n return {\n // Authorization header is required with a valid API key for all API calls\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\n/**\n * Wrap URLs to support DMM endpoints\n *\n * @param dmmMode\n * @param request\n */\nfunction applyDmmParameter(\n dmmMode: boolean,\n request: AxiosRequestConfig,\n): string | undefined {\n const path = request.url;\n\n if (!dmmMode || path === undefined || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n}\n\nexport interface GeTrackerAxios extends AxiosInstance {\n dmm(enabled: boolean): void;\n}\n\n/**\n * Create a new Axios instance\n *\n * @param apiKey\n * @param opts\n */\nfunction createClient(\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerAxios {\n const options = merge(DefaultOptions, opts || {});\n const instance = Axios.create(\n merge(options, {headers: createAuthHeader(apiKey)}),\n );\n\n let dmmMode: boolean = false;\n\n // add custom response interceptors\n instance.interceptors.response.use(\n response => {\n return response;\n },\n (error: AxiosError) => {\n // intercept 401 Unauthorized responses and reject the promise chain with\n // an appropriate typed error\n if (isUnauthorizedResponse(error)) {\n return Promise.reject(new errors.InvalidApiKey());\n }\n\n return Promise.reject(error);\n },\n );\n\n instance.interceptors.request.use(request => {\n request.url = applyDmmParameter(dmmMode, request);\n return request;\n });\n\n // @ts-ignore\n function dmm(enabled: boolean = true): void {\n dmmMode = enabled;\n }\n\n // @ts-ignore\n return instance;\n}\n\nexport {DefaultOptions, createClient, GE_TRACKER_API_URL};\n","function captureStackTrace(\n targetObject: object,\n constructorOpt: Function | undefined = undefined,\n) {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(targetObject, constructorOpt);\n }\n}\n\nclass InvalidApiKey extends Error {\n constructor() {\n super('Specified API key was missing or invalid');\n captureStackTrace(this, InvalidApiKey);\n }\n}\n\nexport {InvalidApiKey};\n","import type {ApiKey} from './client';\n\nfunction getApiKeyFromEnv(): ApiKey {\n return process.env.GE_TRACKER_API_KEY;\n}\n\nexport {getApiKeyFromEnv};\n"],"mappings":"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","names":["createClient","obj","dayjs","merge","Axios","createClient"]}
{"version":3,"sources":["../src/index.ts","../src/lib/handlers.ts","../src/lib/query-string.ts","../src/endpoints/APIBaseWrapper.ts","../src/endpoints/APIUptimeWrapper.ts","../src/endpoints/CalculatorWrapper.ts","../src/endpoints/CraftingSmithingWrapper.ts","../src/endpoints/DashboardWrapper.ts","../src/endpoints/FavouriteItemsWrapper.ts","../src/endpoints/FletchingWrapper.ts","../src/endpoints/SuggestedItemsWrapper.ts","../src/endpoints/FlipFinderWrapper.ts","../src/endpoints/GraphWrapper.ts","../src/endpoints/HerbloreWrapper.ts","../src/endpoints/ItemConversionsWrapper.ts","../src/endpoints/ItemsWrapper.ts","../src/endpoints/LeaderboardWrapper.ts","../src/endpoints/MagicWrapper.ts","../src/endpoints/MarketWatchWrapper.ts","../src/endpoints/NotificationsWrapper.ts","../src/endpoints/PriceAlertWrapper.ts","../src/endpoints/ProfitTrackerWrapper.ts","../src/endpoints/RSUpdatesWrapper.ts","../src/endpoints/StatsWrapper.ts","../src/endpoints/StoreProfitWrapper.ts","../src/endpoints/TagWrapper.ts","../src/endpoints/UserWrapper.ts","../src/lib/api.ts","../src/lib/client.ts","../src/lib/errors.ts","../src/lib/config.ts"],"sourcesContent":["import {createApi, type GeTrackerApi} from './lib/api';\nimport {\n type ApiKey,\n createClient as createAxios,\n DefaultOptions,\n} from './lib/client';\nimport {getApiKeyFromEnv} from './lib/config';\nimport type {CreateAxiosDefaults} from 'axios';\n\nconst createInstance = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerApi => {\n return createApi(createAxios(apiKey, opts));\n};\n\nconst createClient = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n) => createInstance(apiKey, opts);\nconst createClientFromEnv = (opts: CreateAxiosDefaults | null = null) =>\n createInstance(getApiKeyFromEnv(), opts);\n\nexport * from './types';\nexport * from './endpoints/types';\nexport {APIBaseWrapper} from './endpoints';\nexport {handleResponseBody} from './lib/handlers';\nexport type {GeTrackerApi};\nexport {createClient, createClientFromEnv, createAxios, DefaultOptions};\n\nexport type {ApiKey};\n","export function handleResponseBody(body: any) {\n if (!body) {\n return null;\n }\n\n if (!('data' in body)) {\n return body;\n }\n\n return body.data;\n}\n","export type ParamObject = {\n [index: string]: any;\n};\n\ntype FlattenedObject = {\n path: string | Array<string>;\n val?: string;\n};\n\ntype FlattenedObjectArray = Array<FlattenedObject>;\n\n/**\n * Returns `true` if an object is empty\n *\n * @param obj\n * @return {boolean}\n */\nfunction isEmptyObject(obj: object) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\nfunction parseOptions(url: string, opts: ParamObject): string {\n if (isEmptyObject(opts)) {\n return url;\n }\n\n const params = toQueryString(opts);\n const sep = url.indexOf('?') === -1 ? '?' : '&';\n\n return `${url}${sep}${params}`;\n}\n\n/**\n * Convert an object to query string format\n *\n * @see https://stackoverflow.com/a/31415775/639665\n *\n * @param obj\n * @param urlEncode\n * @returns {string}\n */\nfunction toQueryString(obj: ParamObject, urlEncode: boolean = false) {\n //\n // Helper function that flattens an object, retaining key structure as a path array:\n //\n // Input: { prop1: 'x', prop2: { y: 1, z: 2 } }\n // Example output: [\n // { path: [ 'prop1' ], val: 'x' },\n // { path: [ 'prop2', 'y' ], val: '1' },\n // { path: [ 'prop2', 'z' ], val: '2' }\n // ]\n //\n function flattenObj(\n x: ParamObject,\n path: Array<string | number> = [],\n ): FlattenedObjectArray {\n let result: Array<object> = [];\n\n path = path || [];\n Object.keys(x).forEach(function (key) {\n if (!x.hasOwnProperty(key)) return;\n\n let newPath = path.slice();\n newPath.push(key);\n\n let vals = [];\n if (typeof x[key] === 'object') {\n // @ts-ignore\n vals = flattenObj(x[key], newPath);\n } else {\n vals.push({path: newPath, val: x[key]});\n }\n // @ts-ignore\n vals.forEach(function (obj) {\n return result.push(obj);\n });\n });\n\n // @ts-ignore\n return result;\n }\n\n // start with flattening `obj`\n let parts = flattenObj(obj); // [ { path: [ ...parts ], val: ... }, ... ]\n\n // convert to array notation:\n parts = parts.map(function (varInfo: FlattenedObject) {\n if (varInfo.path.length === 1) {\n varInfo.path = varInfo.path[0];\n } else {\n let first = varInfo.path[0];\n let rest = varInfo.path.slice(1);\n // @ts-ignore\n varInfo.path = first + '[' + rest.join('][') + ']';\n }\n return varInfo;\n }); // parts.map\n\n // join the parts to a query-string url-component\n let queryString = parts\n .map(function (varInfo) {\n return varInfo.path + '=' + varInfo.val;\n })\n .join('&');\n\n return urlEncode ? encodeURIComponent(queryString) : queryString;\n}\n\nexport {isEmptyObject, parseOptions};\n","import {handleResponseBody} from '../lib/handlers';\nimport {type ParamObject, parseOptions} from '../lib/query-string';\nimport type {AxiosInstance} from 'axios';\n\nexport interface ApiBase {\n onRequest(method: string, path: string, params: object): void;\n\n parseOptions(url: string, opts: ParamObject): string;\n}\n\nexport default class APIBaseWrapper {\n /**\n * @type {Function|null}\n */\n static onRequestCb: Function | null = null;\n protected client: AxiosInstance;\n protected baseUrl: string = '';\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n /**\n * Callback fired before a request is made (breadcrumb logging)\n *\n * @param {String} method\n * @param {String} path\n * @param {Object} params\n */\n protected onRequest(method: string, path: string, params: object = {}): void {\n if (typeof APIBaseWrapper.onRequestCb !== 'function') {\n return;\n }\n\n APIBaseWrapper.onRequestCb(method, path, params);\n }\n\n protected _wrapGet<T>(path: string): Promise<T> {\n this.onRequest('GET', path);\n\n return this.client\n .get(path)\n .then(({data}) => data)\n .then(handleResponseBody);\n }\n\n protected _wrapPost<T>(path: string, params = {}): Promise<T> {\n this.onRequest('POST', path, params);\n\n return this.client.post(path, params).then(({data}) => data);\n }\n\n protected _wrapPatch<T>(path: string, params = {}): Promise<T> {\n this.onRequest('PATCH', path, params);\n\n return this.client.patch(path, params).then(({data}) => data);\n }\n\n protected _wrapDelete<T>(path: string): Promise<T> {\n this.onRequest('DELETE', path);\n\n return this.client.delete(path).then(({data}) => data);\n }\n\n /**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\n protected parseOptions(url: string, opts: ParamObject): string {\n return parseOptions(url, opts);\n }\n\n protected getBaseUrl(): string {\n this.baseUrl = this.client.defaults.baseURL?.replace('/api', '') ?? '';\n return this.baseUrl;\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class APIUptimeWrapper extends APIBaseWrapper {\n getStatus() {\n return this._wrapGet('osb-uptime/status');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\n\nexport interface DeathsCofferItem extends Item {\n deathsCoffer: {\n cofferValue: number;\n cofferProfit: number;\n roi: number;\n limitPurchaseCost: number;\n potentialProfit: number;\n };\n}\n\nexport interface FswTransferItem {\n fsw: {\n overall: number;\n selling: number;\n buying: number;\n diff: number;\n buying_quantity: number;\n selling_quantity: number;\n };\n}\n\nexport default class CalculatorWrapper extends APIBaseWrapper {\n getDeathsCoffer(): Promise<DeathsCofferItem[]> {\n return this._wrapGet('deaths-coffer');\n }\n\n getFswTransfer(): Promise<FswTransferItem[]> {\n return this._wrapGet('fsw-transfer');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {CalculatorListPromise, Item, ItemListPromise} from '../types';\n\nexport default class CraftingSmithingWrapper extends APIBaseWrapper {\n getBlastFurnace(): CalculatorListPromise {\n return this._wrapGet('blast-furnace');\n }\n\n getCookingBrewing(): CalculatorListPromise {\n return this._wrapGet('crafting/cooking-brewing');\n }\n\n getTanLeather(): Promise<TanLeather[]> {\n return this._wrapGet('tan-leather');\n }\n}\n\nexport type TanLeather = {\n leather: {\n data: Item;\n };\n tanned: {\n data: Item;\n };\n cost: {\n xp: number;\n cost: number;\n profit: number;\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrappedWithMeta, ItemDataWrapped} from '../types';\n\nexport type DashboardTotal = {\n invested: number;\n profit: number;\n revenue: number;\n sales: number;\n};\n\nexport type DashboardTiles = {\n activeTransactions: number;\n mostFrequent: {item: ItemDataWrapped | null; qty: number};\n mostProfit: {item: ItemDataWrapped | null; gp: number};\n mostSold: {item: ItemDataWrapped | null; qty: number};\n total: DashboardTotal;\n};\n\nexport type Dashboard = {\n favouriteItems: DataWrappedWithMeta;\n suggestedItems: DataWrappedWithMeta;\n tiles: {\n data: DashboardTiles;\n };\n};\n\nexport default class DashboardWrapper extends APIBaseWrapper {\n getDashboard(): Promise<Dashboard> {\n return this._wrapGet('/dashboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, ItemListPromise} from '../types';\n\nexport type FavouriteItemReorder = {\n item_id: number;\n order: number;\n};\n\nexport type FavouriteItemReorderRequest = Array<FavouriteItemReorder>;\n\nexport type FavouriteItem = Item & {favouriteItemsId: number};\n\nexport default class FavouriteItemsWrapper extends APIBaseWrapper {\n getItems(): ItemListPromise<FavouriteItem> {\n return this._wrapGet('favourite-items');\n }\n\n /**\n * Add one or multiple items to favourites\n * @param itemId\n */\n addItem(itemId: number | number[]) {\n return this._wrapPost(`favourite-items`, {\n item_id: itemId,\n });\n }\n\n deleteItem(favouriteItemsId: number) {\n return this._wrapDelete(`favourite-items/${favouriteItemsId}`);\n }\n\n deleteItemByItemId(itemId: number) {\n return this._wrapDelete(`favourite-items/itemId/${itemId}`);\n }\n\n /**\n * Update favourite items sort order\n *\n * @param update\n * @returns {*}\n */\n reorder(update: FavouriteItemReorderRequest) {\n return this._wrapPost('favourite-items/reorder', {\n update,\n });\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {CalculatorItem, CalculatorListPromise, Item} from '../types';\n\nexport default class FletchingWrapper extends APIBaseWrapper {\n getAmmo(): CalculatorListPromise {\n return this._wrapGet('fletching/ammo');\n }\n\n getBows(): CalculatorListPromise<CalculatorItem<Item, FletchingBowsMethods>> {\n return this._wrapGet('fletching/bows');\n }\n\n getShields(): CalculatorListPromise {\n return this._wrapGet('fletching/shields');\n }\n}\n\nexport type FletchingBowsMethods = {\n all: {\n negate: string[];\n };\n string_only: {\n negate: string[];\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ParamObject} from '../lib/query-string';\nimport type {ItemListPromise} from '../types';\n\nexport default class SuggestedItemsWrapper extends APIBaseWrapper {\n refresh() {\n return this._wrapGet('suggested-items/refresh');\n }\n\n getItems(opts: ParamObject = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('suggested-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListParams, ItemListPromise} from '../types';\nimport SuggestedItemsWrapper from './SuggestedItemsWrapper';\nimport FavouriteItemsWrapper from './FavouriteItemsWrapper';\n\nexport default class FlipFinderWrapper extends APIBaseWrapper {\n get SuggestedItems() {\n return new SuggestedItemsWrapper(this.client);\n }\n\n get FavouriteItems() {\n return new FavouriteItemsWrapper(this.client);\n }\n\n getGELimits(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('ge-limits', opts));\n }\n\n getHighestMargins(opts: ItemListParams = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('highest-margins', opts));\n }\n\n getHighVolume(opts = {filters: false}) {\n return this._wrapGet(this.parseOptions('high-volume', opts));\n }\n\n getNewItems(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('new-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport dayjs from 'dayjs';\nimport {handleResponseBody} from '../lib/handlers';\nimport type {\n GraphDuration,\n GraphRequestParams,\n GraphResponse,\n GraphSource,\n} from '../types';\n\nexport default class GraphWrapper extends APIBaseWrapper {\n private _dmm = false;\n\n protected _wrapGet<T>(path: string): Promise<T> {\n return this.client.get(this._wrapUrl(path)).then(handleResponseBody);\n }\n\n getDuration(\n duration: GraphDuration,\n itemId: number,\n source: GraphSource = null,\n ): Promise<GraphResponse> {\n let url = `graph/${itemId}/${duration}`;\n\n if (source !== null) {\n url = url + '?source=' + source;\n }\n\n return this._wrapGet(this._wrapUrl(url));\n }\n\n getDay(\n itemId: number,\n tenMinute: boolean = false,\n params: GraphRequestParams = {},\n ): Promise<GraphResponse> {\n if (!tenMinute) {\n const source =\n params.hasOwnProperty('source') && params.source !== null\n ? params.source\n : null;\n return this.getDuration('day', itemId, source);\n }\n\n const currentDate = dayjs().format('YYYY-MM-DD');\n\n const startDate = params.start\n ? dayjs(params.start).format('YYYY-MM-DD')\n : currentDate;\n const endDate = params.end\n ? dayjs(params.end).format('YYYY-MM-DD')\n : currentDate;\n\n let url = `graph/${itemId}/day?day=10&duration[start]=${startDate}&duration[end]=${endDate}`;\n\n if (params.hasOwnProperty('source') && params.source !== null) {\n url = url + '&source=' + params.source;\n }\n\n return this._wrapGet(url);\n }\n\n getWeek(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('week', itemId, source);\n }\n\n getMonth(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('month', itemId, source);\n }\n\n getQuarter(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('quarter', itemId, source);\n }\n\n getYear(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('year', itemId, source);\n }\n\n getAll(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('all', itemId, source);\n }\n\n getCandlestick(\n duration: GraphDuration,\n itemId: number,\n ): Promise<GraphResponse> {\n return this._wrapGet(`graph/candlestick/${itemId}/${duration}`);\n }\n\n getIndicators(duration: GraphDuration, itemId: number) {\n return this._wrapGet(`graph/indicators/${itemId}/${duration}`);\n }\n\n forceReload(duration: GraphDuration, itemId: number) {\n return this._wrapPost(`graph/force-reload`, {\n itemId,\n duration,\n });\n }\n\n dmm(enabled: boolean = true) {\n this._dmm = enabled;\n return this;\n }\n\n /**\n * Wrap URLs to support DMM endpoints\n *\n * @param path\n */\n _wrapUrl(path: string) {\n if (!this._dmm || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class HerbloreWrapper extends APIBaseWrapper {\n getCleanHerbs() {\n return this._wrapGet('herblore/clean-herbs');\n }\n\n getMakePotions() {\n return this._wrapGet('herblore/make-potions');\n }\n\n getUnfinishedPotions() {\n return this._wrapGet('herblore/unfinished-potions');\n }\n\n getDecantPotions(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('decant-potions', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {\n CalculatorListPromise,\n DataWrapped,\n Item,\n ItemListPromise,\n} from '../types';\n\nexport type ItemCombinationPiece = {\n qty: number;\n item: DataWrapped<Item>;\n};\n\nexport type ItemCombination = {\n qty: number;\n label: string | null;\n conversionCost: number;\n avgSellingQuantity: number;\n ratio: number;\n total: {\n cost: number;\n profit: number;\n pieces: number;\n piecesCost: number;\n };\n item: DataWrapped<Item>;\n pieces: ItemCombinationPiece[];\n};\n\nexport type ItemCombinationResponse = ItemCombination[];\n\nexport default class ItemConversionsWrapper extends APIBaseWrapper {\n getBarrowsRepair(): CalculatorListPromise {\n return this._wrapGet('barrows-repair');\n }\n\n getItemSets(opts = {filters: false}): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('item-sets', opts));\n }\n\n getCombinationItems(\n opts = {filters: false},\n ): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('combination-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise, ItemPromise} from '../types';\n\nexport type ItemPeriod = {\n price: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n volume: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n};\n\nexport default class ItemsWrapper extends APIBaseWrapper {\n getAllItems(): ItemListPromise {\n return this._wrapGet('items');\n }\n\n getItem(itemId: number, detail: boolean = false): ItemPromise {\n const url = !detail ? `items/${itemId}` : `items/${itemId}?detail=true`;\n return this._wrapGet(url);\n }\n\n getItems(...itemIds: Array<number>): ItemListPromise {\n return this._wrapGet(`items/multi/${itemIds.join(',')}`);\n }\n\n search(query: string): ItemListPromise {\n return this._wrapGet(`items/search/${query}`);\n }\n\n getItemPeriod(itemId: number): Promise<ItemPeriod> {\n return this._wrapGet(`items/${itemId}/period`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type LeaderboardSlug = 'global' | 'monthly' | 'weekly' | 'daily';\n\nexport default class LeaderboardWrapper extends APIBaseWrapper {\n getLeaderboard(slug: LeaderboardSlug, opts = {}) {\n return this.client\n .get(this.parseOptions(`leaderboard/${slug}`, opts))\n .then(({data}) => data);\n }\n\n getRank(slug: LeaderboardSlug) {\n return this._wrapGet(`leaderboard/rank/${slug}`);\n }\n\n getSummary() {\n return this._wrapGet('leaderboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {\n CalculatorItem,\n CalculatorListPromise,\n Item,\n ItemListPromise,\n} from '../types';\n\nexport default class MagicWrapper extends APIBaseWrapper {\n getHighAlchemy(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('high-alchemy', opts));\n }\n\n getEnchanting(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('magic/enchanting', opts));\n }\n\n getMagicTablets(\n opts = {filters: false},\n ): CalculatorListPromise<CalculatorItem<Item, MagicTabletMethods>> {\n return this._wrapGet(this.parseOptions('magic-tablets', opts));\n }\n\n getPlankMaking(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('plank-making', opts));\n }\n\n getTreeSapling(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('tree-sapling', opts));\n }\n}\n\nexport type MagicTabletMethods = {\n staff: {\n negate: string[];\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class MarketWatchWrapper extends APIBaseWrapper {\n getIndex(indexId: number | string) {\n return this._wrapGet(`market-watch/${indexId}`);\n }\n\n getSummary() {\n return this._wrapGet('market-watch');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class NotificationsWrapper extends APIBaseWrapper {\n getNotifications() {\n return this._wrapGet('notifications');\n }\n\n getNotification(notificationId: string) {\n return this._wrapGet(`notifications/${notificationId}`);\n }\n\n markAllAsRead() {\n return this._wrapPost(`notifications/mark-read`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type PriceAlertField = 'current' | 'selling' | 'buying' | 'profit';\nexport type PriceAlertType = 'above' | 'below';\nexport type PriceAlertMethod = {\n sms?: boolean;\n email?: boolean;\n app?: boolean;\n};\n\nexport default class PriceAlertWrapper extends APIBaseWrapper {\n /**\n * Get Price Alerts\n *\n * `itemId` can be specified to load price alerts for a single item\n *\n * @param {Number} itemId\n * @return {*}\n */\n getAlerts(itemId = null) {\n const url = itemId ? `/price-alerts/${itemId}` : '/price-alerts';\n return this._wrapGet(url);\n }\n\n /**\n * Create Price Alert\n *\n * @return {*}\n */\n createAlert(\n itemId: number,\n field: PriceAlertField,\n type: PriceAlertType,\n price: number,\n methods: PriceAlertMethod = {},\n maxTriggers: number = 10,\n ) {\n return this._wrapPost('/price-alerts', {\n itemId,\n field,\n type,\n price,\n methods,\n maxTriggers,\n });\n }\n\n updateAlert(id: number, status: string, params = {}) {\n return this._wrapPost(`/price-alerts/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteAlert(id: number) {\n return this._wrapDelete(`/price-alerts/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, LegacyPaginated, PaginatedResponse} from '../types';\n\nexport type UpdateStatus = 'bought' | 'selling' | 'sold';\nexport type TransactionStatus = 'buying' & UpdateStatus;\n\nexport default class ProfitTrackerWrapper extends APIBaseWrapper {\n getTransactions<P = LegacyPaginated>(\n opts = {},\n ): Promise<TransactionsResponse<P>> {\n return this.client\n .get(this.parseOptions('/profit-tracker', opts))\n .then(({data}) => data);\n }\n\n getTransaction(id: string) {\n return this._wrapGet(`/profit-tracker/${id}`);\n }\n\n createTransaction(\n itemId: number,\n qty: number,\n buyPrice: number,\n params = {},\n ) {\n return this._wrapPost('/profit-tracker', {\n item_id: itemId,\n qty: qty,\n buy_price: buyPrice,\n ...params,\n });\n }\n\n updateTransaction(id: string, status: UpdateStatus, params = {}) {\n return this._wrapPost(`/profit-tracker/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteTransaction(id: string) {\n return this._wrapDelete(`/profit-tracker/${id}`);\n }\n\n getBuyingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/buying', opts))\n .then(({data}) => data);\n }\n\n getBoughtTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/bought', opts))\n .then(({data}) => data);\n }\n\n getSellingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/selling', opts))\n .then(({data}) => data);\n }\n\n getSoldTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/sold', opts))\n .then(({data}) => data);\n }\n\n getActiveTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/active-transactions', opts))\n .then(({data}) => data);\n }\n\n getPreviousTransactions(itemId: number) {\n return this._wrapGet(`/profit-tracker/previous-transactions/${itemId}`);\n }\n\n getSummary() {\n return this._wrapGet('/profit-tracker/summary');\n }\n\n getMostProfitable() {\n return this._wrapGet('/profit-tracker/most-profitable');\n }\n\n clear() {\n return this._wrapPost('/profit-tracker/clear');\n }\n\n import(transactions: ImportTransaction[]) {\n return this._wrapPost('/profit-tracker/import', {transactions});\n }\n}\n\nexport type ProfitTransaction = {\n id: string;\n status: TransactionStatus;\n order: {\n itemId: number;\n qty: number;\n buyPrice: number;\n sellPrice: number | null;\n intendedSellPrice: number | null;\n };\n dates: {\n buy: string | null;\n bought: string | null;\n sell: string | null;\n sold: string | null;\n };\n merchLog: {\n public: boolean | null;\n verified: boolean | null;\n rejected: boolean | null;\n };\n item: {\n data: Item;\n };\n};\n\nexport type TransactionsResponse<P = LegacyPaginated> = PaginatedResponse<\n ProfitTransaction,\n P\n>;\n\nexport type ImportTransaction = {\n id: string;\n itemId: number;\n qty: number | string;\n buyPrice: number | string;\n sellPrice?: number | string | null;\n status?: string | null;\n buyDate?: string | null;\n boughtDate?: string | null;\n sellDate?: string | null;\n soldDate?: string | null;\n intendedSellPrice?: number | string | null;\n changePivot?: number | null;\n threshold?: number | null;\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {PaginatedResponse} from '../types';\n\nexport type DaysOption = number | 'all';\n\ntype RsUpdateOptions = {\n days?: DaysOption;\n};\n\nexport type RsUpdate = {\n id: number;\n title: string;\n description: string;\n category: string;\n link: string;\n createdAt: string;\n};\n\nexport default class RSUpdatesWrapper extends APIBaseWrapper {\n get(opts: RsUpdateOptions = {}): Promise<PaginatedResponse<RsUpdate>> {\n return this.client\n .get(this.parseOptions('rs-updates', opts))\n .then(({data}) => data);\n }\n\n getUpdate(id: number) {\n return this._wrapGet(`rs-updates/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\nimport type {UserClass} from './UserWrapper';\nimport {handleResponseBody} from '../lib/handlers';\n\nexport interface PopularItem {\n item: Item;\n views: number;\n}\n\nexport interface StatsResponse {\n totalProfit: number;\n avgProfit: number;\n totalTransactions: number;\n totalItems: number;\n usersActive: number;\n usersOnline: number;\n users: {\n accountsOnline: number;\n premiumUsersOnline: number;\n standardUsersOnline: number;\n trialUsersOnline: number;\n registeredUsers: number;\n };\n popularItems: PopularItem[];\n}\n\ninterface OnlineUser {\n name: string;\n slug: string;\n class: UserClass;\n}\n\nexport type OnlineUsers = Record<UserClass, OnlineUser[]>;\n\nexport interface OnlineUsersResponse {\n onlineCount: {\n usersOnline: number;\n premium: number;\n standard: number;\n trial: number;\n guest: number;\n registeredUsers: number;\n };\n users: OnlineUsers;\n}\n\nexport default class StatsWrapper extends APIBaseWrapper {\n getGlobalStats(): Promise<StatsResponse> {\n return new Promise(async resolve => {\n const data = await this._wrapGet<StatsResponse>('stats');\n\n // Remove the `data` property from the item's response\n data.popularItems = data.popularItems.map(item => ({\n views: item.views,\n item: handleResponseBody(item.item),\n }));\n\n resolve(data);\n });\n }\n\n getOnlineUsers(): Promise<OnlineUsersResponse> {\n return this._wrapGet('stats/online');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class StoreProfitWrapper extends APIBaseWrapper {\n getStores() {\n return this._wrapGet('stores');\n }\n\n getItems() {\n return this._wrapGet('stores/profit');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport type Tag = {\n id: number;\n slug: string;\n name: string;\n};\n\nexport default class TagWrapper extends APIBaseWrapper {\n getTags(): Promise<Array<Tag>> {\n return this._wrapGet('tags');\n }\n\n addTag(itemId: number, tag: string) {\n return this._wrapPost(`tags`, {\n item_id: itemId,\n tag,\n });\n }\n\n deleteTag(itemId: number, tag: string) {\n return this._wrapDelete(`tags/item/${itemId}/${tag}`);\n }\n\n getTaggedItems(tag: string | Array<string>): ItemListPromise {\n // Join an array to a CSV list\n if (Array.isArray(tag)) {\n tag = tag.join(',');\n }\n\n return this._wrapGet(`tags/${tag}`);\n }\n\n getItemTags(itemId: number): Promise<Array<Tag>> {\n return this._wrapGet(`tags/item/${itemId}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type UserPremium = {\n premium: boolean;\n trial: boolean;\n view: boolean;\n};\n\nexport type UserPermissions = {\n moderator: boolean;\n staff: boolean;\n admin: boolean;\n disabled: boolean;\n temp?: boolean;\n};\n\nexport type UserClass =\n | 'admin'\n | 'staff'\n | 'moderator'\n | 'high-roller'\n | 'youtube'\n | 'twitch'\n | 'affiliate'\n | 'discord'\n | 'premium'\n | 'standard'\n | 'trial'\n | string;\n\nexport type User = {\n userId: string;\n name: string;\n email: string;\n totalProfit: number;\n registeredOn: Date | string;\n trialEndsOn: Date | string | null;\n emailVerified: boolean;\n profilePic: string;\n slug: string;\n apiKey: string;\n url: string;\n class: UserClass;\n premium: UserPremium;\n permissions: UserPermissions;\n avatars: Array<string>;\n};\n\nexport default class UserWrapper extends APIBaseWrapper {\n getById(userId: string): Promise<Array<User>> {\n return this._wrapGet(`users/${userId}`);\n }\n\n search(query: string): Promise<Array<User>> {\n return this._wrapPost(`users/search`, {\n query,\n });\n }\n\n getAuthenticateUser(): Promise<User> {\n return this._wrapGet('users/me');\n }\n}\n","import * as Endpoint from '../endpoints';\nimport APIBaseWrapper from '../endpoints/APIBaseWrapper';\nimport type {GeTrackerAxios} from './client';\n\nexport interface GeTrackerApi {\n APIUptime: Endpoint.APIUptimeWrapper;\n Calculator: Endpoint.CalculatorWrapper;\n CraftingSmithing: Endpoint.CraftingSmithingWrapper;\n Dashboard: Endpoint.DashboardWrapper;\n FavouriteItems: Endpoint.FavouriteItemsWrapper;\n FlipFinder: Endpoint.FlipFinderWrapper;\n Fletching: Endpoint.FletchingWrapper;\n Graphs: Endpoint.GraphWrapper;\n Herblore: Endpoint.HerbloreWrapper;\n ItemConversions: Endpoint.ItemConversionsWrapper;\n Items: Endpoint.ItemsWrapper;\n Leaderboard: Endpoint.LeaderboardWrapper;\n Magic: Endpoint.MagicWrapper;\n MarketWatch: Endpoint.MarketWatchWrapper;\n Notifications: Endpoint.NotificationsWrapper;\n PriceAlert: Endpoint.PriceAlertWrapper;\n ProfitTracker: Endpoint.ProfitTrackerWrapper;\n RSUpdates: Endpoint.RSUpdatesWrapper;\n Stats: Endpoint.StatsWrapper;\n StoreProfit: Endpoint.StoreProfitWrapper;\n Tags: Endpoint.TagWrapper;\n Users: Endpoint.UserWrapper;\n getManifest: () => Promise<any>;\n attachOnRequest: (\n callback: (method: string, path: string, params: object) => void,\n ) => void;\n getClient: () => GeTrackerAxios;\n dmm: (enabled: boolean) => void;\n}\n\nconst createApi = (client: GeTrackerAxios): GeTrackerApi => {\n return {\n APIUptime: new Endpoint.APIUptimeWrapper(client),\n Calculator: new Endpoint.CalculatorWrapper(client),\n CraftingSmithing: new Endpoint.CraftingSmithingWrapper(client),\n Dashboard: new Endpoint.DashboardWrapper(client),\n FavouriteItems: new Endpoint.FavouriteItemsWrapper(client),\n FlipFinder: new Endpoint.FlipFinderWrapper(client),\n Fletching: new Endpoint.FletchingWrapper(client),\n Graphs: new Endpoint.GraphWrapper(client),\n Herblore: new Endpoint.HerbloreWrapper(client),\n ItemConversions: new Endpoint.ItemConversionsWrapper(client),\n Items: new Endpoint.ItemsWrapper(client),\n Leaderboard: new Endpoint.LeaderboardWrapper(client),\n Magic: new Endpoint.MagicWrapper(client),\n MarketWatch: new Endpoint.MarketWatchWrapper(client),\n Notifications: new Endpoint.NotificationsWrapper(client),\n PriceAlert: new Endpoint.PriceAlertWrapper(client),\n ProfitTracker: new Endpoint.ProfitTrackerWrapper(client),\n RSUpdates: new Endpoint.RSUpdatesWrapper(client),\n Stats: new Endpoint.StatsWrapper(client),\n StoreProfit: new Endpoint.StoreProfitWrapper(client),\n Tags: new Endpoint.TagWrapper(client),\n Users: new Endpoint.UserWrapper(client),\n\n /**\n * Get GT App Manifest JSON\n *\n * @return {Promise<any>}\n */\n getManifest(): Promise<any> {\n // @ts-ignore\n const apiUrl = client.defaults.baseURL.replace('/api', '');\n return new Promise((resolve, reject) => {\n client\n .get(`${apiUrl}app_manifest.json`)\n .then(data => {\n if (data.hasOwnProperty('data')) {\n resolve(data.data);\n } else {\n reject(null);\n }\n })\n .catch(err => reject(err));\n });\n },\n\n /**\n * Attach a callback to each request.\n *\n * Used for error logging via Bugsnag or Sentry\n *\n * `callback` will be called with 3 parameters: `method`, `path`, `params`\n *\n * @param {Function} callback\n */\n attachOnRequest(\n callback: (method: string, path: string, params: object) => void,\n ): void {\n APIBaseWrapper.onRequestCb = callback;\n },\n\n /**\n * Get underlying Axios client instance\n */\n getClient(): GeTrackerAxios {\n return client;\n },\n\n dmm(enabled: boolean = true): void {\n client.dmm(enabled);\n },\n };\n};\n\nexport {createApi};\n","import Axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type CreateAxiosDefaults,\n} from 'axios';\nimport merge from 'deepmerge';\nimport * as errors from './errors';\n\nconst GE_TRACKER_API_URL = 'https://www.ge-tracker.com/api';\nconst GE_TRACKER_API_VERSION = 'v2.1';\n\nexport type ApiKey = string | null | undefined;\n\nconst DefaultOptions: CreateAxiosDefaults = {\n // set the base URL for all API calls made on this Axios instance\n baseURL: GE_TRACKER_API_URL,\n\n // set a sane default for the request TTL\n timeout: 30e3,\n\n // disable redirects -- API should NOT return a redirect response\n maxRedirects: 0,\n\n // explicitly set the default response type to JSON\n responseType: 'json',\n\n // set api client headers\n headers: {\n 'X-Api-Client': 'ge-tracker-api client v6.3.3',\n Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`,\n },\n};\n\nfunction isUnauthorizedResponse(error: AxiosError) {\n return error.response && error.response.status === 401;\n}\n\nfunction createAuthHeader(apiKey: ApiKey): object {\n // if (apiKey === null) {\n // return {};\n // }\n\n return {\n // Authorization header is required with a valid API key for all API calls\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\n/**\n * Wrap URLs to support DMM endpoints\n *\n * @param dmmMode\n * @param request\n */\nfunction applyDmmParameter(\n dmmMode: boolean,\n request: AxiosRequestConfig,\n): string | undefined {\n const path = request.url;\n\n if (!dmmMode || path === undefined || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n}\n\nexport interface GeTrackerAxios extends AxiosInstance {\n dmm(enabled: boolean): void;\n}\n\n/**\n * Create a new Axios instance\n *\n * @param apiKey\n * @param opts\n */\nfunction createClient(\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerAxios {\n const options = merge(DefaultOptions, opts || {});\n const instance = Axios.create(\n merge(options, {headers: createAuthHeader(apiKey)}),\n );\n\n let dmmMode: boolean = false;\n\n // add custom response interceptors\n instance.interceptors.response.use(\n response => {\n return response;\n },\n (error: AxiosError) => {\n // intercept 401 Unauthorized responses and reject the promise chain with\n // an appropriate typed error\n if (isUnauthorizedResponse(error)) {\n return Promise.reject(new errors.InvalidApiKey());\n }\n\n return Promise.reject(error);\n },\n );\n\n instance.interceptors.request.use(request => {\n request.url = applyDmmParameter(dmmMode, request);\n return request;\n });\n\n // @ts-ignore\n function dmm(enabled: boolean = true): void {\n dmmMode = enabled;\n }\n\n // @ts-ignore\n return instance;\n}\n\nexport {DefaultOptions, createClient, GE_TRACKER_API_URL};\n","function captureStackTrace(\n targetObject: object,\n constructorOpt: Function | undefined = undefined,\n) {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(targetObject, constructorOpt);\n }\n}\n\nclass InvalidApiKey extends Error {\n constructor() {\n super('Specified API key was missing or invalid');\n captureStackTrace(this, InvalidApiKey);\n }\n}\n\nexport {InvalidApiKey};\n","import type {ApiKey} from './client';\n\nfunction getApiKeyFromEnv(): ApiKey {\n return process.env.GE_TRACKER_API_KEY;\n}\n\nexport {getApiKeyFromEnv};\n"],"mappings":"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","names":["createClient","obj","dayjs","merge","Axios","createClient"]}

@@ -680,3 +680,3 @@ // src/lib/handlers.ts

headers: {
"X-Api-Client": "ge-tracker-api client v6.3.2",
"X-Api-Client": "ge-tracker-api client v6.3.3",
Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`

@@ -683,0 +683,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/lib/handlers.ts","../src/lib/query-string.ts","../src/endpoints/APIBaseWrapper.ts","../src/endpoints/APIUptimeWrapper.ts","../src/endpoints/CalculatorWrapper.ts","../src/endpoints/CraftingSmithingWrapper.ts","../src/endpoints/DashboardWrapper.ts","../src/endpoints/FavouriteItemsWrapper.ts","../src/endpoints/FletchingWrapper.ts","../src/endpoints/SuggestedItemsWrapper.ts","../src/endpoints/FlipFinderWrapper.ts","../src/endpoints/GraphWrapper.ts","../src/endpoints/HerbloreWrapper.ts","../src/endpoints/ItemConversionsWrapper.ts","../src/endpoints/ItemsWrapper.ts","../src/endpoints/LeaderboardWrapper.ts","../src/endpoints/MagicWrapper.ts","../src/endpoints/MarketWatchWrapper.ts","../src/endpoints/NotificationsWrapper.ts","../src/endpoints/PriceAlertWrapper.ts","../src/endpoints/ProfitTrackerWrapper.ts","../src/endpoints/RSUpdatesWrapper.ts","../src/endpoints/StatsWrapper.ts","../src/endpoints/StoreProfitWrapper.ts","../src/endpoints/TagWrapper.ts","../src/endpoints/UserWrapper.ts","../src/lib/api.ts","../src/lib/client.ts","../src/lib/errors.ts","../src/lib/config.ts","../src/index.ts"],"sourcesContent":["export function handleResponseBody(body: any) {\n if (!body) {\n return null;\n }\n\n if (!('data' in body)) {\n return body;\n }\n\n return body.data;\n}\n","export type ParamObject = {\n [index: string]: any;\n};\n\ntype FlattenedObject = {\n path: string | Array<string>;\n val?: string;\n};\n\ntype FlattenedObjectArray = Array<FlattenedObject>;\n\n/**\n * Returns `true` if an object is empty\n *\n * @param obj\n * @return {boolean}\n */\nfunction isEmptyObject(obj: object) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\nfunction parseOptions(url: string, opts: ParamObject): string {\n if (isEmptyObject(opts)) {\n return url;\n }\n\n const params = toQueryString(opts);\n const sep = url.indexOf('?') === -1 ? '?' : '&';\n\n return `${url}${sep}${params}`;\n}\n\n/**\n * Convert an object to query string format\n *\n * @see https://stackoverflow.com/a/31415775/639665\n *\n * @param obj\n * @param urlEncode\n * @returns {string}\n */\nfunction toQueryString(obj: ParamObject, urlEncode: boolean = false) {\n //\n // Helper function that flattens an object, retaining key structure as a path array:\n //\n // Input: { prop1: 'x', prop2: { y: 1, z: 2 } }\n // Example output: [\n // { path: [ 'prop1' ], val: 'x' },\n // { path: [ 'prop2', 'y' ], val: '1' },\n // { path: [ 'prop2', 'z' ], val: '2' }\n // ]\n //\n function flattenObj(\n x: ParamObject,\n path: Array<string | number> = [],\n ): FlattenedObjectArray {\n let result: Array<object> = [];\n\n path = path || [];\n Object.keys(x).forEach(function (key) {\n if (!x.hasOwnProperty(key)) return;\n\n let newPath = path.slice();\n newPath.push(key);\n\n let vals = [];\n if (typeof x[key] === 'object') {\n // @ts-ignore\n vals = flattenObj(x[key], newPath);\n } else {\n vals.push({path: newPath, val: x[key]});\n }\n // @ts-ignore\n vals.forEach(function (obj) {\n return result.push(obj);\n });\n });\n\n // @ts-ignore\n return result;\n }\n\n // start with flattening `obj`\n let parts = flattenObj(obj); // [ { path: [ ...parts ], val: ... }, ... ]\n\n // convert to array notation:\n parts = parts.map(function (varInfo: FlattenedObject) {\n if (varInfo.path.length === 1) {\n varInfo.path = varInfo.path[0];\n } else {\n let first = varInfo.path[0];\n let rest = varInfo.path.slice(1);\n // @ts-ignore\n varInfo.path = first + '[' + rest.join('][') + ']';\n }\n return varInfo;\n }); // parts.map\n\n // join the parts to a query-string url-component\n let queryString = parts\n .map(function (varInfo) {\n return varInfo.path + '=' + varInfo.val;\n })\n .join('&');\n\n return urlEncode ? encodeURIComponent(queryString) : queryString;\n}\n\nexport {isEmptyObject, parseOptions};\n","import {handleResponseBody} from '../lib/handlers';\nimport {type ParamObject, parseOptions} from '../lib/query-string';\nimport type {AxiosInstance} from 'axios';\n\nexport interface ApiBase {\n onRequest(method: string, path: string, params: object): void;\n\n parseOptions(url: string, opts: ParamObject): string;\n}\n\nexport default class APIBaseWrapper {\n /**\n * @type {Function|null}\n */\n static onRequestCb: Function | null = null;\n protected client: AxiosInstance;\n protected baseUrl: string = '';\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n /**\n * Callback fired before a request is made (breadcrumb logging)\n *\n * @param {String} method\n * @param {String} path\n * @param {Object} params\n */\n protected onRequest(method: string, path: string, params: object = {}): void {\n if (typeof APIBaseWrapper.onRequestCb !== 'function') {\n return;\n }\n\n APIBaseWrapper.onRequestCb(method, path, params);\n }\n\n protected _wrapGet<T>(path: string): Promise<T> {\n this.onRequest('GET', path);\n\n return this.client\n .get(path)\n .then(({data}) => data)\n .then(handleResponseBody);\n }\n\n protected _wrapPost<T>(path: string, params = {}): Promise<T> {\n this.onRequest('POST', path, params);\n\n return this.client.post(path, params).then(({data}) => data);\n }\n\n protected _wrapPatch<T>(path: string, params = {}): Promise<T> {\n this.onRequest('PATCH', path, params);\n\n return this.client.patch(path, params).then(({data}) => data);\n }\n\n protected _wrapDelete<T>(path: string): Promise<T> {\n this.onRequest('DELETE', path);\n\n return this.client.delete(path).then(({data}) => data);\n }\n\n /**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\n protected parseOptions(url: string, opts: ParamObject): string {\n return parseOptions(url, opts);\n }\n\n protected getBaseUrl(): string {\n this.baseUrl = this.client.defaults.baseURL?.replace('/api', '') ?? '';\n return this.baseUrl;\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class APIUptimeWrapper extends APIBaseWrapper {\n getStatus() {\n return this._wrapGet('osb-uptime/status');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\n\nexport interface DeathsCofferItem extends Item {\n deathsCoffer: {\n cofferValue: number;\n cofferProfit: number;\n roi: number;\n limitPurchaseCost: number;\n potentialProfit: number;\n };\n}\n\nexport interface FswTransferItem {\n fsw: {\n overall: number;\n selling: number;\n buying: number;\n diff: number;\n buying_quantity: number;\n selling_quantity: number;\n };\n}\n\nexport default class CalculatorWrapper extends APIBaseWrapper {\n getDeathsCoffer(): Promise<DeathsCofferItem[]> {\n return this._wrapGet('deaths-coffer');\n }\n\n getFswTransfer(): Promise<FswTransferItem[]> {\n return this._wrapGet('fsw-transfer');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class CraftingSmithingWrapper extends APIBaseWrapper {\n getBlastFurnace(): ItemListPromise {\n return this._wrapGet('blast-furnace');\n }\n\n getCookingBrewing(): ItemListPromise {\n return this._wrapGet('crafting/cooking-brewing');\n }\n\n getTanLeather(): ItemListPromise {\n return this._wrapGet('tan-leather');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrappedWithMeta, ItemDataWrapped} from '../types';\n\nexport type DashboardTotal = {\n invested: number;\n profit: number;\n revenue: number;\n sales: number;\n};\n\nexport type DashboardTiles = {\n activeTransactions: number;\n mostFrequent: {item: ItemDataWrapped | null; qty: number};\n mostProfit: {item: ItemDataWrapped | null; gp: number};\n mostSold: {item: ItemDataWrapped | null; qty: number};\n total: DashboardTotal;\n};\n\nexport type Dashboard = {\n favouriteItems: DataWrappedWithMeta;\n suggestedItems: DataWrappedWithMeta;\n tiles: {\n data: DashboardTiles;\n };\n};\n\nexport default class DashboardWrapper extends APIBaseWrapper {\n getDashboard(): Promise<Dashboard> {\n return this._wrapGet('/dashboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, ItemListPromise} from '../types';\n\nexport type FavouriteItemReorder = {\n item_id: number;\n order: number;\n};\n\nexport type FavouriteItemReorderRequest = Array<FavouriteItemReorder>;\n\nexport type FavouriteItem = Item & {favouriteItemsId: number};\n\nexport default class FavouriteItemsWrapper extends APIBaseWrapper {\n getItems(): ItemListPromise<FavouriteItem> {\n return this._wrapGet('favourite-items');\n }\n\n /**\n * Add one or multiple items to favourites\n * @param itemId\n */\n addItem(itemId: number | number[]) {\n return this._wrapPost(`favourite-items`, {\n item_id: itemId,\n });\n }\n\n deleteItem(favouriteItemsId: number) {\n return this._wrapDelete(`favourite-items/${favouriteItemsId}`);\n }\n\n deleteItemByItemId(itemId: number) {\n return this._wrapDelete(`favourite-items/itemId/${itemId}`);\n }\n\n /**\n * Update favourite items sort order\n *\n * @param update\n * @returns {*}\n */\n reorder(update: FavouriteItemReorderRequest) {\n return this._wrapPost('favourite-items/reorder', {\n update,\n });\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class FletchingWrapper extends APIBaseWrapper {\n getAmmo(): ItemListPromise {\n return this._wrapGet('fletching/ammo');\n }\n\n getBows(): ItemListPromise {\n return this._wrapGet('fletching/bows');\n }\n\n getShields(): ItemListPromise {\n return this._wrapGet('fletching/shields');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ParamObject} from '../lib/query-string';\nimport type {ItemListPromise} from '../types';\n\nexport default class SuggestedItemsWrapper extends APIBaseWrapper {\n refresh() {\n return this._wrapGet('suggested-items/refresh');\n }\n\n getItems(opts: ParamObject = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('suggested-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListParams, ItemListPromise} from '../types';\nimport SuggestedItemsWrapper from './SuggestedItemsWrapper';\nimport FavouriteItemsWrapper from './FavouriteItemsWrapper';\n\nexport default class FlipFinderWrapper extends APIBaseWrapper {\n get SuggestedItems() {\n return new SuggestedItemsWrapper(this.client);\n }\n\n get FavouriteItems() {\n return new FavouriteItemsWrapper(this.client);\n }\n\n getGELimits(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('ge-limits', opts));\n }\n\n getHighestMargins(opts: ItemListParams = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('highest-margins', opts));\n }\n\n getHighVolume(opts = {filters: false}) {\n return this._wrapGet(this.parseOptions('high-volume', opts));\n }\n\n getNewItems(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('new-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport dayjs from 'dayjs';\nimport {handleResponseBody} from '../lib/handlers';\nimport type {\n GraphDuration,\n GraphRequestParams,\n GraphResponse,\n GraphSource,\n} from '../types';\n\nexport default class GraphWrapper extends APIBaseWrapper {\n private _dmm = false;\n\n protected _wrapGet<T>(path: string): Promise<T> {\n return this.client.get(this._wrapUrl(path)).then(handleResponseBody);\n }\n\n getDuration(\n duration: GraphDuration,\n itemId: number,\n source: GraphSource = null,\n ): Promise<GraphResponse> {\n let url = `graph/${itemId}/${duration}`;\n\n if (source !== null) {\n url = url + '?source=' + source;\n }\n\n return this._wrapGet(this._wrapUrl(url));\n }\n\n getDay(\n itemId: number,\n tenMinute: boolean = false,\n params: GraphRequestParams = {},\n ): Promise<GraphResponse> {\n if (!tenMinute) {\n const source =\n params.hasOwnProperty('source') && params.source !== null\n ? params.source\n : null;\n return this.getDuration('day', itemId, source);\n }\n\n const currentDate = dayjs().format('YYYY-MM-DD');\n\n const startDate = params.start\n ? dayjs(params.start).format('YYYY-MM-DD')\n : currentDate;\n const endDate = params.end\n ? dayjs(params.end).format('YYYY-MM-DD')\n : currentDate;\n\n let url = `graph/${itemId}/day?day=10&duration[start]=${startDate}&duration[end]=${endDate}`;\n\n if (params.hasOwnProperty('source') && params.source !== null) {\n url = url + '&source=' + params.source;\n }\n\n return this._wrapGet(url);\n }\n\n getWeek(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('week', itemId, source);\n }\n\n getMonth(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('month', itemId, source);\n }\n\n getQuarter(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('quarter', itemId, source);\n }\n\n getYear(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('year', itemId, source);\n }\n\n getAll(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('all', itemId, source);\n }\n\n getCandlestick(\n duration: GraphDuration,\n itemId: number,\n ): Promise<GraphResponse> {\n return this._wrapGet(`graph/candlestick/${itemId}/${duration}`);\n }\n\n getIndicators(duration: GraphDuration, itemId: number) {\n return this._wrapGet(`graph/indicators/${itemId}/${duration}`);\n }\n\n forceReload(duration: GraphDuration, itemId: number) {\n return this._wrapPost(`graph/force-reload`, {\n itemId,\n duration,\n });\n }\n\n dmm(enabled: boolean = true) {\n this._dmm = enabled;\n return this;\n }\n\n /**\n * Wrap URLs to support DMM endpoints\n *\n * @param path\n */\n _wrapUrl(path: string) {\n if (!this._dmm || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class HerbloreWrapper extends APIBaseWrapper {\n getCleanHerbs() {\n return this._wrapGet('herblore/clean-herbs');\n }\n\n getMakePotions() {\n return this._wrapGet('herblore/make-potions');\n }\n\n getUnfinishedPotions() {\n return this._wrapGet('herblore/unfinished-potions');\n }\n\n getDecantPotions(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('decant-potions', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrapped, Item, ItemListPromise} from '../types';\n\nexport interface ItemCombinationPiece {\n qty: number;\n item: DataWrapped<Item>;\n}\n\nexport interface ItemCombination {\n qty: number;\n label: string | null;\n conversionCost: number;\n avgSellingQuantity: number;\n ratio: number;\n total: {\n cost: number;\n profit: number;\n pieces: number;\n piecesCost: number;\n };\n item: DataWrapped<Item>;\n pieces: ItemCombinationPiece[];\n}\n\nexport type ItemCombinationResponse = ItemCombination[];\n\nexport default class ItemConversionsWrapper extends APIBaseWrapper {\n getBarrowsRepair(): ItemListPromise {\n return this._wrapGet('barrows-repair');\n }\n\n getItemSets(opts = {filters: false}): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('item-sets', opts));\n }\n\n getCombinationItems(\n opts = {filters: false},\n ): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('combination-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise, ItemPromise} from '../types';\n\nexport type ItemPeriod = {\n price: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n volume: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n};\n\nexport default class ItemsWrapper extends APIBaseWrapper {\n getAllItems(): ItemListPromise {\n return this._wrapGet('items');\n }\n\n getItem(itemId: number, detail: boolean = false): ItemPromise {\n const url = !detail ? `items/${itemId}` : `items/${itemId}?detail=true`;\n return this._wrapGet(url);\n }\n\n getItems(...itemIds: Array<number>): ItemListPromise {\n return this._wrapGet(`items/multi/${itemIds.join(',')}`);\n }\n\n search(query: string): ItemListPromise {\n return this._wrapGet(`items/search/${query}`);\n }\n\n getItemPeriod(itemId: number): Promise<ItemPeriod> {\n return this._wrapGet(`items/${itemId}/period`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type LeaderboardSlug = 'global' | 'monthly' | 'weekly' | 'daily';\n\nexport default class LeaderboardWrapper extends APIBaseWrapper {\n getLeaderboard(slug: LeaderboardSlug, opts = {}) {\n return this.client\n .get(this.parseOptions(`leaderboard/${slug}`, opts))\n .then(({data}) => data);\n }\n\n getRank(slug: LeaderboardSlug) {\n return this._wrapGet(`leaderboard/rank/${slug}`);\n }\n\n getSummary() {\n return this._wrapGet('leaderboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class MagicWrapper extends APIBaseWrapper {\n getHighAlchemy(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('high-alchemy', opts));\n }\n\n getEnchanting(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('magic/enchanting', opts));\n }\n\n getMagicTablets(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('magic-tablets', opts));\n }\n\n getPlankMaking(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('plank-making', opts));\n }\n\n getTreeSapling(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('tree-sapling', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class MarketWatchWrapper extends APIBaseWrapper {\n getIndex(indexId: number | string) {\n return this._wrapGet(`market-watch/${indexId}`);\n }\n\n getSummary() {\n return this._wrapGet('market-watch');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class NotificationsWrapper extends APIBaseWrapper {\n getNotifications() {\n return this._wrapGet('notifications');\n }\n\n getNotification(notificationId: string) {\n return this._wrapGet(`notifications/${notificationId}`);\n }\n\n markAllAsRead() {\n return this._wrapPost(`notifications/mark-read`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type PriceAlertField = 'current' | 'selling' | 'buying' | 'profit';\nexport type PriceAlertType = 'above' | 'below';\nexport type PriceAlertMethod = {\n sms?: boolean;\n email?: boolean;\n app?: boolean;\n};\n\nexport default class PriceAlertWrapper extends APIBaseWrapper {\n /**\n * Get Price Alerts\n *\n * `itemId` can be specified to load price alerts for a single item\n *\n * @param {Number} itemId\n * @return {*}\n */\n getAlerts(itemId = null) {\n const url = itemId ? `/price-alerts/${itemId}` : '/price-alerts';\n return this._wrapGet(url);\n }\n\n /**\n * Create Price Alert\n *\n * @return {*}\n */\n createAlert(\n itemId: number,\n field: PriceAlertField,\n type: PriceAlertType,\n price: number,\n methods: PriceAlertMethod = {},\n maxTriggers: number = 10,\n ) {\n return this._wrapPost('/price-alerts', {\n itemId,\n field,\n type,\n price,\n methods,\n maxTriggers,\n });\n }\n\n updateAlert(id: number, status: string, params = {}) {\n return this._wrapPost(`/price-alerts/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteAlert(id: number) {\n return this._wrapDelete(`/price-alerts/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, LegacyPaginated, PaginatedResponse} from '../types';\n\nexport type UpdateStatus = 'bought' | 'selling' | 'sold';\nexport type TransactionStatus = 'buying' & UpdateStatus;\n\nexport default class ProfitTrackerWrapper extends APIBaseWrapper {\n getTransactions<P = LegacyPaginated>(\n opts = {},\n ): Promise<TransactionsResponse<P>> {\n return this.client\n .get(this.parseOptions('/profit-tracker', opts))\n .then(({data}) => data);\n }\n\n getTransaction(id: string) {\n return this._wrapGet(`/profit-tracker/${id}`);\n }\n\n createTransaction(\n itemId: number,\n qty: number,\n buyPrice: number,\n params = {},\n ) {\n return this._wrapPost('/profit-tracker', {\n item_id: itemId,\n qty: qty,\n buy_price: buyPrice,\n ...params,\n });\n }\n\n updateTransaction(id: string, status: UpdateStatus, params = {}) {\n return this._wrapPost(`/profit-tracker/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteTransaction(id: string) {\n return this._wrapDelete(`/profit-tracker/${id}`);\n }\n\n getBuyingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/buying', opts))\n .then(({data}) => data);\n }\n\n getBoughtTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/bought', opts))\n .then(({data}) => data);\n }\n\n getSellingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/selling', opts))\n .then(({data}) => data);\n }\n\n getSoldTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/sold', opts))\n .then(({data}) => data);\n }\n\n getActiveTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/active-transactions', opts))\n .then(({data}) => data);\n }\n\n getPreviousTransactions(itemId: number) {\n return this._wrapGet(`/profit-tracker/previous-transactions/${itemId}`);\n }\n\n getSummary() {\n return this._wrapGet('/profit-tracker/summary');\n }\n\n getMostProfitable() {\n return this._wrapGet('/profit-tracker/most-profitable');\n }\n\n clear() {\n return this._wrapPost('/profit-tracker/clear');\n }\n\n import(transactions: ImportTransaction[]) {\n return this._wrapPost('/profit-tracker/import', {transactions});\n }\n}\n\nexport type ProfitTransaction = {\n id: string;\n status: TransactionStatus;\n order: {\n itemId: number;\n qty: number;\n buyPrice: number;\n sellPrice: number | null;\n intendedSellPrice: number | null;\n };\n dates: {\n buy: string | null;\n bought: string | null;\n sell: string | null;\n sold: string | null;\n };\n merchLog: {\n public: boolean | null;\n verified: boolean | null;\n rejected: boolean | null;\n };\n item: {\n data: Item;\n };\n};\n\nexport type TransactionsResponse<P = LegacyPaginated> = PaginatedResponse<\n ProfitTransaction,\n P\n>;\n\nexport type ImportTransaction = {\n id: string;\n itemId: number;\n qty: number | string;\n buyPrice: number | string;\n sellPrice?: number | string | null;\n status?: string | null;\n buyDate?: string | null;\n boughtDate?: string | null;\n sellDate?: string | null;\n soldDate?: string | null;\n intendedSellPrice?: number | string | null;\n changePivot?: number | null;\n threshold?: number | null;\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {PaginatedResponse} from '../types';\n\nexport type DaysOption = number | 'all';\n\ntype RsUpdateOptions = {\n days?: DaysOption;\n};\n\nexport type RsUpdate = {\n id: number;\n title: string;\n description: string;\n category: string;\n link: string;\n createdAt: string;\n};\n\nexport default class RSUpdatesWrapper extends APIBaseWrapper {\n get(opts: RsUpdateOptions = {}): Promise<PaginatedResponse<RsUpdate>> {\n return this.client\n .get(this.parseOptions('rs-updates', opts))\n .then(({data}) => data);\n }\n\n getUpdate(id: number) {\n return this._wrapGet(`rs-updates/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\nimport type {UserClass} from './UserWrapper';\nimport {handleResponseBody} from '../lib/handlers';\n\nexport interface PopularItem {\n item: Item;\n views: number;\n}\n\nexport interface StatsResponse {\n totalProfit: number;\n avgProfit: number;\n totalTransactions: number;\n totalItems: number;\n usersActive: number;\n usersOnline: number;\n users: {\n accountsOnline: number;\n premiumUsersOnline: number;\n standardUsersOnline: number;\n trialUsersOnline: number;\n registeredUsers: number;\n };\n popularItems: PopularItem[];\n}\n\ninterface OnlineUser {\n name: string;\n slug: string;\n class: UserClass;\n}\n\nexport type OnlineUsers = Record<UserClass, OnlineUser[]>;\n\nexport interface OnlineUsersResponse {\n onlineCount: {\n usersOnline: number;\n premium: number;\n standard: number;\n trial: number;\n guest: number;\n registeredUsers: number;\n };\n users: OnlineUsers;\n}\n\nexport default class StatsWrapper extends APIBaseWrapper {\n getGlobalStats(): Promise<StatsResponse> {\n return new Promise(async resolve => {\n const data = await this._wrapGet<StatsResponse>('stats');\n\n // Remove the `data` property from the item's response\n data.popularItems = data.popularItems.map(item => ({\n views: item.views,\n item: handleResponseBody(item.item),\n }));\n\n resolve(data);\n });\n }\n\n getOnlineUsers(): Promise<OnlineUsersResponse> {\n return this._wrapGet('stats/online');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class StoreProfitWrapper extends APIBaseWrapper {\n getStores() {\n return this._wrapGet('stores');\n }\n\n getItems() {\n return this._wrapGet('stores/profit');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport type Tag = {\n id: number;\n slug: string;\n name: string;\n};\n\nexport default class TagWrapper extends APIBaseWrapper {\n getTags(): Promise<Array<Tag>> {\n return this._wrapGet('tags');\n }\n\n addTag(itemId: number, tag: string) {\n return this._wrapPost(`tags`, {\n item_id: itemId,\n tag,\n });\n }\n\n deleteTag(itemId: number, tag: string) {\n return this._wrapDelete(`tags/item/${itemId}/${tag}`);\n }\n\n getTaggedItems(tag: string | Array<string>): ItemListPromise {\n // Join an array to a CSV list\n if (Array.isArray(tag)) {\n tag = tag.join(',');\n }\n\n return this._wrapGet(`tags/${tag}`);\n }\n\n getItemTags(itemId: number): Promise<Array<Tag>> {\n return this._wrapGet(`tags/item/${itemId}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type UserPremium = {\n premium: boolean;\n trial: boolean;\n view: boolean;\n};\n\nexport type UserPermissions = {\n moderator: boolean;\n staff: boolean;\n admin: boolean;\n disabled: boolean;\n temp?: boolean;\n};\n\nexport type UserClass =\n | 'admin'\n | 'staff'\n | 'moderator'\n | 'high-roller'\n | 'youtube'\n | 'twitch'\n | 'affiliate'\n | 'discord'\n | 'premium'\n | 'standard'\n | 'trial'\n | string;\n\nexport type User = {\n userId: string;\n name: string;\n email: string;\n totalProfit: number;\n registeredOn: Date | string;\n trialEndsOn: Date | string | null;\n emailVerified: boolean;\n profilePic: string;\n slug: string;\n apiKey: string;\n url: string;\n class: UserClass;\n premium: UserPremium;\n permissions: UserPermissions;\n avatars: Array<string>;\n};\n\nexport default class UserWrapper extends APIBaseWrapper {\n getById(userId: string): Promise<Array<User>> {\n return this._wrapGet(`users/${userId}`);\n }\n\n search(query: string): Promise<Array<User>> {\n return this._wrapPost(`users/search`, {\n query,\n });\n }\n\n getAuthenticateUser(): Promise<User> {\n return this._wrapGet('users/me');\n }\n}\n","import * as Endpoint from '../endpoints';\nimport APIBaseWrapper from '../endpoints/APIBaseWrapper';\nimport type {GeTrackerAxios} from './client';\n\nexport interface GeTrackerApi {\n APIUptime: Endpoint.APIUptimeWrapper;\n Calculator: Endpoint.CalculatorWrapper;\n CraftingSmithing: Endpoint.CraftingSmithingWrapper;\n Dashboard: Endpoint.DashboardWrapper;\n FavouriteItems: Endpoint.FavouriteItemsWrapper;\n FlipFinder: Endpoint.FlipFinderWrapper;\n Fletching: Endpoint.FletchingWrapper;\n Graphs: Endpoint.GraphWrapper;\n Herblore: Endpoint.HerbloreWrapper;\n ItemConversions: Endpoint.ItemConversionsWrapper;\n Items: Endpoint.ItemsWrapper;\n Leaderboard: Endpoint.LeaderboardWrapper;\n Magic: Endpoint.MagicWrapper;\n MarketWatch: Endpoint.MarketWatchWrapper;\n Notifications: Endpoint.NotificationsWrapper;\n PriceAlert: Endpoint.PriceAlertWrapper;\n ProfitTracker: Endpoint.ProfitTrackerWrapper;\n RSUpdates: Endpoint.RSUpdatesWrapper;\n Stats: Endpoint.StatsWrapper;\n StoreProfit: Endpoint.StoreProfitWrapper;\n Tags: Endpoint.TagWrapper;\n Users: Endpoint.UserWrapper;\n getManifest: () => Promise<any>;\n attachOnRequest: (\n callback: (method: string, path: string, params: object) => void,\n ) => void;\n getClient: () => GeTrackerAxios;\n dmm: (enabled: boolean) => void;\n}\n\nconst createApi = (client: GeTrackerAxios): GeTrackerApi => {\n return {\n APIUptime: new Endpoint.APIUptimeWrapper(client),\n Calculator: new Endpoint.CalculatorWrapper(client),\n CraftingSmithing: new Endpoint.CraftingSmithingWrapper(client),\n Dashboard: new Endpoint.DashboardWrapper(client),\n FavouriteItems: new Endpoint.FavouriteItemsWrapper(client),\n FlipFinder: new Endpoint.FlipFinderWrapper(client),\n Fletching: new Endpoint.FletchingWrapper(client),\n Graphs: new Endpoint.GraphWrapper(client),\n Herblore: new Endpoint.HerbloreWrapper(client),\n ItemConversions: new Endpoint.ItemConversionsWrapper(client),\n Items: new Endpoint.ItemsWrapper(client),\n Leaderboard: new Endpoint.LeaderboardWrapper(client),\n Magic: new Endpoint.MagicWrapper(client),\n MarketWatch: new Endpoint.MarketWatchWrapper(client),\n Notifications: new Endpoint.NotificationsWrapper(client),\n PriceAlert: new Endpoint.PriceAlertWrapper(client),\n ProfitTracker: new Endpoint.ProfitTrackerWrapper(client),\n RSUpdates: new Endpoint.RSUpdatesWrapper(client),\n Stats: new Endpoint.StatsWrapper(client),\n StoreProfit: new Endpoint.StoreProfitWrapper(client),\n Tags: new Endpoint.TagWrapper(client),\n Users: new Endpoint.UserWrapper(client),\n\n /**\n * Get GT App Manifest JSON\n *\n * @return {Promise<any>}\n */\n getManifest(): Promise<any> {\n // @ts-ignore\n const apiUrl = client.defaults.baseURL.replace('/api', '');\n return new Promise((resolve, reject) => {\n client\n .get(`${apiUrl}app_manifest.json`)\n .then(data => {\n if (data.hasOwnProperty('data')) {\n resolve(data.data);\n } else {\n reject(null);\n }\n })\n .catch(err => reject(err));\n });\n },\n\n /**\n * Attach a callback to each request.\n *\n * Used for error logging via Bugsnag or Sentry\n *\n * `callback` will be called with 3 parameters: `method`, `path`, `params`\n *\n * @param {Function} callback\n */\n attachOnRequest(\n callback: (method: string, path: string, params: object) => void,\n ): void {\n APIBaseWrapper.onRequestCb = callback;\n },\n\n /**\n * Get underlying Axios client instance\n */\n getClient(): GeTrackerAxios {\n return client;\n },\n\n dmm(enabled: boolean = true): void {\n client.dmm(enabled);\n },\n };\n};\n\nexport {createApi};\n","import Axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type CreateAxiosDefaults,\n} from 'axios';\nimport merge from 'deepmerge';\nimport * as errors from './errors';\n\nconst GE_TRACKER_API_URL = 'https://www.ge-tracker.com/api';\nconst GE_TRACKER_API_VERSION = 'v2.1';\n\nexport type ApiKey = string | null | undefined;\n\nconst DefaultOptions: CreateAxiosDefaults = {\n // set the base URL for all API calls made on this Axios instance\n baseURL: GE_TRACKER_API_URL,\n\n // set a sane default for the request TTL\n timeout: 30e3,\n\n // disable redirects -- API should NOT return a redirect response\n maxRedirects: 0,\n\n // explicitly set the default response type to JSON\n responseType: 'json',\n\n // set api client headers\n headers: {\n 'X-Api-Client': 'ge-tracker-api client v6.3.2',\n Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`,\n },\n};\n\nfunction isUnauthorizedResponse(error: AxiosError) {\n return error.response && error.response.status === 401;\n}\n\nfunction createAuthHeader(apiKey: ApiKey): object {\n // if (apiKey === null) {\n // return {};\n // }\n\n return {\n // Authorization header is required with a valid API key for all API calls\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\n/**\n * Wrap URLs to support DMM endpoints\n *\n * @param dmmMode\n * @param request\n */\nfunction applyDmmParameter(\n dmmMode: boolean,\n request: AxiosRequestConfig,\n): string | undefined {\n const path = request.url;\n\n if (!dmmMode || path === undefined || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n}\n\nexport interface GeTrackerAxios extends AxiosInstance {\n dmm(enabled: boolean): void;\n}\n\n/**\n * Create a new Axios instance\n *\n * @param apiKey\n * @param opts\n */\nfunction createClient(\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerAxios {\n const options = merge(DefaultOptions, opts || {});\n const instance = Axios.create(\n merge(options, {headers: createAuthHeader(apiKey)}),\n );\n\n let dmmMode: boolean = false;\n\n // add custom response interceptors\n instance.interceptors.response.use(\n response => {\n return response;\n },\n (error: AxiosError) => {\n // intercept 401 Unauthorized responses and reject the promise chain with\n // an appropriate typed error\n if (isUnauthorizedResponse(error)) {\n return Promise.reject(new errors.InvalidApiKey());\n }\n\n return Promise.reject(error);\n },\n );\n\n instance.interceptors.request.use(request => {\n request.url = applyDmmParameter(dmmMode, request);\n return request;\n });\n\n // @ts-ignore\n function dmm(enabled: boolean = true): void {\n dmmMode = enabled;\n }\n\n // @ts-ignore\n return instance;\n}\n\nexport {DefaultOptions, createClient, GE_TRACKER_API_URL};\n","function captureStackTrace(\n targetObject: object,\n constructorOpt: Function | undefined = undefined,\n) {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(targetObject, constructorOpt);\n }\n}\n\nclass InvalidApiKey extends Error {\n constructor() {\n super('Specified API key was missing or invalid');\n captureStackTrace(this, InvalidApiKey);\n }\n}\n\nexport {InvalidApiKey};\n","import type {ApiKey} from './client';\n\nfunction getApiKeyFromEnv(): ApiKey {\n return process.env.GE_TRACKER_API_KEY;\n}\n\nexport {getApiKeyFromEnv};\n","import {createApi, type GeTrackerApi} from './lib/api';\nimport {\n type ApiKey,\n createClient as createAxios,\n DefaultOptions,\n} from './lib/client';\nimport {getApiKeyFromEnv} from './lib/config';\nimport type {CreateAxiosDefaults} from 'axios';\n\nconst createInstance = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerApi => {\n return createApi(createAxios(apiKey, opts));\n};\n\nconst createClient = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n) => createInstance(apiKey, opts);\nconst createClientFromEnv = (opts: CreateAxiosDefaults | null = null) =>\n createInstance(getApiKeyFromEnv(), opts);\n\nexport * from './types';\nexport * from './endpoints/types';\nexport {APIBaseWrapper} from './endpoints';\nexport {handleResponseBody} from './lib/handlers';\nexport type {GeTrackerApi};\nexport {createClient, createClientFromEnv, createAxios, DefaultOptions};\n\nexport type {ApiKey};\n"],"mappings":"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","names":["obj","createClient"]}
{"version":3,"sources":["../src/lib/handlers.ts","../src/lib/query-string.ts","../src/endpoints/APIBaseWrapper.ts","../src/endpoints/APIUptimeWrapper.ts","../src/endpoints/CalculatorWrapper.ts","../src/endpoints/CraftingSmithingWrapper.ts","../src/endpoints/DashboardWrapper.ts","../src/endpoints/FavouriteItemsWrapper.ts","../src/endpoints/FletchingWrapper.ts","../src/endpoints/SuggestedItemsWrapper.ts","../src/endpoints/FlipFinderWrapper.ts","../src/endpoints/GraphWrapper.ts","../src/endpoints/HerbloreWrapper.ts","../src/endpoints/ItemConversionsWrapper.ts","../src/endpoints/ItemsWrapper.ts","../src/endpoints/LeaderboardWrapper.ts","../src/endpoints/MagicWrapper.ts","../src/endpoints/MarketWatchWrapper.ts","../src/endpoints/NotificationsWrapper.ts","../src/endpoints/PriceAlertWrapper.ts","../src/endpoints/ProfitTrackerWrapper.ts","../src/endpoints/RSUpdatesWrapper.ts","../src/endpoints/StatsWrapper.ts","../src/endpoints/StoreProfitWrapper.ts","../src/endpoints/TagWrapper.ts","../src/endpoints/UserWrapper.ts","../src/lib/api.ts","../src/lib/client.ts","../src/lib/errors.ts","../src/lib/config.ts","../src/index.ts"],"sourcesContent":["export function handleResponseBody(body: any) {\n if (!body) {\n return null;\n }\n\n if (!('data' in body)) {\n return body;\n }\n\n return body.data;\n}\n","export type ParamObject = {\n [index: string]: any;\n};\n\ntype FlattenedObject = {\n path: string | Array<string>;\n val?: string;\n};\n\ntype FlattenedObjectArray = Array<FlattenedObject>;\n\n/**\n * Returns `true` if an object is empty\n *\n * @param obj\n * @return {boolean}\n */\nfunction isEmptyObject(obj: object) {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}\n\n/**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\nfunction parseOptions(url: string, opts: ParamObject): string {\n if (isEmptyObject(opts)) {\n return url;\n }\n\n const params = toQueryString(opts);\n const sep = url.indexOf('?') === -1 ? '?' : '&';\n\n return `${url}${sep}${params}`;\n}\n\n/**\n * Convert an object to query string format\n *\n * @see https://stackoverflow.com/a/31415775/639665\n *\n * @param obj\n * @param urlEncode\n * @returns {string}\n */\nfunction toQueryString(obj: ParamObject, urlEncode: boolean = false) {\n //\n // Helper function that flattens an object, retaining key structure as a path array:\n //\n // Input: { prop1: 'x', prop2: { y: 1, z: 2 } }\n // Example output: [\n // { path: [ 'prop1' ], val: 'x' },\n // { path: [ 'prop2', 'y' ], val: '1' },\n // { path: [ 'prop2', 'z' ], val: '2' }\n // ]\n //\n function flattenObj(\n x: ParamObject,\n path: Array<string | number> = [],\n ): FlattenedObjectArray {\n let result: Array<object> = [];\n\n path = path || [];\n Object.keys(x).forEach(function (key) {\n if (!x.hasOwnProperty(key)) return;\n\n let newPath = path.slice();\n newPath.push(key);\n\n let vals = [];\n if (typeof x[key] === 'object') {\n // @ts-ignore\n vals = flattenObj(x[key], newPath);\n } else {\n vals.push({path: newPath, val: x[key]});\n }\n // @ts-ignore\n vals.forEach(function (obj) {\n return result.push(obj);\n });\n });\n\n // @ts-ignore\n return result;\n }\n\n // start with flattening `obj`\n let parts = flattenObj(obj); // [ { path: [ ...parts ], val: ... }, ... ]\n\n // convert to array notation:\n parts = parts.map(function (varInfo: FlattenedObject) {\n if (varInfo.path.length === 1) {\n varInfo.path = varInfo.path[0];\n } else {\n let first = varInfo.path[0];\n let rest = varInfo.path.slice(1);\n // @ts-ignore\n varInfo.path = first + '[' + rest.join('][') + ']';\n }\n return varInfo;\n }); // parts.map\n\n // join the parts to a query-string url-component\n let queryString = parts\n .map(function (varInfo) {\n return varInfo.path + '=' + varInfo.val;\n })\n .join('&');\n\n return urlEncode ? encodeURIComponent(queryString) : queryString;\n}\n\nexport {isEmptyObject, parseOptions};\n","import {handleResponseBody} from '../lib/handlers';\nimport {type ParamObject, parseOptions} from '../lib/query-string';\nimport type {AxiosInstance} from 'axios';\n\nexport interface ApiBase {\n onRequest(method: string, path: string, params: object): void;\n\n parseOptions(url: string, opts: ParamObject): string;\n}\n\nexport default class APIBaseWrapper {\n /**\n * @type {Function|null}\n */\n static onRequestCb: Function | null = null;\n protected client: AxiosInstance;\n protected baseUrl: string = '';\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n\n /**\n * Callback fired before a request is made (breadcrumb logging)\n *\n * @param {String} method\n * @param {String} path\n * @param {Object} params\n */\n protected onRequest(method: string, path: string, params: object = {}): void {\n if (typeof APIBaseWrapper.onRequestCb !== 'function') {\n return;\n }\n\n APIBaseWrapper.onRequestCb(method, path, params);\n }\n\n protected _wrapGet<T>(path: string): Promise<T> {\n this.onRequest('GET', path);\n\n return this.client\n .get(path)\n .then(({data}) => data)\n .then(handleResponseBody);\n }\n\n protected _wrapPost<T>(path: string, params = {}): Promise<T> {\n this.onRequest('POST', path, params);\n\n return this.client.post(path, params).then(({data}) => data);\n }\n\n protected _wrapPatch<T>(path: string, params = {}): Promise<T> {\n this.onRequest('PATCH', path, params);\n\n return this.client.patch(path, params).then(({data}) => data);\n }\n\n protected _wrapDelete<T>(path: string): Promise<T> {\n this.onRequest('DELETE', path);\n\n return this.client.delete(path).then(({data}) => data);\n }\n\n /**\n * Convert options to query string parameters for an endpoint\n *\n * @param url\n * @param opts\n * @return {*}\n */\n protected parseOptions(url: string, opts: ParamObject): string {\n return parseOptions(url, opts);\n }\n\n protected getBaseUrl(): string {\n this.baseUrl = this.client.defaults.baseURL?.replace('/api', '') ?? '';\n return this.baseUrl;\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class APIUptimeWrapper extends APIBaseWrapper {\n getStatus() {\n return this._wrapGet('osb-uptime/status');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\n\nexport interface DeathsCofferItem extends Item {\n deathsCoffer: {\n cofferValue: number;\n cofferProfit: number;\n roi: number;\n limitPurchaseCost: number;\n potentialProfit: number;\n };\n}\n\nexport interface FswTransferItem {\n fsw: {\n overall: number;\n selling: number;\n buying: number;\n diff: number;\n buying_quantity: number;\n selling_quantity: number;\n };\n}\n\nexport default class CalculatorWrapper extends APIBaseWrapper {\n getDeathsCoffer(): Promise<DeathsCofferItem[]> {\n return this._wrapGet('deaths-coffer');\n }\n\n getFswTransfer(): Promise<FswTransferItem[]> {\n return this._wrapGet('fsw-transfer');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {CalculatorListPromise, Item, ItemListPromise} from '../types';\n\nexport default class CraftingSmithingWrapper extends APIBaseWrapper {\n getBlastFurnace(): CalculatorListPromise {\n return this._wrapGet('blast-furnace');\n }\n\n getCookingBrewing(): CalculatorListPromise {\n return this._wrapGet('crafting/cooking-brewing');\n }\n\n getTanLeather(): Promise<TanLeather[]> {\n return this._wrapGet('tan-leather');\n }\n}\n\nexport type TanLeather = {\n leather: {\n data: Item;\n };\n tanned: {\n data: Item;\n };\n cost: {\n xp: number;\n cost: number;\n profit: number;\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {DataWrappedWithMeta, ItemDataWrapped} from '../types';\n\nexport type DashboardTotal = {\n invested: number;\n profit: number;\n revenue: number;\n sales: number;\n};\n\nexport type DashboardTiles = {\n activeTransactions: number;\n mostFrequent: {item: ItemDataWrapped | null; qty: number};\n mostProfit: {item: ItemDataWrapped | null; gp: number};\n mostSold: {item: ItemDataWrapped | null; qty: number};\n total: DashboardTotal;\n};\n\nexport type Dashboard = {\n favouriteItems: DataWrappedWithMeta;\n suggestedItems: DataWrappedWithMeta;\n tiles: {\n data: DashboardTiles;\n };\n};\n\nexport default class DashboardWrapper extends APIBaseWrapper {\n getDashboard(): Promise<Dashboard> {\n return this._wrapGet('/dashboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, ItemListPromise} from '../types';\n\nexport type FavouriteItemReorder = {\n item_id: number;\n order: number;\n};\n\nexport type FavouriteItemReorderRequest = Array<FavouriteItemReorder>;\n\nexport type FavouriteItem = Item & {favouriteItemsId: number};\n\nexport default class FavouriteItemsWrapper extends APIBaseWrapper {\n getItems(): ItemListPromise<FavouriteItem> {\n return this._wrapGet('favourite-items');\n }\n\n /**\n * Add one or multiple items to favourites\n * @param itemId\n */\n addItem(itemId: number | number[]) {\n return this._wrapPost(`favourite-items`, {\n item_id: itemId,\n });\n }\n\n deleteItem(favouriteItemsId: number) {\n return this._wrapDelete(`favourite-items/${favouriteItemsId}`);\n }\n\n deleteItemByItemId(itemId: number) {\n return this._wrapDelete(`favourite-items/itemId/${itemId}`);\n }\n\n /**\n * Update favourite items sort order\n *\n * @param update\n * @returns {*}\n */\n reorder(update: FavouriteItemReorderRequest) {\n return this._wrapPost('favourite-items/reorder', {\n update,\n });\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {CalculatorItem, CalculatorListPromise, Item} from '../types';\n\nexport default class FletchingWrapper extends APIBaseWrapper {\n getAmmo(): CalculatorListPromise {\n return this._wrapGet('fletching/ammo');\n }\n\n getBows(): CalculatorListPromise<CalculatorItem<Item, FletchingBowsMethods>> {\n return this._wrapGet('fletching/bows');\n }\n\n getShields(): CalculatorListPromise {\n return this._wrapGet('fletching/shields');\n }\n}\n\nexport type FletchingBowsMethods = {\n all: {\n negate: string[];\n };\n string_only: {\n negate: string[];\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ParamObject} from '../lib/query-string';\nimport type {ItemListPromise} from '../types';\n\nexport default class SuggestedItemsWrapper extends APIBaseWrapper {\n refresh() {\n return this._wrapGet('suggested-items/refresh');\n }\n\n getItems(opts: ParamObject = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('suggested-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListParams, ItemListPromise} from '../types';\nimport SuggestedItemsWrapper from './SuggestedItemsWrapper';\nimport FavouriteItemsWrapper from './FavouriteItemsWrapper';\n\nexport default class FlipFinderWrapper extends APIBaseWrapper {\n get SuggestedItems() {\n return new SuggestedItemsWrapper(this.client);\n }\n\n get FavouriteItems() {\n return new FavouriteItemsWrapper(this.client);\n }\n\n getGELimits(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('ge-limits', opts));\n }\n\n getHighestMargins(opts: ItemListParams = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('highest-margins', opts));\n }\n\n getHighVolume(opts = {filters: false}) {\n return this._wrapGet(this.parseOptions('high-volume', opts));\n }\n\n getNewItems(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('new-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport dayjs from 'dayjs';\nimport {handleResponseBody} from '../lib/handlers';\nimport type {\n GraphDuration,\n GraphRequestParams,\n GraphResponse,\n GraphSource,\n} from '../types';\n\nexport default class GraphWrapper extends APIBaseWrapper {\n private _dmm = false;\n\n protected _wrapGet<T>(path: string): Promise<T> {\n return this.client.get(this._wrapUrl(path)).then(handleResponseBody);\n }\n\n getDuration(\n duration: GraphDuration,\n itemId: number,\n source: GraphSource = null,\n ): Promise<GraphResponse> {\n let url = `graph/${itemId}/${duration}`;\n\n if (source !== null) {\n url = url + '?source=' + source;\n }\n\n return this._wrapGet(this._wrapUrl(url));\n }\n\n getDay(\n itemId: number,\n tenMinute: boolean = false,\n params: GraphRequestParams = {},\n ): Promise<GraphResponse> {\n if (!tenMinute) {\n const source =\n params.hasOwnProperty('source') && params.source !== null\n ? params.source\n : null;\n return this.getDuration('day', itemId, source);\n }\n\n const currentDate = dayjs().format('YYYY-MM-DD');\n\n const startDate = params.start\n ? dayjs(params.start).format('YYYY-MM-DD')\n : currentDate;\n const endDate = params.end\n ? dayjs(params.end).format('YYYY-MM-DD')\n : currentDate;\n\n let url = `graph/${itemId}/day?day=10&duration[start]=${startDate}&duration[end]=${endDate}`;\n\n if (params.hasOwnProperty('source') && params.source !== null) {\n url = url + '&source=' + params.source;\n }\n\n return this._wrapGet(url);\n }\n\n getWeek(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('week', itemId, source);\n }\n\n getMonth(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('month', itemId, source);\n }\n\n getQuarter(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('quarter', itemId, source);\n }\n\n getYear(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('year', itemId, source);\n }\n\n getAll(itemId: number, source = null): Promise<GraphResponse> {\n return this.getDuration('all', itemId, source);\n }\n\n getCandlestick(\n duration: GraphDuration,\n itemId: number,\n ): Promise<GraphResponse> {\n return this._wrapGet(`graph/candlestick/${itemId}/${duration}`);\n }\n\n getIndicators(duration: GraphDuration, itemId: number) {\n return this._wrapGet(`graph/indicators/${itemId}/${duration}`);\n }\n\n forceReload(duration: GraphDuration, itemId: number) {\n return this._wrapPost(`graph/force-reload`, {\n itemId,\n duration,\n });\n }\n\n dmm(enabled: boolean = true) {\n this._dmm = enabled;\n return this;\n }\n\n /**\n * Wrap URLs to support DMM endpoints\n *\n * @param path\n */\n _wrapUrl(path: string) {\n if (!this._dmm || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport default class HerbloreWrapper extends APIBaseWrapper {\n getCleanHerbs() {\n return this._wrapGet('herblore/clean-herbs');\n }\n\n getMakePotions() {\n return this._wrapGet('herblore/make-potions');\n }\n\n getUnfinishedPotions() {\n return this._wrapGet('herblore/unfinished-potions');\n }\n\n getDecantPotions(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('decant-potions', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {\n CalculatorListPromise,\n DataWrapped,\n Item,\n ItemListPromise,\n} from '../types';\n\nexport type ItemCombinationPiece = {\n qty: number;\n item: DataWrapped<Item>;\n};\n\nexport type ItemCombination = {\n qty: number;\n label: string | null;\n conversionCost: number;\n avgSellingQuantity: number;\n ratio: number;\n total: {\n cost: number;\n profit: number;\n pieces: number;\n piecesCost: number;\n };\n item: DataWrapped<Item>;\n pieces: ItemCombinationPiece[];\n};\n\nexport type ItemCombinationResponse = ItemCombination[];\n\nexport default class ItemConversionsWrapper extends APIBaseWrapper {\n getBarrowsRepair(): CalculatorListPromise {\n return this._wrapGet('barrows-repair');\n }\n\n getItemSets(opts = {filters: false}): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('item-sets', opts));\n }\n\n getCombinationItems(\n opts = {filters: false},\n ): Promise<ItemCombinationResponse> {\n return this._wrapGet(this.parseOptions('combination-items', opts));\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise, ItemPromise} from '../types';\n\nexport type ItemPeriod = {\n price: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n volume: {\n day: number;\n month: number;\n month3: number;\n month6: number;\n year: number;\n };\n};\n\nexport default class ItemsWrapper extends APIBaseWrapper {\n getAllItems(): ItemListPromise {\n return this._wrapGet('items');\n }\n\n getItem(itemId: number, detail: boolean = false): ItemPromise {\n const url = !detail ? `items/${itemId}` : `items/${itemId}?detail=true`;\n return this._wrapGet(url);\n }\n\n getItems(...itemIds: Array<number>): ItemListPromise {\n return this._wrapGet(`items/multi/${itemIds.join(',')}`);\n }\n\n search(query: string): ItemListPromise {\n return this._wrapGet(`items/search/${query}`);\n }\n\n getItemPeriod(itemId: number): Promise<ItemPeriod> {\n return this._wrapGet(`items/${itemId}/period`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type LeaderboardSlug = 'global' | 'monthly' | 'weekly' | 'daily';\n\nexport default class LeaderboardWrapper extends APIBaseWrapper {\n getLeaderboard(slug: LeaderboardSlug, opts = {}) {\n return this.client\n .get(this.parseOptions(`leaderboard/${slug}`, opts))\n .then(({data}) => data);\n }\n\n getRank(slug: LeaderboardSlug) {\n return this._wrapGet(`leaderboard/rank/${slug}`);\n }\n\n getSummary() {\n return this._wrapGet('leaderboard');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {\n CalculatorItem,\n CalculatorListPromise,\n Item,\n ItemListPromise,\n} from '../types';\n\nexport default class MagicWrapper extends APIBaseWrapper {\n getHighAlchemy(opts = {filters: false}): ItemListPromise {\n return this._wrapGet(this.parseOptions('high-alchemy', opts));\n }\n\n getEnchanting(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('magic/enchanting', opts));\n }\n\n getMagicTablets(\n opts = {filters: false},\n ): CalculatorListPromise<CalculatorItem<Item, MagicTabletMethods>> {\n return this._wrapGet(this.parseOptions('magic-tablets', opts));\n }\n\n getPlankMaking(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('plank-making', opts));\n }\n\n getTreeSapling(opts = {filters: false}): CalculatorListPromise {\n return this._wrapGet(this.parseOptions('tree-sapling', opts));\n }\n}\n\nexport type MagicTabletMethods = {\n staff: {\n negate: string[];\n };\n};\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class MarketWatchWrapper extends APIBaseWrapper {\n getIndex(indexId: number | string) {\n return this._wrapGet(`market-watch/${indexId}`);\n }\n\n getSummary() {\n return this._wrapGet('market-watch');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class NotificationsWrapper extends APIBaseWrapper {\n getNotifications() {\n return this._wrapGet('notifications');\n }\n\n getNotification(notificationId: string) {\n return this._wrapGet(`notifications/${notificationId}`);\n }\n\n markAllAsRead() {\n return this._wrapPost(`notifications/mark-read`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type PriceAlertField = 'current' | 'selling' | 'buying' | 'profit';\nexport type PriceAlertType = 'above' | 'below';\nexport type PriceAlertMethod = {\n sms?: boolean;\n email?: boolean;\n app?: boolean;\n};\n\nexport default class PriceAlertWrapper extends APIBaseWrapper {\n /**\n * Get Price Alerts\n *\n * `itemId` can be specified to load price alerts for a single item\n *\n * @param {Number} itemId\n * @return {*}\n */\n getAlerts(itemId = null) {\n const url = itemId ? `/price-alerts/${itemId}` : '/price-alerts';\n return this._wrapGet(url);\n }\n\n /**\n * Create Price Alert\n *\n * @return {*}\n */\n createAlert(\n itemId: number,\n field: PriceAlertField,\n type: PriceAlertType,\n price: number,\n methods: PriceAlertMethod = {},\n maxTriggers: number = 10,\n ) {\n return this._wrapPost('/price-alerts', {\n itemId,\n field,\n type,\n price,\n methods,\n maxTriggers,\n });\n }\n\n updateAlert(id: number, status: string, params = {}) {\n return this._wrapPost(`/price-alerts/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteAlert(id: number) {\n return this._wrapDelete(`/price-alerts/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item, LegacyPaginated, PaginatedResponse} from '../types';\n\nexport type UpdateStatus = 'bought' | 'selling' | 'sold';\nexport type TransactionStatus = 'buying' & UpdateStatus;\n\nexport default class ProfitTrackerWrapper extends APIBaseWrapper {\n getTransactions<P = LegacyPaginated>(\n opts = {},\n ): Promise<TransactionsResponse<P>> {\n return this.client\n .get(this.parseOptions('/profit-tracker', opts))\n .then(({data}) => data);\n }\n\n getTransaction(id: string) {\n return this._wrapGet(`/profit-tracker/${id}`);\n }\n\n createTransaction(\n itemId: number,\n qty: number,\n buyPrice: number,\n params = {},\n ) {\n return this._wrapPost('/profit-tracker', {\n item_id: itemId,\n qty: qty,\n buy_price: buyPrice,\n ...params,\n });\n }\n\n updateTransaction(id: string, status: UpdateStatus, params = {}) {\n return this._wrapPost(`/profit-tracker/${id}`, {\n status,\n ...params,\n });\n }\n\n deleteTransaction(id: string) {\n return this._wrapDelete(`/profit-tracker/${id}`);\n }\n\n getBuyingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/buying', opts))\n .then(({data}) => data);\n }\n\n getBoughtTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/bought', opts))\n .then(({data}) => data);\n }\n\n getSellingTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/selling', opts))\n .then(({data}) => data);\n }\n\n getSoldTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/sold', opts))\n .then(({data}) => data);\n }\n\n getActiveTransactions(opts = {}) {\n return this.client\n .get(this.parseOptions('/profit-tracker/active-transactions', opts))\n .then(({data}) => data);\n }\n\n getPreviousTransactions(itemId: number) {\n return this._wrapGet(`/profit-tracker/previous-transactions/${itemId}`);\n }\n\n getSummary() {\n return this._wrapGet('/profit-tracker/summary');\n }\n\n getMostProfitable() {\n return this._wrapGet('/profit-tracker/most-profitable');\n }\n\n clear() {\n return this._wrapPost('/profit-tracker/clear');\n }\n\n import(transactions: ImportTransaction[]) {\n return this._wrapPost('/profit-tracker/import', {transactions});\n }\n}\n\nexport type ProfitTransaction = {\n id: string;\n status: TransactionStatus;\n order: {\n itemId: number;\n qty: number;\n buyPrice: number;\n sellPrice: number | null;\n intendedSellPrice: number | null;\n };\n dates: {\n buy: string | null;\n bought: string | null;\n sell: string | null;\n sold: string | null;\n };\n merchLog: {\n public: boolean | null;\n verified: boolean | null;\n rejected: boolean | null;\n };\n item: {\n data: Item;\n };\n};\n\nexport type TransactionsResponse<P = LegacyPaginated> = PaginatedResponse<\n ProfitTransaction,\n P\n>;\n\nexport type ImportTransaction = {\n id: string;\n itemId: number;\n qty: number | string;\n buyPrice: number | string;\n sellPrice?: number | string | null;\n status?: string | null;\n buyDate?: string | null;\n boughtDate?: string | null;\n sellDate?: string | null;\n soldDate?: string | null;\n intendedSellPrice?: number | string | null;\n changePivot?: number | null;\n threshold?: number | null;\n};\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {PaginatedResponse} from '../types';\n\nexport type DaysOption = number | 'all';\n\ntype RsUpdateOptions = {\n days?: DaysOption;\n};\n\nexport type RsUpdate = {\n id: number;\n title: string;\n description: string;\n category: string;\n link: string;\n createdAt: string;\n};\n\nexport default class RSUpdatesWrapper extends APIBaseWrapper {\n get(opts: RsUpdateOptions = {}): Promise<PaginatedResponse<RsUpdate>> {\n return this.client\n .get(this.parseOptions('rs-updates', opts))\n .then(({data}) => data);\n }\n\n getUpdate(id: number) {\n return this._wrapGet(`rs-updates/${id}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {Item} from '../types';\nimport type {UserClass} from './UserWrapper';\nimport {handleResponseBody} from '../lib/handlers';\n\nexport interface PopularItem {\n item: Item;\n views: number;\n}\n\nexport interface StatsResponse {\n totalProfit: number;\n avgProfit: number;\n totalTransactions: number;\n totalItems: number;\n usersActive: number;\n usersOnline: number;\n users: {\n accountsOnline: number;\n premiumUsersOnline: number;\n standardUsersOnline: number;\n trialUsersOnline: number;\n registeredUsers: number;\n };\n popularItems: PopularItem[];\n}\n\ninterface OnlineUser {\n name: string;\n slug: string;\n class: UserClass;\n}\n\nexport type OnlineUsers = Record<UserClass, OnlineUser[]>;\n\nexport interface OnlineUsersResponse {\n onlineCount: {\n usersOnline: number;\n premium: number;\n standard: number;\n trial: number;\n guest: number;\n registeredUsers: number;\n };\n users: OnlineUsers;\n}\n\nexport default class StatsWrapper extends APIBaseWrapper {\n getGlobalStats(): Promise<StatsResponse> {\n return new Promise(async resolve => {\n const data = await this._wrapGet<StatsResponse>('stats');\n\n // Remove the `data` property from the item's response\n data.popularItems = data.popularItems.map(item => ({\n views: item.views,\n item: handleResponseBody(item.item),\n }));\n\n resolve(data);\n });\n }\n\n getOnlineUsers(): Promise<OnlineUsersResponse> {\n return this._wrapGet('stats/online');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport default class StoreProfitWrapper extends APIBaseWrapper {\n getStores() {\n return this._wrapGet('stores');\n }\n\n getItems() {\n return this._wrapGet('stores/profit');\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\nimport type {ItemListPromise} from '../types';\n\nexport type Tag = {\n id: number;\n slug: string;\n name: string;\n};\n\nexport default class TagWrapper extends APIBaseWrapper {\n getTags(): Promise<Array<Tag>> {\n return this._wrapGet('tags');\n }\n\n addTag(itemId: number, tag: string) {\n return this._wrapPost(`tags`, {\n item_id: itemId,\n tag,\n });\n }\n\n deleteTag(itemId: number, tag: string) {\n return this._wrapDelete(`tags/item/${itemId}/${tag}`);\n }\n\n getTaggedItems(tag: string | Array<string>): ItemListPromise {\n // Join an array to a CSV list\n if (Array.isArray(tag)) {\n tag = tag.join(',');\n }\n\n return this._wrapGet(`tags/${tag}`);\n }\n\n getItemTags(itemId: number): Promise<Array<Tag>> {\n return this._wrapGet(`tags/item/${itemId}`);\n }\n}\n","import APIBaseWrapper from './APIBaseWrapper';\n\nexport type UserPremium = {\n premium: boolean;\n trial: boolean;\n view: boolean;\n};\n\nexport type UserPermissions = {\n moderator: boolean;\n staff: boolean;\n admin: boolean;\n disabled: boolean;\n temp?: boolean;\n};\n\nexport type UserClass =\n | 'admin'\n | 'staff'\n | 'moderator'\n | 'high-roller'\n | 'youtube'\n | 'twitch'\n | 'affiliate'\n | 'discord'\n | 'premium'\n | 'standard'\n | 'trial'\n | string;\n\nexport type User = {\n userId: string;\n name: string;\n email: string;\n totalProfit: number;\n registeredOn: Date | string;\n trialEndsOn: Date | string | null;\n emailVerified: boolean;\n profilePic: string;\n slug: string;\n apiKey: string;\n url: string;\n class: UserClass;\n premium: UserPremium;\n permissions: UserPermissions;\n avatars: Array<string>;\n};\n\nexport default class UserWrapper extends APIBaseWrapper {\n getById(userId: string): Promise<Array<User>> {\n return this._wrapGet(`users/${userId}`);\n }\n\n search(query: string): Promise<Array<User>> {\n return this._wrapPost(`users/search`, {\n query,\n });\n }\n\n getAuthenticateUser(): Promise<User> {\n return this._wrapGet('users/me');\n }\n}\n","import * as Endpoint from '../endpoints';\nimport APIBaseWrapper from '../endpoints/APIBaseWrapper';\nimport type {GeTrackerAxios} from './client';\n\nexport interface GeTrackerApi {\n APIUptime: Endpoint.APIUptimeWrapper;\n Calculator: Endpoint.CalculatorWrapper;\n CraftingSmithing: Endpoint.CraftingSmithingWrapper;\n Dashboard: Endpoint.DashboardWrapper;\n FavouriteItems: Endpoint.FavouriteItemsWrapper;\n FlipFinder: Endpoint.FlipFinderWrapper;\n Fletching: Endpoint.FletchingWrapper;\n Graphs: Endpoint.GraphWrapper;\n Herblore: Endpoint.HerbloreWrapper;\n ItemConversions: Endpoint.ItemConversionsWrapper;\n Items: Endpoint.ItemsWrapper;\n Leaderboard: Endpoint.LeaderboardWrapper;\n Magic: Endpoint.MagicWrapper;\n MarketWatch: Endpoint.MarketWatchWrapper;\n Notifications: Endpoint.NotificationsWrapper;\n PriceAlert: Endpoint.PriceAlertWrapper;\n ProfitTracker: Endpoint.ProfitTrackerWrapper;\n RSUpdates: Endpoint.RSUpdatesWrapper;\n Stats: Endpoint.StatsWrapper;\n StoreProfit: Endpoint.StoreProfitWrapper;\n Tags: Endpoint.TagWrapper;\n Users: Endpoint.UserWrapper;\n getManifest: () => Promise<any>;\n attachOnRequest: (\n callback: (method: string, path: string, params: object) => void,\n ) => void;\n getClient: () => GeTrackerAxios;\n dmm: (enabled: boolean) => void;\n}\n\nconst createApi = (client: GeTrackerAxios): GeTrackerApi => {\n return {\n APIUptime: new Endpoint.APIUptimeWrapper(client),\n Calculator: new Endpoint.CalculatorWrapper(client),\n CraftingSmithing: new Endpoint.CraftingSmithingWrapper(client),\n Dashboard: new Endpoint.DashboardWrapper(client),\n FavouriteItems: new Endpoint.FavouriteItemsWrapper(client),\n FlipFinder: new Endpoint.FlipFinderWrapper(client),\n Fletching: new Endpoint.FletchingWrapper(client),\n Graphs: new Endpoint.GraphWrapper(client),\n Herblore: new Endpoint.HerbloreWrapper(client),\n ItemConversions: new Endpoint.ItemConversionsWrapper(client),\n Items: new Endpoint.ItemsWrapper(client),\n Leaderboard: new Endpoint.LeaderboardWrapper(client),\n Magic: new Endpoint.MagicWrapper(client),\n MarketWatch: new Endpoint.MarketWatchWrapper(client),\n Notifications: new Endpoint.NotificationsWrapper(client),\n PriceAlert: new Endpoint.PriceAlertWrapper(client),\n ProfitTracker: new Endpoint.ProfitTrackerWrapper(client),\n RSUpdates: new Endpoint.RSUpdatesWrapper(client),\n Stats: new Endpoint.StatsWrapper(client),\n StoreProfit: new Endpoint.StoreProfitWrapper(client),\n Tags: new Endpoint.TagWrapper(client),\n Users: new Endpoint.UserWrapper(client),\n\n /**\n * Get GT App Manifest JSON\n *\n * @return {Promise<any>}\n */\n getManifest(): Promise<any> {\n // @ts-ignore\n const apiUrl = client.defaults.baseURL.replace('/api', '');\n return new Promise((resolve, reject) => {\n client\n .get(`${apiUrl}app_manifest.json`)\n .then(data => {\n if (data.hasOwnProperty('data')) {\n resolve(data.data);\n } else {\n reject(null);\n }\n })\n .catch(err => reject(err));\n });\n },\n\n /**\n * Attach a callback to each request.\n *\n * Used for error logging via Bugsnag or Sentry\n *\n * `callback` will be called with 3 parameters: `method`, `path`, `params`\n *\n * @param {Function} callback\n */\n attachOnRequest(\n callback: (method: string, path: string, params: object) => void,\n ): void {\n APIBaseWrapper.onRequestCb = callback;\n },\n\n /**\n * Get underlying Axios client instance\n */\n getClient(): GeTrackerAxios {\n return client;\n },\n\n dmm(enabled: boolean = true): void {\n client.dmm(enabled);\n },\n };\n};\n\nexport {createApi};\n","import Axios, {\n AxiosError,\n type AxiosInstance,\n type AxiosRequestConfig,\n type CreateAxiosDefaults,\n} from 'axios';\nimport merge from 'deepmerge';\nimport * as errors from './errors';\n\nconst GE_TRACKER_API_URL = 'https://www.ge-tracker.com/api';\nconst GE_TRACKER_API_VERSION = 'v2.1';\n\nexport type ApiKey = string | null | undefined;\n\nconst DefaultOptions: CreateAxiosDefaults = {\n // set the base URL for all API calls made on this Axios instance\n baseURL: GE_TRACKER_API_URL,\n\n // set a sane default for the request TTL\n timeout: 30e3,\n\n // disable redirects -- API should NOT return a redirect response\n maxRedirects: 0,\n\n // explicitly set the default response type to JSON\n responseType: 'json',\n\n // set api client headers\n headers: {\n 'X-Api-Client': 'ge-tracker-api client v6.3.3',\n Accept: `application/x.getracker.${GE_TRACKER_API_VERSION}+json`,\n },\n};\n\nfunction isUnauthorizedResponse(error: AxiosError) {\n return error.response && error.response.status === 401;\n}\n\nfunction createAuthHeader(apiKey: ApiKey): object {\n // if (apiKey === null) {\n // return {};\n // }\n\n return {\n // Authorization header is required with a valid API key for all API calls\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\n/**\n * Wrap URLs to support DMM endpoints\n *\n * @param dmmMode\n * @param request\n */\nfunction applyDmmParameter(\n dmmMode: boolean,\n request: AxiosRequestConfig,\n): string | undefined {\n const path = request.url;\n\n if (!dmmMode || path === undefined || path.includes('dmm=1')) {\n return path;\n }\n\n return path.includes('?') ? path + '&dmm=1' : path + '?dmm=1';\n}\n\nexport interface GeTrackerAxios extends AxiosInstance {\n dmm(enabled: boolean): void;\n}\n\n/**\n * Create a new Axios instance\n *\n * @param apiKey\n * @param opts\n */\nfunction createClient(\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerAxios {\n const options = merge(DefaultOptions, opts || {});\n const instance = Axios.create(\n merge(options, {headers: createAuthHeader(apiKey)}),\n );\n\n let dmmMode: boolean = false;\n\n // add custom response interceptors\n instance.interceptors.response.use(\n response => {\n return response;\n },\n (error: AxiosError) => {\n // intercept 401 Unauthorized responses and reject the promise chain with\n // an appropriate typed error\n if (isUnauthorizedResponse(error)) {\n return Promise.reject(new errors.InvalidApiKey());\n }\n\n return Promise.reject(error);\n },\n );\n\n instance.interceptors.request.use(request => {\n request.url = applyDmmParameter(dmmMode, request);\n return request;\n });\n\n // @ts-ignore\n function dmm(enabled: boolean = true): void {\n dmmMode = enabled;\n }\n\n // @ts-ignore\n return instance;\n}\n\nexport {DefaultOptions, createClient, GE_TRACKER_API_URL};\n","function captureStackTrace(\n targetObject: object,\n constructorOpt: Function | undefined = undefined,\n) {\n if (Error.captureStackTrace) {\n Error.captureStackTrace(targetObject, constructorOpt);\n }\n}\n\nclass InvalidApiKey extends Error {\n constructor() {\n super('Specified API key was missing or invalid');\n captureStackTrace(this, InvalidApiKey);\n }\n}\n\nexport {InvalidApiKey};\n","import type {ApiKey} from './client';\n\nfunction getApiKeyFromEnv(): ApiKey {\n return process.env.GE_TRACKER_API_KEY;\n}\n\nexport {getApiKeyFromEnv};\n","import {createApi, type GeTrackerApi} from './lib/api';\nimport {\n type ApiKey,\n createClient as createAxios,\n DefaultOptions,\n} from './lib/client';\nimport {getApiKeyFromEnv} from './lib/config';\nimport type {CreateAxiosDefaults} from 'axios';\n\nconst createInstance = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n): GeTrackerApi => {\n return createApi(createAxios(apiKey, opts));\n};\n\nconst createClient = (\n apiKey: ApiKey,\n opts: CreateAxiosDefaults | null = null,\n) => createInstance(apiKey, opts);\nconst createClientFromEnv = (opts: CreateAxiosDefaults | null = null) =>\n createInstance(getApiKeyFromEnv(), opts);\n\nexport * from './types';\nexport * from './endpoints/types';\nexport {APIBaseWrapper} from './endpoints';\nexport {handleResponseBody} from './lib/handlers';\nexport type {GeTrackerApi};\nexport {createClient, createClientFromEnv, createAxios, DefaultOptions};\n\nexport type {ApiKey};\n"],"mappings":"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","names":["obj","createClient"]}
{
"name": "@getracker/api",
"version": "6.3.2",
"version": "6.3.3",
"description": "Official GE-Tracker.com API client",

@@ -44,7 +44,8 @@ "repository": "https://github.com/ge-tracker/ge-tracker-api",

"@babel/preset-typescript": "^7.18.6",
"@tsconfig/node18": "^18.2.1",
"@tsconfig/node20": "^20.1.2",
"@types/jest": "^29.2.4",
"husky": ">=6",
"@types/node": "^20.10.0",
"husky": "^8.0.2",
"jest": "^29.3.1",
"lint-staged": ">=10",
"lint-staged": "^13.0.3",
"prettier": "^3.0.3",

@@ -77,5 +78,5 @@ "tslib": "^2.4.1",

"clean": "rm -rf dist types",
"watch": "tsup src/index.ts --watch --dts",
"dev": "tsup src/index.ts --watch --dts",
"prettier": "prettier --write ."
}
}