{"version":3,"file":"index.min.mjs","sources":["../src/Helpers.js","../src/Auttar.js"],"sourcesContent":["const NAME = '%c Auttar ';\nconst BACKGROUND = 'background:#bc0909 ; padding: 2px; border-radius: 2px;  color: #fff ';\n\nexport function required(name, param) {\n  if (param === undefined) {\n    throw new Error(`Parâmetro obrigatório ${name} não declarado.`);\n  }\n\n  return param;\n}\n\nexport function logInfo(msg) {\n  console.log(NAME, BACKGROUND, msg); // eslint-disable-line no-console\n}\n\nexport function logError(msg) {\n  console.error(NAME, BACKGROUND, msg); // eslint-disable-line no-console\n}\n\n/**\n * Add spaces to match the max screen length\n * @param {string} text\n * @param {number} maxChar\n * @returns {string}\n */\nexport function addSpaces(text, maxChar) {\n  return text\n    .split('')\n    .concat(...Array(maxChar).fill(' '))\n    .slice(0, maxChar)\n    .join('');\n}\n\nexport default {\n  required,\n  logInfo,\n  logError,\n  addSpaces,\n};\n","/* eslint-disable */\nimport { logInfo } from './Helpers';\n\nconst privateVariables = {\n  transactions: {\n    credit: {\n      base: 112,\n      installment: 113,\n      installmentWithInterest: 114,\n    },\n    debit: {\n      base: 101,\n      voucher: 106,\n    },\n    cancel: 128,\n    confirm: 6,\n    requestCancel: 191,\n  },\n  return: {\n    success: 0,\n    timeOut: 1,\n    notAuthorizes: 5,\n    internetError: 10,\n    intertefError: 12,\n    error: 20,\n    ecommerceError: 30,\n  },\n  errorCodes: {\n    5300: 'Valor não informado',\n    5301: 'Cartão inválido',\n    5302: 'Cartão vencido',\n    5303: 'Data de vencimento inválido',\n    5304: 'Código de segurança inválido',\n    5305: 'Taxa de serviço excede limite',\n    5306: 'Operação não permitida',\n    5307: 'Dados inválidos',\n    5308: 'Valor mínimo da parcela inválido',\n    5309: 'Número de parcelas inválido',\n    5310: 'Número de parcelas excede limite',\n    5311: 'Valor da entrada maior ou igual ao valor da transação',\n    5312: 'Valor da parcela inválido',\n    5313: 'Data inválida',\n    5314: 'Prazo excede limite',\n    5316: 'NSU inválido',\n    5317: 'Operação cancelada pelo usuário',\n    5318: 'Documento inválido (CPF ou CNPJ)',\n    5319: 'Valor do documento inválido',\n    5328: 'Erro na captura de dados do Pin-Pad',\n    5329: 'Erro na captura do chip ou cartão removido antes da hora.',\n    5364: 'Data de emissão do cartão inválida',\n    5355: 'O tipo de financiamento informado não é coerente com o número de parcelas',\n  },\n  ws: null,\n  timeout: null,\n  close: true,\n  timeoutConn: null,\n};\n\nfunction _disconnect() {\n  privateVariables.ws.close();\n}\n\nfunction _clearTimeout() {\n  privateVariables.close = false;\n  clearTimeout(privateVariables.timeoutConn);\n}\n\nfunction _timeout(time = 10000) {\n  privateVariables.close = true;\n  privateVariables.timeoutConn = setTimeout(() => {\n    if (privateVariables.close) {\n      privateVariables.ws.close();\n    } else {\n      _clearTimeout();\n    }\n  }, time);\n}\n\nfunction _connect(host, payload) {\n  return new Promise((resolve, reject) => {\n    try {\n      if (privateVariables.ws === null) {\n        privateVariables.ws = new WebSocket(host);\n      } else if (privateVariables.ws.readyState === 2 || privateVariables.ws.readyState === 3) {\n        _disconnect();\n        privateVariables.ws = new WebSocket(host);\n      }\n    } catch (e) {\n      reject(e);\n    }\n\n    if (privateVariables.ws) {\n      _timeout();\n\n      privateVariables.ws.onopen = () => {\n        _clearTimeout();\n        privateVariables.ws.send(JSON.stringify(payload));\n        _timeout(60000);\n      };\n\n      privateVariables.ws.onmessage = (evtMsg) => {\n        _clearTimeout();\n        resolve(JSON.parse(evtMsg.data));\n      };\n\n      privateVariables.ws.onerror = (evtError) => {\n        _clearTimeout();\n        reject(evtError);\n      };\n    }\n  });\n}\n\n/**\n * @typedef {Object} AuttarCupomLinha\n * @property {string} linha\n */\n\n/** @typedef {Object} AuttarSuccessResponse\n * @property {String} bandeira\n * @property {String} cartao\n * @property {String} codigoAprovacao\n * @property {String} codigoErro\n * @property {String} codigoRespAutorizadora\n * @property {Array} cupomCliente\n * @property {Array.<AuttarCupomLinha>} cupomEstabelecimento\n * @property {Array.<AuttarCupomLinha>} cupomReduzido\n * @property {Array} display\n * @property {Number} nsuAutorizadora\n * @property {Number} nsuCTF\n * @property {Number} operacao\n * @property {String} redeAdquirente\n * @property {Number} retorno\n * @property {String} valorTransacao\n */\n\n/**\n * @class Auttar WebSocket\n * @constructor {AuttarConstructor}\n */\n/**\n * @typedef {object} AuttarConstructor\n * @property {string} host - WebSocket Host URL\n * @property {boolean} debug - Método debug da classe\n * @property {string} orderId - Número de identificação da venda\n * @property {float} amount - Valor da venda\n * @property {AuttarSuccessResponse} ctfTrasaction - Objecto de resposta do websocket\n */\n\nclass Auttar {\n  /**\n   * Construtor da classe\n   * @param {AuttarConstructor} props\n   */\n  constructor(props) {\n    this.__host = props.host || 'ws://localhost:2500';\n    this.debug = props.debug || false;\n    this.orderId = props.orderId || '';\n    this.__amount = 0;\n    if (props.amount) this.amount = props.amount;\n    this.__transactionDate = new Date().toLocaleDateString('pt-BR', {\n      year: '2-digit',\n      month: '2-digit',\n      day: '2-digit',\n      timeZone: 'America/Sao_Paulo',\n    }).replace(/\\//g, '');\n    this.ctfTransaction = {};\n    this.__debugMessage = [];\n  }\n\n  debugLog(message) {\n    if (this.debug) {\n      logInfo(message);\n    }\n  }\n\n  classError(message) {\n    this.debugMessage = {\n      message,\n      logLevel: 'error',\n    };\n\n    return new Error(message);\n  }\n\n  get debugMessage() {\n    return this.__debugMessage;\n  }\n\n  set debugMessage(value) {\n    if (this.debug) {\n      const debugLog = {\n        logLevel: 'info',\n        message: '',\n        ...value,\n        date: new Date().toISOString(),\n      };\n\n      if (debugLog.logLevel === 'log' && debugLog.message) {\n        return this.debugLog(debugLog.message);\n      }\n\n      this.__debugMessage.push({\n                                  ...debugLog,\n                                  date: new Date().toISOString(),\n                                });\n\n      if (debugLog.logLevel === 'info' && debugLog.message) {\n        this.debugLog(debugLog.message);\n      }\n    }\n  }\n\n  get amount() {\n    return this.__amount;\n  }\n\n  /**\n   * Define o valor em para a classe em centavos\n   * @param value\n   */\n  set amount(value) {\n    if (typeof value === 'number' && value <= 0) {\n      throw new Error('Não é possível definir um valor menor ou igual a zero.');\n    } else {\n      this.__amount = parseFloat(value) * 100;\n    }\n  }\n\n  /**\n   * Pagamento com cartão de crédito, podendo ser declarado\n   * com parcelamento e se o juro é da administradora.\n   * @param {number} installments - número de parcelas\n   * @param {boolean} withInterest - juros pela administradora\n   * @returns {Promise<AuttarSuccessResponse>}\n   */\n  credit(installments = 1, withInterest = false) {\n    return new Promise((resolve, reject) => {\n      const requisition = {\n        valorTransacao: this.amount,\n        documento: this.orderId,\n        operacao: privateVariables.transactions.credit.base,\n        dataTransacao: this.__transactionDate,\n      };\n      if (installments > 1) {\n        requisition.operacao = privateVariables.transactions.credit.installment;\n        requisition.numeroParcelas = installments;\n      }\n\n      if (installments > 1 && withInterest) {\n        requisition.operacao = privateVariables.transactions.credit.installmentWithInterest;\n        requisition.numeroParcelas = installments;\n      }\n\n      this.debugMessage = {\n        message: `Pagamento com cartão de crédito. Operação: ${requisition.operacao}. Valor ${this.amount} centavos`,\n      };\n\n      _connect(this.__host, requisition)\n        .then((response) => {\n          if (response.retorno > 0) {\n            const errorMsg = privateVariables.errorCodes[response.codigoErro]\n                             || response.display.length\n                             ? response.display.map(m => m.mensagem).join(' ')\n                             : ' ';\n            const error = this.classError(`Transação não concluída ${response.codigoErro}: ${errorMsg}`);\n\n            reject(error);\n          }\n\n          this.ctfTransaction = {\n            ...response,\n            dataTransacao: this.__transactionDate,\n          };\n\n          this.debugMessage = {\n            message: `Resposta do servidor -> ${JSON.stringify(response)}`,\n            logLevel: 'log',\n          };\n\n          this.debugMessage = {\n            message: this.ctfTransaction,\n            logLevel: 'json',\n          };\n\n          resolve(response);\n        })\n        .catch((e) => this.classError(e));\n    });\n  }\n\n  /**\n   * Pagamento com cartão de crédito, podendo ser\n   * declarado com parcelamento e se o juro é da administradora.\n   * @param {boolean} isVoucher\n   * @returns {Promise<AuttarSuccessResponse>}\n   */\n  debit(isVoucher = false) {\n    return new Promise((resolve, reject) => {\n      const operacao = isVoucher\n                       ? privateVariables.transactions.debit.voucher\n                       : privateVariables.transactions.debit.base;\n\n      this.debugMessage = {\n        message: `Pagamento com cartão de débito. Operação: ${operacao}. Valor ${this.amount} centavos`,\n      };\n\n      _connect(this.__host, {\n        valorTransacao: this.amount,\n        documento: this.orderId,\n        dataTransacao: this.__transactionDate,\n        operacao,\n      })\n        .then((response) => {\n          if (response.retorno > 0) {\n            const errorMsg = privateVariables.errorCodes[response.codigoErro]\n                             || response.display.length\n                             ? response.display.map(m => m.mensagem).join(' ')\n                             : ' ';\n            const error = this.classError(`Transação não concluída ${response.codigoErro}: ${errorMsg}`);\n\n            reject(error);\n          }\n\n          this.ctfTransaction = {\n            ...response,\n            dataTransacao: this.__transactionDate,\n          };\n\n          this.debugMessage = {\n            message: `Resposta do servidor -> ${JSON.stringify(response)}`,\n            logLevel: 'log',\n          };\n\n          this.debugMessage = {\n            message: this.ctfTransaction,\n            logLevel: 'json',\n          };\n\n          resolve(response);\n        })\n        .catch((e) => this.classError(e));\n    });\n  }\n\n  /**\n   * Confirma a operação com o CTF\n   * @returns {Promise<void>}\n   */\n  confirm() {\n    return new Promise((resolve, reject) => {\n      const operacao = privateVariables.transactions.confirm;\n\n      this.debugMessage = {\n        message: `Confirmação de pagamento da operação realizada.\n      Operação: ${this.ctfTransaction.operacao}\n      Data: ${this.ctfTransaction.dataTransacao}\n      Valor: ${this.amount}\n      Bandeira: ${this.ctfTransaction.bandeira}\n      Cartão: ${this.ctfTransaction.cartao}`,\n      };\n\n      _connect(this.__host, { operacao })\n        .then((response) => {\n          if (response.retorno > 0) {\n            const errorMsg = privateVariables.errorCodes[response.codigoErro]\n                             || response.display.length\n                             ? response.display.map(m => m.mensagem).join(' ')\n                             : ' ';\n\n            const error = this.classError(`Transação não concluída ${response.codigoErro}: ${errorMsg}`);\n\n            reject(error);\n          }\n\n          this.ctfTransaction = Object.assign(this.ctfTransaction, response);\n\n          this.debugMessage = {\n            message: `Resposta do servidor -> ${JSON.stringify(response)}`,\n            logLevel: 'log',\n          };\n\n          this.debugMessage = {\n            message: response,\n            logLevel: 'json',\n          };\n\n          resolve(response);\n        })\n        .catch((e) => this.classError(e));\n    });\n  }\n\n  /**\n   * Inicia o processo de cancelamento de compra.\n   * @returns {Promise<void>}\n   */\n  requestCancellation() {\n    return new Promise((resolve, reject) => {\n      const operacao = privateVariables.transactions.requestCancel;\n\n      this.debugMessage = {\n        message: `Requisição de cancelamento de compra.\n      Operação: ${this.ctfTransaction.operacao}\n      Data: ${this.ctfTransaction.dataTransacao}\n      Valor: ${this.amount}\n      NSU: ${this.ctfTransaction.nsuCTF}`,\n      };\n\n      _connect(this.__host, { operacao })\n        .then((response) => {\n          if (response.retorno > 0) {\n            const errorMsg = privateVariables.errorCodes[response.codigoErro]\n                             || response.display.length\n                             ? response.display.map(m => m.mensagem).join(' ')\n                             : ' ';\n\n            const error = this.classError(`Transação não concluída ${response.codigoErro}: ${errorMsg}`);\n\n            reject(error);\n          }\n\n          this.debugMessage = {\n            message: `Resposta do servidor -> ${JSON.stringify(response)}`,\n            logLevel: 'log',\n          };\n\n          this.debugMessage = {\n            message: responsea,\n            logLevel: 'json',\n          };\n\n          resolve(response);\n        })\n        .catch((e) => this.classError(e));\n    });\n  }\n\n  /**\n   * Realiza o cancelamento da compra.\n   * @param {string} prop.dataTransacao\n   * @param {number} prop.amount\n   * @param {string} prop.nsuCTF\n   * @returns {Promise<any>}\n   */\n  cancel(prop = {}) {\n    return new Promise((resolve, reject) => {\n      const operacao = privateVariables.transactions.cancel;\n      const tefOperacao = prop.operacao || this.ctfTransaction.operacao;\n      const tefDataTransacao = prop.dataTransacao || this.ctfTransaction.dataTransacao;\n      const tefAmount = prop.amount ? parseFloat(prop.amount) * 100 : this.ctfTransaction.valorTransacao;\n      const tefNsuCTF = prop.nsuCTF || this.ctfTransaction.nsuCTF;\n\n      this.debugMessage = {\n        message: `Cancelamento de compra.\n        Operação: ${tefOperacao}\n        Data: ${tefDataTransacao}\n        Valor: ${tefAmount}\n        NSU: ${tefNsuCTF}`,\n      };\n\n      _connect(this.__host, {\n        operacao,\n        valorTransacao: tefAmount,\n        dataTransacao: tefDataTransacao,\n        nsuCTF: tefNsuCTF,\n      })\n        .then((response) => {\n          if (response.retorno > 0) {\n            const errorMsg = privateVariables.errorCodes[response.codigoErro] || response.display[0].mensagem;\n\n            const error = this.classError(`Transação não concluída ${response.codigoErro}: ${errorMsg}`);\n\n            reject(error);\n          }\n\n          this.debugMessage = {\n            message: `Resposta do servidor -> ${JSON.stringify(response)}`,\n            logLevel: 'log',\n          };\n\n          this.debugMessage = {\n            message: response,\n            logLevel: 'json',\n          };\n\n          resolve(response);\n        })\n        .catch((e) => this.classError(e));\n    });\n  }\n}\n\nexport default Auttar;\n"],"names":["NAME","BACKGROUND","privateVariables","transactions","credit","base","installment","installmentWithInterest","debit","voucher","cancel","confirm","requestCancel","return","success","timeOut","notAuthorizes","internetError","intertefError","error","ecommerceError","errorCodes","ws","timeout","close","timeoutConn","_clearTimeout","clearTimeout","_timeout","time","setTimeout","_connect","host","payload","Promise","resolve","reject","WebSocket","readyState","e","onopen","send","JSON","stringify","onmessage","evtMsg","parse","data","onerror","evtError","props","__host","debug","orderId","__amount","amount","this","__transactionDate","Date","toLocaleDateString","year","month","day","timeZone","replace","ctfTransaction","__debugMessage","message","msg","console","log","debugMessage","logLevel","Error","installments","withInterest","requisition","valorTransacao","_this","documento","operacao","dataTransacao","numeroParcelas","then","response","retorno","errorMsg","codigoErro","display","length","map","m","mensagem","join","classError","catch","isVoucher","_this2","_this3","bandeira","cartao","Object","assign","_this4","nsuCTF","responsea","prop","tefOperacao","_this5","tefDataTransacao","tefAmount","parseFloat","tefNsuCTF","value","debugLog","date","toISOString","push"],"mappings":"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"}