{"version":3,"sources":["../src/errors.ts","../src/configuration.ts","../src/resource.ts","../src/resources/average-exchange-rate.ts","../src/resources/debt-securities.ts","../src/resources/deposit-rate.ts","../src/resources/exchange-rate.ts","../src/resources/financial-holidays.ts","../src/resources/implied-rate.ts","../src/resources/interbank-rate.ts","../src/resources/license-check.ts","../src/resources/loan-rate.ts","../src/resources/search-series.ts","../src/resources/swap-point.ts","../src/response.ts","../src/client.ts"],"names":["BotApiError","message","ConfigurationError","RequestError","response","AuthenticationError","NotFoundError","RateLimitError","retryAfter","ServerError","Configuration","_Configuration","config","Resource","client","path","params","options","AverageExchangeRate","_AverageExchangeRate","DebtSecurities","_DebtSecurities","DepositRate","_DepositRate","ExchangeRate","_ExchangeRate","FinancialHolidays","_FinancialHolidays","ImpliedRate","_ImpliedRate","InterbankRate","_InterbankRate","LicenseCheck","_LicenseCheck","LoanRate","_LoanRate","SearchSeries","_SearchSeries","SwapPoint","_SwapPoint","BotApiResponse","rawResponse","column","row","val","values","acc","dates","sorted","range","start","end","expected","actualDates","missing","current","dateStr","firstValue","lastValue","absolute","percentage","changes","prev","c","mean","variance","changeData","pct","headers","rows","cell","filename","csv","blob","url","result","data","firstRow","headerRow","h","dataRows","str","BotApiClient","method","controller","timeoutId","error","baseUrl","key","value","json","createClient"],"mappings":"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","file":"index.cjs","sourcesContent":["export class BotApiError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nexport class ConfigurationError extends BotApiError {}\n\nexport class RequestError extends BotApiError {\n  public response?: Response;\n\n  constructor(message: string, response?: Response) {\n    super(message);\n    this.response = response;\n  }\n}\n\nexport class AuthenticationError extends RequestError {}\n\nexport class NotFoundError extends RequestError {}\n\nexport class RateLimitError extends RequestError {\n  public retryAfter: number;\n\n  constructor(message: string, response?: Response, retryAfter = 60) {\n    super(message, response);\n    this.retryAfter = retryAfter;\n  }\n}\n\nexport class ServerError extends RequestError {}\n","import { ConfigurationError } from './errors';\n\nexport interface Logger {\n  debug(message: string, ...args: unknown[]): void;\n  info(message: string, ...args: unknown[]): void;\n  warn(message: string, ...args: unknown[]): void;\n  error(message: string, ...args: unknown[]): void;\n}\n\nexport interface BotApiConfig {\n  apiToken: string;\n  baseUrl?: string;\n  timeout?: number;\n  maxRetries?: number;\n  logger?: Logger;\n}\n\nexport class Configuration {\n  public apiToken: string;\n  public baseUrl: string;\n  public timeout: number;\n  public maxRetries: number;\n  public logger?: Logger;\n\n  static readonly DEFAULT_BASE_URL = 'https://gateway.api.bot.or.th';\n  static readonly DEFAULT_TIMEOUT = 30000;\n  static readonly DEFAULT_MAX_RETRIES = 3;\n\n  constructor(config: BotApiConfig) {\n    this.apiToken = config.apiToken;\n    this.baseUrl = config.baseUrl || Configuration.DEFAULT_BASE_URL;\n    this.timeout = config.timeout || Configuration.DEFAULT_TIMEOUT;\n    this.maxRetries = config.maxRetries || Configuration.DEFAULT_MAX_RETRIES;\n    this.logger = config.logger;\n\n    this.validate();\n  }\n\n  validate(): void {\n    if (!this.apiToken || this.apiToken.trim() === '') {\n      throw new ConfigurationError('API token is required');\n    }\n    if (!this.baseUrl || this.baseUrl.trim() === '') {\n      throw new ConfigurationError('Base URL cannot be empty');\n    }\n  }\n}\n","import type { BotApiClient } from './client';\nimport type { BotApiResponse } from './response';\n\nexport abstract class Resource {\n  protected client: BotApiClient;\n\n  constructor(client: BotApiClient) {\n    this.client = client;\n  }\n\n  protected async get<T = BotApiResponse>(\n    path: string,\n    params?: Record<string, unknown>,\n  ): Promise<T> {\n    return this.client.get<T>(path, params);\n  }\n\n  protected async post<T = BotApiResponse>(\n    path: string,\n    options?: { body?: unknown; params?: Record<string, unknown> },\n  ): Promise<T> {\n    return this.client.post<T>(path, options);\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface AverageExchangeRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class AverageExchangeRate extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-AverageExchangeRate/v2';\n\n  /**\n   * Get daily average exchange rate THB to foreign currency\n   * @param params - Date range parameters\n   * @returns Response with daily average exchange rate data\n   */\n  async daily(params: AverageExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${AverageExchangeRate.BASE_URL}/DAILY_AVG_EXG_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get monthly average exchange rate THB to foreign currency\n   * @param params - Period range in YYYY-MM format\n   */\n  async monthly(params: AverageExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${AverageExchangeRate.BASE_URL}/MONTHLY_AVG_EXG_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get quarterly average exchange rate THB to foreign currency\n   * @param params - Period range in YYYY-QN format\n   */\n  async quarterly(params: AverageExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${AverageExchangeRate.BASE_URL}/QUARTERLY_AVG_EXG_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get annual average exchange rate THB to foreign currency\n   * @param params - Year range in YYYY format\n   */\n  async annual(params: AverageExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${AverageExchangeRate.BASE_URL}/ANNUAL_AVG_EXG_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface DebtSecuritiesParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class DebtSecurities extends Resource {\n  private static readonly BASE_URL =\n    'https://gateway.api.bot.or.th/Stat-DebtSecuritiesAuctionResult/v2';\n\n  /**\n   * Get debt securities auction result (current)\n   * @param params - Date range parameters\n   * @returns Response with debt securities auction data\n   */\n  async auctionResults(params: DebtSecuritiesParams): Promise<BotApiResponse> {\n    return this.get(`${DebtSecurities.BASE_URL}/DAILY_DEBT_SEC_AUCTION/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface DepositRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class DepositRate extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-DepositInterestRates/v2';\n\n  /**\n   * Get deposit interest rates for individuals of commercial banks\n   * @param params - Date range parameters\n   * @returns Response with deposit rate data\n   */\n  async rates(params: DepositRateParams): Promise<BotApiResponse> {\n    return this.get(`${DepositRate.BASE_URL}/DAILY_DEPOSIT_INT_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface ExchangeRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class ExchangeRate extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-ReferenceRate/v2';\n\n  /**\n   * Get daily weighted-average interbank exchange rate\n   * @param params - Date range parameters\n   * @returns Response with daily exchange rate data\n   *\n   * @example\n   * ```typescript\n   * const rates = await client.exchangeRate.daily({\n   *   startPeriod: '2025-01-01',\n   *   endPeriod: '2025-01-31'\n   * });\n   *\n   * console.log(rates.average('rate'));\n   * ```\n   */\n  async daily(params: ExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${ExchangeRate.BASE_URL}/DAILY_REF_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get monthly weighted-average interbank exchange rate\n   * @param params - Period range in YYYY-MM format\n   */\n  async monthly(params: ExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${ExchangeRate.BASE_URL}/MONTHLY_REF_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get quarterly weighted-average interbank exchange rate\n   * @param params - Period range in YYYY-QN format\n   */\n  async quarterly(params: ExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${ExchangeRate.BASE_URL}/QUARTERLY_REF_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n\n  /**\n   * Get annual weighted-average interbank exchange rate\n   * @param params - Year range in YYYY format\n   */\n  async annual(params: ExchangeRateParams): Promise<BotApiResponse> {\n    return this.get(`${ExchangeRate.BASE_URL}/ANNUAL_REF_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface FinancialHolidaysParams {\n  year: string;\n}\n\nexport class FinancialHolidays extends Resource {\n  private static readonly BASE_URL =\n    'https://gateway.api.bot.or.th/Stat-FinancialInstitutionsHolidays/v1';\n\n  /**\n   * Get financial institutions holidays\n   * @param params - Year parameter (YYYY format)\n   * @returns Response with holiday data\n   */\n  async list(params: FinancialHolidaysParams): Promise<BotApiResponse> {\n    return this.get(`${FinancialHolidays.BASE_URL}/holidays`, {\n      year: params.year,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface ImpliedRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class ImpliedRate extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-ImpliedInterestRates/v2';\n\n  /**\n   * Get Thai Baht implied interest rates (percent per annum)\n   * @param params - Date range parameters\n   * @returns Response with implied rate data\n   */\n  async rates(params: ImpliedRateParams): Promise<BotApiResponse> {\n    return this.get(`${ImpliedRate.BASE_URL}/DAILY_IMPLIED_INT_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface InterbankRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class InterbankRate extends Resource {\n  private static readonly BASE_URL =\n    'https://gateway.api.bot.or.th/Stat-InterbankTransactionRates/v2';\n\n  /**\n   * Get interbank transaction rates (percent per annum)\n   * @param params - Date range parameters\n   * @returns Response with interbank rate data\n   */\n  async rates(params: InterbankRateParams): Promise<BotApiResponse> {\n    return this.get(`${InterbankRate.BASE_URL}/DAILY_INTERBANK_TRANS_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface LicenseCheckParams {\n  taxId: string;\n}\n\nexport class LicenseCheck extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/BOTLicenseCheckAPI/v1';\n\n  /**\n   * Check BOT license status\n   * @param params - Tax ID parameters\n   * @returns Response with license check data\n   */\n  async check(params: LicenseCheckParams): Promise<BotApiResponse> {\n    return this.get(`${LicenseCheck.BASE_URL}/license-check`, {\n      tax_id: params.taxId,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface LoanRateParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class LoanRate extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-LoanInterestRates/v2';\n\n  /**\n   * Get loan interest rates of commercial banks\n   * @param params - Date range parameters\n   * @returns Response with loan rate data\n   */\n  async rates(params: LoanRateParams): Promise<BotApiResponse> {\n    return this.get(`${LoanRate.BASE_URL}/DAILY_LOAN_INT_RATE/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface SearchSeriesParams {\n  keyword?: string;\n  category?: string;\n}\n\nexport class SearchSeries extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-SearchSeries/v1';\n\n  /**\n   * Search for data series\n   * @param params - Search parameters\n   * @returns Response with search results\n   */\n  async search(params?: SearchSeriesParams): Promise<BotApiResponse> {\n    return this.get(`${SearchSeries.BASE_URL}/search`, {\n      keyword: params?.keyword,\n      category: params?.category,\n    });\n  }\n}\n","import { Resource } from '../resource';\nimport type { BotApiResponse } from '../response';\n\nexport interface SwapPointParams {\n  startPeriod: string;\n  endPeriod: string;\n}\n\nexport class SwapPoint extends Resource {\n  private static readonly BASE_URL = 'https://gateway.api.bot.or.th/Stat-SwapPoint/v2';\n\n  /**\n   * Get swap point onshore (in satangs)\n   * @param params - Date range parameters\n   * @returns Response with swap point data\n   */\n  async onshore(params: SwapPointParams): Promise<BotApiResponse> {\n    return this.get(`${SwapPoint.BASE_URL}/DAILY_SWAP_POINT/`, {\n      start_period: params.startPeriod,\n      end_period: params.endPeriod,\n    });\n  }\n}\n","export interface StatisticsResult {\n  min: number;\n  max: number;\n  sum: number;\n  average: number;\n  count: number;\n  stdDev: number;\n}\n\nexport interface ChangeResult {\n  absolute: number;\n  percentage: number;\n  firstValue: number;\n  lastValue: number;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: Response data structure is dynamic and determined by API\nexport class BotApiResponse<T = any> {\n  public raw: T;\n  // biome-ignore lint/suspicious/noExplicitAny: Data array contains dynamic API response objects\n  public data: any[];\n\n  constructor(rawResponse: T) {\n    this.raw = rawResponse;\n    this.data = this.extractData(rawResponse);\n  }\n\n  get length(): number {\n    return this.data.length;\n  }\n\n  // biome-ignore lint/suspicious/noExplicitAny: Return type depends on API response structure\n  first(): any {\n    return this.data[0];\n  }\n\n  // biome-ignore lint/suspicious/noExplicitAny: Return type depends on API response structure\n  last(): any {\n    return this.data[this.data.length - 1];\n  }\n\n  valuesFor(column: string): number[] {\n    return this.data\n      .filter((row) => typeof row === 'object' && row !== null)\n      .map((row) => Number.parseFloat(row[column]))\n      .filter((val) => !Number.isNaN(val));\n  }\n\n  min(column: string): number | null {\n    const values = this.valuesFor(column);\n    return values.length > 0 ? Math.min(...values) : null;\n  }\n\n  max(column: string): number | null {\n    const values = this.valuesFor(column);\n    return values.length > 0 ? Math.max(...values) : null;\n  }\n\n  sum(column: string): number {\n    return this.valuesFor(column).reduce((acc, val) => acc + val, 0);\n  }\n\n  average(column: string): number {\n    const values = this.valuesFor(column);\n    if (values.length === 0) return 0;\n    return this.sum(column) / values.length;\n  }\n\n  mean(column: string): number {\n    return this.average(column);\n  }\n\n  dateRange(): [string, string] | null {\n    const dates = this.data\n      .filter((row) => typeof row === 'object' && row !== null)\n      .map((row) => row.period || row.date)\n      .filter(Boolean);\n\n    if (dates.length === 0) return null;\n\n    const sorted = dates.sort();\n    return [sorted[0], sorted[sorted.length - 1]];\n  }\n\n  periodDays(): number {\n    const range = this.dateRange();\n    if (!range) return 0;\n\n    const start = new Date(range[0]);\n    const end = new Date(range[1]);\n    return Math.floor((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24)) + 1;\n  }\n\n  isComplete(): boolean {\n    const expected = this.periodDays();\n    return expected === 0 ? true : this.data.length >= expected;\n  }\n\n  missingDates(): Date[] {\n    const range = this.dateRange();\n    if (!range) return [];\n\n    const start = new Date(range[0]);\n    const end = new Date(range[1]);\n    const actualDates = new Set(\n      this.data\n        .filter((row) => typeof row === 'object' && row !== null)\n        .map((row) => row.period || row.date),\n    );\n\n    const missing: Date[] = [];\n    const current = new Date(start);\n\n    while (current <= end) {\n      const dateStr = current.toISOString().split('T')[0];\n      if (!actualDates.has(dateStr)) {\n        missing.push(new Date(current));\n      }\n      current.setDate(current.getDate() + 1);\n    }\n\n    return missing;\n  }\n\n  change(column = 'value'): ChangeResult | null {\n    const values = this.valuesFor(column);\n    if (values.length < 2) return null;\n\n    const firstValue = values[0] as number;\n    const lastValue = values[values.length - 1] as number;\n    const absolute = lastValue - firstValue;\n    const percentage = firstValue === 0 ? 0 : (absolute / firstValue) * 100;\n\n    return {\n      absolute: Number.parseFloat(absolute.toFixed(4)),\n      percentage: Number.parseFloat(percentage.toFixed(4)),\n      firstValue,\n      lastValue,\n    };\n  }\n\n  dailyChanges(column = 'value'): Array<{ absolute: number; percentage: number }> {\n    const values = this.valuesFor(column);\n    if (values.length < 2) return [];\n\n    const changes: Array<{ absolute: number; percentage: number }> = [];\n\n    for (let i = 1; i < values.length; i++) {\n      const prev = values[i - 1] as number;\n      const curr = values[i] as number;\n      const absolute = curr - prev;\n      const percentage = prev === 0 ? 0 : (absolute / prev) * 100;\n\n      changes.push({\n        absolute: Number.parseFloat(absolute.toFixed(4)),\n        percentage: Number.parseFloat(percentage.toFixed(4)),\n      });\n    }\n\n    return changes;\n  }\n\n  volatility(column = 'value'): number {\n    const changes = this.dailyChanges(column).map((c) => c.percentage);\n    if (changes.length === 0) return 0;\n\n    const mean = changes.reduce((acc, val) => acc + val, 0) / changes.length;\n    const variance = changes.reduce((acc, val) => acc + (val - mean) ** 2, 0) / changes.length;\n\n    return Number.parseFloat(Math.sqrt(variance).toFixed(4));\n  }\n\n  trend(column = 'value'): 'up' | 'down' | 'flat' {\n    const changeData = this.change(column);\n    if (!changeData) return 'flat';\n\n    const pct = changeData.percentage;\n\n    if (pct > 1) return 'up';\n    if (pct < -1) return 'down';\n    return 'flat';\n  }\n\n  toCSV(): string {\n    if (this.data.length === 0) return '';\n\n    const headers = this.extractHeaders();\n    const rows = this.extractRows();\n\n    const csvLines = [\n      headers.join(','),\n      ...rows.map((row) => row.map((cell) => this.escapeCsvCell(cell)).join(',')),\n    ];\n\n    return csvLines.join('\\n');\n  }\n\n  async saveCSV(filename: string): Promise<void> {\n    const csv = this.toCSV();\n\n    if (typeof window === 'undefined') {\n      const fs = await import('node:fs/promises');\n      await fs.writeFile(filename, csv, 'utf-8');\n    } else {\n      const blob = new Blob([csv], { type: 'text/csv' });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = filename;\n      a.click();\n      URL.revokeObjectURL(url);\n    }\n  }\n\n  // biome-ignore lint/suspicious/noExplicitAny: Extracts data from dynamic API response structure\n  private extractData(response: any): any[] {\n    if (Array.isArray(response)) return response;\n    if (typeof response !== 'object' || response === null) return [];\n\n    const result = response.result;\n    if (typeof result !== 'object' || result === null) return [];\n\n    const data = result.data;\n    if (typeof data !== 'object' || data === null) return [];\n\n    // BOT API returns data in data_detail array\n    if (Array.isArray(data.data_detail)) {\n      return data.data_detail;\n    }\n\n    // Fallback for other possible structures\n    if (Array.isArray(data)) {\n      return data;\n    }\n\n    return [];\n  }\n\n  private extractHeaders(): string[] {\n    if (this.data.length === 0) return [];\n\n    const firstRow = this.data[0];\n    if (typeof firstRow !== 'object' || firstRow === null) return [];\n\n    return Object.keys(firstRow);\n  }\n\n  private generateCsvContent(): string {\n    const headers = this.extractHeaders();\n    const rows = this.extractRows();\n\n    const headerRow = headers.map((h) => this.escapeCsvCell(h)).join(',');\n    const dataRows = rows.map((row) => row.map((cell) => this.escapeCsvCell(cell)).join(','));\n\n    return [headerRow, ...dataRows].join('\\n');\n  }\n\n  private extractRows(): unknown[][] {\n    return this.data.map((row) => {\n      if (typeof row === 'object' && row !== null && !Array.isArray(row)) {\n        return Object.values(row);\n      }\n      if (Array.isArray(row)) {\n        return row;\n      }\n      return [row];\n    });\n  }\n\n  private escapeCsvCell(cell: unknown): string {\n    const str = String(cell ?? '');\n    if (str.includes(',') || str.includes('\"') || str.includes('\\n')) {\n      return `\"${str.replace(/\"/g, '\"\"')}\"`;\n    }\n    return str;\n  }\n}\n","import type { BotApiConfig } from './configuration';\nimport { Configuration } from './configuration';\nimport {\n  AuthenticationError,\n  NotFoundError,\n  RateLimitError,\n  RequestError,\n  ServerError,\n} from './errors';\nimport { AverageExchangeRate } from './resources/average-exchange-rate';\nimport { DebtSecurities } from './resources/debt-securities';\nimport { DepositRate } from './resources/deposit-rate';\nimport { ExchangeRate } from './resources/exchange-rate';\nimport { FinancialHolidays } from './resources/financial-holidays';\nimport { ImpliedRate } from './resources/implied-rate';\nimport { InterbankRate } from './resources/interbank-rate';\nimport { LicenseCheck } from './resources/license-check';\nimport { LoanRate } from './resources/loan-rate';\nimport { SearchSeries } from './resources/search-series';\nimport { SwapPoint } from './resources/swap-point';\nimport { BotApiResponse } from './response';\n\nexport class BotApiClient {\n  private config: Configuration;\n  private _exchangeRate?: ExchangeRate;\n  private _averageExchangeRate?: AverageExchangeRate;\n  private _depositRate?: DepositRate;\n  private _loanRate?: LoanRate;\n  private _interbankRate?: InterbankRate;\n  private _impliedRate?: ImpliedRate;\n  private _debtSecurities?: DebtSecurities;\n  private _swapPoint?: SwapPoint;\n  private _licenseCheck?: LicenseCheck;\n  private _financialHolidays?: FinancialHolidays;\n  private _searchSeries?: SearchSeries;\n\n  constructor(config: BotApiConfig) {\n    this.config = new Configuration(config);\n  }\n\n  get exchangeRate(): ExchangeRate {\n    if (!this._exchangeRate) {\n      this._exchangeRate = new ExchangeRate(this);\n    }\n    return this._exchangeRate;\n  }\n\n  get averageExchangeRate(): AverageExchangeRate {\n    if (!this._averageExchangeRate) {\n      this._averageExchangeRate = new AverageExchangeRate(this);\n    }\n    return this._averageExchangeRate;\n  }\n\n  get depositRate(): DepositRate {\n    if (!this._depositRate) {\n      this._depositRate = new DepositRate(this);\n    }\n    return this._depositRate;\n  }\n\n  get loanRate(): LoanRate {\n    if (!this._loanRate) {\n      this._loanRate = new LoanRate(this);\n    }\n    return this._loanRate;\n  }\n\n  get interbankRate(): InterbankRate {\n    if (!this._interbankRate) {\n      this._interbankRate = new InterbankRate(this);\n    }\n    return this._interbankRate;\n  }\n\n  get impliedRate(): ImpliedRate {\n    if (!this._impliedRate) {\n      this._impliedRate = new ImpliedRate(this);\n    }\n    return this._impliedRate;\n  }\n\n  get debtSecurities(): DebtSecurities {\n    if (!this._debtSecurities) {\n      this._debtSecurities = new DebtSecurities(this);\n    }\n    return this._debtSecurities;\n  }\n\n  get swapPoint(): SwapPoint {\n    if (!this._swapPoint) {\n      this._swapPoint = new SwapPoint(this);\n    }\n    return this._swapPoint;\n  }\n\n  get licenseCheck(): LicenseCheck {\n    if (!this._licenseCheck) {\n      this._licenseCheck = new LicenseCheck(this);\n    }\n    return this._licenseCheck;\n  }\n\n  get financialHolidays(): FinancialHolidays {\n    if (!this._financialHolidays) {\n      this._financialHolidays = new FinancialHolidays(this);\n    }\n    return this._financialHolidays;\n  }\n\n  get searchSeries(): SearchSeries {\n    if (!this._searchSeries) {\n      this._searchSeries = new SearchSeries(this);\n    }\n    return this._searchSeries;\n  }\n\n  async get<T = BotApiResponse>(path: string, params?: Record<string, unknown>): Promise<T> {\n    return this.request<T>('GET', path, { params });\n  }\n\n  async post<T = BotApiResponse>(\n    path: string,\n    options?: { body?: unknown; params?: Record<string, unknown> },\n  ): Promise<T> {\n    return this.request<T>('POST', path, options);\n  }\n\n  private async request<T>(\n    method: string,\n    path: string,\n    options?: { body?: unknown; params?: Record<string, unknown> },\n  ): Promise<T> {\n    const url = this.buildUrl(path, options?.params);\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n    try {\n      const response = await fetch(url, {\n        method,\n        headers: {\n          Authorization: this.config.apiToken,\n          'Content-Type': 'application/json',\n        },\n        body: options?.body ? JSON.stringify(options.body) : undefined,\n        signal: controller.signal,\n      });\n\n      clearTimeout(timeoutId);\n      return this.handleResponse<T>(response);\n    } catch (error) {\n      clearTimeout(timeoutId);\n      throw this.handleError(error);\n    }\n  }\n\n  private buildUrl(path: string, params?: Record<string, unknown>): string {\n    const baseUrl = path.startsWith('http') ? '' : this.config.baseUrl;\n    const url = new URL(path, baseUrl || undefined);\n\n    if (params) {\n      for (const [key, value] of Object.entries(params)) {\n        if (value !== undefined && value !== null) {\n          url.searchParams.append(key, String(value));\n        }\n      }\n    }\n\n    return url.toString();\n  }\n\n  private async handleResponse<T>(response: Response): Promise<T> {\n    if (response.status >= 200 && response.status < 300) {\n      const json = await response.json();\n      return new BotApiResponse(json) as T;\n    }\n\n    switch (response.status) {\n      case 401:\n        throw new AuthenticationError('Authentication failed. Check your API token.', response);\n      case 403:\n        throw new AuthenticationError(\n          'Access forbidden. Your token may not have permission for this resource.',\n          response,\n        );\n      case 404:\n        throw new NotFoundError(`Resource not found: ${response.url}`, response);\n      case 429: {\n        const retryAfter = Number.parseInt(response.headers.get('retry-after') || '60');\n        throw new RateLimitError('Rate limit exceeded', response, retryAfter);\n      }\n      case 500:\n      case 502:\n      case 503:\n      case 504:\n        throw new ServerError(`Server error (${response.status})`, response);\n      default:\n        throw new RequestError(`Unexpected response status: ${response.status}`, response);\n    }\n  }\n\n  private handleError(error: unknown): Error {\n    if (error instanceof Error && error.name === 'AbortError') {\n      return new RequestError('Request timeout');\n    }\n    if (error instanceof TypeError && error.message.includes('fetch')) {\n      return new RequestError(`Connection failed: ${error.message}`);\n    }\n    return error instanceof Error ? error : new Error(String(error));\n  }\n}\n\nexport function createClient(config: BotApiConfig): BotApiClient {\n  return new BotApiClient(config);\n}\n"]}