sms-activate.js
Version:
A simple API wrapper for https://sms-activate.ru.
121 lines (100 loc) • 3.23 kB
JavaScript
const axios = require('axios')
const exceptions = require('./exceptions')
class SMSActivate {
constructor (apiToken) {
if (typeof apiToken !== 'string') {
throw new exceptions.InvalidAPIKey('API Key must be a string')
}
this.token = apiToken
this.session = axios.create({
baseURL: 'http://sms-activate.ru/stubs/handler_api.php'
})
}
async _createRequest (action, data) {
const request = await this.session({
method: 'POST',
params: {
action,
api_key: this.token,
...data
}
})
// rewriting this sooon
if (request.data.includes('BAD_KEY')) {
throw new exceptions.InvalidAPIKey('Invalid API Key')
}
if (request.data.includes('ERROR_SQL')) {
throw new exceptions.SQLError('SQL Website error')
}
if (request.data.includes('NO_BALANCE')) {
throw new exceptions.NoBalance('Not enough money for the order')
}
if (request.data.includes('NO_NUMBERS')) {
throw new exceptions.NoFreeNumbers('No free numbers')
}
if (request.data.includes('BAD_STATUS')) {
throw new exceptions.BadStatus('Bad status')
}
if (request.data.includes('BAD_SERVICE')) {
throw new exceptions.BadService('Bad serivce')
}
if (request.data.includes('NO_ACTIVATION')) {
throw new exceptions.InvalidActivation('Invalid activation id')
}
if (request.data.includes('BANNED')) {
throw new exceptions.BannedUser(`Banned until ${request.data.split(':')[1]}`)
}
return request.data
}
// get account balance
async getBalance (withCashBack = false) {
const respCash = await this._createRequest(withCashBack ? 'getBalanceAndCashBack' : 'getBalance')
const dataSplit = respCash.split(':')
if (dataSplit[0] === 'ACCESS_BALANCE' && dataSplit[1]) {
return parseInt(dataSplit[1])
}
return null
}
// order a number
async getNumber (service, country = 0, forward = false) {
const getNumberResp = await this._createRequest('getNumber', {
service,
country,
forward: Number(forward)
})
const dataSplit = getNumberResp.split(':')
if (dataSplit[0] === 'ACCESS_NUMBER' && dataSplit[1] && dataSplit[2]) {
return { id: parseInt(dataSplit[1]), number: parseInt(dataSplit[2]) }
}
return null
}
// set number status - order ID
async setStatus (id, status, forward = false) {
const getNumberResp = await this._createRequest('setStatus', {
id,
status,
forwards: Number(forward)
})
return getNumberResp
}
// get number code - order ID
async getCode (id) {
const getNumberResp = await this._createRequest('getStatus', {
id
})
const dataSplit = getNumberResp.split(':')
if (dataSplit[0] === 'STATUS_OK' && dataSplit[1]) {
return dataSplit[1]
}
return null
}
// get number status - order ID
async getStatus (id) {
const getNumberResp = await this._createRequest('getStatus', {
id
})
const dataSplit = getNumberResp.split(':')
return dataSplit[0]
}
}
module.exports = SMSActivate