UNPKG

1.62 kBJavaScriptView Raw
1const axios = require('axios')
2const get = require('lodash.get')
3const FormDataFactory = require('./handlers/form-data-factory')
4
5function getInstance (options) {
6 const instance = axios.create(options)
7
8 instance.interceptors.response.use(response => {
9 const otcsticket = get(response, 'headers.otcsticket')
10
11 if (otcsticket) {
12 instance.defaults.headers.common.OTCSTicket = otcsticket
13 }
14 return response
15 }, error => {
16 return Promise.reject(error)
17 })
18
19 return instance
20}
21
22function axiosFactory (options) {
23 const instance = getInstance(options)
24
25 const username = get(options, 'username')
26 const password = get(options, 'password')
27 const otcsticket = get(options, 'otcsticket')
28
29 if (otcsticket) {
30 instance.defaults.headers.common.OTCSTicket = otcsticket
31 } else if (username && password) {
32 instance.interceptors.request.use(async request => {
33 if (request.headers.common.OTCSTicket) {
34 return request
35 } else {
36 const formData = FormDataFactory.createFormData()
37
38 formData.append('username', username)
39 formData.append('password', password)
40
41 const response = process.node
42 ? await axios.post(`${options.baseURL}/api/v1/auth/`, formData.getBuffer(), { headers: formData.getHeaders() })
43 : await axios.post(`${options.baseURL}/api/v1/auth/`, formData)
44
45 request.headers.common.OTCSTicket = get(response, 'data.ticket')
46
47 return request
48 }
49 })
50 } else {
51 throw Error('You must provide an otcsticket or username and password.')
52 }
53
54 return instance
55}
56
57module.exports = axiosFactory