UNPKG

rcs-sdk

Version:

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

232 lines 10.2 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 }); 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