rcs-sdk
Version:
封装客户端与平台间的相互调用功能。
232 lines • 10.2 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 });
const User = require("../user");
const Conversation = require("../conversation");
const Message = require("../message");
const Contact = require("../contact");
const Chatbot = require("../chatbot");
const event_1 = require("../event");
const constants_1 = require("../constants");
const request_1 = require("../util/request");
const util_1 = require("../util");
const debug = require('debug')('rscsdk:api');
function proxyApply(target, thisArg, args) {
if (!/login/.test(target.name)) {
if (!thisArg.account)
throw Error(`SDK中缺少用户账号信息,请先执行登录操作在调用方法[${target.name}]`);
}
return target.apply(thisArg, args);
}
function newProxy(ins) {
Object.getOwnPropertyNames(RcsIMSDK.prototype).forEach((pn) => {
if (typeof ins[pn] === 'function') {
let f = ins[pn];
ins[pn] = new Proxy(f, {
apply: proxyApply,
});
}
});
return new Proxy(ins, {});
}
class RcsIMSDK extends event_1.default {
constructor(config, JsSIP) {
super();
this._config = config;
this._JsSIP = JsSIP;
this.on(constants_1.CbEvents.ONRECVNEWSIPMESSAGE, (sdkrst) => {
debug('收到SIP消息');
let { headers, contentType, body } = sdkrst.data;
Message.newSipMessage.call(this, headers, contentType, body);
});
}
static fromDM({ JsSIP, WebSocket, browser } = {
JsSIP: null,
WebSocket: null,
browser: null,
}) {
return __awaiter(this, void 0, void 0, function* () {
if (!browser && !(0, util_1.inBrowser)()) {
debug.extend('fromDM')('在nodejs环境中运行SDK');
try {
if (typeof global !== 'undefined') {
if (WebSocket)
Object.assign(global, { WebSocket });
}
let { env } = process;
const config = {
authApiServer: env.RCS_SDK_AUTH_API_SERVER,
authApiPin: env.RCS_SDK_AUTH_API_PIN,
authType: env.RCS_SDK_AUTH_TYPE,
authApiTimeout: parseInt(process.env.RCS_SDK_AUTH_API_TIMEOUT),
msgApiServer: env.RCS_SDK_MSG_API_SERVER,
msgApiTimeout: parseInt(process.env.RCS_SDK_MSG_API_TIMEOUT),
contactApiServer: env.RCS_SDK_CONTACT_API_SERVER,
contactApiTimeout: parseInt(process.env.RCS_SDK_CONTACT_API_TIMEOUT),
chatbotApiServer: env.RCS_SDK_CHATBOT_API_SERVER,
chatbotApiTimeout: parseInt(process.env.RCS_SDK_CHATBOT_API_TIMEOUT),
uploadApiServer: env.RCS_SDK_UPLOAD_API_SERVER,
uploadApiTimeout: parseInt(process.env.RCS_SDK_UPLOAD_API_TIMEOUT),
sipServer: env.RCS_SDK_SIP_SERVER,
skipAuth: /^yes|true$/i.test(env.RCS_SDK_SKIP_AUTH),
mockFilePathGetToken: env.RCS_SDK_MOCK_FILE_PATH_GET_TOKEN,
mockFilePathGetAccount: env.RCS_SDK_MOCK_FILE_PATH_GET_ACCOUNT,
mockFilePathConversationList: env.RCS_SDK_MOCK_FILE_PATH_CONVERSATION_LIST,
mockFilePathMessageList: env.RCS_SDK_MOCK_FILE_PATH_MESSAGE_LIST,
mockFilePathContactList: env.RCS_SDK_MOCK_FILE_PATH_CONTACT_LIST,
mockFilePathUploadFile: env.RCS_SDK_MOCK_FILE_PATH_UPLOAD_FILE,
};
const rcssdk = newProxy(new RcsIMSDK(config, JsSIP));
return Promise.resolve(rcssdk);
}
catch (e) {
return Promise.reject(e);
}
}
else if (browser || (0, util_1.inBrowser)()) {
debug.extend('fromDM')('在浏览器环境中运行SDK');
const getDmrul = ({ protocol, hostname, port }) => {
let url = `${protocol}//${hostname}`;
if (port)
url += `:${port}`;
url += '/rcs-sdk-dm.json';
return url;
};
let dmurl = getDmrul(browser ? browser.location : location);
let httpReq = RcsIMSDK['request'] ? RcsIMSDK['request'] : request_1.default;
let res = yield httpReq.get(dmurl);
if (typeof res === 'string') {
res = JSON.parse(res);
}
let errCode = res['errCode'];
if (errCode === 0) {
let { data } = res;
let { authApiServer, authApiTimeout, authApiPin, msgApiServer, msgApiTimeout, contactApiServer, contactApiTimeout, chatbotApiServer, chatbotApiTimeout, uploadApiServer, uploadApiTimeout, sipServer, skipAuth, mockFilePathGetToken, mockFilePathGetAccount, mockFilePathConversationList, mockFilePathMessageList, mockFilePathContactList, mockFilePathUploadFile, } = data;
let config = {
authApiServer,
authApiTimeout,
authApiPin,
msgApiServer,
msgApiTimeout,
contactApiServer,
contactApiTimeout,
chatbotApiServer,
chatbotApiTimeout,
uploadApiServer,
uploadApiTimeout,
sipServer,
skipAuth,
mockFilePathGetToken,
mockFilePathGetAccount,
mockFilePathConversationList,
mockFilePathMessageList,
mockFilePathContactList,
mockFilePathUploadFile,
};
const rcssdk = newProxy(new RcsIMSDK(config, JsSIP));
return Promise.resolve(rcssdk);
}
else {
let errMsg = res['errMsg'];
throw Error(`获取RcsIMSDK配置参数失败[${errMsg}]`);
}
}
else {
throw Error('不能确定当前运行环境,无法获得RcsIMSDK配置参数');
}
});
}
get JsSIP() {
return this._JsSIP;
}
get config() {
return this._config;
}
set accessToken(token) {
this._accessToken = token;
}
get accessToken() {
return this._accessToken;
}
get account() {
return this._account;
}
set account(account) {
this._account = account;
}
get sipua() {
return this._sipua;
}
set sipua(ua) {
this._sipua = ua;
}
login(userid, password) {
return __awaiter(this, void 0, void 0, function* () {
try {
let result = yield User.login.call(this, userid, password);
let { accessToken, account, sipua } = result.data;
this.accessToken = accessToken;
this.account = account;
this.sipua = sipua;
result.data = { account };
return Promise.resolve(result);
}
catch (e) {
return Promise.reject(e);
}
});
}
logout(...args) {
return User.logout.call(this, ...args);
}
getLoginStatus() { }
getAllConversationList(startContributionId) {
return Conversation.getAllConversationList.call(this, startContributionId);
}
createConversation(peer) {
return Conversation.createConversation.call(this, peer);
}
createTextMessage(conversationId, recipient, textMsg, contributionId, messageId) {
return Message.createText.call(this, conversationId, recipient, textMsg, contributionId, messageId);
}
createFileMessage(conversationId, recipient, rawFile, contributionId, messageId, thumbnail) {
return Message.createFile.call(this, conversationId, recipient, rawFile, contributionId, messageId, thumbnail);
}
createSugRspMessage(conversationId, recipient, suggestion) {
return Message.createSugRsp.call(this, conversationId, recipient, suggestion);
}
uploadFile(rcsmsg, rawFile) {
return Message.uploadFile.call(this, rcsmsg, rawFile);
}
createMessageByJSON(conversationId, recipient, rawJSON) {
return Message.createByJSON.call(this, conversationId, recipient, rawJSON);
}
sendMessage(rcsmsg) {
return Message.sendMessage.call(this, rcsmsg);
}
getHistoryMessageList(conversationId, startContributionId, count) {
return Message.getHistoryMessageList.call(this, conversationId, startContributionId, count);
}
getContactList() {
return Contact.getContactList.call(this);
}
getContactDetail(userid) {
return Contact.getContactDetail.call(this, userid);
}
getChatbotList() {
return Chatbot.getChatbotList.call(this);
}
getChatbotDetail(chatbotid) {
return Chatbot.getChatbotDetail.call(this, chatbotid);
}
}
exports.default = RcsIMSDK;
//# sourceMappingURL=index.js.map