-
Notifications
You must be signed in to change notification settings - Fork 0
/
link.js
82 lines (76 loc) · 1.66 KB
/
link.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import axios from 'axios'
import getToken from './auth.js'
import redisClient from './redis.js'
// ;('fi-FI')
// ;('de-DE')
// ;('en-US')
// ;('ko-KR')
// ;('pt-BR')
// ;('es-ES')
// ;('ar-AE')
// ;('no-NO')
// ;('fr-CA')
// ;('it-IT')
// ;('pl-PL')
// ;('ru-RU')
// ;('zh-Hans')
// ;('nl-NL')
// ;('pt-PT')
// ;('zh-Hant')
// ;('sv-SE')
// ;('da-DK')
// ;('tr-TR')
// ;('fr-FR')
// ;('en-GB')
// ;('es-419')
// ;('ja-JP')
export const link = axios.create({
baseURL: 'https://m.np.playstation.com/',
timeout: 15000,
headers: { 'Accept-Language': process.env.LANGUAGE },
})
link.interceptors.request.use(
async function (config) {
// cache token
let token = await redisClient.get('auth:token')
if (!token) {
token = await getToken()
if (!token) {
return Promise.reject(new Error('Can not get token, try renewing NPSSO.'))
}
await redisClient.set('auth:token', token, {
EX: 60 * 60,
})
}
config.headers.Authorization = 'Bearer ' + token
return config
},
function (error) {
return Promise.reject(error)
}
)
link.interceptors.response.use(
function (response) {
return response.data
},
function (error) {
return Promise.reject(error?.response?.data?.error || error)
}
)
const defaultOptions = {
EX: process.env.CACHE_EXPIRED_TIME || 86400,
}
const linkWrapper = async (config, cacheKey, options) => {
const cache = await redisClient.get(cacheKey || config.url)
if (cache) {
return JSON.parse(cache)
}
const data = await link(config)
redisClient.set(
cacheKey || config.url,
JSON.stringify(data),
options || defaultOptions
)
return data
}
export default linkWrapper