pagaris
Version:
Pagaris API client for Node
73 lines (62 loc) • 1.94 kB
JavaScript
const axios = require('axios')
const Pagaris = require('./pagaris')
const Signature = require('./signature')
const errors = require('./errors')
const DOMAIN = process.env.PAGARIS_DOMAIN || 'https://pagaris.com'
const API_PREFIX = '/api/v1/'
const BASE_URL = DOMAIN + API_PREFIX
class Client {
static get(path) {
return Client.makeRequest('GET', path)
}
static post(path, body) {
return Client.makeRequest('POST', path, body)
}
static put(path, body) {
return Client.makeRequest('PUT', path, body)
}
static requestOptions(path, method, body) {
if (body) body = JSON.stringify(body)
path = API_PREFIX + path
let signature = new Signature(path, method, body)
return {
method: method,
baseURL: DOMAIN,
url: path,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': signature.headerValue()
},
data: body
}
}
static makeRequest(verb, path, body) {
return new Promise((resolve, reject) => {
axios(Client.requestOptions(path, verb, body))
.then((response) => {
resolve(response.data)
})
.catch((error) => {
let res = error.response
if (res) {
let statusCode = error.response.status
if (statusCode >= 500) return reject(new errors.ServerError(res))
switch (statusCode) {
case 401:
return reject(new errors.UnauthorizedError(res))
case 404:
return reject(new errors.NotFoundError(res))
case 422:
return reject(new errors.UnprocessableEntityError(res))
default:
return reject(new errors.UnexpectedResponseError(res))
}
} else {
return reject(new errors.UnexpectedResponseError)
}
})
})
}
}
module.exports = Client;