UNPKG

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