tfd-api
Version:
A simple API wrapper to interact with The First Descendant API
1 lines • 14.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils.ts","../src/contents/account.ts","../src/contents/metadata.ts","../src/core.ts","../src/types/module.ts"],"sourcesContent":["import fetch from \"isomorphic-unfetch\";\r\n\r\nimport type { ClientOptions, Options } from \"./types\";\r\n\r\nexport function generateOptions(changes: Options): ClientOptions {\r\n return {\r\n host: \"https://open.api.nexon.com\",\r\n default_language: changes?.default_language || \"en\",\r\n headers: {\r\n \"x-nxopen-api-key\": changes?.api_key,\r\n },\r\n };\r\n}\r\n\r\nexport function formatQueryStrings(uri: string, params: Record<string, string | number>) {\r\n let fullUrl: string = uri;\r\n if (Object.keys(params).length > 0) {\r\n const searchParams = new URLSearchParams();\r\n Object.entries(params).forEach(([key, value]) => searchParams.append(key, value.toString()));\r\n\r\n fullUrl += `?${searchParams.toString()}`;\r\n }\r\n\r\n return fullUrl;\r\n}\r\n\r\nexport async function httpRequest(url: string, headers?: HeadersInit) {\r\n return await fetch(url, {\r\n method: \"GET\",\r\n headers,\r\n })\r\n .then((res) => {\r\n const isJson = res.headers.get(\"Content-Type\") && res.headers.get(\"Content-Type\")?.includes(\"application/json\");\r\n return isJson\r\n ? res.json()\r\n : {\r\n error: {\r\n name: \"CUSTOMERROR\",\r\n message: \"Unable to parse API response\",\r\n },\r\n };\r\n })\r\n .catch((e) => {\r\n console.log(`[FETCHER//ERROR] ${e.message}`);\r\n return null;\r\n });\r\n}\r\n","import type { ExternalComponent, User, UserBasic, UserDescendant, UserReactor, UserWeapon } from \"../types/account\";\r\nimport type { APIResponse, Languages } from \"../types/general\";\r\nimport type { QueryPeriod, RecommendationModule } from \"../types/module\";\r\n\r\nimport { formatQueryStrings, httpRequest } from \"../utils\";\r\n\r\nexport class Account {\r\n constructor(private url: string, private headers: Record<string, string>, private default_language: Languages) {\r\n if (!headers[\"x-nxopen-api-key\"]) throw Error(\"API Key is required\");\r\n }\r\n\r\n /**\r\n * Retrieve account identifier (OUID)\r\n * @param user_name Nickname\r\n * @returns\r\n */\r\n public getId(user_name: string): Promise<APIResponse<User>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/id`, { user_name });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Retrieves basic information.\r\n * @param ouid OUID\r\n * @returns\r\n */\r\n public getUserBasic(ouid: string): Promise<APIResponse<UserBasic>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/user/basic`, {\r\n ouid,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Retrieves information about the equipped descendant.\r\n * @param ouid OUID\r\n * @returns\r\n */\r\n public getUserDescendant(ouid: string): Promise<APIResponse<UserDescendant>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/user/descendant`, {\r\n ouid,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Retrieves information about weapons equipped in all slots.\r\n * @param ouid OUID\r\n * @param language_code language code\r\n * @returns\r\n */\r\n public getUserWeapon(ouid: string, language_code: Languages = this.default_language): Promise<APIResponse<UserWeapon>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/user/weapon`, {\r\n ouid,\r\n language_code,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Retrieves information about the equipped Reactor.\r\n * @param ouid OUID\r\n * @param language_code language code\r\n * @returns\r\n */\r\n public getUserReactor(ouid: string, language_code: Languages = this.default_language): Promise<APIResponse<UserReactor>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/user/reactor`, {\r\n ouid,\r\n language_code,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Retrieves information about external components equipped in all slots.\r\n * @param ouid OUID\r\n * @param language_code language code\r\n * @returns\r\n */\r\n public getUserExternalComponent(\r\n ouid: string,\r\n language_code: Languages = this.default_language\r\n ): Promise<APIResponse<ExternalComponent>> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/user/external-component`, {\r\n ouid,\r\n language_code,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n\r\n /**\r\n * Recommends modules suited to the user.\r\n * @param descendant_id Descendant identifier (Refer to /meta/descendant API)\r\n * @param weapon_id Weapon identifier (Refer to /meta/weapon API)\r\n * @param void_battle_id Void Intercept Battle identifier (Refer to /meta/void-battle API)\r\n * @param period Query period\r\n * @returns\r\n */\r\n public getRecommendationModule(\r\n descendant_id: string,\r\n weapon_id: string,\r\n void_battle_id: string,\r\n period: QueryPeriod\r\n ): Promise<RecommendationModule> {\r\n const endpoint = formatQueryStrings(`${this.url}/tfd/v1/recommendation/module`, {\r\n descendant_id,\r\n weapon_id,\r\n void_battle_id,\r\n period,\r\n });\r\n return httpRequest(endpoint, this.headers);\r\n }\r\n}\r\n","import type { APIResponse, Languages } from \"../types/general\";\r\nimport type {\r\n IDescendant,\r\n IExternalComponent,\r\n IModule,\r\n IReactor,\r\n IReward,\r\n IStat,\r\n ITitle,\r\n IVoidBattle,\r\n IWeapon,\r\n} from \"../types/static\";\r\n\r\nimport { httpRequest } from \"../utils\";\r\n\r\nexport class Metadata {\r\n constructor(private url: string, private default_language: Languages) { }\r\n\r\n /**\r\n * Retrieve descendant metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getDescendant(language_code: Languages = this.default_language): Promise<APIResponse<IDescendant[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/descendant.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve weapon metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getWeapon(language_code: Languages = this.default_language): Promise<APIResponse<IWeapon[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/weapon.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve module metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getModule(language_code: Languages = this.default_language): Promise<APIResponse<IModule[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/module.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve Reactor metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getReactor(language_code: Languages = this.default_language): Promise<APIResponse<IReactor[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/reactor.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve external component metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getExternalComponent(language_code: Languages = this.default_language): Promise<APIResponse<IExternalComponent[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/external-component.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve Difficulty Level Rewards metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getReward(language_code: Languages = this.default_language): Promise<APIResponse<IReward[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/reward.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve base stat metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getStat(language_code: Languages = this.default_language): Promise<APIResponse<IStat[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/stat.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve Void Intercept Battle metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getVoidBattle(language_code: Languages = this.default_language): Promise<APIResponse<IVoidBattle[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/void-battle.json`;\r\n return httpRequest(endpoint);\r\n }\r\n\r\n /**\r\n * Retrieve Title metadata\r\n * @param language_code Languages\r\n * @returns\r\n */\r\n public getTitle(language_code: Languages = this.default_language): Promise<APIResponse<ITitle[]>> {\r\n const endpoint = `${this.url}/static/tfd/meta/${language_code}/title.json`;\r\n return httpRequest(endpoint);\r\n }\r\n}\r\n","import type { ClientOptions, Options } from \"./types\";\r\n\r\nimport { Account } from \"./contents/account\";\r\nimport { Metadata } from \"./contents/metadata\";\r\n\r\nimport { generateOptions } from \"./utils\";\r\n\r\nexport class TFDApi {\r\n private options: ClientOptions;\r\n\r\n public account: Account;\r\n public metadata: Metadata;\r\n\r\n constructor(config: Options) {\r\n this.options = generateOptions(config);\r\n\r\n this.account = new Account(this.options.host, this.options.headers, this.options.default_language);\r\n this.metadata = new Metadata(this.options.host, this.options.default_language);\r\n }\r\n}\r\n","export enum QueryPeriod {\r\n Last7Days = 0,\r\n Last30Days = 1,\r\n AllTime = 2,\r\n}\r\n\r\nexport interface RecommendationModule {\r\n descendant: RecommendationModuleDescendant;\r\n weapon: RecommendationModuleWeapon;\r\n}\r\n\r\nexport interface RecommendationModuleDescendant {\r\n descendant_id: string;\r\n recommendation: RecommendationModuleRecommendation[];\r\n}\r\n\r\nexport interface RecommendationModuleWeapon {\r\n weapon_id: string;\r\n recommendation: RecommendationModuleRecommendation[];\r\n}\r\n\r\nexport interface RecommendationModuleRecommendation {\r\n module_id: string;\r\n}\r\n"],"mappings":"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","names":["fetch","generateOptions","changes","formatQueryStrings","uri","params","fullUrl","searchParams","key","value","httpRequest","url","headers","res","Account","url","headers","default_language","user_name","endpoint","formatQueryStrings","httpRequest","ouid","language_code","descendant_id","weapon_id","void_battle_id","period","Metadata","url","default_language","language_code","endpoint","httpRequest","TFDApi","config","generateOptions","Account","Metadata","QueryPeriod"]}