rcs-sdk
Version:
封装客户端与平台间的相互调用功能。
114 lines • 5.09 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.login = exports.getToken = exports.AccessToken = void 0;
const constants_1 = require("../constants");
const account_1 = require("./account");
const rcs_data_1 = require("rcs-data");
const debug = require('debug')('rcssdk:srvapi:auth');
const util_1 = require("../util");
class AccessToken {
constructor(token, term) {
this.access_token = token;
this.expire_at = term;
}
get value() {
return this.access_token;
}
get expireAt() {
return this.expire_at;
}
}
exports.AccessToken = AccessToken;
function getToken(username, password) {
return __awaiter(this, void 0, void 0, function* () {
let rst;
if ((0, util_1.runAsMock)('auth')) {
const { mockFilePathGetToken } = this.config;
if (!mockFilePathGetToken)
return Promise.reject('没有指定模拟数据获取位置');
rst = yield (0, util_1.getMockData)(mockFilePathGetToken);
if (!rst)
return Promise.reject(`没有在指定位置[${mockFilePathGetToken}]获取模拟数据`);
}
else {
const { authApiServer, authApiTimeout, authApiPin } = this.config;
const apiurl = `${authApiServer ? authApiServer : ''}/auth/authenticate`;
const options = {
timeout: authApiTimeout,
};
debug(`通过[${apiurl}]获取token`);
try {
if (this.config.authType === 'apply') {
options.params = {
appkey: username,
secret: password,
};
rst = yield util_1.request.get(apiurl, options);
}
else {
const posted = {
username: username,
password: password,
};
if (authApiPin)
posted.pin = authApiPin;
options.headers = { 'Content-Type': 'application/json;charset=utf-8' };
rst = yield util_1.request.post(apiurl, posted, options);
}
}
catch (e) {
return Promise.reject(`通过[${apiurl}]获取token异常: ${e.message}`);
}
}
if (rst['code'] === 0) {
return Promise.resolve(new AccessToken(rst['result'].access_token, rst['result'].expire_in));
}
return Promise.reject(`获取token失败:${rst['msg']}`);
});
}
exports.getToken = getToken;
function login(userid, password) {
return __awaiter(this, void 0, void 0, function* () {
const log = debug.extend('login');
try {
log('开始获取token');
const accessToken = yield getToken.call(this, userid, password);
if (!accessToken) {
let result = (0, util_1.newSdkResult)(constants_1.RequestFunc.AUTHLOGIN, null, constants_1.ErrCode.LOGIN_FAILED, '获取accessToken失败');
return Promise.reject(result);
}
log(`获取token=${accessToken.value}`);
log('开始获取账号信息');
const acconutInfo = yield account_1.get.call(this, accessToken.value);
if (!acconutInfo) {
let result = (0, util_1.newSdkResult)(constants_1.RequestFunc.AUTHLOGIN, null, constants_1.ErrCode.LOGIN_FAILED, '获取账户信息失败');
return Promise.reject(result);
}
log('通过API获取账号信息\n%O', acconutInfo);
let { sipuri, nickname, account: user_userid } = acconutInfo;
const nameAddr = rcs_data_1.NameAddrHeader.parse(sipuri);
let account = { userid: user_userid, nickname, nameAddr };
let sdkrst = (0, util_1.newSdkResult)(constants_1.RequestFunc.AUTHLOGIN, {
accessToken,
account,
});
return Promise.resolve(sdkrst);
}
catch (e) {
log(`发生异常:${e.message}`);
let sdkrst = (0, util_1.newSdkResult)(constants_1.RequestFunc.AUTHLOGIN, e, constants_1.ErrCode.LOGIN_FAILED, e.message);
return Promise.reject(sdkrst);
}
});
}
exports.login = login;
//# sourceMappingURL=auth.js.map