{"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"]}