youzanyun-sdk-nodejs
Advanced tools
Comparing version 1.1.0 to 1.2.0
@@ -28,3 +28,3 @@ /** | ||
const Breakdown = require('./breakdown'); | ||
const { NEED_PREVENT_BREAKDOWN } = require('./config'); | ||
const { NEED_PREVENT_BREAKDOWN, OPEN_HOST, QA_OPEN_HOST } = require('./config'); | ||
const packageJson = require('./package.json'); | ||
@@ -35,7 +35,9 @@ | ||
this._httpClient = httpClient; | ||
this._openHost = openHost; | ||
this._openHost = openHost || QA_OPEN_HOST; | ||
this._tokenCache = new TokenCache(); | ||
this._breakdown = new Breakdown(); | ||
const { CLIENT_ID, CLIENT_SECRET } = this._getCurrentSecret(); | ||
this._tokenService = new TokenService({ | ||
...this._getCurrentSecret(), | ||
clientId: CLIENT_ID, | ||
clientSecret: CLIENT_SECRET, | ||
httpClient, | ||
@@ -53,3 +55,3 @@ }); | ||
// 是否处在防击穿的状态 | ||
const isInBreakdown = this._breakdown.get(CLIENT_ID, kdtId); | ||
const isInBreakdown = this._breakdown.isBreakdown(CLIENT_ID, kdtId); | ||
@@ -69,3 +71,3 @@ if (isInBreakdown) { | ||
// 去远程获取 | ||
const token = await this._tokenService.getToken({ kdtId }); | ||
const token = await this._tokenService.getToken({ kdtId, type: 'cloud_function' }); | ||
@@ -87,3 +89,4 @@ if (token) { | ||
try { | ||
token = await this._getToken(kdtId); | ||
const tokenResult = await this._getToken(kdtId); | ||
token = tokenResult.access_token; | ||
} catch (e) { | ||
@@ -105,5 +108,5 @@ throw e; | ||
if (token) { | ||
url = `https://${this.openHost}/api/${api}/${version}?access_token=${token}`; | ||
url = `https://${this._openHost}/api/${api}/${version}?access_token=${token}`; | ||
} else { | ||
url = `https://${this.openHost}/api/auth_exempt/${api}/${version}`; | ||
url = `https://${this._openHost}/api/auth_exempt/${api}/${version}`; | ||
} | ||
@@ -125,3 +128,3 @@ | ||
async _requestJson(url, data) { | ||
let response = await this.httpClient.request({ | ||
let response = await this._httpClient.request({ | ||
url, | ||
@@ -131,3 +134,3 @@ method: 'post', | ||
headers: { | ||
'User-Agent': `YZY-Free-Client ${packageJson.version}-Node`, | ||
'User-Agent': `youzanyun-sdk-nodejs ${packageJson.version}-Node`, | ||
}, | ||
@@ -149,3 +152,3 @@ }); | ||
let response = await this.httpClient.request({ | ||
let response = await this._httpClient.request({ | ||
url, | ||
@@ -157,3 +160,3 @@ method: 'post', | ||
{ | ||
'User-Agent': `YZY-Free-Client ${packageJson.version}-NodeJs`, | ||
'User-Agent': `youzanyun-sdk-nodejs ${packageJson.version}-NodeJs`, | ||
}, | ||
@@ -160,0 +163,0 @@ form.getHeaders(), |
exports.OPEN_HOST = 'open.youzanyun.com'; | ||
exports.TOKEN_HOST = 'open.youzanyun.com'; | ||
exports.QA_TOKEN_HOST = 'bifrost-oauth.qa.s.qima-inc.com'; | ||
exports.QA_OPEN_HOST = 'bifrost-gateway.qa.s.qima-inc.com'; | ||
/** 需要防击穿的场景 */ | ||
@@ -4,0 +6,0 @@ exports.NEED_PREVENT_BREAKDOWN = [ |
{ | ||
"name": "youzanyun-sdk-nodejs", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"description": "有赞云 nodejs sdk", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
19
test.js
const sdk = require('./index'); | ||
const main_handler = async () => { | ||
const http_main_handler = async () => { | ||
try { | ||
@@ -16,2 +16,17 @@ const res = await sdk.request({ | ||
main_handler(); | ||
const call_main_handler = async () => { | ||
const foo = await sdk.callApi({ | ||
api: 'youzan.shop.configs.get', | ||
version: '1.0.0', | ||
params: { | ||
keys: ['is_youzan_secured', 'customer_blacklist_switch'], | ||
}, | ||
files: null, | ||
kdtId: 53548965, | ||
}); | ||
console.log(foo); | ||
}; | ||
// http_main_handler(); | ||
call_main_handler(); |
@@ -1,3 +0,25 @@ | ||
class TokenCache {} | ||
/** | ||
* 缓存 access_token, 以 `CLIENT_ID-${kdtId}` 为 key | ||
* | ||
* @typedef {Object} IValue | ||
* @property {number} expires 过期时间 | ||
* @property {string} token 实际的 token 值 | ||
*/ | ||
class TokenCache { | ||
_store = {}; | ||
get(clientId, kdtId) { | ||
if (this._store[`${clientId}-${kdtId}`]) { | ||
return this._store[`${clientId}-${kdtId}`]; | ||
} | ||
return false; | ||
} | ||
set(clientId, kdtId, tokenData) { | ||
this._store[`${clientId}-${kdtId}`] = tokenData; | ||
return true; | ||
} | ||
} | ||
module.exports = TokenCache; |
87
token.js
@@ -6,2 +6,3 @@ const config = require('./config'); | ||
const Type_RefreshCloudSelfToken = 'silent'; | ||
const Type_CloudFunction = 'cloud_function'; | ||
@@ -32,34 +33,34 @@ /** | ||
this.httpClient = httpClient; | ||
this.requestTokenUrl = `https://${tokenHost || config.TokenHost}/auth/token`; | ||
this.requestTokenUrl = `https://${tokenHost || config.QA_TOKEN_HOST}/auth/token`; | ||
} | ||
/** | ||
* 获取自用型应用token。token过期后,需要再次调用此接口获取新token | ||
*/ | ||
async getCloudSelfToken(kdtId) { | ||
return await this.getToken({ | ||
type: Type_RefreshCloudSelfToken, | ||
kdtId, | ||
}); | ||
} | ||
// /** | ||
// * 获取自用型应用token。token过期后,需要再次调用此接口获取新token | ||
// */ | ||
// async getCloudSelfToken(kdtId) { | ||
// return await this.getToken({ | ||
// type: Type_RefreshCloudSelfToken, | ||
// kdtId, | ||
// }); | ||
// } | ||
/** | ||
* 获取工具型应用token | ||
*/ | ||
async getCloudToolToken(code) { | ||
return await this.getToken({ | ||
type: Type_GetCloudToolToken, | ||
code, | ||
}); | ||
} | ||
// /** | ||
// * 获取工具型应用token | ||
// */ | ||
// async getCloudToolToken(code) { | ||
// return await this.getToken({ | ||
// type: Type_GetCloudToolToken, | ||
// code, | ||
// }); | ||
// } | ||
/** | ||
* 刷新工具型应用token | ||
*/ | ||
async refreshCloudToolToken(refreshToken) { | ||
return await this.getToken({ | ||
type: Type_RefreshCloudToolToken, | ||
refreshToken, | ||
}); | ||
} | ||
// /** | ||
// * 刷新工具型应用token | ||
// */ | ||
// async refreshCloudToolToken(refreshToken) { | ||
// return await this.getToken({ | ||
// type: Type_RefreshCloudToolToken, | ||
// refreshToken, | ||
// }); | ||
// } | ||
@@ -79,22 +80,28 @@ async getToken({ | ||
switch (type) { | ||
// 自用型应用获取 token | ||
case Type_RefreshCloudSelfToken: | ||
// // 自用型应用获取 token | ||
// case Type_RefreshCloudSelfToken: | ||
// params['grant_id'] = kdtId; | ||
// break; | ||
// // 工具型应用获取 token | ||
// case Type_GetCloudToolToken: | ||
// params['code'] = code; | ||
// break; | ||
// // 工具型应用刷新 token | ||
// case Type_RefreshCloudToolToken: | ||
// params['refresh_token'] = refreshToken; | ||
// break; | ||
case Type_CloudFunction: { | ||
params['grant_id'] = kdtId; | ||
break; | ||
// 工具型应用获取 token | ||
case Type_GetCloudToolToken: | ||
params['code'] = code; | ||
break; | ||
// 工具型应用刷新 token | ||
case Type_RefreshCloudToolToken: | ||
params['refresh_token'] = refreshToken; | ||
break; | ||
} | ||
default: | ||
break; | ||
} | ||
let response = await this.httpClient.request({ | ||
const requestParams = { | ||
url: this.requestTokenUrl, | ||
method: 'post', | ||
data: params, | ||
}); | ||
}; | ||
console.log('getToken requestParams', requestParams); | ||
let response = await this.httpClient.request(requestParams); | ||
if (response.data.success) { | ||
@@ -101,0 +108,0 @@ return response.data.data; |
13921
452