1 | const axios = require('axios')
|
2 | const get = require('lodash.get')
|
3 | const FormDataFactory = require('./handlers/form-data-factory')
|
4 |
|
5 | function 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 |
|
25 | function 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 |
|
65 | module.exports = axiosFactory |
\ | No newline at end of file |