UNPKG

rcs-sdk

Version:

封装客户端与平台间的相互调用功能。

114 lines 5.09 kB
"use strict"; 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