{"version":3,"file":"index.mjs","sources":["../src/errors/SMSRuError.error.ts","../src/node-sms-ru.ts"],"sourcesContent":["import { SMSRuErrorResponse } from '../interfaces/SMSRuErrorResponse.interface';\n\nexport class SMSRuError extends Error {\n  public errorResponse?: SMSRuErrorResponse;\n  public response?: any;\n\n  constructor(message: string, response?: any) {\n    super(message);\n    Object.setPrototypeOf(this, SMSRuError.prototype);\n\n    this.response = response;\n    this.name = this.constructor.name;\n\n    this.response = response;\n    if (this._isErrorResponse(response)) {\n      this.errorResponse = response;\n    }\n  }\n\n  private _isErrorResponse(response: any): response is SMSRuErrorResponse {\n    return (\n      (response &&\n        response.status &&\n        // check status_code\n        response.status_code !== null &&\n        response.status_code !== undefined &&\n        // check status_text\n        (response.status_text ? typeof response.status_text === 'string' : true)) ||\n      false\n    );\n  }\n}\n","import axios from 'axios';\nimport { SMSRuParams } from './interfaces/SMSRuParams.interface';\nimport { SMSRuSendSMSResponse } from './interfaces/SMSRuSendSMSResponse.interface';\nimport { SMSRuSendSMSOptions } from './interfaces/SMSRuSendSMSOptions.interface';\nimport { SMSRuSMSStatuses } from './interfaces/SMSRuSMSStatuses.interface';\nimport { SMSRuError } from './errors/SMSRuError.error';\nimport { SMSRuGetCostOptions } from './interfaces/SMSRuGetCostOptions.interface';\nimport { SMSRuGetCostResponse } from './interfaces/SMSRuGetCostResponse.interface';\nimport { SMSRuGetBalanceResponse } from './interfaces/SMSRuGetBalanceResponse.interface';\nimport { SMSRuGetLimitResponse } from './interfaces/SMSRuGetLimitResponse.interface';\nimport { SMSRuGetFreeResponse } from './interfaces/SMSRuGetFreeResponse.interface';\nimport { SMSRuGetSendersResponse } from './interfaces/SMSRuGetSendersResponse.interface';\nimport { SMSRuCodeCallOptions } from './interfaces/SMSRuCodeCallOptions.interface';\nimport { SMSRuCodeCallResponse } from './interfaces/SMSRuCodeCallResponse.interface';\nexport { SMSRuErrorResponse } from './interfaces/SMSRuErrorResponse.interface';\n\nexport class SMSRu {\n  private _params: SMSRuParams;\n\n  constructor(apiId: string);\n  // tslint:disable-next-line unified-signatures\n  constructor(login: string, password: string);\n\n  constructor(apiIdOrLogin: string, password?: string) {\n    this._params = { baseUrl: 'https://sms.ru/' };\n\n    if (password !== undefined && password !== null) {\n      this._params.login = apiIdOrLogin;\n      this._params.password = password;\n    } else {\n      this._params.api_id = apiIdOrLogin;\n    }\n  }\n\n  /**\n   * Отправить СМС сообщение\n   *\n   * Если у вас есть необходимость в отправке СМС\n   * сообщения из вашей программы, то вы можете\n   * использовать этот метод.\n   *\n   * @see http://sms.ru/api/send\n   */\n  async sendSms(options: SMSRuSendSMSOptions): Promise<SMSRuSendSMSResponse> {\n    const params = {\n      ...options,\n      to: Array.isArray(options.to) ? options.to.join(',') : options.to,\n      time: !options.time\n        ? undefined\n        : options.time instanceof Date\n        ? options.time.valueOf()\n        : typeof options.time === 'string'\n        ? new Date(options.time).valueOf()\n        : options.time,\n      daytime: options.daytime ? 1 : options.daytime === false ? 0 : undefined,\n      transit: options.transit ? 1 : options.transit === false ? 0 : undefined,\n      test: options.test ? 1 : options.test === false ? 0 : undefined,\n    };\n\n    const sendResponse = await this._makeApiRequest<SMSRuSendSMSResponse>('sms/send', params);\n\n    return sendResponse;\n  }\n\n  /**\n   * Отправить четырехзначный авторизационный код звонком\n   *\n   * @see https://sms.ru/api/code_call\n   */\n  async codeCall(options: SMSRuCodeCallOptions): Promise<SMSRuCodeCallResponse> {\n    const params = { phone: options.to };\n    return this._makeApiRequest<SMSRuCodeCallResponse>('code/call', params);\n  }\n\n  /**\n   * Проверить статус отправленных сообщений\n   *\n   * Если у вас есть необходимость вручную проверить\n   * статус отправленных вами сообщений, то вы\n   * можете использовать этот метод.\n   *\n   * @see http://sms.ru/api/status\n   */\n  async checkSmsStatuses(smsIds: string | string[]): Promise<SMSRuSMSStatuses> {\n    const smsStatuses = await this._makeApiRequest<SMSRuSMSStatuses>('sms/status', {\n      sms_id: Array.isArray(smsIds) ? smsIds.join(',') : smsIds,\n    });\n\n    return smsStatuses;\n  }\n\n  /**\n   * Проверить стоимость сообщений перед отправкой.\n   *\n   * Если у вас есть необходимость проверить стоимость сообщения\n   * перед его отправкой из вашей программы,\n   * то вы можете использовать этот метод.\n   *\n   * @see http://sms.ru/api/cost\n   */\n  async getCost(options: SMSRuGetCostOptions): Promise<SMSRuGetCostResponse> {\n    const params = {\n      ...options,\n      to: Array.isArray(options.to) ? options.to.join(',') : options.to,\n      transit: options.transit ? 1 : options.transit === false ? 0 : undefined,\n    };\n\n    return this._makeApiRequest<SMSRuGetCostResponse>('sms/cost', params);\n  }\n\n  /**\n   * Получить информацию о балансе\n   *\n   * Если вы хотите узнать ваш текущий баланс на сайте SMS.RU,\n   * используйте этот метод.\n   */\n  async getBalance(): Promise<number> {\n    const getBalanceResponse = await this._makeApiRequest<SMSRuGetBalanceResponse>('my/balance');\n    return getBalanceResponse.balance;\n  }\n\n  /**\n   * Получить информацию о дневном лимите и его использовании\n   *\n   * Если вы хотите узнать какой у вас лимит на отправку\n   * сообщений и на какое количество номеров вы уже\n   * сегодня отправили сообщения, используйте этот метод.\n   */\n  async getLimit(): Promise<SMSRuGetLimitResponse> {\n    return this._makeApiRequest<SMSRuGetLimitResponse>('my/limit');\n  }\n\n  /**\n   * Получить информацию о бесплатных сообщениях и его\n   * использовании.\n   *\n   * Если вы хотите узнать ваш расход бесплатных\n   * сообщений на свой номер за день, используйте этот метод.\n   */\n  async getFree(): Promise<SMSRuGetFreeResponse> {\n    return this._makeApiRequest<SMSRuGetFreeResponse>('my/free');\n  }\n\n  /**\n   * Получение списка одобренных отправителей\n   *\n   * Если вы хотите получить список отправителей, которые\n   * были согласованы вами на сайте SMS.RU,\n   * то необходимо использовать этот метод\n   */\n  async getSenders(): Promise<string[]> {\n    const getSendersResponse = await this._makeApiRequest<SMSRuGetSendersResponse>('my/senders');\n    return getSendersResponse.senders;\n  }\n\n  /**\n   * Проверить на валидность пару логин/пароль (или api_id).\n   *\n   * Если вы хотите проверить, является ли рабочим ваш api_id\n   * или логин и пароль, используйте этот метод.\n   *\n   * Если вам api_id или логин и пароль работают - метод ничего не вернет,\n   * иначе выбросит исключение.\n   */\n  async checkAuth(): Promise<void> {\n    await this._makeApiRequest('auth/check');\n  }\n\n  private async _makeApiRequest<T = any>(path: string, params?: Record<string, any>): Promise<T> {\n    const response = await axios.request<T>({\n      url: path,\n      params: {\n        ...(params || {}),\n        ...this._authParams,\n        json: 1,\n      },\n      baseURL: this._params.baseUrl,\n    });\n\n    if ((response.data as any)?.status !== 'OK') {\n      throw new SMSRuError((response.data as any)?.status_text || 'Unknown error', response.data);\n    }\n\n    return response.data;\n  }\n\n  private get _authParams() {\n    return this._params.api_id\n      ? { api_id: this._params.api_id }\n      : { login: this._params.login, password: this._params.password };\n  }\n}\n\nexport {\n  SMSRuSendSMSOptions,\n  SMSRuSendSMSResponse,\n  SMSRuSMSStatuses,\n  SMSRuGetCostOptions,\n  SMSRuGetCostResponse,\n  SMSRuGetLimitResponse,\n  SMSRuGetFreeResponse,\n  SMSRuError,\n};\n"],"names":[],"mappings":"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"}