Full Code of rongcloud/websdk-demo for AI

master a4c6aeb29599 cached
578 files
27.0 MB
7.1M tokens
10598 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (28,900K chars total). Download the full file to get everything.
Repository: rongcloud/websdk-demo
Branch: master
Commit: a4c6aeb29599
Files: 578
Total size: 27.0 MB

Directory structure:
gitextract_ajuhcao0/

├── .gitignore
├── LICENSE
├── README.md
├── api-test/
│   ├── .gitignore
│   ├── README.md
│   ├── config.js
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   ├── json-alert.js
│   │   │   └── msg-expansion.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-3.0.0.js
│   │   │   ├── RongIMLib-3.0.3.js
│   │   │   ├── RongIMLib-3.0.5-mentioned.js
│   │   │   ├── RongIMLib-3.0.6.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test-v2/
│   ├── .gitignore
│   ├── README.md
│   ├── config.js
│   ├── debug.html
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   └── json-alert.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-2.3.1-revise-20200311-222.js
│   │   │   ├── RongIMLib-2.3.1-revise-20200311.js
│   │   │   ├── RongIMLib-2.3.5-bugfix-zhiyuan-20190408.js
│   │   │   ├── RongIMLib-2.5.1.js
│   │   │   ├── RongIMLib-2.5.3.js
│   │   │   ├── RongIMLib-2.5.4.js
│   │   │   ├── RongIMLib-2.5.5-private.js
│   │   │   ├── RongIMLib-2.5.5.js
│   │   │   ├── RongIMLib-2.5.6.js
│   │   │   ├── RongIMLib-2.5.9-release.js
│   │   │   ├── RongIMLib-2.5.9-silent.js
│   │   │   ├── RongIMLib.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test-v4/
│   ├── README.md
│   ├── config.js
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   ├── json-alert.js
│   │   │   └── msg-expansion.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-4.1.0.js
│   │   │   ├── RongIMLib-4.2.0.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test.html
├── calllib-v2/
│   ├── README.md
│   ├── demo.js
│   ├── group.html
│   ├── init.js
│   ├── private.html
│   ├── style/
│   │   └── main.css
│   └── user-media.html
├── calllib-v3/
│   ├── README.md
│   ├── docs/
│   │   ├── ready.md
│   │   ├── server.md
│   │   ├── show.md
│   │   └── web.md
│   ├── private.html
│   ├── server/
│   │   ├── index.js
│   │   ├── package.json
│   │   └── setting.js
│   ├── web/
│   │   ├── css/
│   │   │   ├── main.css
│   │   │   └── main.scss
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── call.js
│   │   │   ├── common/
│   │   │   │   ├── init.js
│   │   │   │   └── utils.js
│   │   │   ├── dialog.js
│   │   │   ├── login.js
│   │   │   └── main.js
│   │   ├── lib/
│   │   │   ├── vue-2.6.7.js
│   │   │   └── vue-router-3.0.2.js
│   │   └── setting.js
│   ├── web-ie/
│   │   ├── README.md
│   │   ├── css/
│   │   │   ├── main.css
│   │   │   └── main.scss
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── call.js
│   │   │   ├── common/
│   │   │   │   ├── init.js
│   │   │   │   └── utils.js
│   │   │   ├── dialog.js
│   │   │   ├── login.js
│   │   │   └── main.js
│   │   ├── lib/
│   │   │   ├── RongCallLib.3.1.5.js
│   │   │   ├── RongIMLib-2.5.1.js
│   │   │   ├── RongRTC-IE-3.0.4.js
│   │   │   ├── promise.js
│   │   │   ├── vue-2.6.7.js
│   │   │   └── vue-router-3.0.2.js
│   │   └── setting.js
│   └── web-im-v3/
│       ├── css/
│       │   ├── main.css
│       │   └── main.scss
│       ├── index.html
│       ├── js/
│       │   ├── call.js
│       │   ├── common/
│       │   │   ├── init.js
│       │   │   └── utils.js
│       │   ├── dialog.js
│       │   ├── login.js
│       │   └── main.js
│       ├── lib/
│       │   ├── vue-2.6.7.js
│       │   └── vue-router-3.0.2.js
│       └── setting.js
├── chameleon/
│   ├── README.md
│   ├── chameleon.config.js
│   ├── dist/
│   │   └── wx/
│   │       ├── app.js
│   │       ├── app.json
│   │       ├── app.wxss
│   │       ├── pages/
│   │       │   └── index/
│   │       │       ├── index.js
│   │       │       ├── index.json
│   │       │       └── index.wxml
│   │       └── static/
│   │           └── js/
│   │               ├── app.js
│   │               ├── common.js
│   │               ├── manifest.js
│   │               └── pages/
│   │                   └── index/
│   │                       └── index.js
│   ├── mock/
│   │   ├── api/
│   │   │   └── index.js
│   │   └── template/
│   │       └── index.php
│   ├── npm-shrinkwrap.json
│   ├── package.json
│   └── src/
│       ├── app/
│       │   └── app.cml
│       ├── assets/
│       │   └── js/
│       │       └── RongIMLib-2.4.0.js
│       ├── components/
│       │   └── demo-com/
│       │       └── demo-com.cml
│       ├── pages/
│       │   └── index/
│       │       └── index.cml
│       ├── router.config.json
│       └── store/
│           ├── actions.js
│           ├── getters.js
│           ├── index.js
│           ├── mutations.js
│           └── state.js
├── chatroom/
│   ├── chatroom.html
│   ├── chatroom.js
│   ├── chatroom.sdk.js
│   └── demo.html
├── chatroom-h5/
│   ├── README.md
│   ├── demo.html
│   ├── js/
│   │   ├── RongIMLib-2.5.12.js
│   │   ├── chatroom.js
│   │   ├── demo.js
│   │   ├── like.js
│   │   ├── mock.js
│   │   └── render.js
│   └── style/
│       └── chatroom.css
├── chatroom-h5-gif/
│   ├── README.md
│   ├── demo.html
│   ├── js/
│   │   ├── RongIMLib-2.5.12.js
│   │   ├── chatroom.js
│   │   ├── demo.js
│   │   ├── like.js
│   │   ├── mock.js
│   │   └── render.js
│   └── style/
│       └── chatroom.css
├── chrm-kv-demo/
│   ├── README.md
│   ├── css/
│   │   ├── main.css
│   │   └── main.scss
│   ├── index.html
│   ├── js/
│   │   ├── init.js
│   │   ├── main.js
│   │   └── utils.js
│   └── setting.js
├── common-im/
│   ├── css/
│   │   ├── common.css
│   │   └── main.css
│   ├── index.html
│   └── js/
│       └── service.js
├── connect-check.html
├── cs/
│   ├── jx/
│   │   ├── .gitignore
│   │   ├── .project
│   │   ├── Gruntfile.js
│   │   ├── README.md
│   │   ├── RongIMemoji.js
│   │   ├── cs.css
│   │   ├── cs.html
│   │   ├── cs.js
│   │   ├── dist/
│   │   │   └── cs.html
│   │   ├── emoji.js
│   │   ├── package.json
│   │   ├── phiz.js
│   │   ├── qiniu-upload.js
│   │   ├── template.js
│   │   ├── templates/
│   │   │   ├── button.html
│   │   │   ├── chat.html
│   │   │   ├── closebefore.html
│   │   │   ├── conversation.html
│   │   │   ├── endconversation.html
│   │   │   ├── evaluate.html
│   │   │   ├── imageView.html
│   │   │   ├── import.html
│   │   │   ├── leaveword.html
│   │   │   ├── main.html
│   │   │   ├── message.html
│   │   │   ├── messageTemplate.html
│   │   │   └── userInfo.html
│   │   ├── ui.html
│   │   └── utils.js
│   └── sobot/
│       ├── .gitignore
│       ├── Gruntfile.js
│       ├── README.md
│       ├── RongIMEmoji.js
│       ├── cs.css
│       ├── cs.html
│       ├── cs.js
│       ├── dist/
│       │   └── cs.html
│       ├── emoji.js
│       ├── package.json
│       ├── qiniu.js
│       ├── template.js
│       ├── templates/
│       │   ├── button.html
│       │   ├── chat.html
│       │   ├── closebefore.html
│       │   ├── conversation.html
│       │   ├── endconversation.html
│       │   ├── evaluate.html
│       │   ├── evaluateItem.html
│       │   ├── imageView.html
│       │   ├── import.html
│       │   ├── leaveword.html
│       │   ├── main.html
│       │   ├── message.html
│       │   ├── messageTemplate.html
│       │   └── userInfo.html
│       ├── test.html
│       ├── ui.html
│       ├── upload.js
│       └── utils.js
├── desktop/
│   ├── downloadExtra.html
│   ├── file.html
│   ├── index.html
│   ├── screenshot.html
│   ├── system.html
│   └── window.html
├── electron/
│   ├── desktop_share.html
│   ├── init.js
│   ├── main.js
│   ├── normal.html
│   ├── package.json
│   ├── requirejs-in-node.html
│   ├── sdk/
│   │   ├── RongIMLib-2.3.3.js
│   │   ├── RongIMLib-2.5.1.js
│   │   └── init.js
│   └── user_media.html
├── electron-vue/
│   ├── .babelrc
│   ├── .electron-vue/
│   │   ├── build.js
│   │   ├── dev-client.js
│   │   ├── dev-runner.js
│   │   ├── webpack.main.config.js
│   │   ├── webpack.renderer.config.js
│   │   └── webpack.web.config.js
│   ├── .eslintignore
│   ├── .eslintrc.js
│   ├── .gitignore
│   ├── .travis.yml
│   ├── README.md
│   ├── appveyor.yml
│   ├── package.json
│   ├── src/
│   │   ├── index.ejs
│   │   ├── main/
│   │   │   ├── index.dev.js
│   │   │   └── index.js
│   │   └── renderer/
│   │       ├── App.vue
│   │       ├── assets/
│   │       │   └── .gitkeep
│   │       ├── components/
│   │       │   └── Init.vue
│   │       ├── main.js
│   │       ├── router/
│   │       │   └── index.js
│   │       └── store/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── Counter.js
│   │               └── index.js
│   ├── static/
│   │   ├── .gitkeep
│   │   └── js/
│   │       ├── RongEmoji-2.2.7.js
│   │       └── RongIMLib-2.5.1.js
│   └── test/
│       ├── .eslintrc
│       ├── e2e/
│       │   ├── index.js
│       │   ├── specs/
│       │   │   └── Launch.spec.js
│       │   └── utils.js
│       └── unit/
│           ├── index.js
│           ├── karma.conf.js
│           └── specs/
│               └── LandingPage.spec.js
├── electron-vue-sdk-v3/
│   ├── .babelrc
│   ├── .electron-vue/
│   │   ├── build.js
│   │   ├── dev-client.js
│   │   ├── dev-runner.js
│   │   ├── webpack.main.config.js
│   │   ├── webpack.renderer.config.js
│   │   └── webpack.web.config.js
│   ├── .eslintignore
│   ├── .eslintrc.js
│   ├── .gitignore
│   ├── .travis.yml
│   ├── README.md
│   ├── appveyor.yml
│   ├── package.json
│   ├── src/
│   │   ├── index.ejs
│   │   ├── main/
│   │   │   ├── index.dev.js
│   │   │   └── index.js
│   │   └── renderer/
│   │       ├── App.vue
│   │       ├── assets/
│   │       │   └── .gitkeep
│   │       ├── components/
│   │       │   └── Init.vue
│   │       ├── main.js
│   │       ├── router/
│   │       │   └── index.js
│   │       └── store/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── Counter.js
│   │               └── index.js
│   ├── static/
│   │   ├── .gitkeep
│   │   └── js/
│   │       ├── RongEmoji-2.2.7.js
│   │       ├── RongIMLib-2.5.1.js
│   │       └── RongIMLib-3.0.1-dev.es.js
│   └── test/
│       ├── .eslintrc
│       ├── e2e/
│       │   ├── index.js
│       │   ├── specs/
│       │   │   └── Launch.spec.js
│       │   └── utils.js
│       └── unit/
│           ├── index.js
│           ├── karma.conf.js
│           └── specs/
│               └── LandingPage.spec.js
├── emoji.html
├── faq.md
├── histroy-messages.html
├── im/
│   ├── .gitignore
│   ├── Gruntfile.js
│   ├── README.md
│   ├── emoji.js
│   ├── im.css
│   ├── im.html
│   ├── im.js
│   ├── libs/
│   │   ├── RongEmoji.js
│   │   ├── qiniu-upload.js
│   │   └── utils.js
│   ├── package.json
│   ├── template.js
│   └── templates/
│       ├── button.html
│       ├── chat.html
│       ├── closebefore.html
│       ├── conversation.html
│       ├── endconversation.html
│       ├── evaluate.html
│       ├── imMain.html
│       ├── imMessage.html
│       ├── imMessageTemplate.html
│       ├── imageView.html
│       ├── import.html
│       ├── leaveword.html
│       ├── main.html
│       ├── message.html
│       ├── messageTemplate.html
│       └── userInfo.html
├── im-ui-mod/
│   ├── component-ui.css
│   ├── reset.css
│   └── ui.html
├── init-muti.html
├── init-muti.js
├── init.js
├── integrate/
│   ├── chat/
│   │   ├── chat-guide.html
│   │   ├── chat.css
│   │   ├── chat.html
│   │   ├── chat.js
│   │   └── chat.json
│   ├── conversation-list/
│   │   ├── conversation-list-guide.html
│   │   ├── conversation-list.css
│   │   ├── conversation-list.html
│   │   ├── conversation-list.js
│   │   └── conversation-list.json
│   ├── guide.html
│   ├── init.html
│   ├── init.js
│   ├── integrate.css
│   ├── lib/
│   │   ├── jquery-3.1.1.js
│   │   └── vue-2.1.4.js
│   ├── login/
│   │   ├── login.css
│   │   ├── login.html
│   │   ├── login.js
│   │   └── login.json
│   ├── message/
│   │   ├── message-guide.html
│   │   ├── message.css
│   │   ├── message.html
│   │   ├── message.js
│   │   ├── message.json
│   │   └── upload/
│   │       ├── qiniu.js
│   │       ├── upload.js
│   │       └── uploadInit.js
│   ├── public/
│   │   ├── js/
│   │   │   ├── public-article.js
│   │   │   ├── public-chat.js
│   │   │   ├── public-common.js
│   │   │   ├── public-info.js
│   │   │   ├── public-list.js
│   │   │   └── public-search.js
│   │   ├── public-guide.html
│   │   ├── public-mock-data.json
│   │   ├── public.css
│   │   ├── public.html
│   │   └── template/
│   │       ├── public-article.html
│   │       ├── public-chat.html
│   │       ├── public-info.html
│   │       ├── public-list.html
│   │       └── public-search.html
│   ├── reset.css
│   └── server-api.md
├── js/
│   ├── message-output.js
│   └── pre-check.js
├── json-view/
│   ├── jquery.jsonview.js
│   └── jsonview.css
├── lib/
│   ├── RongCallLib.js
│   ├── RongEmoji-dev.js
│   ├── RongIMVoice-2.2.6.js
│   ├── jquery-3.1.1.js
│   ├── require.js
│   ├── seajs-2.1.1.js
│   └── vue-2.1.4.js
├── local-sdks/
│   ├── README.md
│   ├── emoji.html
│   ├── im.html
│   ├── sdk/
│   │   ├── RongIMLib-2.3.4.js
│   │   ├── RongIMLib-2.3.5.js
│   │   ├── RongIMLib-2.4.0.js
│   │   ├── RongIMLib-2.5.0.js
│   │   ├── RongIMLib-2.5.1.js
│   │   └── RongIMLib-2.5.3.js
│   ├── voice-amr-base64.json
│   └── voice.html
├── miniprogram-upload/
│   ├── README.md
│   ├── app.js
│   ├── app.json
│   ├── app.wxss
│   ├── pages/
│   │   ├── index/
│   │   │   ├── index.js
│   │   │   ├── index.json
│   │   │   ├── index.wxml
│   │   │   └── index.wxss
│   │   ├── lib/
│   │   │   └── RongIMLib-3.0.4-dev.js
│   │   └── services.js
│   ├── project.config.json
│   ├── sitemap.json
│   └── utils/
│       └── util.js
├── nav/
│   ├── README.md
│   ├── css/
│   │   ├── iconfont.css
│   │   └── style.css
│   ├── index.html
│   └── js/
│       ├── config.js
│       └── index.js
├── react/
│   ├── im.html
│   ├── react-16.2.js
│   └── react-dom-16.2.js
├── require.html
├── res/
│   ├── rongcloud.css
│   └── voice-amr-base64.json
├── rongrtc/
│   ├── README.md
│   ├── api/
│   │   └── api.html
│   ├── im.js
│   ├── mock.js
│   ├── screenshare/
│   │   ├── screenshare.html
│   │   └── screenshare.js
│   └── utils.js
├── rtc/
│   ├── README.md
│   ├── app/
│   │   ├── README.md
│   │   ├── config.js
│   │   ├── css/
│   │   │   ├── common.css
│   │   │   └── main.css
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── core.js
│   │   │   └── utils.js
│   │   └── lib/
│   │       ├── RongRTCEngine.js
│   │       └── adapter.js
│   └── whiteboard/
│       └── src/
│           ├── blink-wb.html
│           ├── config.js
│           ├── css/
│           │   ├── app.css
│           │   ├── enyo.css
│           │   ├── main.css
│           │   ├── style.css
│           │   ├── sweetalert.css
│           │   ├── upload.css
│           │   └── uploadfile.css
│           ├── js/
│           │   ├── Queue.src.js
│           │   ├── blink/
│           │   │   └── blinkEwb.js
│           │   ├── common.js
│           │   ├── core.js
│           │   ├── ewb/
│           │   │   ├── App.js
│           │   │   ├── Connection.js
│           │   │   ├── Svg.js
│           │   │   └── WhiteBoardApi.js
│           │   ├── lib/
│           │   │   ├── enyo-ilib/
│           │   │   │   └── ilib/
│           │   │   │       └── locale/
│           │   │   │           ├── ilibmanifest.json
│           │   │   │           ├── scripts.json
│           │   │   │           └── und/
│           │   │   │               └── CN/
│           │   │   │                   └── localeinfo.json
│           │   │   ├── enyo-ilib.js
│           │   │   ├── enyo.js
│           │   │   ├── layout.js
│           │   │   └── onyx.js
│           │   ├── raphael-min.js
│           │   └── raphael.inline_text_editing.js
│           └── resources/
│               ├── localeinfo.json
│               └── strings.json
├── sdk-unitest/
│   ├── emoji/
│   │   ├── emoji.js
│   │   ├── run.html
│   │   └── testcase.js
│   ├── im/
│   │   ├── RongIMLib-2.2.7.js
│   │   ├── run.html
│   │   └── testcase/
│   │       ├── 1-staticCheck.js
│   │       ├── 2-connect.js
│   │       └── 3-sendMessage.js
│   ├── index.html
│   ├── jasmine/
│   │   ├── 1.2.0/
│   │   │   ├── jasmine-html.js
│   │   │   ├── jasmine.css
│   │   │   └── jasmine.js
│   │   └── guide.js
│   └── libs/
│       ├── ua.js
│       └── underscore.js
├── seajs.html
├── sticker/
│   ├── README.md
│   ├── extend-stickers/
│   │   └── extend-sticker.js
│   ├── init.js
│   ├── message.html
│   ├── require.html
│   └── sticker.html
├── switch-users.html
├── unreadcount/
│   └── unreadcount.js
├── user-group.js
├── video/
│   ├── flowplayer/
│   │   ├── flowplayer-3.2.13.js
│   │   ├── flowplayer-3.2.18.swf
│   │   └── flowplayer.controls-3.2.16.swf
│   └── player.html
├── voice-autoplay.html
├── voice.html
├── vue/
│   ├── im/
│   │   ├── config.js
│   │   ├── conversation-list.js
│   │   ├── css/
│   │   │   ├── common.css
│   │   │   └── main.css
│   │   ├── im.html
│   │   ├── im.js
│   │   ├── js/
│   │   │   └── service.js
│   │   ├── lib/
│   │   │   ├── vue-2.1.4.js
│   │   │   └── vue-router-2.1.1.js
│   │   ├── message-list.js
│   │   └── routes.js
│   ├── normal.html
│   ├── require.html
│   └── vue-2.1.4.js
├── vue-cli/
│   ├── .eslintignore
│   ├── .gitignore
│   ├── README.md
│   ├── babel.config.js
│   ├── package.json
│   ├── public/
│   │   └── index.html
│   └── src/
│       ├── App.vue
│       ├── components/
│       │   └── Init.vue
│       └── main.js
└── vue-cli-4/
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── package.json
    ├── public/
    │   └── index.html
    └── src/
        ├── App.vue
        ├── components/
        │   └── Init.vue
        └── main.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
electron-vue/node_modules
electron-vue/dist
electron-vue/build
calllib-v3/server/node_modules
calllib-v3/server/package-lock.json
calllib-v3/web/node_modules


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2017 融云 RongCloud

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# 引导说明

写给前端新手的工程管理建议: [https://support.rongcloud.cn/kb/NzUx](https://support.rongcloud.cn/kb/NzUx)

开发 IM 的基本思路: [https://support.rongcloud.cn/kb/NzQ4](https://support.rongcloud.cn/kb/NzQ4)

消息类型与文件格式: [http://support.rongcloud.cn/kb/NjE0](http://support.rongcloud.cn/kb/NjE0)

用信息处理: [http://support.rongcloud.cn/kb/NjQ5](http://support.rongcloud.cn/kb/NjQ5) 



# WebSDK demo

WebSDK API 示例(基于 IM SDK V4): [https://rongcloud.github.io/websdk-demo/api-test-v4](https://rongcloud.github.io/websdk-demo/api-test-v4/)

WebSDK API 示例(基于 IM SDK V3): [https://rongcloud.github.io/websdk-demo/api-test](https://rongcloud.github.io/websdk-demo/api-test/)

SDK源码: [https://github.com/rongcloud/rongcloud-web-im-sdk-v2](https://github.com/rongcloud/rongcloud-web-im-sdk-v2)

常见问题: [https://github.com/rongcloud/websdk-demo/blob/master/faq.md](https://github.com/rongcloud/websdk-demo/blob/master/faq.md)

Require SDK: [https://rongcloud.github.io/websdk-demo/require.html](https://rongcloud.github.io/websdk-demo/require.html)

Require SDK in Electron: [https://github.com/rongcloud/websdk-demo/tree/master/electron/requirejs-in-node.html](https://github.com/rongcloud/websdk-demo/tree/master/electron/requirejs-in-node.html)

Normal SDK in Electron: [https://github.com/rongcloud/websdk-demo/tree/master/electron/normal.html](https://github.com/rongcloud/websdk-demo/tree/master/electron/normal.html)

WebSDK in electron-vue: [https://github.com/rongcloud/websdk-demo/tree/master/electron-vue](https://github.com/rongcloud/websdk-demo/tree/master/electron-vue)

引用本地 SDK: 将 [WebSDK](https://cdn.ronghub.com/RongIMLib-2.3.0.js) 下载至本地引用即可,[初始化示例](https://github.com/rongcloud/websdk-demo/tree/master/local-sdks)

初始化、消息监听: [https://rongcloud.github.io/websdk-demo/connect-check.html](https://rongcloud.github.io/websdk-demo/connect-check.html)

消息监听回调队列: [https://rongcloud.github.io/websdk-demo/init-muti.html](https://rongcloud.github.io/websdk-demo/init-muti.html)

获取历史消息: [https://rongcloud.github.io/websdk-demo/histroy-messages.html](https://rongcloud.github.io/websdk-demo/histroy-messages.html)

聊天室自定义属性: [https://github.com/rongcloud/websdk-demo/tree/master/chrm-kv-demo](https://github.com/rongcloud/websdk-demo/tree/master/chrm-kv-demo)

WebSDK Vue Require 示例: [https://rongcloud.github.io/websdk-demo/vue/require.html](https://rongcloud.github.io/websdk-demo/vue/require.html)

WebSDK Vue Normal 示例: [https://rongcloud.github.io/websdk-demo/vue/normal.html](https://rongcloud.github.io/websdk-demo/vue/normal.html)

WebSDK Vue CLI 3.x 示例: [https://github.com/rongcloud/websdk-demo/tree/master/vue-cli](https://github.com/rongcloud/websdk-demo/tree/master/vue-cli)

WebSDK Vue CLI 4.x 示例: [https://github.com/rongcloud/websdk-demo/tree/master/vue-cli-4](https://github.com/rongcloud/websdk-demo/tree/master/vue-cli-4)

WebSDK React 示例: [https://rongcloud.github.io/websdk-demo/react/im.html](https://rongcloud.github.io/websdk-demo/react/im.html)

WebSDK SeaJS 示例: [https://rongcloud.github.io/websdk-demo/seajs.html](https://rongcloud.github.io/websdk-demo/seajs.html)


# 扩展组件 Component

Emoji: [https://rongcloud.github.io/websdk-demo/emoji.html](https://rongcloud.github.io/websdk-demo/emoji.html)

视频播放(Video + Flash): [https://rongcloud.github.io/websdk-demo/video/player.html](https://rongcloud.github.io/websdk-demo/video/player.html)

声音播放: [https://rongcloud.github.io/websdk-demo/voice.html](https://rongcloud.github.io/websdk-demo/voice.html)

上传组件: [https://github.com/rongcloud/rongcloud-web-im-upload](https://github.com/rongcloud/rongcloud-web-im-upload)


# 集成项目

集成指南: [https://rongcloud.github.io/websdk-demo/integrate/guide.html](https://rongcloud.github.io/websdk-demo/integrate/guide.html)

Web 聊天室 (弹幕效果):[https://rongcloud.github.io/websdk-demo/chatroom/chatroom.html](https://rongcloud.github.io/websdk-demo/chatroom/chatroom.html)

Web IM(无框架依赖): [https://rongcloud.github.io/websdk-demo/im/im.html](https://rongcloud.github.io/websdk-demo/im/im.html)

Web IM(Angular): [https://github.com/rongcloud/rongcloud-web-im-widget](https://github.com/rongcloud/rongcloud-web-im-widget)

Web IM H5(Angular): [https://github.com/rongcloud/rongcloud-web-im-widget-h5](https://github.com/rongcloud/rongcloud-web-im-widget-h5)

Web 对接佳信客服(无框架依赖): [https://rongcloud.github.io/websdk-demo/cs/jx/cs.html](https://rongcloud.github.io/websdk-demo/cs/jx/cs.html)

Web 对接智齿客服(无框架依赖): [https://rongcloud.github.io/websdk-demo/cs/sobot/cs.html](https://rongcloud.github.io/websdk-demo/cs/sobot/cs.html)


# SealTalk 项目源码

SealTalk Server: [https://github.com/sealtalk/sealtalk-server](https://github.com/sealtalk/sealtalk-server)

SealTalk Web: [https://github.com/sealtalk/sealtalk-web](https://github.com/sealtalk/sealtalk-web)

SealTalk Desktop: [https://github.com/sealtalk/sealtalk-desktop](https://github.com/sealtalk/sealtalk-desktop)





================================================
FILE: api-test/.gitignore
================================================
.node_modules
.sass-cache
*.css.map

================================================
FILE: api-test/README.md
================================================
# api-test


================================================
FILE: api-test/config.js
================================================
(function (win) {

  var isDebug = false;

  var im = {
    appkey: 'n19jmcy59f1q9',
    token: 'Kn2p4uokgY5AZOFVsKTbKq+YsUIoF3ojin3K277sfOnEb+B6ZpahsTOCVisdS43pwz7SnsSF0xxiLfygEojZP7ywLi39+nOPq12llTIt1oc=',
    navi: '',
    targetId: 'api_test_target',
    // customCMP: '',
    isPolling: false,
  };

  if (!isDebug) {
    delete im.cmpUrl;
  }

  var config = {
    im: im,
    isDebug: isDebug,
    debugConf: {
      autoRun: false,
      isShowMsg: false
    }
  };

  win.RongIM = win.RongIM || {};
  win.RongIM = {
    config: config,
    components: {}
  };

})(window);

================================================
FILE: api-test/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <title>Api Test v3</title>
  
  <link rel="stylesheet" href="./lib/styles/iview.css">
  <!-- <link rel="stylesheet" href="./lib/styles/dragula-3.7.2.css"> -->
  <link rel="stylesheet" href="./styles/main.css">
  
  <!-- <script src="//mstatic.secooimg.com/activity2018/js/sdk/weixin.sdk1.3.2.js"></script> -->
  <script src="./lib/js/vue-2.6.10.js"></script>
  <script src="./lib/js/iview-4.0.2.min.js"></script>
  <script src="./lib/js/vue-json-pretty.js"></script>
  <script src="./lib/js/es6-promise.js"></script>
  <script src="./lib/js/Sortable.min.js"></script>
  <script src="./lib/js/vuedraggable.umd.min.js"></script>

  <script src="https://cdn.ronghub.com/RongIMLib-3.0.6-dev.js"></script>
  <script src="./config.js"></script>
  <script src="./js/common/utils.js"></script>
  <script src="./js/common/service.js"></script>
  <script src="./js/common/api-list.js"></script>

  <script id="rong-global-config" type="text/x-template">
    <div class="rong-login">
      <i-form :label-width="80" class="rong-input-form">
        <FormItem class="rong-login-formitem" v-for="item in configList" v-bind:key="item.name" :label="item.name">
          <i-input class="rong-login-input-item" :class="'rong-input-' + item.name" v-if="item.type === 'string'" v-model="config[item.name]" type="text" :placeholder="prompt[item.name] || item.name" />
          <i-switch v-else-if="item.type === 'boolean'" v-model="config[item.name]" />
          <span class="rong-prompt" v-if="prompt[item.name]">{{prompt[item.name]}}</span>
        </FormItem>
        <div class="rong-connect-btn-box">
          <i-button @click="login(config)" type="primary">开始链接</i-button>
          <i-button @click="clearStorage()" type="warning">清空缓存</i-button>
        </div>
      </i-form>
    </div>
  </script>

  <script id="rong-tpl-apibtn" type="text/x-template">
    <div class="rong-api-btn" :value="apiValue">
      <Tooltip placement="bottom" :transfer="true" :disabled="isdragging">
        <i-button class="rong-api-btn-box" size="small" @click="run()">
          <span class="rong-api-btn-name">{{selfApi.name}}</span>
          <!-- <div class="rong-api-btn-set">
            <button class="rong-api-btn-run" @click="run()">运行</button
            ><button class="rong-api-btn-config" @click="showEditDialog()">设置</button
            >
          </div> -->
        </i-button>
        <div slot="content" class="rong-prompt-box">
            <i-button v-if="hasParams" size="small" type="info" @click="showEditDialog()">修改配置</i-button>
            <i-button size="small" type="success" @click="openUrl(selfApi.doc)">查看文档</i-button>
            <!-- <p><a class="rong-api-btn-link" :href="selfApi.doc" target="_blank">点击查看文档</a></p>
            <p><a class="rong-api-btn-link" :href="selfApi.doc" target="_blank">点击配置参数</a></p> -->
            <p>方法: {{selfApi.eventName}}</p>
            <p>描述: {{selfApi.desc}}</p>
            <p v-if="hasParams">参数:</p>
            <ul class="rong-tip-params">
              <li v-for="param in selfApi.params" v-bind:key="param.name">
                {{param.name}} ({{param.type}})
              </li>
            </ul>
        </div>
      </Tooltip>

      <Modal v-model="isShowEditDialog" draggable scrollable title="参数设置" width="395">
        <i-form :label-width="90">
          <FormItem v-for="param in paramList" v-bind:key="param.name" :label="param.name" class="rong-api-set-item">
            <i-input v-if="param.type === 'string'" v-model="param.value" type="text" :placeholder="param.name" />
            <i-input v-else-if="param.type === 'number'" v-model="param.value" type="number" :placeholder="param.name" />
            <i-switch v-else-if="param.type === 'boolean'" v-model="param.value" @on-change="change" />
          </FormItem>
        </i-form>
        <div slot="footer">
            <i-button type="success" @click="run()">运行</i-button>
            <i-button type="primary" @click="hideEditDialog()">确定</i-button>
        </div>
      </Modal>

    </div>
  </script>

  <script id="rong-json-alert" type="text/x-template">
    <Modal class="rong-json-alert" v-model="isShow">
      <prettyjson class="rong-json-content" :showLength="true" :highlight-mouseover-node="true" selectable-type="single" :path="'res'" :data="data">
      </prettyjson>
      <div slot="footer">
          <i-button type="primary" @click="hide()">确定</i-button>
      </div>
    </Modal>
  </script>

  <script src="./js/components/button.js"></script>
  <script src="./js/components/json-alert.js"></script>
  <script src="./js/login.js"></script>
</head>
<body>
  <div id="app" class="rong-box rong-hidden" :class="{ 'rong-drag': isDragging, 'rong-show': 1  }">

    <h1>
      Web SDK Demo
      <a target="_blank" href="https://github.com/rongcloud/websdk-demo/blob/master/api-test.html" title="点击查看源码" class="get-source">示例源码</a>
    </h1>

    <template v-if="isLogged">
      <div class="rong-run-info" v-if="isDebug">
        <p>成功次数: <b>{{runInfo.runCount}}</b></p>
        <p>成功 Api 个数: <b>{{runInfo.successApiCount}}</b></p>
        <p>失败 Api 个数: <b>{{runInfo.failApiList.length}}</b></p>
      </div>

      <!-- <div class="rong-global-opt">
        <i-button class="rong-runall-btn" size="small" @click="runAllApi()">运行全部</i-button>
      </div> -->

      <div class="rong-user-title">
        <h4>当前用户 id: {{currentUserId}}</h4>
        <i-button class="rong-runall-btn" size="small" @click="isShowRunType=true">运行全部</i-button>
        <components class="rong-changeuser-btn" is="apiBtn"
          :api="changeUserApi" :isdragging="isDragging"></components>
        <i-button v-if="isDebug" class="rong-runall-btn" size="small" type="error" @click="isAlarmMuted=!isAlarmMuted">{{ isAlarmMuted ? '取消静音' : '点击静音' }}</i-button>
      </div>

      <p class="rong-api-prompt">
        <b>注:</b>
        <span>以下 Api 按钮可拖拽移动顺序, 点击运行全部按钮, 按当前展示顺序运行 Api</span>
      </p>

      <div class="rong-opt-list">
          <div v-for="(readyList, index) in readyApiQueue" v-bind:key="readyList.id" class="rong-ready-box">
            <draggable :list="readyList" group="people" @start="startDragging()" @end="isDragging=false">
                <!-- <span>{{index + 1}}</span> -->
                <components :ref="'readyApi' + index" v-for="api in readyList" v-bind:key="api.name" class="rong-ready-btn" is="apiBtn" :api="api" :isdragging="isDragging"></components>
            </draggable>
          </div>
      </div>

      <div class="rong-current-output" v-if="currentOutput">
        <p><b>{{currentOutput.title}}</b></p>
        <p><b>耗时:</b> {{currentOutput.consumedTime}} ms</p>
        <p><b>参数:</b> {{toJSON(currentOutput.params)}}</p>
        <template v-if="currentOutput.result">
          <p><b>返回值:</b></p>
          <prettyjson :showLength="true" :highlight-mouseover-node="true" selectable-type="single" :path="'res'"
            :data="currentOutput.result"></prettyjson>
        </template>
      </div>
      
      <!-- <div class="rong-api-list">
        <components class="rong-api-source" v-for="api in apiList" v-bind:key="api.name" is="apiBtn" :api="api"></components>
      </div> -->
      
      <div class="rong-out-list">
        <div class="rong-out-list-head">
          <h4>调用结果如下:</h4>
          <div class="rong-out-btn-list">
            <i-button size="small" @click="clearOutput()">清空</i-button>
            <i-button size="small" @click="showAllOutput()">显示全部</i-button>
            <i-button class="rong-out-list-display" size="small" @click="isShowOutList=!isShowOutList">{{ isShowOutList ? '隐藏' : '展开' }}</i-button>
          </div>
        </div>
        <Collapse class="rong-out-list-content" v-if="displayedOutputList.length" v-show="isShowOutList">
          <Panel v-for="(output, index) in reverse(displayedOutputList)" class="rong-out-panel" v-bind:key="output.id" :name="index + ''" :style="{ color: output.config.color }">
            <span :title="output.title" class="rong-out-title">{{displayedOutputList.length - index}}. {{output.title}}</span>
            <div slot="content" class="rong-out-item">
              <p><b>时间:</b> {{output.time}}</p>
              <p v-if="output.consumedTime"><b>耗时:</b> {{output.consumedTime}} ms</p>
              <p v-if="output.params && output.params.length"><b>参数:</b> {{toJSON(output.params)}}</p>
              <p v-if="output.result"><b>返回值:</b> {{toJSON(output.result)}}</p>
              <i-button v-if="output.result" class="rong-parse-json-btn" size="small" type="primary" @click="showJSONAlert(output.result)">点击解析返回值
              </i-button>
            </div>
          </Panel>
        </Collapse>
      </div>

    </template>

    <components v-else is="login" :login="login" :config="globalConfig"></components>

    <Modal v-model="isShowRunType" draggable scrollable title="运行方式" width="395">
      <i-form :label-width="90">
          <i-select v-model="runType">
            <i-option v-for="opt, key in RunType" v-bind:key="key" :value="key">{{opt.name}}</i-option>
          </i-select>
          <p class="rong-run-sel-prompt">
            <b>提示:</b>
            <span>{{RunType[runType].prompt}}</span>
          </p>
      </i-form>
      <div slot="footer">
        <i-button type="success" @click="runAllApi();isShowRunType=false;">运行</i-button>
      </div>
    </Modal>

    <audio ref="alarm" style="opacity: 0; position: absolute;" src="./styles/alarm.mp3"></audio>

  </div>
</body>

<script src="./js/main.js"></script>

</html>

================================================
FILE: api-test/js/common/api-list.js
================================================
(function (win, dependencies) {
  var RongIMLib = win.RongIMLib,
    RongIMClient = RongIMLib.RongIMClient;

  var RongIM = dependencies.RongIM,
    utils = RongIM.Utils,
    Service = RongIM.Service,
    config = RongIM.config.im,
    urlQueryConfig = utils.getUrlQuery();

  var MiniUnSupportEventList = [
    'sendRecallMessage', 'deleteRemoteMessages', 'clearRemoteHistoryMessages'
  ];

  var disconnect = {
    name: '断开链接',
    event: Service.disconnect,
    eventName: 'disconnect',
    desc: '断开链接',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/connection/disconnect/web3.html',
    params: []
  };

  var reconnect = {
    name: '重新链接',
    event: Service.reconnect,
    eventName: 'reconnect',
    desc: '重新链接',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/connection/reconnect/web3.html',
    params: [
      // { name: '是否嗅探', type: 'boolean', value: true },
      // { name: '嗅探 url', type: 'string', value: 'https://cdn.ronghub.com/RongIMLib-2.2.6.min.js?d=' + Date.now() },
      // { name: '嗅探频率', type: 'string', value: '100,1000,3000,3000,3000' }
    ]
  };

  var changeUser = {
    name: '切换用户',
    evnet: utils.noop,
    eventName: 'logout',
    desc: '切换用户',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/connection/disconnect/web3.html#logout',
    params: [
      { name: 'Token', type: 'string', value: '5JQlp5czM31GNl99DOZyI3xpRjANxKgfakOnYLFljI+TMvOF0hGaVtR1n9Qp4baLgKBGsyl3w5j4gAWBbNZ3nOKrvnVo8Ldl' }
    ]
  };

  var registerMessage = {
    name: '注册自定义消息',
    event: Service.registerMessage,
    eventName: 'registerMessageType',
    desc: '注册自定义消息',
    doc: 'https://docs.rongcloud.cn/im/imlib/web/message-send/#custom-register',
    params: [
      { name: 'messageType', type: 'string', value: 'PersonMessage' },
      { name: 'objectName', type: 'string', value: 's:person' },
      { name: '是否计数', type: 'boolean', value: true },
      { name: '是否存储', type: 'boolean', value: true },
      { name: '属性', type: 'string', value: 'name,age' },
    ]
  };

  var getConversationList = {
    name: '获取会话列表',
    event: Service.getConversationList,
    eventName: 'getConversationList',
    desc: '获取会话列表',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/conversation/getall/web3.html',
    params: [
      { name: '数量', type: 'number', value: 1000 }
    ]
  };

  var removeConversation = {
    name: '删除会话列表',
    event: Service.removeConversation,
    eventName: 'removeConversation',
    desc: '删除会话列表',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/conversation/clear/web3.html',
    params: [
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var getHistoryMessages = {
    name: '获取历史消息',
    event: Service.getHistoryMessages,
    eventName: 'getHistoryMessages',
    desc: '获取历史消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/storage/web3.html',
    params: [
      { name: '时间戳', type: 'number', value: 0 },
      { name: '数量', type: 'number', value: 20 },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var setConversationStatus = {
    name: '设置会话状态',
    event: Service.setConversationStatus,
    eventName: 'setConversationStatus',
    desc: '设置会话状态',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/conversation/notify/web3.html',
    params: [
      { name: '免打扰', type: 'number', value: 1 },
      { name: '置顶', type: 'boolean', value: true },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var deleteRemoteMessages = {
    name: '删除历史消息(按消息)',
    event: Service.deleteRemoteMessages,
    eventName: 'deleteRemoteMessages',
    desc: '按消息删除指定历史消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/delete/web3.html#deletebyid',
    params: [
      { name: '消息 Uid', type: 'string', value: '', event: Service.getLastCacheMsgUId },
      { name: '发送时间', type: 'number', value: 0, event: Service.getLastCacheMsgSentTime },
      { name: '消息方向', type: 'number', value: 1, event: Service.getLastCacheMsgDirection },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var clearHistoryMessages = {
    name: '删除历史消息(按时间)',
    event: Service.clearHistoryMessages,
    eventName: 'clearRemoteHistoryMessages',
    desc: '按时间删除历史消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/delete/web3.html#deletebyid',
    params: [
      { name: '删除时间戳', type: 'number', value: Date.now()  },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var sendTextMessage = {
    name: '发送文字消息',
    event: Service.sendTextMessage,
    eventName: 'sendMessage',
    desc: '发送文字消息(TextMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/msgsend/web3.html#TxtMsg',
    params: [
      { name: '文字内容', type: 'string', value: '我是一条文字消息' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '状态消息', type: 'boolean', value: false },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendImageMessage = {
    name: '发送图片消息',
    event: Service.sendImageMessage,
    eventName: 'sendMessage',
    desc: '发送图片消息(ImageMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/msgsend/web3.html#ImgTextMsg',
    params: [
      { name: '缩略图', type: 'string', value: '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wAARCABkAPADASIAAhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAECAwQGBwX/xAA7EAABAwEHAQYDBQcFAQAAAAABAAIDEQQFEiExUZETFiJBVGHRI3GTBhSBobEVM1Ji4fDxJEJDU3LB/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAEDAv/EABwRAQEBAQACAwAAAAAAAAAAAAABEwIRMQNRYf/aAAwDAQACEQMRAD8ArBct7wBwbZWkOoc5G5EaHVSLnvoRCIQgNAoO+2ozrrVdY9tpNoqx7BDQZeNc/TTMceqwMivFrm4p43NqcVRmR4Uy11/Jb638ZZxzxu6/nPL3QtJJqQSyhOeo08StR/2dvV7sX3YVJqfiN912NLYZ8TSwREjuu1A/DxOfj4D1Wdgko3GW1/3UGvyU2s+jOVxTbivhgAbCQ2tadVtP1UTXBe81S6zguIp+8b7rsZ22rrNdA+PAKVa/x1r/APFEf3t9mlEmCObMRluY0yPj4qb9efRnHIw3HfEDsUdnaDUGpcw0/NQ+4b2eBis4y0+I33XUGG8uqCLVH0w5hphzIqMQ02r/AEWeZlqM7XQyNEWGjmkamvyXW3X4Zxhu2yPjueGy2hpa4No4A6Z7hbENlihdiZUHxO6iyNtLICLU8PlrkQcv0H6LXskF4iOMWq1MxtcC4xtBxCmmYyWNnm+Xb4l+XNb7Xess8EAdG4NocbRoBuVrfsi++/8ACpjbhdSRoqKU3XaItJ8tk8Ob8ct8uD7OXriB+7DT/sb7rajuu/Y8GGIdymGr2GlPmf7ouyRXbr6Mo4R32dvUkH7tXOp+I33WWO5b5iaAyGgDsQ+I3I8+i7ZE26Mo4WX7P3tIHE2epIP/ACN91qdl748qPqM916KibdGceddl748qPqM907L3x5UfUZ7r0VFNujOPOuy98eVH1Ge6dl748qPqM916KibdGceddl748qPqM907L3x5UfUZ7r0VE26M4867L3x5UfUZ7p2Xvjyo+oz3XoqJt0Zx512Xvjyo+oz3TsvfHlR9RnuvRUTbozjzrsvfHlR9RnunZe+PKj6jPdeiom3RnGV0UTRV2Q3Liqn7sK1ezLXv/P19DwrytbKzCXkA/wAJodKLAbFCS49SSrjUnH8+NSs2jJMLPBC+aU4Y4wXOcScgNVVr7I5xa2VhcDhID866U1V5YYp7NJZ5u/HI0tcCaVB10Wsy6bAy0/eBH8Tu5l5NS2tCc8zmcz7oMjJ7C9mNs8Zbv1P6qRLYnFwE0dWOLXfE0I1Gqwtue7mTGZkDWyurV7XkE1BGtdiomua7Z3h8sAe5shkDi91Q4nEaZ6Vzpog2OpZC9jBI0uecLQHE1NCf0B4UdSx4XO6rMLa4j1NKGh8d8lSz3XYbNKJIYg1weZK4ye8QRXX+Z3KC67CBJSL96AH/ABHZ0pTx9Px8UGQyWNpAMrAXEAfE1rSnj6hYHXhdjBMXWqL4BAk75OAkkUPrUFP2NdvUhk6Axw06Zxu7tKU8fQfnuU/Y120nHQAFofjlAe4YzUnPPcnJBW0Xnddm6vWtLWdJwa+pd3Sa0H5HhTJeF3RMe983djNHuAcQ3XWn/k8KZbnu+ZsrXxEiZ2N9JXCpz9ch3nZaZlXddtifHJGY+5IHB4xuzxYq+P8AO7n0CDHaLwu6yyOZPKWOa0OILX6EgA8kBS233a6EzC0MwBodUuIyJoMvmNFe13bY7aXG0Nc7FStJXN0II0O4Cwm4rrNKwVoMNeq7eu+Z9UFo7wuyQAstLHVoBRx8cgrMtl3vja8TDA4E4iSAKEg1rpmDqsYuK6w0tFnGEginUdTP8dchn4UCvFc9ggjayJj2taSRSd9RWtc6+p5QXbarC9jnslxsa0vLm4iKfMf3rskNpsU72sic9znad14/XRY3XNd7nRudG9zowQwumeSAdfFZIrssUNrbamNf1m1o4zPOuuRNP8DZBs9GPY8lOjHseSr4huExDcIKdGPY8lOjHseSr4huExDcIKdGPY8lOjHseSr4huExDcIKdGPY8lOjHseSr4huExDcIKdGPY8lOjHseSr4huExDcIKdGPY8lOjHseSr4huExDcIMi15rbZoOp1ZWt6YxOr4DdZzqFozXfd8tqklmaHTSt6bwZD3hTSlaaBQXlvOxQsc+S0Na1oBcTXKulVtNcHtDmmoIqCtEXZdtphdSJsrH4QTjLqhtKCtdMhkt5rQxoa3QCgQWREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQQdQtK0ywtklbJG5+VXVc0DT1K3TqFpTtvA2z4Do2WfDSrhU13UqVe7HQvsgfA1zWOOKjnYjnnrUrbWGzdbpf6jDjrXu6D0/DT8FmSeiehERVRERAREQEREBERAREQEREBERAREQEREBERAREQEREEEE6GiijtxwpPgtG02W2yzSGK2GONwoG0zbpmDz+SDdo7ccJR244URtc2Noe7E4DN1KVVkEUduOEo7ccKUQRR244SjtxwpRBFHbjhKO3HClEEUduOEo7ccKUQRR244SjtxwpRBFHbjhKO3HClEEUduOEo7ccKUQRR244SjtxwpRBFHbjhKO3HClEEUduOEo7ccKUQRR244SjtxwpRBFHbjhKO3HClEEUduOEo7ccKUQD4Ii07VLbmOlFngY8BowEnU8oNxF8ya0XuC8RWSI4Wijia4jlWgqNM9f87mKfrMBADKd70OWn5oM6LFG6Qvo4CnzWVAREQEREBERAREQEREBERAREQEREBERAREQEREBERAOoUoiAiIgIiIC+VaLymiksrWtjImjxuqDkaeGaIgXfeU1qbZS9sY6wcXYQcqGmWazR22R0sTS1lHuAOR/gr+qIg30REBERAREQEREBERAREQEREBERAREQEREH//Z' },
      { name: '原图 url', type: 'string', value: 'https://nfsprodrcx.cn.ronghub.com/v3/BGSPKH501EG0K6MI/base64.png?token=Um9uZ2Nsb3VkMTQyMDIwMDMxNzAzMzk1OTM2MDBtZXNzYWdlOzs7MjczMTk5NDg4OA==' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendFileMessage = {
    name: '发送文件消息',
    event: Service.sendFileMessage,
    eventName: 'sendMessage',
    desc: '发送文件消息(FileMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/msgsend/web3.html#FileMsg',
    params: [
      { name: '文件名', type: 'string', value: 'logo_wx' },
      { name: '文件大小', type: 'number', value: 20000 },
      { name: '文件类型', type: 'string', value: 'png' },
      { name: '文件 url', type: 'string', value: 'http://rongcloud.cn/images/newVersion/log_wx.png' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendVoiceMessage = {
    name: '发送语音消息',
    event: Service.sendVoiceMessage,
    eventName: 'sendMessage',
    desc: '发送语音消息(HQVoiceMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/msgsend/web3.html#HQVCMsg',
    params: [
      { name: '语音 url', type: 'string', value: 'https://rongcloud-audio.cn.ronghub.com/audio_amr__RC-2020-03-17_42_1584413950049.aac?e=1599965952&token=CddrKW5AbOMQaDRwc3ReDNvo3-sL_SO1fSUBKV3H:CDngyWj7ZApNmAfoecng7L_3SaU=' },
      { name: '语音类型', type: 'string', value: 'aac' },
      { name: '语音时长', type: 'number', value: 6 },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendRecallMessage = {
    name: '发送撤回消息',
    event: Service.sendRecallMessage,
    eventName: 'sendRecallMessage',
    desc: '发送撤回消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/private/msgmanage/msgrecall/web3.html',
    params: [
      { name: '消息 Uid', type: 'string', value: '', event: Service.getLastCacheMsgUId },
      { name: '发送时间', type: 'number', value: 0, event: Service.getLastCacheMsgSentTime },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendAtMessage = {
    name: '发送 @ 消息',
    event: Service.sendAtMessage,
    eventName: 'sendMessage',
    desc: '发送 @ 消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/msgmanage/msgsend/web3.html#at',
    params: [
      { name: '文字内容', type: 'string', value: '我是一条文本消息, 我 @ 了其他人' },
      { name: '@ 对象 id', type: 'string', value: config.targetId },
      { name: '会话类型', type: 'number', value: 3 },
      { name: '群组 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendAtMessageByErrorParamField = {
    name: '发送 @ 消息 ErrorParams',
    event: Service.sendAtMessageByErrorParamField,
    eventName: 'sendMessage',
    desc: '发送 @ 消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/msgmanage/msgsend/web3.html#at',
    params: [
      { name: '文字内容', type: 'string', value: '我是一条文本消息, 我 @ 了其他人' },
      { name: '@ 对象 id', type: 'string', value: config.targetId },
      { name: '会话类型', type: 'number', value: 3 },
      { name: '群组 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendRegisterMessage = {
    name: '发送自定义消息',
    event: Service.sendRegisterMessage,
    eventName: 'sendMessage',
    desc: '发送自定义消息(RegisterMessage)',
    doc: 'https://docs.rongcloud.cn/im/imlib/web/message-send/#custom-send',
    params: [
      { name: '消息类型', type: 'string', value: 'PersonMessage' },
      { name: '属性值', type: 'string', value: 'name,age' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendLocationMessage = {
    name: '发送位置消息',
    event: Service.sendLocationMessage,
    eventName: 'sendMessage',
    desc: '发送位置消息(sendLocationMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/msgmanage/msgsend/web3.html#LBSMsg',
    params: [
      { name: '位置缩略图', type: 'string', value: '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/2wBDARweHigjKE4rK06kbl1upKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKT/wAARCADwAZgDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAIDAQQF/8QAQRAAAgIBAwEFBQQIBAUFAQAAAQIAAxEEEiExEzJBUXEUImGBkQVSobEVIzNCU2LB0TRykuEkVXOi8ENjZJOkZf/EABgBAQEBAQEAAAAAAAAAAAAAAAABAgME/8QAHxEBAQEBAQACAwEBAAAAAAAAAAERAjEhQQMTcRIy/9oADAMBAAIRAxEAPwD3YQhKohCEAhCEAhCEAhCbtbyP0gZCNtb7phsbygLCaVI6iZAIQm9TiBkYIx8MesYKEG5jFZyenAgN2YHVofqx8ZOECm5B0X8IdqPBZOEYKdr/AC/jN9x/gZKEYGZCvxEWOLCOvIjYVxxwYCMLRUDTs3k/v5xj5TnX7RCUhr1O7cVIQeI9Z2rwoE8rU0sbLqzXdtNm9WRNw5HM3xJfii/6W0/3LPoP7zpWxb6FtUEA8jPWeR7J/Lqf/o/3nsVKE0iKAQAgHIwZe+eZ4EhCE5ghCEAl5CWHSSjG7p9I8WancHpIjB4j4xLn7Opn8QOPWMSAxyfjAtwdpBOOBmFjmyXoZAVKL7u9j1OOfzhTZvVHLuzYHCr/AF/3hWMUEMVJCn3scA+vnEV2XvBxXncCAeT5emZt0d0IiPlFLYDEcjym7l85hzavfPpNfoD8YoILjHlGfuH6wghCEKJJuplZJu8ZYzWQhCVGQhNAJ6CG2Qj9m3wikEdRAyEJoGTgdYGR1rJ68RjtrHTJiF2br0gPlE4HJi9o3wiQgP2jfCBsbziQgUVw3usIrLtOIucc+UpaMlQPGAnU4lABWMnkwwKxnqZMkk5MALFjkzIQgEIQgEIQgEIQgEIDkkAgkdQDyJu0+R+kBkswcN084g02dZ7SLD0xt8JuDnGJinoyMCPgeDHngbV0e0U7C5TnOZhPuqgJIUYyepjNsfOGG4DJGecRI34wEIEgYyQMnAycZMIBCEIBLDoJGWXuj0ko2CdPmYRGfs0dsZxziRFIYBGCBFY52kHAMMH7xlGlVOMgcdOJz6E4WxCclXIl8H7xnHV7v2jauTgjP5GWNT5ld0IuPifrDb8T9TMsmgRkYiEYBIJ4+MeUKvKibMXxHkZsiiSbvGVkm78sSjb8YRoRphAMkCJrdWNJUAmDYegP5mVq7/ynN9pLVX2eosrNhB27c4B6nmb5y9fKuX9Laj7lf0P953aLVDV1EOALB1A/MTy/1XZ9p7Hbszndv49M4nofZq1WdpqK6zWSdu3OQOh4nXvnnPCrkYJEk2rSm0p2V1jYz7i5wJ0ON1uPhzODUEj7QfbqVo9xe8Ac/WcEbXq7CpN2m1BYsT7tXQeAlqLlvDbVdSpwQ4wZDc//ADOr/Qn94aRTYupXttxZ8dooHl4QA6u3fcyUiylOh3hcY6nzMd9Um+gLbWm/O8Eg7fd8fnItStlwpGw1Vd6wcYH3T5xrKl1FnbVVIVTke6B2pzz8pBZdQi0dpdbXwdpKHcCflJJ9o0G20PcNmRs90+XPh5yo1GlpqDqyVox6KuOfiAJCrXaddTexuwHK4O084HPhKGT7Ro7ewPcOzG3Z7p8ufCX1erupXtKqA9e3dvLY/DrOenX6ZNVqHNvusE2kqecA58In2iy2U9pXdad4yFDYXA6nEg6TqLK69+pQZLBVWrk8zF1al0Vqb03ttBdMDP1kMYFQL3FxegZbWzjr0nVrOun/AOuv5GBJ77u1sCtpkRG2g2kgniZ7Rf8Ax9B/rM0VvY2oCV0uwt/9UZGMTm7O2u+7NGlOCoI2EgZHhA7NPbbZc1dvZHChg1WcHM6Cp8JCldmtZSFUilchRgA5PSdMCcJRuknLFEPA4xnwzGUeM1uhOMkeHnJo8+ntrNZdXZ2BBCiwAtyMeH1kex0q6O6w1hmR2Ue8eOePGX09IW657uHXbYWB6Hkn+0VHOipS8g4sHvrnBzyR+eIRfT21JpVNO+5a8KdiknPoZypqwmhRf1lbAjBIxuG7nHnO3TL2NQaxhljvds8ZM4ltrs0SIASyMOdvAy3nKKJqbG1lj6ekvlAPf93HXmWFtr6NLUVd+AxXHUeImWpqDqrDSFG5ANzg48emPGU0hzp1VR+zJTPnjxkErrFtTSuhyrXKR+MobWOpFVeMLzYT4eQ9Zz2INQ+3TYVKSW3Dozzp07V2Vl61CknLr4hvHMopCEIUSq90SUqndElDSdoYq4UZJWUmfvj0MiJ0lmoQnHBwPylYP3D8OYQCcbjb9p1n7y/3nZOXVLi6iz+cLLG+fXVCEJGWTU5UQgnQjyMIz98/WbMbvD0mwCTbvykm3flhWwhCQIDggjwktdRdq1VazWKxzznOeZSAJByDibly7Fc3smr9k9mzRs88nPXMroaLtIrLYazWeeM5zxLdo/w+kFBdveOcS3u2YHHClz1M8+5LDrGf2QXgoOWIAH1nc5LNgcgQFbHrxMI4dr/8rq/1p/aPpEZRfvoNYZs7B5Y8MTs2IveMO0Ud0QORUur0aYqGcgtWF/dJ6To2WC7Bx2RXg9NpjGxj8InXrzKJpbbXSc6ffdu2kqAA383pNp7YFnts3M37q91fSPCMVKw6ity9ZNqE5NZ6j0P9Jmqq36e51RjY6AEdT6S0deklRHWVWW11rUcMtitnj3fjzJPp9SbKS2o7VVsDEbAuPjOyEg862l3uuDaI3LvyCbNngPrF9kH/ACv/APRPTPSEo49HW6ah92nNKhAFG7cOp8Z2QhIAjMUqY0IAvSbMHQQgQfTCyx2LnbZt3KB1AzxmaNMpsNlp7RugBHCjyAloQOYaOtFZDl6ichG5CmPZUllRqYYQ+A4xLNyDJzUVD2TjHtOq/wDt/wBo1mjU6eutXdah3lB72fMysoTmmESRVRQqAKo6ASVmnD2dojtVZ4svj6jxloQrZkIQCVTuiSla+7FDTD3l9ZsxunzEyGYZUj4RQcgGNEXuj4cQhpza/wDYBvusDOmQ1ozpbB8P6yz1rn2LwiVndWjeagx5EExe8Zsz98fSED+B8jNg/dMyBsm/eEpJv3hEK2EIQJwHPTmV2IvX8YGwAe6JrVKKyevEf3a1k9zMQCesa09BIgNvkIuXbxMEHOY0BCuJkpFYY9IlUsIQlBCEIBKDgRB1EeSghCEiA+EIeMIBCEIBA9DCB6QCE0AmNt+MBITSCJkAiHgx4rdZYFlFwaj8JOUq7pEtVOEIQCEIQCUr7snKV9DFDxW7p9I0yZDRR4j4zU7g9Jn7zfWEbJ3jNFg/lP5SkwjIwfGFS0rbtNWf5cS05tAc6VR5Ej8Z0y31evRMPgfIzZjcqZENEXuiODkZijqR8YRsR+8I8R+CDEKITN3whKEhCEqnqGWz5THOWJjJ7qFvOTA6CBRRgQhCZQQhCArDHpFlIjDEsqshCaAScASgXvCPBa2BzxNII6yVGQhCQHiYQEIBCEIBNAycTJq96Bz/AGk5TTqA+xXbaxxngg5nn6RhVepquyWsCY29Vz1nf9p5NVQVQx7UYB6HrPOzZV+salAEvySOCCP3fSd+P+WL692IRg4nBd9pXCxqFoCWjBJZshR8pzLq9SbmUaoPYg95GrAH4c/jPP1ZLldueLZsevMfwkdJqRqaydux1OHU+Blm6SxkkpV1MnHq7/ymqFIwSJk1uHPrMgEIQgEpX4ycevxiikIQmQJ3fmZh7/qIJ+96wbvD6QjYQhCubR4AuT7thnTObTjbqtQvxBnTLfV69EIQkQJ3R8OJh75+Ignj6wbvD0MI2JZ4R4lnhEKSEZekJdTCQhNUZOOflK0569WzO6Gu5k34RlT3cDjr6xa9Wz7LA+mVCOUa7nP04kNO4S9wfbFrTopHCjH7wlFsNI09deouKHgnsfDHh7v95EdCarfp7rAFzXuHDbgcDPXictX2ja9la7tO25gCqhs8n48SjJWdPentDYLh7CyEEA446fCciXICgbWMQCNw7RyCPLG3+sDrbWaoMzey4ROHXtBnPhL2vY1VaBTVbacYByVHic+n5zxm7HeuPZ8c5x2mPn4/SdlyaZdFQGCBnyFYFsKM8nnmBbWazFdbUvtHaEbmzg49Ooi6bW2X6hay1LqQSdgYEcfGZcKzUG0916pjC4Yqg/DJPpJ0otrVg36o3YIb38bPPw/CB6XXiLZqk077GrsxkDft93n4x074/rF+0U36KweIGfpNTNyqo2opUkNdWCOoLCA1FDEKLqyT0AYTxdRWbbmsRq8Phv2ijkjnxj6HTt7XWWNeAc8OpP4GdP1zN0x7BGDiZGfqIp6TggHSEIQCEAwJIDAkdQD0grBlDKQwPQg5EAgenHWbiGD5QJajTpq1UOzrt5wp6yP6Jo+/Z9R/adW3I5EMHzM1OrEyPGetdLqtRWAxxh1zyWGP7gzlprvreu8ovvE7wM5w3n6cT1/tKkGg3A7bK+6fP4fOcD35pRq+9ZwvwPx9Jx6l3+vTxZef46/s3B1OoZemFUn4jP8AcTvPIM4NOyU1itOg6nxJ8zOiu0HksAPMnE3Jkcert1SNWffERXRyQjoxHUBgYy94es2jbO+Yse3vD0iQCEIQCPX1MSPX1MUUhCZMgXvH5Qf931gO/wDKa/T5iEEIQhXMox9oP/MgP9J0zms419R+8hH9Z0y1b9CEISIxe80G6r6wHfPpNfoPWEESzoI8SzpEKxYTF6wloWPV3/lElKuplVx2U3tqNQQ1a12DHPJPu4+Ua2uweyisAsmRnBwDt8fhLk5JMcdJEcqJqK1usZVstswNtbbQAOOpnI+n1jIV2ajkY51KkflPVhA8ldPrlCgLeFAwQNQB9PKdrLqbUrO2uphkHf77D0M6YQOG6vUJljl8DmxFy5+Cjwi00v2TNUhrcWbq1fr0AOfWehJxAdOR1lWPaVMFAJIIw3TPxkoDIOQcGVSaTTfqf+Joq358EHSC0PXrty1VLSB1CgHp9ZXtH+H0mglu8Zb1RucnMD0hA9DMIJK+/scfqrbM/wANc4lYlt1dK7rXCj4+MDn0T9pfqX2MmWXhxgjiS0Wpc6Wqqio2Mo94nhV585XRWC2/UuAwBZcBhg9IaWwU/ZaWEZCoTj5yjNVSl+srV03gVsQucZMh7J//AC//ANErqK69VqQHXIWndjPQk8Tm9m06abT3umQf2g3HJHn8oHVpdIq27m0PYlRkN2u7n0lPtFqhpttpXk+7v3Yz8uZHR6RDcNQtIrrAygLEk/HrLmqyioppiPeYlmsbO3MDxn7IsoHs4Gclh2mPQ5nLcRuevNbKp9wDdjnnjx4wevnPXewaenUVrcr2MNwsU+8eehlhut1Vl+mepXHu7DyXx4nyg1B9Kg+zTZntCQuMcDqI3YbAT+i1wPO4GW1NXbNSLWtQ2HBRLPdBAz5RbdMVvpq9q1JWzduzZ5CA2lZiVZdEtSOO+HXp9MzpnKNOKrq6lv1OMEj9ZwMY4xidR5zKqlvhJyl3UScQEIQgEevvRI9Xf+UBrLEprL2NhR4yH6R0n8X/ALT/AGkftOmy2ysGxUp8SxAwf6zz/ZW/i09cftB9Z1445s+aPdqdLlFlbZU9DGfuGcH2ZTZVZYBYr0+BUg5P9J3tyCPhOfUkuRBCYORmbMK5tSduo07fzEfWdM5tcdqVv92wGdMt8W+QQhCRGDvj0M1+6frM/eX1mtyp9IQRLOkYciY/diFIvWEwdYS1IyUr4UmTlF/Yn5y1pOUk5SSghCEiCEIQCIepjxG6mWKyEISgmg4MyECkIqnwjEgTKAdBFaqtnV2QFl6EjpGXkQgJXVsuts3Z7Qg4x0wMTn/R1WNvaXdnnPZ7/d+k64QJLQqtawY7rep8hjHEXT6OqgDguwGNzc8fDyl4QIV6YU2BqrHSvxr6j/aVsRLUKOoZT1EaGIHLboQ/upYK6jjci1jn5yl2lpvO50w33l4Mt6wgT1FC3hcu6FTkFDgyJ0Clgx1OpJXoe06fhOqB4EDlr0wruFnbWvgEYsO7rLryw9ZkavviaVtp94D4RIznLmLAIQhAIyHDiLGXvCByfbNidktWff3BsY8OZx/8J7B/8j5+f06T2wSOvIm7x/4Jvn8mTB5/2NYnZNVn39xbGPDiegOcxWYkccCPM9df6uoRe6PSNFXp8zGmFc+uGdK/wwfxl1O5Qw8RmT1K7tPYP5TDTNu09Z/lEv0v0rCEJEYfA/GNEbp8xHhCKw2jkdJjkbeojbl8j9IblHgfpAlkecJTen/ghNamJSg/Yycov7I/OK0nKScoOgkoIQhIghCEAiv4RpjdICQhCaUQhCAQhA8AnygMp5xGkkYOodc4PPMqORJQQkjqqFJBs5HHQzPbNP8AxPwMZTFoQhIghCEAik4PEaIeplgYMPHiYzZ4EWEuKJSrxMnKLxUT5xQh5OfOZCEAi2OK13MGPBPCk/kOI0jqveCJsVy5IANYY5x4ZIxA1dTWaRa25QVBwVP0BxzGovV3RSGSwjJRlPH4TnoU1g1Csq1YXJStA3wOSxEmtlqO9w7Ut2orOQmMZHHr6cSI7L/tDT1F0Ng7RfDaesj+lKPZt29e22Z27TjdjpOjV3CunG3L2e6qE9SZlpWqqqg15Wz9WQD0GICV/aGmtVV7Ub2HI2nrMs+1tKqgo+85HGCP6S9V9TOaaiTsHJHIHwzOW46i9rNnZGmrAPaZ7w5J4gM32ppVI2vuy3PBGB59J0UaqjUEil9xHJ4InH2up1TVhUpyqrb7+4YPPkZ16S2y1H7UIGRyp2Zxx6wLMNylT4jEhoTnSp8Mj8Z0Tm0Q2pYv3bCI+mp46YQhIhW6fOPEbpNssWpNzZx8BCMXp8zB+6YtNi2oSucAkciYXdndFQELjJLY/pAyEViyldyDDMF4b/aE0mNjK+MJjvk8+XEWI7FXTC554itHjr0iDpzNBxFDwmbhNyD4zKCEIQCB6QhAnCaepmTSiEIQCY3db0M2DA7W9DA56XtFKAU5GODvAzOip2K++mw56ZzE04/UJ6QvJWlyMggdZb8qSm7YHXs7G988quR1hqL91Dr2VoyOpXiDI1YRhbafeHBbiMENt1v62xQCMBWx4R8ejoXoIhci9UwMFSYmnG+llclhuK8nwkzpKu3UCs7NpzyesmRHXMmIi1qFQYAmzKA9JOVAyYwUDwlghCdBAPUSTpt5HSVSSjjFYEQDJAj2n3gIE4QhAJDVJvs064U5c99cjofCXmgkdCYHJpxWH1B31iv3PerOxfHyP9YaeiuwO2XK9sWU7zggY5+M68nzMM88wjn1lIF1VxYsxuQDP7o8hJayuwtS2rtXszZgqowBx5z0HrSzbvGdrBh6ia6K67XUMPIjImRyG+tbKKNK9eGY7gmDgYkGrS6xaNIzAAbbXB4I8j5meglNVZzXUiHzVQI9YABwAOT0Eo4LsV610F66f9Uu1jjHBPnH0DAPbWri1R7zWDxYzqtqrscdpWj4HG5QZqIlYwiKo8lGIDTn0nW//qtOic2k79//AFDH01PK6YQhIhW7seI3dM2xO0TbuZfipwYRHTdLcfxGk3U9s29EbIB3dkW/rKU6cVtuFlh5OQW4Ms2dpxjPxGYHLtQMvCKdwwewYc/WEcqWK7mGAc4C45+sJRsesAk5AOOREj1H3vWVSnqfWNtHlMfhjGXoJKM2iGwec2EiF2kdDN94fGbCBm7zE0EHxh1mFfKUY/WLNIImSxRCEIAyhlKsMg9ZL2Wj+H+JlYS6Jey0fw/xM0UVBWVV27hg4MpCNpqQ01IIIUgg5zma2nqdyzLkn4yuD5GZG00Uota7FyBnPMpJzQSJmwPCYG85oOZEDVpbUUcZVuonm2M+j9probaFZWHGeD6/Keoh8Jw6xV9tVRbsa1QpBrDA8+OZ1/HfpY4v0jq/4v8A2j+09PQWWX6Tfa24knBxjic92jNNTWPdXtXy06zq0rj2NGDbhg4O0L4+Qmu7zefiBq++IWHLmbV3vlMfvH1nILCEIBCEIBCEIFpswdBNmQQTofWExOresIG749DNmN3h85sAnNpP2moH/uGdM5tJ+11H+eWeNTyumEISIV+6fSPEbun0jwhV6H1P5wgvj6mbCowgesJazGTQcEHymQlaUtHQzE6TQN1WPKKvWRDTnv1qUuyGu1tgBYquQM/OdE8/U/tdSD3Cat58l5zIOhtYAcDTalh5ivI/OZXrVe5auwvVj95MYHn16RLm1DW6g13italBC7Ac8Z6zamZtYrcFjpgefPMotXqEc2Bv1bVn3gx6Dz9IrayhbUQWVkMDlt4wuJz22WPptWty1h0UDKA8gjPjJO9HtFJGhsAw2V7Ee908PGB6JtU1M9WLceCsDk+UKrEvrFicg/hOXSFzRcdOio3bHC2AjAwPAR6qzq6KrTZZSSORU20dYFK37Q2AKRscr1zmJqNVVptgsPeP0Hiek5tHQlpu26q8EWHhbMEjzMrrx2OmpHbMNto/WN7xHXn4wNTXaey4Vq+crndg9fLGJg1qPxTVbb8QMD6yent7XUWt7R2+KT72zbjnpCnU3pTQnspO5QFPagZ4/CUehtEA9KPtaxA/kSMzE7y5GPMZkftKpfZ3tVALFIO4DmJNuVXZMZQ3UTw9XqLl1L7brApOQAxHB5jaG6+3V1qbrCM5ILE8Tp+q5umPWKYMUjHWVfqIs5aicI+0E8cTjXWo4ylGpYea15H5y6rq3Ecxt6MwZ0G4dCR0kmtVXqVgwNvQY6cZ5jQKsysCCNwPhiTbwAAAA4A8JJtTXXelJLb36YHEa61aq2tfO1RzgcwiiHDibYMN6yVVi3VLZWcqenwjC5LrHRQQayAc/GFEJzLrkZdy06gr94V8fnLVW13JurYMPygPCEIBCEIFl7omzF7omzIJi9WmzF7x9BCBuq+s2Y/7vrNgE5tL+21H+edM5tL+31H+eWeNTyumEISIVu6fSb2i9p2fjjMxu6fST2L7X0/d3dfHMIqPH1mzB1PrNhUm7xhB+8YS1ksIQlaPUfeI85hG1vSYDtIMe0cgwM3CcNxta/VJVUH3oqklsbeDOuGBknAyepxyYwcz6W0do3tS1Vsqq2VBzgY8ek2hqzrcJYrqmnClgeOs6CAQQQCD1BGQZtSVoCERUz12qBmRHn2Xo66rqouA7MsMBsDHWabbmsrsOo0OUBAG8+M9EorLtZQV8iOIns2n/gVf6BA5tJetddzW2VljYWxWc5zjGJOm4pp00pdaXUYdnIGPTznelVdedlaLnyUCD1V2ftK0fH3lBgclo03Zp2GoqrsrHuMHH0MXUtZetHZ2jtMg7a1DDI6nPwzOr2XT/wACr/QJRFVF2ooVfIDAgebqK9WlljNa1hKbFIrGGB8PhyZ02J2dmkTwUkfRZ1wgTBwQfKPeFfTuCCVKnu9flFZfETFYr05HlKrm0dAvoDi7U1gHAHaflxNq/V/aAp36h8DOWfKnjynX2w+6Yby3HSavfo1jlvSZCE5o0dZ5mgt1C6ULXpe0XJ97tAM8+U9MdZ5+l9r09Iq9k3YJOe1USimqH/F6TjHvN+U6PXic+pS9n01qU7mTJZN4GMgeMy5tXbTYg0uxiuAe1U/+cQOYtVdRfcbUWxm3ICwBAXp/WX1dgt+zHsHRlB/ESy6ahFC9jWdoxkoOZznTWjR6ihVBBbNfvDkZBxKNUeyagDpRd/2t/vLaIZ1WrH86/lGtqW2o1P0Ix6RPsym6pru3xuYjByDnHjIE+zf8GnqfzgRs+0ht47Sslh8QesTTjV6ekVeygkE+8bQPwlqKXWxrrmDWsMe70UeQlFoQhCiEIQKp3RGip3RGmQTB3z6TZg749IRr9B6wg/dhAJzaX/Ean/MP6zpnNpv8Tqf8w/rLPGp5XTCEJEY3dPpNCjdvx72MZ+Exu6fSMOkIUdT6zZg6t6zYVN+9CFnWEqEhKnbYgdCDkZBHjJSqJTvVfEScpUeSPOKJwmsMMRMgEdRgQUeJmyVBCEJAQhCAQhCAQhCARWXxEaECc0HBzNYYOYs0qkJiHwmzKCEIQCEIQMYZ5ESUisMGWKWMhwwiwlD2DD+sSWZd4BziL2X834QJwlOy/m/CHZfzfhGicJTsv5vwh2X834QNr7saYqFfHPym4Oeox6TKCZ+8JpB8CPpDb056QB+4fSE08gxR0EDZzaf/ABOp9VnTOej/ABWo9V/KWNTyuiEISIxu6fSMOkVu6fSMOkIUdW9ZswdW9ZsKSzwhCzpCVH//2Q==' },
      { name: '维度', type: 'number', value: 40.03190424323978 },
      { name: '经度', type: 'number', value: 116.41731465378871 },
      { name: '位置信息', type: 'string', value: '奥运村街道麦当劳(上品奥运村店)上品+(奥运村店)' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var sendRichContentMessage = {
    name: '发送富文本消息',
    event: Service.sendRichContentMessage,
    eventName: 'sendMessage',
    desc: '发送富文本(图文)消息(sendRichContentMessage)',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/msgmanage/msgsend/web3.html#ImgTextMsg',
    params: [
      { name: '图文标题', type: 'string', value: '标题: 融云' },
      { name: '图文内容', type: 'string', value: '为用户提供 IM 即时通讯和音视频通讯云服务' },
      { name: '图片信息', type: 'string', value: 'https://www.rongcloud.cn/images/newVersion/log_wx.png' },
      { name: '图文链接', type: 'string', value: 'https://developer.rongcloud.cn' },
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId },
      { name: '静默消息', type: 'boolean', value: false },
    ]
  };

  var getUnreadCount = {
    name: '获取会话未读数',
    event: Service.getUnreadCount,
    eventName: 'getUnreadCount',
    desc: '获取指定会话未读数',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/conversation/unreadcount/web3.html#clear',
    params: [
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var getTotalUnreadCount = {
    name: '获取会话未读数总数',
    event: Service.getTotalUnreadCount,
    eventName: 'getTotalUnreadCount',
    desc: '获取会话未读总数',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/conversation/unreadcount/web3.html#total',
    params: [
    ]
  };

  var clearUnreadCount = {
    name: '清除会话未读数',
    event: Service.clearUnreadCount,
    eventName: 'clearUnreadCount',
    desc: '清除指定会话未读数',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/group/conversation/unreadcount/web3.html#clearcode',
    params: [
      { name: '会话类型', type: 'number', value: 1 },
      { name: '对方 id', type: 'string', value: config.targetId }
    ]
  };

  var joinChatRoom = {
    name: '加入聊天室',
    event: Service.joinChatRoom,
    eventName: 'joinChatRoom',
    desc: '加入指定聊天室, 并拉取消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/basic/join/web3.html',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId },
      { name: '拉取消息数', type: 'number', value: 2 }
    ]
  };

  var joinExistChatRoom = {
    name: '加入已存在的聊天室',
    event: Service.joinExistChatRoom,
    eventName: 'joinExistChatRoom',
    desc: '加入已存在的聊天室,若聊天室不存在,则加入失败',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/basic/join/web3.html#jion-exist',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId },
      { name: '拉取消息数', type: 'number', value: 2 }
    ]
  };

  var quitChatRoom = {
    name: '退出聊天室',
    event: Service.quitChatRoom,
    eventName: 'quitChatRoom',
    desc: '退出聊天室',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/basic/quit/web3.html',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var getChatRoomInfo = {
    name: '获取聊天室信息',
    event: Service.getChatRoomInfo,
    eventName: 'getChatRoomInfo',
    desc: '获取聊天室信息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/basic/info/web3.html',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId },
      { name: '获取人数', type: 'number', value: 20 },
      { name: '排序方式', type: 'number', value: 1 }
    ]
  };

  var getChatRoomHistoryMessages = {
    name: '获取聊天室历史消息',
    event: Service.getChatRoomHistoryMessages,
    eventName: 'getChatRoomHistoryMessages',
    desc: '获取聊天室历史消息',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/msgmanage/storage/web3.html',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId },
      { name: '获取时间', type: 'number', value: 0 },
      { name: '获取个数', type: 'number', value: 20 },
      { name: '排序方式', type: 'number', value: 0 }
    ]
  };

  var setChatRoomEntry = {
    name: '设置聊天室属性',
    event: Service.setChatRoomEntry,
    eventName: 'setChatRoomEntry',
    desc: '设置聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/set/web3.html',
    params: [
      { name: '属性 key', type: 'string', value: 'chrmKey1' },
      { name: '属性 value', type: 'string', value: '我是一个聊天室 value' },
      { name: '是否退出清除', type: 'boolean', value: true },
      { name: '是否发送消息', type: 'boolean', value: true },
      { name: '附加信息', type: 'string', value: '我是消息中的附加信息' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var forceSetChatRoomEntry = {
    name: '设置聊天室属性(强制)',
    event: Service.forceSetChatRoomEntry,
    eventName: 'forceSetChatRoomEntry',
    desc: '强制设置聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/set/web3.html#force',
    params: [
      { name: '属性 key', type: 'string', value: 'chrmKey2' },
      { name: '属性 value', type: 'string', value: '我是一个聊天室 value' },
      { name: '是否退出清除', type: 'boolean', value: true },
      { name: '是否发送消息', type: 'boolean', value: true },
      { name: '附加信息', type: 'string', value: '我是消息中的附加信息' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var removeChatRoomEntry = {
    name: '删除聊天室属性',
    event: Service.removeChatRoomEntry,
    eventName: 'removeChatRoomEntry',
    desc: '删除聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/remove/web3.html#del',
    params: [
      { name: '属性 key', type: 'string', value: 'chrmKey1' },
      { name: '是否发送消息', type: 'boolean', value: true },
      { name: '附加信息', type: 'string', value: '我是消息中的附加信息' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var forceRemoveChatRoomEntry = {
    name: '删除聊天室属性(强制)',
    event: Service.forceRemoveChatRoomEntry,
    eventName: 'forceRemoveChatRoomEntry',
    desc: '强制删除聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/remove/web3.html#forcedel',
    params: [
      { name: '属性 key', type: 'string', value: 'chrmKey2' },
      { name: '是否发送消息', type: 'boolean', value: true },
      { name: '附加信息', type: 'string', value: '我是消息中的附加信息' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var getChatRoomEntry = {
    name: '获取聊天室属性',
    event: Service.getChatRoomEntry,
    eventName: 'getChatRoomEntry',
    desc: '获取指定聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/query/web3.html',
    params: [
      { name: '属性 key', type: 'string', value: 'chrmKey1' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var getAllChatRoomEntries = {
    name: '获取聊天室属性(所有)',
    event: Service.getAllChatRoomEntries,
    eventName: 'getAllChatRoomEntries',
    desc: '获取所有聊天室自定义属性',
    doc: 'https://docs.rongcloud.cn/v3/views/im/noui/guide/chatroom/manage/key/query/web3.html#getall',
    params: [
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var sendChatRoomMessage = {
    name: '发送聊天室消息',
    event: Service.sendChatRoomMessage,
    eventName: 'sendMessage',
    desc: '发送聊天室消息, 以文本消息为例(TextMessage)',
    doc: 'https://docs.rongcloud.cn/im/imlib/web/message-send/#example',
    params: [
      { name: '文字内容', type: 'string', value: '我是一条聊天室的文字消息' },
      { name: '聊天室 id', type: 'string', value: config.targetId }
    ]
  };

  var joinRTCRoom = {
    name: '加入 RTC 房间',
    event: Service.joinRTCRoom,
    eventName: 'rtc.join',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId },
      { name: '模式', type: 'number', value: 0 }
    ]
  };

  var pingRTCRoom = {
    name: 'Ping RTC',
    event: Service.pingRTCRoom,
    eventName: 'rtc.ping',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var setRTCData = {
    name: '设置 RTC 数据',
    event: Service.setRTCData,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId },
      { name: 'key', type: 'string', value: 'key' },
      { name: 'value', type: 'string', value: 'value' },
      { name: 'isInner', type: 'boolean', value: false },
      { name: 'apiType', type: 'number', value: 1 }
    ]
  };

  var getRTCData = {
    name: '获取 RTC 数据',
    event: Service.getRTCData,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId },
      { name: 'key', type: 'string', value: 'key' },
      { name: 'isInner', type: 'boolean', value: false },
      { name: 'apiType', type: 'number', value: 1 }
    ]
  };

  var removeRTCData = {
    name: '删除 RTC 数据',
    event: Service.removeRTCData,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId },
      { name: 'key', type: 'string', value: 'key' },
      { name: 'isInner', type: 'boolean', value: false },
      { name: 'apiType', type: 'number', value: 1 }
    ]
  };

  var getRTCToken = {
    name: '获取 RTC Token',
    event: Service.getRTCToken,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var getRTCRoomInfo = {
    name: '获取 RTC 房间信息',
    event: Service.getRTCRoomInfo,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var setRTCUserInfo = {
    name: '设置 RTC 人员信息',
    event: Service.setRTCUserInfo,
    eventName: 'rtc.getRTCUserInfoList',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var getRTCUserInfoList = {
    name: '获取 RTC 人员列表',
    event: Service.getRTCUserInfoList,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var removeRTCUserInfo = {
    name: '删除 RTC 人员信息',
    event: Service.removeRTCUserInfo,
    eventName: '',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  var quitRTCRoom = {
    name: '退出 RTC 房间',
    event: Service.quitRTCRoom,
    eventName: 'rtc.quit',
    desc: '',
    params: [
      { name: '房间 id', type: 'string', value: config.targetId }
    ]
  };

  win.RongIM = win.RongIM || {};
  
  var DefailtReadyApiQueue = [
    [disconnect, reconnect],
    [getConversationList, removeConversation, setConversationStatus, getUnreadCount, getTotalUnreadCount, clearUnreadCount],
    [sendTextMessage, sendImageMessage, sendRecallMessage, sendFileMessage, sendVoiceMessage, sendRegisterMessage, sendAtMessage, /*sendAtMessageByErrorParamField,*/ sendLocationMessage, sendRichContentMessage],
    [getHistoryMessages, deleteRemoteMessages, clearHistoryMessages],
    [joinChatRoom, joinExistChatRoom, getChatRoomInfo, sendChatRoomMessage, getChatRoomHistoryMessages],
    [setChatRoomEntry, getChatRoomEntry, forceSetChatRoomEntry, getAllChatRoomEntries, removeChatRoomEntry, forceRemoveChatRoomEntry],
    [quitChatRoom],
    [joinRTCRoom, pingRTCRoom, setRTCData, getRTCData, removeRTCData, getRTCToken, getRTCRoomInfo, getRTCUserInfoList, setRTCUserInfo, removeRTCUserInfo],
    [quitRTCRoom],
  ];
  urlQueryConfig.isMini && utils.forEach(DefailtReadyApiQueue, function (list, i) {
    utils.forEach(list, function (item, j) {
      if (MiniUnSupportEventList.indexOf(item.eventName) !== -1) {
        list.splice(j, 1);
      }
    }, { isReverse: true })
  });
  win.RongIM.DefailtReadyApiQueue = DefailtReadyApiQueue;
  
  win.RongIM.ApiList = [
    getConversationList
  ];

  window.RongIM.Api = {
    changeUser: changeUser
  }

})(window, {
  RongIM: RongIM
});

================================================
FILE: api-test/js/common/service.js
================================================
(function(win) {
  var RongIMLib = win.RongIMLib,
    RongIM = win.RongIM,
    RongIMClient = RongIMLib.RongIMClient,
    utils = RongIM.Utils;

  var im;

  // var sendMsgTimeout = RongIM.config.isDebug ? 300 : 0;

  var selfUserId;

  // 缓存消息, 用作撤回、删除等操作的参数
  var CacheMsg = {
    eventEmitter: new utils.EventEmitter(),
    _list: [],
    set: function (msg) {
      this._list.push(msg);
      this.eventEmitter.emit('msgChanged');
    },
    remove: function (msg) {
      var list = this._list;
      utils.forEach(list, function(child, index) {
        if (child.messageUId === msg.messageUId) {
          list.splice(index, 1);
        }
      }, { isReverse: true });
      this.eventEmitter.emit('msgChanged');
    },
    getLast: function () {
      var list = this._list, length = list.length;
      var msg = {};
      if (length) {
        msg = list[length - 1];
      }
      return msg;
    }
  };

  /**
   * 初始化以及链接
   * @param {object} config 
   * @param {string} config.appkey 融云颁发的 appkey
   * @param {string} config.token 融云颁发的 token(代表某一个用户)
   * @param {Object} watcher 
   * @param {Object} watcher.status 监听链接状态的变化
   * @param {Object} watcher.message 监听消息的接收
   */
  function init(config, watcher) {
    watcher = watcher || {};
    config = utils.clearUndefKey(config);
    config = utils.copy(config);
    var navi = config.navi;
    if (config.isPolling) {
      config.connectType = 'comet';
    }
    if (navi) {
      var navigators;
      navi = navi.replace(/\s/g, '');
      if (navi.indexOf(',') !== -1) {
        navigators = navi.split(',');
      } else {
        navigators = [navi];
      }
      config.navigators = navigators;
    }
    // config.customCMP = ['120.92.13.84:80']
    // config.isDebug = true;
    im = RongIMLib.init(config);
    
    im.watch({
      conversation: function (event) {
        console.log('watch conversation', event);
      },
      message: function (event) {
        var message = event.message;
        var hasMore = event.hasMore;
        watcher.message(message);
        console.warn('received messages', event);
        // message.xxx.xxx;
      },
      status: function (event) {
        var status = event.status;
        console.log('status changed', event);
        // 不处理的状态码
        var unHandleStatus = [];
        if (unHandleStatus.indexOf(status) === -1) {
          watcher.status(status);
        }
      },
      chatroom: function (event) {
        console.warn('chatroom', event);
        var updatedEntries = event.updatedEntries;
        watcher.chatroom(updatedEntries);
      }
    });
    if(!config.customCMP){
      delete config.customCMP;
    }
    
    return im.connect(config);
  }

  /**
   * 断开链接
   * 文档: https://docs.rongcloud.cn/im/imlib/web/connect/#disconnect
   */
  function disconnect() {
    return im.disconnect();
  }

  function changeUser(config) {
    return im.changeUser(config);
  }

  /**
   * 重新链接
   * 文档: https://docs.rongcloud.cn/im/imlib/web/connect/#reconnect
   */
  function reconnect() {
    return im.reconnect();
  }

  /**
   * 获取会话列表
   * 文档: https://docs.rongcloud.cn/im/imlib/web/conversation/get-list/
   *
   * @param {number} count 获取会话的数量
   */
  function getConversationList(count) {
    return im.Conversation.getList({
      count: count
    });
  }

  /**
   * 删除会话列表
   * 文档: https://docs.rongcloud.cn/im/imlib/web/conversation/remove/
   */
  function removeConversation(conversationType, targetId) {
    conversationType = Number(conversationType);
    return im.Conversation.remove({
      type: conversationType,
      targetId: targetId
    });
  }

  /**
   * 获取历史消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-list/get-list/
   * 
   * @param {number} timestrap 时间戳
   * @param {number} count 数量
   */
  function getHistoryMessages(timestrap, count, conversationType, targetId) {
    conversationType = Number(conversationType);
    count = Number(count);
    timestrap = Number(timestrap);
    
    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.getMessages({
      timestrap: timestrap,
      count: count
    });
  }

  /**
   * 按时间删除历史消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-list/remove-list/#_1
   *
   * @param {number} timestrap 时间戳
   */
  function clearHistoryMessages(timestamp, conversationType, targetId) {
    conversationType = Number(conversationType);
    timestamp = Number(timestamp);
    
    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.clearMessages({
      timestrap: timestamp
    });
  }

  /**
   * 按消息删除历史消息
   * @param {string} messageUId 消息在 server 的唯一标识
   * @param {number} sentTime 消息发送时间
   * @param {number} messageDirection 消息方向
   */
  function deleteRemoteMessages(messageUId, sentTime, messageDirection, conversationType, targetId) {
    var lastMsg = CacheMsg.getLast() || {};
    conversationType = Number(conversationType) || lastMsg.type;
    sentTime = Number(sentTime) || lastMsg.sentTime;
    messageDirection = Number(messageDirection) || lastMsg.direction;
    
    var deleteMsg = { 
      messageUId: messageUId,
      sentTime: sentTime,
      messageDirection: messageDirection
    };
    var messages = [ deleteMsg ];

    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.deleteMessages(messages);
  }

  /**
   * 获取指定会话未读数
   * 文档: https://docs.rongcloud.cn/im/imlib/web/conversation/unreadcount/#get-one
   * 
   * @param {number} conversationType 会话类型
   * @param {string} targetId 目标 id (对方 id、群组 id、聊天室 id 等)
   */
  function getUnreadCount(conversationType, targetId) {
    conversationType = Number(conversationType);
    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.getUnreadCount()
    // console.log(conversationType, targetId);
    // return utils.Defer.resolve('TODO');
  }

  /**
   * 获取所有会话未读数
   * 文档: https://docs.rongcloud.cn/im/imlib/web/conversation/unreadcount/#get-all
   */
  function getTotalUnreadCount() {
    return im.Conversation.getTotalUnreadCount();
  }

  /**
   * 清除指定会话未读数
   * 文档: https://docs.rongcloud.cn/im/imlib/web/conversation/unreadcount/#clear
   */
  function clearUnreadCount(conversationType, targetId) {
    conversationType = Number(conversationType);
    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.read();
  }

  function sendMessage(conversationType, targetId, msg) {
    conversationType = Number(conversationType);
    var conversation = im.Conversation.get({
      type: conversationType,
      targetId: targetId
    });
    return conversation.send(msg).then(function (msg) {
      CacheMsg.set(msg);
      return msg;
    });
  }

  /**
   * 发送文本消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#text
   * 注意事项:
   *    1: 单条消息整体不得大于128K
   *    2: conversationType 类型是 number,targetId 类型是 string
   * 
   * @param {string} text 文字内容
   * @param {number} conversationType 会话类型
   * @param {string} targetId 目标 id (对方 id、群组 id、聊天室 id 等)
   * @param {booleam} disableNotification 是否推送消息
   */
  function sendTextMessage(text, conversationType, targetId, isStatusMessage, disableNotification) {
    var content = {
      content: text // 文本内容
    };
    return sendMessage(conversationType, targetId, {
      content: content,
      messageType: 'RC:TxtMsg',
      isStatusMessage: isStatusMessage,
      disableNotification: disableNotification
    });
  }

  /**
   * 发送图片消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#image
   * 注意事项:
   *    1. 略缩图(content 字段)必须是 base64 字符串, 类型必须为 jpg
   *    2. base64 略缩图必须不带前缀
   *    3. base64 字符串大小不可超过 100 k
   *    4. 可通过 FileReader 或者 canvas 对图片进行压缩, 生成压缩后的 base64 字符串
   * imageUri 为上传至服务器的原图 url, 用来展示高清图片
   * 上传图片需开发者实现. 可参考上传插件: https://docs.rongcloud.cn/im/imlib/web/plugin/upload
   * 
   * @param {string} base64 图片 base64 缩略图
   * @param {string} imageUri 图片上传后的 url
   */
  function sendImageMessage(base64, imageUri, conversationType, targetId, disableNotification) {
    var content = {
      content: base64, // 压缩后的 base64 略缩图, 用来快速展示图片
      imageUri: imageUri // 上传到服务器的 url. 用来展示高清图片
    };
    return sendMessage(conversationType, targetId, {
      content: content,
      messageType: 'RC:ImgMsg',
      disableNotification
    });
  }

  /**
   * 发送文件消息
   * 文档:https://docs.rongcloud.cn/im/imlib/web/message-send/#file
   * 
   * @param {string} fileName 文件名
   * @param {string} fileSize 文件大小
   * @param {string} fileType 文件类型
   * @param {string} fileUrl 文件上传后的 url
   */
  function sendFileMessage(fileName, fileSize, fileType, fileUrl, conversationType, targetId, disableNotification) {
    var content = {
      name: fileName, // 文件名
      size: fileSize, // 文件大小
      type: fileType, // 文件类型
      fileUrl: fileUrl // 文件地址
    };
    return sendMessage(conversationType, targetId, {
      content: content,
      messageType: 'RC:FileMsg',
      disableNotification
    });
  }

  /**
   * 高质量语音消息: https://docs.rongcloud.cn/im/introduction/message_structure/#hqvoice_message
   * 注意事项:
   *   融云不提供声音录制的方法. remoteUrl 的生成需开发者实现
   * 
   * @param {string} remoteUrl 语音上传后的 url
   * @param {number} duration 语音时长
   */
  function sendVoiceMessage(remoteUrl, type, duration, conversationType, targetId, disableNotification) {
    var content = {
      remoteUrl: remoteUrl, // 音频 url, 建议格式: aac
      duration: duration, // 音频时长
      type: type
    };
    return sendMessage(conversationType, targetId, {
      content: content,
      messageType: 'RC:HQVCMsg',
      disableNotification
    });
  }

  /**
   * 撤回消息: https://docs.rongcloud.cn/im/imlib/web/message-send/#recall
   * 注意事项:
   *   消息撤回操作服务器端没有撤回时间范围的限制,由客户端决定
   *
   * @param {string} messageUId 撤回的消息 Uid
   * @param {number} sentTime 撤回的消息 sentTime
   */
  function sendRecallMessage(messageUId, sentTime, conversationType, targetId, disableNotification) {
    var recallMsg;
    if (messageUId && sentTime && conversationType && targetId) {
      recallMsg = {
        messageUId: messageUId,
        sentTime: sentTime,
        disableNotification: disableNotification
      };
    } else {
      var lastMsg = CacheMsg.getLast() || {};
      recallMsg = lastMsg;
      recallMsg.disableNotification = disableNotification;
    }
    return im.Conversation.get({
      type: conversationType,
      targetId: targetId,
      
    }).recall(recallMsg);
  }

  /**
   * 发送 @ 消息(此处以文本消息举例)
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#example
   * 
   * @param {string} text 文字内容
   * @param {string} methiondId @ 对象的 id
   */
  function sendAtMessage(text, methiondId, conversationType, targetId, disableNotification) {
    conversationType = Number(conversationType);

    var isMentioned = true;

    var content = {
      content: text
    };

    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).send({
      content: content,
      messageType: 'RC:TxtMsg',
      isMentioned: isMentioned,
      mentionedUserIdList: [methiondId], // @ 人 id 列表
      mentionedType: 2,
      disableNotification
    });
  }

  //测试错误参数下发送 @  消息
  function sendAtMessageByErrorParamField(text, methiondId, conversationType, targetId, disableNotification) {
    conversationType = Number(conversationType);

    var isMentioned = true;

    var content = {
      content: text
    };

    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).send({
      content: content,
      messageType: 'RC:TxtMsg',
      isMentiond: isMentioned,
      mentiondUserIdList: [methiondId], // @ 人 id 列表
      mentiondType: 1,
      disableNotification
    });
  }

  /**
   * 注册自定义消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#custom
   *
   * @param {string} messageName 注册消息的 Web 端类型名
   * @param {string} messageType 注册消息的唯一名称. 注: 此名称需多端一致
   * @param {boolean} isCounted 是否计数
   * @param {boolean} isPersited 是否存储
   * @param {Array<string>} props 消息包含的字段集合
   */
  function registerMessage(/* messageName, messageType, isCounted, isPersited, props */) {
    // var mesasgeTag = new RongIMLib.MessageTag(isCounted, isPersited); //true true 保存且计数,false false 不保存不计数。
    // props = props.split(','); // 将字符串截取为数组. 此处为 Demo 逻辑, 与融云无关
    // RongIMClient.registerMessageType(messageName, messageType, mesasgeTag, props);
    // 废弃此概念
    return utils.Defer.resolve();
  }

  /**
   * 发送自定义消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#custom
   * 
   * @param {string} messageType 注册消息的 Web 端类型名
   * @param {*} props 消息包含的字段集合
   */
  function sendRegisterMessage(messageType, props, conversationType, targetId, disableNotification) {
    var content = props.split(',');
    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).send({
      messageType: messageType,
      content: {
        content: content
      },
      disableNotification
    });
  }

  /**
   * 发送位置消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#location
   * 注意事项:
   *   1. 缩略图必须是base64码的jpg图, 而且不带前缀"data:image/jpeg;base64,", 不得超过100K
   *   2. 需要开发者做显示效果, 一般显示逻辑: 图片加链接, 传入经纬度并跳转进入地图网站
   * 
   * @param {string} base64 位置缩略图
   * @param {number} latitude 维度
   * @param {number} longitude 经度
   * @param {string} poi 位置信息
   */
  function sendLocationMessage(base64, latitude, longitude, poi, conversationType, targetId, disableNotification) {
    var content = {
      latitude: latitude,
      longitude: longitude,
      poi: poi,
      content: base64
    };
    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).send({
      messageType: 'RC:LBSMsg',
      content: content,
      disableNotification
    });
  }

  /**
   * 发送富文本(图文)消息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#rich-content
   *
   * @param {string} title 图文标题
   * @param {number} content 图文内容
   * @param {number} imageUri 显示图片的 url(图片信息)
   * @param {string} url 点击图文后打开的 url
   */
  function sendRichContentMessage(title, content, imageUri, url, conversationType, targetId, disableNotification) {
    content = {
      title: title,
      content: content,
      imageUri: imageUri,
      url: url
    };

    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).send({
      messageType: 'RC:ImgTextMsg',
      content: content,
      disableNotification
    });
  }

  /**
   * 加入聊天室
   * 文档: https://docs.rongcloud.cn/im/imlib/web/chatroom/#join
   *
   * @param {string} chatRoomId 聊天室 id
   * @param {number} count 拉取消息数量
   */
  function joinChatRoom(chatRoomId, count) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).join({
      count: count
    });
  }

  /**
   * 加入已存在的聊天室
   * 文档: https://docs.rongcloud.cn/im/imlib/web/chatroom/#join
   *
   * @param {string} chatRoomId 聊天室 id
   * @param {number} count 拉取消息数量
   */
  function joinExistChatRoom(chatRoomId, count) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).joinExist({
      count: count
    });
  }

  /**
   * 退出聊天室
   * 文档: https://docs.rongcloud.cn/im/imlib/web/chatroom/#quit
   *
   * @param {string} chatRoomId 聊天室 id
   */
  function quitChatRoom(chatRoomId) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).quit();
  }

  /**
   * 获取聊天室信息
   * 文档: https://docs.rongcloud.cn/im/imlib/web/chatroom/#get
   *
   * @param {string} chatRoomId 聊天室 id
   * @param {string} count 获取人数
   * @param {string} order 排序方式
   */
  function getChatRoomInfo(chatRoomId, count, order) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).getInfo({
      count: count,
      order: order
    });
  }

  function getChatRoomHistoryMessages(chatRoomId, timestrap, count, order) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).getMessages({
      timestrap: timestrap,
      count: count,
      order: order
    });
  }

  /**
   * 发送聊天室消息(以文本消息为例)
   * 文档: https://docs.rongcloud.cn/im/imlib/web/message-send/#text
   *
   * @param {string} text 文字内容
   */
  function sendChatRoomMessage(text, targetId) {
    var content = {
      content: text // 文本内容
    };
    return im.ChatRoom.get({
      id: targetId
    }).send({
      messageType: 'RC:TxtMsg',
      content: content
    })
  }

  function setChatRoomEntry(key, value, isAutoDelete, isSendNotification, extra, chatRoomId) {
    var entry = {
      key: key,
      value: value,
      notificationExtra: extra,
      isAutoDelete: isAutoDelete,
      isSendNotification: isSendNotification
    };
    return im.ChatRoom.get({
      id: chatRoomId
    }).setEntry(entry);
  }

  function forceSetChatRoomEntry(key, value, isAutoDelete, isSendNotification, extra, chatRoomId) {
    var entry = {
      key: key,
      value: value,
      notificationExtra: extra,
      isAutoDelete: isAutoDelete,
      isSendNotification: isSendNotification
    };
    return im.ChatRoom.get({
      id: chatRoomId
    }).forceSetEntry(entry);
  }

  function removeChatRoomEntry(key, isSendNotification, extra, chatRoomId) {
    var entry = {
      key: key,
      notificationExtra: extra,
      isSendNotification: isSendNotification
    };
    return im.ChatRoom.get({
      id: chatRoomId
    }).removeEntry(entry);
  }

  function forceRemoveChatRoomEntry(key, isSendNotification, extra, chatRoomId) {
    var entry = {
      key: key,
      notificationExtra: extra,
      isSendNotification: isSendNotification
    };
    return im.ChatRoom.get({
      id: chatRoomId
    }).forceRemoveEntry(entry);
  }

  function getChatRoomEntry(key, chatRoomId) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).getEntry(key);
  }

  function getAllChatRoomEntries(chatRoomId) {
    return im.ChatRoom.get({
      id: chatRoomId
    }).getAllEntries();
  }

  function joinRTCRoom(roomId, mode) {
    return im.RTC.get({
      roomId: roomId,
      mode: mode
    }).join();
  }

  function pingRTCRoom(roomId, mode) {
    return im.RTC.get({
      roomId: roomId
    }).ping();
  }

  function setRTCData(roomId, key, value, isInner, apiType, message) {
    return im.RTC.get({
      roomId: roomId
    }).setData(key, value, isInner, apiType, message);
  }

  function getRTCData(roomId, key, isInner, apiType) {
    return im.RTC.get({
      roomId: roomId
    }).getData([key], isInner, apiType);
  }

  function removeRTCData(roomId, key, isInner, apiType) {
    return im.RTC.get({
      roomId: roomId
    }).removeData([key], isInner, apiType);
  }

  function getRTCToken(roomId) {
    return im.RTC.get({
      roomId: roomId
    }).getToken();
  }

  function getRTCRoomInfo(roomId) {
    return im.RTC.get({
      roomId: roomId
    }).getRoomInfo();
  }

  function getRTCUserInfoList(roomId) {
    return im.RTC.get({
      roomId: roomId
    }).getUserInfoList();
  }

  function setRTCUserInfo(roomId) {
    return im.RTC.get({
      roomId: roomId
    }).setUserInfo({
      key: 'test',
      value: 'test hahahah'
    });
  }

  function removeRTCUserInfo(roomId) {
    return im.RTC.get({
      roomId: roomId
    }).removeUserInfo({
      key: 'test'
    });
  }

  function quitRTCRoom(roomId, mode) {
    return im.RTC.get({
      roomId: roomId,
      mode: mode
    }).quit();
  }

  function setConversationStatus(isNotification, isTop, conversationType, targetId) {
    return im.Conversation.get({
      type: conversationType,
      targetId: targetId
    }).setStatus({
      notificationStatus: isNotification,
      isTop: isTop
    });
  }

  function getLastCacheMsgUId() {
    return CacheMsg.getLast().messageUId;
  }
  function getLastCacheMsgSentTime() {
    return CacheMsg.getLast().sentTime;
  }
  function getLastCacheMsgDirection() {
    return CacheMsg.getLast().direction;
  }

  win.RongIM = win.RongIM || {};
  win.RongIM.Service = {
    init: init,
    disconnect: disconnect,
    reconnect: reconnect,

    registerMessage: registerMessage,
    sendRegisterMessage: sendRegisterMessage,

    getConversationList: getConversationList,
    removeConversation: removeConversation,

    getHistoryMessages: getHistoryMessages,
    clearHistoryMessages: clearHistoryMessages,
    deleteRemoteMessages: deleteRemoteMessages,

    sendTextMessage: sendTextMessage,
    sendImageMessage: sendImageMessage,
    sendFileMessage: sendFileMessage,
    sendVoiceMessage: sendVoiceMessage,
    sendAtMessage: sendAtMessage,
    sendAtMessageByErrorParamField: sendAtMessageByErrorParamField,
    sendLocationMessage: sendLocationMessage,
    sendRichContentMessage: sendRichContentMessage,
    sendRecallMessage: sendRecallMessage,
    
    getUnreadCount: getUnreadCount,
    getTotalUnreadCount: getTotalUnreadCount,
    clearUnreadCount: clearUnreadCount,

    joinChatRoom: joinChatRoom,
    joinExistChatRoom: joinExistChatRoom,
    quitChatRoom: quitChatRoom,
    getChatRoomInfo: getChatRoomInfo,
    getChatRoomHistoryMessages: getChatRoomHistoryMessages,
    sendChatRoomMessage: sendChatRoomMessage,
    setChatRoomEntry: setChatRoomEntry,
    forceSetChatRoomEntry: forceSetChatRoomEntry,
    removeChatRoomEntry: removeChatRoomEntry,
    forceRemoveChatRoomEntry: forceRemoveChatRoomEntry,
    getChatRoomEntry: getChatRoomEntry,
    getAllChatRoomEntries: getAllChatRoomEntries,

    getLastCacheMsgSentTime: getLastCacheMsgSentTime,
    getLastCacheMsgUId: getLastCacheMsgUId,
    getLastCacheMsgDirection: getLastCacheMsgDirection,
    msgEmitter: CacheMsg.eventEmitter,

    changeUser: changeUser,

    joinRTCRoom: joinRTCRoom,
    quitRTCRoom: quitRTCRoom,
    pingRTCRoom: pingRTCRoom,
    setRTCData: setRTCData,
    getRTCData: getRTCData,
    removeRTCData: removeRTCData,
    getRTCToken: getRTCToken,
    getRTCRoomInfo: getRTCRoomInfo,
    getRTCUserInfoList: getRTCUserInfoList,
    setRTCUserInfo: setRTCUserInfo,
    removeRTCUserInfo: removeRTCUserInfo,
    setConversationStatus: setConversationStatus
  };
  
})(window);

================================================
FILE: api-test/js/common/utils.js
================================================
(function (win) {

  var Defer = win.Promise || ES6Promise;
  var Vue = win.Vue;

  var TypeColor = {
    FAILED: '#ed4014',
    MSG: '#2db7f5',
    STATUS: '#ff9900'
  };

  var ConversationName = {
    1: '单聊',
    3: '群聊',
    4: '聊天室',
    5: '客服',
    6: '系统',
    7: '公众号',
    8: '公众号'
  };

  var StatusName = {
    0: '已连接',
    1: '正在链接',
    2: '主动断开链接',
    3: '网络不可用',
    4: '链接关闭',
    5: 'Socket Error',
    6: '其他设备登录, 被踢',
    12: '被封禁',
    20: 'AppKey 错误',
    201: '正在请求 Navi',
    202: '请求 Navi 成功',
    203: '请求 Navi 错误',
    204: '请求 Navi 超时'
  };

  var SuccessStatus = [0, 1, 2, 4, 201, 202, 203, 204];

  var noop = function () {};

  function isObject(obj) {
    return Object.prototype.toString.call(obj) === '[object Object]';
  }
  function isArray(arr) {
    return Object.prototype.toString.call(arr) === '[object Array]';
  }
  function isNodeList(arr) {
    return Object.prototype.toString.call(arr) === '[object NodeList]' || 
      Object.prototype.toString.call(arr) === '[object HTMLCollection]';
  }
  function isFunction(arr) {
    return Object.prototype.toString.call(arr) === '[object Function]';
  }
  function isString(str) {
    return Object.prototype.toString.call(str) === '[object String]';
  }
  function isBoolean(str) {
    return Object.prototype.toString.call(str) === '[object Boolean]';
  }
  function isUndefined(str) {
    return Object.prototype.toString.call(str) === '[object Undefined]';
  }
  function isNull(str) {
    return Object.prototype.toString.call(str) === '[object Null]';
  }
  function isNumber(str) {
    return Object.prototype.toString.call(str) === '[object Number]';
  }

  function defered(callback) {
    return new Defer(callback);
  }

  function tplEngine(temp, data, regexp) {
    var replaceAction = function (object) {
      return temp.replace(regexp || (/{([^}]+)}/g), function (match, name) {
        if (match.charAt(0) === '\\') return match.slice(1);
        return (object[name] !== undefined) ? object[name] : '{' + name + '}';
      });
    };
    if (!(Object.prototype.toString.call(data) === '[object Array]')) data = [data];
    var ret = [];
    for (var i = 0, j = data.length; i < j; i++) {
      ret.push(replaceAction(data[i]));
    }
    return ret.join('');
  }

  function forEach(obj, callback, options) {
    options = options || {};
    callback = callback || noop;
    var isReverse = options.isReverse;
    var loopObj = function() {
      for (var key in obj) {
        callback(obj[key], key, obj);
      }
    };
    var loopArr = function() {
      if (isReverse) {
        for (var i = obj.length - 1; i >= 0; i--) {
          callback(obj[i], i);
        }
      } else {
        for (var j = 0, len = obj.length; j < len; j++) {
          callback(obj[j], j);
        }
      }
    };
    if (isObject(obj)) {
      loopObj();
    }
    if (isArray(obj) || isNodeList(obj)) {
      loopArr();
    }
  };

  function clearUndefKey(obj) {
    forEach(obj, function (key, val) {
      if (isUndefined(val)) {
        delete obj[key];
      }
    });
    return obj;
  }

  function map(arr, event) {
    forEach(arr, function(item, index) {
      arr[index] = event(item, index);
    });
    return arr;
  }

  function deepMap(arr, event) {
    forEach(arr, function (item, index) {
      if (isArray(item) || isObject(item)) {
        arr[index] = deepMap(item, event);
      } else {
        arr[index] = event(item, index);
      }
    });
    return arr;
  }

  function isEqual(obj1, obj2) {
    if (isObject(obj1) && isObject(obj2)) {
      var isEq = true;
      forEach(obj1, function (val, key) {
        if (obj2[key] !== val) {
          isEq = false;
        }
      });
      return isEq;
    } else {
      return obj1 == obj2;
    }
  }

  function getDom(id) {
    return document.getElementById(id);
  }

  function queryAllDom(sel) {
    return document.querySelectorAll(sel);
  }

  function queryDom(sel) {
    return document.querySelector(sel);
  }

  function removeDom(dom) {
    var parent = dom.parentNode || dom.parentElement;
    parent.removeChild(dom);
  }

  function getParent(dom) {
    return dom.parentNode || dom.parentElement;
  }

  function getChildren(dom) {
    return dom.children;
  }

  function getTemp(id) {
    var dom = getDom(id);
    return dom.innerHTML;
  }

  function getDomIndex(dom) {
    var parent = getParent(dom);
    var children = parent.children;
    for (var i = 0, max = children.length; i < max; i++) {
      var child = children[i];
      if (dom === child) {
        return i;
      }
    }
    return -1;
  }

  function toJSON(obj) {
    return JSON.stringify(obj);
  }

  function parseJSON(str) {
    var val;
    try {
      val = JSON.parse(str);
    } catch(e) {}
    return val;
  }

  function copy(obj) {
    var copyObj = parseJSON(toJSON(obj));
    return copyObj;
  }

  function hasClass(el, className) {
    if (!el) {
      return false;
    }
    var classList = el.classList;
    for (var i = 0, max = classList.length; i < max; i++) {
      if (classList[i] === className) {
        return true;
      }
    }
    return false;
  }

  function timestampToString(timestamp) {
    var date = timestamp ? new Date(timestamp) : new Date();
    Y = date.getFullYear() + '-';
    M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    D = date.getDate() + ' ';
    h = date.getHours() + ':';
    m = date.getMinutes() + ':';
    s = date.getSeconds();
    return Y + M + D + h + m + s;
  }

  function extend(destination, sources) {
    for (var key in sources) {
      var value = sources[key];
      if (!isUndefined(value)) {
        destination[key] = value;
      }
    }
    return destination;
  };

  /**
  * 封装弹框组件
  * @param {object} options
  */
  function mountDialog(options, instance) {
    options.parent = instance;
    var Dialog = Vue.extend(options);
    var instance = new Dialog({
      el: document.createElement('div')
    });
    var wrap = document.getElementsByTagName('body')[0];
    wrap.appendChild(instance.$el);
    return instance;
  }

  function reverse(obj) {
    var newObj = copy(obj);
    return newObj.reverse();
  }

  function openUrl(url) {
    window.open(url);
  }

  function getBase64Image() {
    var canvas = document.createElement('canvas');
    canvas.width = 100;
    canvas.height = 100;
    var context = canvas.getContext('2d');
    context.font = '20pt Arial';
    context.fillStyle = 'blue';
    context.fillText('RongCloud.cn', 10, 20);
    var content = canvas.toDataURL('image/jpeg');
    content = content.replace('data:image/jpeg;base64,', '');
    return content;
  }

  var increaseNumber = 0;
  function getIncreasNumber() {
    return ++increaseNumber;
  }

  var EventEmitter = function () {
    this._events = {};
    
    this.on = function (name, event) {
      var _events = this._events[name] || [];
      _events.push(event);
      this._events[name] = _events;
    };

    this.emit = function (name, data) {
      var _events = this._events[name];
      forEach(_events, function(event) {
        event(data);
      });
    };
  };

  var Storage = {
    ConfigKey: 'config',
    get: function (key) {
      var str = localStorage.getItem(key);
      return parseJSON(str);
    },
    set: function (key, val) {
      var str = toJSON(val);
      localStorage.setItem(key, str);
    }
  };

  function getUrlQuery() {
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if (url.indexOf('?') != -1) {
      var str = url.substr(1);
      strs = str.split('&');
      for (var i = 0; i < strs.length; i++) {
        theRequest[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1]);
      }
    }
    return theRequest;
  }

  function getRCUrlQuery() {
    var theRequest = getUrlQuery();
    var transMap = {
      'true': true, 'false': false
    };
    map(theRequest, function (val, key) {
      var transVal = transMap[val];
      if (!isUndefined(transVal)) {
        val = transVal;
      }
      return val;
    });
    forEach(theRequest, function (val, key) {
      if (key === 'encodeToken') {
        theRequest.token = decodeURIComponent(val);
        delete theRequest.encodeToken;
      }
      if (key === 'isMini') {
        delete theRequest.isMini;
      }
    });
    return theRequest;
  }

  function deferNoop() {
    return Defer.resolve();
  }

  win.RongIM = win.RongIM || {};
  win.RongIM.Utils = {
    Storage: Storage,

    TypeColor: TypeColor,
    ConversationName: ConversationName,
    StatusName: StatusName,
    SuccessStatus: SuccessStatus,

    EventEmitter: EventEmitter,

    noop: noop,
    isNumber: isNumber,
    isFunction: isFunction,
    map: map,
    deepMap: deepMap,
    isEqual: isEqual,
    clearUndefKey: clearUndefKey,
    Defer: Defer,
    defered: defered,
    tplEngine: tplEngine,
    forEach: forEach,
    toJSON: toJSON,
    parseJSON: parseJSON,
    copy: copy,
    removeDom: removeDom,
    getParent: getParent,
    getChildren: getChildren,
    hasClass: hasClass,
    getDomIndex: getDomIndex,
    timestampToString: timestampToString,
    extend: extend,
    reverse: reverse,
    openUrl: openUrl,
    getBase64Image: getBase64Image,
    getIncreasNumber: getIncreasNumber,

    getDom: getDom,
    queryDom: queryDom,
    queryAllDom: queryAllDom,
    getTemp: getTemp,
    mountDialog: mountDialog,
    getUrlQuery: getUrlQuery,
    getRCUrlQuery: getRCUrlQuery,
    deferNoop: deferNoop
  };

})(window);

================================================
FILE: api-test/js/components/button.js
================================================
(function (win, dependencies, components) {
  var Vue = dependencies.Vue,
    RongIM = dependencies.RongIM,
    utils = RongIM.Utils,
    Service = RongIM.Service;

  var OutputMark = {
    SUCCESS: '成功',
    FAILED: '失败'
  };

  var copyApi = function (api) {
    var params = api.params || [];
    var copyParams = utils.copy(params);
    utils.forEach(params, function (item, index) {
      utils.forEach(item, function (val, key) {
        if (utils.isFunction(val)) {
          copyParams[index][key] = val;
        }
      });
    });
    api.params = copyParams;
    return api;
  };

  components.apiBtn = Vue.component('api-btn', {
    template: utils.getTemp('rong-tpl-apibtn'),
    props: ['api', 'isdragging'],
    data: function() {
      return {
        isShowEditDialog: false,
        selfApi: copyApi(this.api)
      }
    },
    watch: {
      markMessage: function (newMsg) {
        console.log(newMsg);
      }
    },
    computed: {
      tip: function() {
        var api = this.selfApi;
        return utils.tplEngine(TipTpl, api);
      },
      apiValue: function() {
        var api = this.selfApi;
        return utils.toJSON(api);
      },
      paramList: function () {
        var paramList = this.selfApi.params;
        return paramList;
      },
      hasParams: function () {
        var params = this.selfApi.params;
        return params && params.length;
      }
    },
    methods: {
      openUrl: utils.openUrl,
      showEditDialog: function() {
        this.isShowEditDialog = true;
      },
      hideEditDialog: function() {
        this.isShowEditDialog = false;
      },
      change: function() {
      },
      run: function() {
        var self = this;
        var params = [];
        var startTime = +new Date();
        utils.forEach(self.selfApi.params, function(item) {
          if (item.type === 'number') {
            item.value = Number(item.value);
          }
          params.push(item.value);
        });
        var imInstance = RongIM.vueInstance;

        var addOutput = function(data, isSuccess) {
          var currentTime = +new Date();
          var consumedTime = currentTime - startTime;
          var title = self.api.name + (isSuccess ? OutputMark.SUCCESS : OutputMark.FAILED);
          var config = {};
          if (!isSuccess) {
            config.color = utils.TypeColor.FAILED;
          }
          self.hideEditDialog();
          return imInstance.addOutput(title, data, consumedTime, params, config);
        };
        return self.api.event.apply(void 0, params).then(function(data) {
          data = addOutput(data, true);
          return {
            isSuccess: true,
            data: data
          };
        }).catch(function(errorInfo) {
          // TODO 报警
          // error = utils.isNumber(error) ? error : error.toString();
          var data = addOutput(errorInfo, false);
          return {
            isSuccess: false,
            data: data
          };
        });
      }
    },
    mounted: function() {
      var self = this;

      var setParams = function () {
        var paramList = self.selfApi.params;
        utils.forEach(paramList, function (item) {
          if (item.event) {
            item.value = item.value || item.event();
          }
        });
      };

      setParams();
      Service.msgEmitter.on('msgChanged', setParams);
    }
  });

})(window, {
  Vue: Vue,
  iview: iview,
  RongIM: RongIM
}, window.RongIM.components);

================================================
FILE: api-test/js/components/json-alert.js
================================================
(function (win, dependencies) {
  var RongIM = dependencies.RongIM;
  var utils = RongIM.Utils;

  RongIM.dialog = RongIM.dialog || {};
  RongIM.dialog.jsonAlert = function(options) {
    var vueInstance = RongIM.vueInstance;

    options = options || {};

    utils.mountDialog({
      name: 'json-alert',
      template: '#rong-json-alert',
      data: function () {
        return {
          isShow: true,
          data: options.data
        };
      },
      watch: {
        isShow: function(isShow) {
          if (!isShow) {
            utils.removeDom(this.$el);
          }
        }
      },
      methods: {
        hide: function() {
          this.isShow = false;
        }
      }
    }, vueInstance);
  };

})(window, {
  RongIM: RongIM
});

================================================
FILE: api-test/js/components/msg-expansion.js
================================================
(function (win, dependencies, components) {
    var Vue = dependencies.Vue,
      RongIM = dependencies.RongIM,
      utils = RongIM.Utils,
      Service = RongIM.Service;
  
    components.apiExpansion = Vue.component('api-expansion', {
      template: utils.getTemp('rong-tpl-expansion'),
      props: ['isOpen'],
      data: function() {
        return {
            isOpen: true,
        }
      },
      watch: {
        isOpen: function (val, newval) {
          console.warn(val, newval);
        }
      },
      computed: {
        
      },
      methods: {
        
      },
      mounted: function() {
        console.warn('msg-expansion');
      }
    });
  
  })(window, {
    Vue: Vue,
    iview: iview,
    RongIM: RongIM
  }, window.RongIM.components);

================================================
FILE: api-test/js/login.js
================================================
(function (win, dependencies, components) {
  var Vue = dependencies.Vue,
    RongIM = dependencies.RongIM,
    utils = RongIM.Utils,
    isDebug = RongIM.config.isDebug,
    debugConf = RongIM.config.debugConf;

  var ConfigPlacehoder = {
    appkey: '开发者的融云 AppKey',
    token: '开发者的用户 Token',
    targetId: '对方 id. 发消息、获取历史消息等都默认对此用户操作. 默认聊天室、群组、个人 id 都为此 id',
    navi: '导航地址. 注: 国内数据中心可不填',
    customCMP: '链接地址(开发者忽略此项)',
    isPolling: '若使用长轮训链接方式, 可选择此项(开发者可忽略)'
  };

  components.login = Vue.component('login', {
    template: utils.getTemp('rong-global-config'),
    props: ['config', 'login'],
    computed: {
      configList: function() {
        var items = [];
        utils.forEach(this.config, function(val, key) {
          items.push({
            type: typeof val,
            name: key
          });
        });
        return items;
      },
      prompt: function() {
        return ConfigPlacehoder;
      }
    },
    methods: {
      clearStorage: function () {
        window.localStorage.clear();
        this.$Message.success({
          background: true,
          content: '清空本地缓存成功'
        });
      }
    },
    mounted: function () {
      if (isDebug && debugConf.autoRun) {
        var self = this;
        Vue.nextTick(function () {
          self.login(self.config);
        });
      }
    }
  });

})(window, {
  Vue: Vue,
  iview: iview,
  RongIM: RongIM
}, window.RongIM.components);

================================================
FILE: api-test/js/main.js
================================================
(function (win, dependencies, components) {
  var Vue = dependencies.Vue,
    iview = dependencies.iview,
    VueJsonPretty = dependencies.VueJsonPretty,
    RongIM = dependencies.RongIM,
    Service = RongIM.Service,
    utils = RongIM.Utils,
    ApiList = RongIM.ApiList,
    DefailtReadyApiQueue = RongIM.DefailtReadyApiQueue,
    DefaultConfig = RongIM.config.im,
    Config = utils.copy(DefaultConfig),
    Storage = utils.Storage,
    StorageConfig = Storage.get(Storage.ConfigKey),
    DefaultTargetId = Config.targetId,
    isDebug = RongIM.config.isDebug,
    debugConf = RongIM.config.debugConf;

  DefailtReadyApiQueue.push([]);

  var ValidStatus = [0, 1, 2, 6, 201, 202];
  var ValidErrorCode = [23424, 23427, 23426, 23423];
  var isStop = false;

  var isStorageConfig = false;
  if (StorageConfig && !isDebug) {
    isStorageConfig = true;
    Config = utils.copy(StorageConfig);
  }
  var urlQueryConfig = utils.getRCUrlQuery();
  Config = utils.extend(Config, urlQueryConfig);

  var ReceiveMsgTextTpl = '监听到{typeName} ({conversationType})消息. 发送者: {senderUserId}';
  var StatusTextTpl = '链接状态: {statusName} ({status})';

  var OptBoxClass = 'rong-ready-box';
  var ApiBoxClass = 'rong-api-list';
  var ApiSourceClass = 'rong-api-source';

  var RunType = {
    OneByOne: { name: '逐个运行', prompt: 'Api 逐个执行' },
    LineByLine: { name: '逐行运行', prompt: '每行 Api 并行. 执行完一行后执行下一行' }
  };
  
  var vueInstance;

  function runAllApi(allRefs, currentIndex, finishCallback) {
    var total = allRefs.length;
    var isFinished = total === currentIndex || isStop;
    if (isFinished) {
      return finishCallback && finishCallback();
    }
    var refList = allRefs[currentIndex];
    var deferArr = [];
    utils.forEach(refList, function (instance) {
      deferArr.push(instance.run());
    });
    return utils.Defer.all(deferArr).then(function (result) {
      result = result[0];
      var isSuccess = result.isSuccess || ValidErrorCode.indexOf(result.data.result) !== -1;
      if (isSuccess) {
        vueInstance.runInfo.successApiCount++;
      } else {
        vueInstance.runInfo.failApiList.push(result.data);
      }
      currentIndex++;
      runAllApi(allRefs, currentIndex, finishCallback);
    });
  }

  function runOneByOne(finishCallback) {
    var refs = vueInstance.$refs;
    var allRefs = [];
    utils.forEach(refs, function (subRefList) {
      utils.forEach(subRefList, function (ref) {
        allRefs.push([ ref ]);
      });
    });
    runAllApi(allRefs, 0, finishCallback);
  }

  function runLineByLine(finishCallback) {
    var refs = vueInstance.$refs;
    var allRefs = [];
    utils.forEach(refs, function (ins) {
      allRefs.push(ins);
    });
    runAllApi(allRefs, 0, finishCallback);
  }

  function setConfig(config) {
    var currentTargetId = config.targetId;
    vueInstance.globalConfig = config;
    vueInstance.readyApiQueue = utils.deepMap(vueInstance.readyApiQueue, function (item) {
      if (item === DefaultTargetId) {
        item = currentTargetId;
      }
      return item;
    });
  }

  function watchStatus(status) {
    var title = utils.tplEngine(StatusTextTpl, {
      status: status,
      statusName: utils.StatusName[status]
    });
    var output = vueInstance.addOutput(title, status, 0, [], {
      color: utils.TypeColor.STATUS
    });
    if (ValidStatus.indexOf(status) === -1) {
      vueInstance.runInfo.failApiList.push(output);
    }
    var isSuccess = utils.SuccessStatus.indexOf(status) !== -1;
    var event = isSuccess ? vueInstance.$Message.success : vueInstance.$Message.error;
    event.call(vueInstance.$Message, {
      background: true,
      content: title
    });
  }

  function watchMessage(message) {
    if (RongIM.config.isDebug && !RongIM.config.debugConf.isShowMsg) {
      return;
    }
    var title = utils.tplEngine(ReceiveMsgTextTpl, {
      typeName: utils.ConversationName[message.type],
      conversationType: message.type,
      senderUserId: message.senderUserId
    });
    vueInstance.addOutput(title, message, 0, [], {
      color: utils.TypeColor.MSG
    });
    console.log('Reveice Msg', utils.toJSON(message));
  }

  function watchChatroom(entries) {
    vueInstance.addOutput('监听到聊天室 KV 更新', entries, 0, [], {
      color: utils.TypeColor.MSG
    });
  }

  function autoRun() {
    Vue.nextTick(function () {
      runOneByOne(function () {
        vueInstance.runInfo.runCount++;
        localStorage.removeItem('rong_servers');
        localStorage.removeItem('rong_fullnavi');
        vueInstance.outputList = [];
        vueInstance.allOutputList = [];
        !isStop && autoRun();
      });
    });
  }

  function loginSuccessEvent(userId, config) {
    vueInstance.$Message.success({
      background: true,
      content: '链接成功 ' + userId
    });
    vueInstance.currentUserId = userId;
    vueInstance.isLogged = true;
    if (isDebug && debugConf.autoRun) {
      Vue.nextTick(autoRun);
    }
  }

  function login(config) {
    setConfig(config);
    return Service.init(config, {
      status: watchStatus,
      message: watchMessage,
      chatroom: watchChatroom
    }).then(function ({ id }) {
      Storage.set(Storage.ConfigKey, config);
      loginSuccessEvent(id, config);
    }).catch(function (error) {
      console.log(error);
      vueInstance.$Message.error({
        background: true,
        content: '链接失败 ' + JSON.stringify(error)
      });
      return utils.Defer.reject();
    });
  }

  function getApiListMethods() {
    return {
      addOutput: function (title, result, consumedTime, params, config) {
        config = config || {};
        var output = {
          id: utils.getIncreasNumber(),
          title: title,
          result: result,
          consumedTime: consumedTime,
          params: params,
          config: config
        };
        output.time = utils.timestampToString();
        vueInstance.allOutputList.push(output);
        vueInstance.outputList.push(output);
        return output;
      },
      clearOutput: function () {
        vueInstance.outputList = [];
      },
      showAllOutput: function () {
        vueInstance.outputList = vueInstance.allOutputList;
      },
      toJSON: function (data) {
        return utils.toJSON(data);
      },
      showJSONAlert: function(data) {
        RongIM.dialog.jsonAlert({
          data: data
        });
      },
      runAllApi: function() {
        if (vueInstance.runType === 'OneByOne') {
          runOneByOne();
        } else {
          runLineByLine();
        }
      },
      startDragging: function () {
        setTimeout(function() {
          vueInstance.isDragging = true;
        }, 100);
      }
    };
  }

  function getServiceMethods() {
    return {
      openUrl: utils.openUrl,
      reverse: utils.reverse,
      login: function(config) {
        var isEqualStorage = utils.isEqual(config, StorageConfig);
        var isEqualDefault = utils.isEqual(config, DefaultConfig);
        if (isStorageConfig && isEqualStorage && !isEqualDefault && !isDebug) {
          vueInstance.$Modal.confirm({
            title: '注意',
            content: '您目前使用的为上一次链接配置, 请确定配置是否可用 ?',
            onOk: function () {
              login(config);
            }
          });
        } else {
          return login(config);
        }
      },
      alarm: function () {
        if (!this.isAlarmMuted) {
          vueInstance.$refs.alarm.play();
        }
      },
      mute: function () {
        vueInstance.$refs.alarm.pause();
      }
    };
  }


  Vue.use(iview);

  vueInstance = new Vue({
    el: '#app',
    data: function() {
      return {
        currentUserId: '',
        isLogged: false,
        readyApiQueue: DefailtReadyApiQueue,
        allOutputList: [],
        outputList: [],
        globalConfig: Config,
        RunType: RunType,
        runType: 'OneByOne',

        alertJSON: null,
        isDragging: false,
        isShowRunType: false,
        isShowOutList: false,

        isDebug: RongIM.config.isDebug,
        runInfo: {
          runCount: 0,
          successApiCount: 0,
          failApiList: []
        },
        isAlarmMuted: false
      };
    },
    computed: {
      apiList: function() {
        return ApiList;
      },
      changeUserApi: function () {
        var self = this;
        var changeUserApi = RongIM.Api.changeUser;
        var changeUserEvent = changeUserApi.event;
        changeUserApi.event = function (token) {
          var globalConfig = self.globalConfig
          globalConfig.token = token;
          return Service.changeUser(globalConfig, {
            status: watchStatus,
            message: watchMessage
          }).then(function (userId) {
            loginSuccessEvent(userId, globalConfig);
          }).catch(function () {
            vueInstance.$Message.error({
              background: true,
              content: '切换用户失败 ' + error
            });
          });
        };
        return changeUserApi;
      },
      currentOutput: function() {
        var outputList = this.outputList;
        if (outputList.length) {
          return outputList[outputList.length - 1];
        }
      },
      displayedOutputList: function () {
        if (isDebug) {
          return this.runInfo.failApiList;
        } else {
          return this.outputList;
        }
      }
    },
    watch: {
      'runInfo.failApiList': function (newList) {
        if (newList.length > 20) {
          this.alarm();
        }
      },
      isAlarmMuted: function (isMuted) {
        if (isMuted) {
          this.mute();
        }
      }
    },
    components: {
      apiBtn: components.apiBtn,
      login: components.login,
      prettyjson: Vue.component('prettyjson', VueJsonPretty.default)
    },
    mounted: function() {
      this.isPageLoaded = true;
    },
    methods: utils.extend(getApiListMethods(), getServiceMethods())
  });

  RongIM.vueInstance = vueInstance;

  (function () {
    function start() {
      isStop = false;
      if (vueInstance.isLogged) {
        autoRun();
      } else {
        vueInstance.login(vueInstance.globalConfig).then(autoRun);
      }
    }
    window.addEventListener("message", function (event) {
      var type = event.data;
      if (type === 'start') {
        start();
      } else if (type === 'pause') {
        isStop = true;
      }
    }, false);
  })();

})(window, {
  Vue: Vue,
  iview: iview,
  VueJsonPretty: VueJsonPretty,
  RongIM: RongIM
}, window.RongIM.components);

================================================
FILE: api-test/lib/js/RongIMLib-3.0.0.js
================================================
/*
* RongIMLib.js v3.0.0
* Release Date: Fri Mar 27 2020 09:51:18 GMT+0800 (China Standard Time)
* Copyright 2020 RongCloud
* Released under the MIT License.
*/
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global.RongIMLib = factory());
}(this, (function () { 'use strict';
console.log('----------------------');
console.log(window);

  var version = "3.0.0";

  var SDK_VERSION = version;

  var ERROR_INFO = {
    TIMEOUT: {
      code: -1,
      msg: 'Network timeout'
    },
    SDK_INTERNAL_ERROR: {
      code: -2,
      msg: 'SDK internal error'
    },
    PARAMETER_ERROR: {
      code: -3,
      msg: 'Please check the parameters, the {param} expected a value of {expect} but received {current}'
    },
    REJECTED_BY_BLACKLIST: {
      code: 405,
      msg: 'Blacklisted by the other party'
    },
    SEND_TOO_FAST: {
      code: 20604,
      msg: 'Sending messages too quickly'
    },
    NOT_IN_GROUP: {
      code: 22406,
      msg: 'Not in group'
    },
    FORBIDDEN_IN_GROUP: {
      code: 22408,
      msg: 'Forbbiden from speaking in the group'
    },
    NOT_IN_CHATROOM: {
      code: 23406,
      msg: 'Not in chatroom'
    },
    FORBIDDEN_IN_CHATROOM: {
      code: 23408,
      msg: 'Forbbiden from speaking in the chatroom'
    },
    KICKED_FROM_CHATROOM: {
      code: 23409,
      msg: 'Kicked out and forbbiden from joining the chatroom'
    },
    CHATROOM_NOT_EXIST: {
      code: 23410,
      msg: 'ChatRoom does not exist'
    },
    CHATROOM_IS_FULL: {
      code: 23411,
      msg: 'ChatRoom members exceeded'
    },
    PARAMETER_INVALID_CHATROOM: {
      code: 23412,
      msg: 'Invalid chatroom parameters'
    },
    ROAMING_SERVICE_UNAVAILABLE_CHATROOM: {
      code: 23414,
      msg: 'ChatRoom message roaming service is not open'
    },
    RECALLMESSAGE_PARAMETER_INVALID: {
      code: 25101,
      msg: 'Invalid recall message parameter'
    },
    PUSHSETTING_PARAMETER_INVALID: {
      code: 26001,
      msg: 'Invalid push parameter'
    },
    OPERATION_BLOCKED: {
      code: 20605,
      msg: 'Operation is blocked'
    },
    OPERATION_NOT_SUPPORT: {
      code: 20606,
      msg: 'Operation is not supported'
    },
    MSG_BLOCKED_SENSITIVE_WORD: {
      code: 21501,
      msg: 'The sent message contains sensitive words'
    },
    REPLACED_SENSITIVE_WORD: {
      code: 21502,
      msg: 'Sensitive words in the message have been replaced'
    },
    NOT_CONNECTED: {
      code: 30001,
      msg: 'Please connect successfully first'
    },
    NAVI_REQUEST_ERROR: {
      code: 30007,
      msg: 'Navigation http request failed'
    },
    CMP_REQUEST_ERROR: {
      code: 30010,
      msg: 'CMP sniff http request failed'
    },
    CONN_APPKEY_FAKE: {
      code: 31002,
      msg: 'Your appkey is fake'
    },
    CONN_SERVER_UNAVAILABLE: {
      code: 31003,
      msg: 'The server is currently unavailable'
    },
    CONN_TOKEN_INCORRECT: {
      code: 31004,
      msg: 'Your token is not valid or expired'
    },
    CONN_NOT_AUTHRORIZED: {
      code: 31005,
      msg: 'AppKey and Token do not match'
    },
    CONN_REDIRECTED: {
      code: 31006,
      msg: 'Connection redirection'
    },
    CONN_APP_BLOCKED_OR_DELETED: {
      code: 31008,
      msg: 'AppKey is banned or deleted'
    },
    CONN_USER_BLOCKED: {
      code: 31009,
      msg: 'User blocked'
    },
    RC_CONNECTION_EXIST: {
      code: 34001,
      msg: 'Connection already exists'
    }
  };
  var ERROR_CODE = {};
  var ERROR_CODE_TO_INFO = {};

  for (var name$1 in ERROR_INFO) {
    var info = ERROR_INFO[name$1];
    var code = info.code;
    ERROR_CODE[name$1] = code;
    ERROR_CODE[code] = name$1;
    ERROR_CODE_TO_INFO[code] = info;
  }

  var _CONNECT_SERVER_STATU, _SERVER_DISCONNECT_ST, _TRANSPORTER_STATUS_T;
  var NAVI_ERROR_INFO = {
    '401': ERROR_INFO.CONN_TOKEN_INCORRECT,
    '403': ERROR_INFO.CONN_APPKEY_FAKE
  };
  var CONNECTION_STATUS = {
    CONNECTED: 0,
    CONNECTING: 1,
    DISCONNECTED: 2,
    NETWORK_UNAVAILABLE: 3,
    SOCKET_CLOSE: 4,
    SOCKET_ERROR: 5,
    KICKED_OFFLINE_BY_OTHER_CLIENT: 6
  };
  var SERVER_DISCONNECT_STATUS = {
    KICKED_OFFLINE_BY_OTHER_CLIENT: 1
  };
  var CONNECT_SERVER_STATUS = {
    IDENTIFIER_REJECTED: 2,
    SERVER_UNAVAILABLE: 3,
    TOKEN_INCORRECT: 4,
    NOT_AUTHORIZED: 5,
    REDIRECT: 6,
    PACKAGE_ERROR: 7,
    APP_BLOCK_OR_DELETE: 8,
    BLOCK: 9,
    TOKEN_EXPIRE: 10,
    DEVICE_ERROR: 11
  };
  var CONNECT_SERVER_STATUS_MAP_ERROR_INFO = (_CONNECT_SERVER_STATU = {}, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.IDENTIFIER_REJECTED] = ERROR_INFO.CONN_APPKEY_FAKE, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.SERVER_UNAVAILABLE] = ERROR_INFO.CONN_SERVER_UNAVAILABLE, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.TOKEN_INCORRECT] = ERROR_INFO.CONN_TOKEN_INCORRECT, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.NOT_AUTHORIZED] = ERROR_INFO.CONN_NOT_AUTHRORIZED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.REDIRECT] = ERROR_INFO.CONN_REDIRECTED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.APP_BLOCK_OR_DELETE] = ERROR_INFO.CONN_APP_BLOCKED_OR_DELETED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.BLOCK] = ERROR_INFO.CONN_USER_BLOCKED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.TOKEN_EXPIRE] = ERROR_INFO.CONN_TOKEN_INCORRECT, _CONNECT_SERVER_STATU);
  var TRANSPORTER_STATUS = {
    CONNECTED: CONNECTION_STATUS.CONNECTED,
    KICKED_OFFLINE_BY_OTHER_CLIENT: CONNECTION_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT,
    CLOSE_GOING_AWAY: 1001,
    CLOSE_PROTOCOL_ERROR: 1002,
    CLOSE_UNSUPPORTED: 1003,
    CLOSE_NO_STATUS: 1005,
    CLOSE_ABNORMAL: 1006,
    UNSUPPORTED_DATA: 1007,
    POLICY_VIOLATION: 1008,
    CLOSE_TOO_LARGE: 1009,
    MISSING_EXTENSION: 1010,
    INTERNAL_ERROR: 1011,
    SERVICE_RESTART: 1012,
    TRY_AGAIN_LATER: 1013,
    TSL_HANDSHAKE: 1015,
    PING_FIRST_TIMEOUT: 2001,
    PING_TIMEOUT: 2002,
    DISCONNECT_TOO_FAST: 2003,
    EXCEED_MESSAGE_ID_LIMIT: 2004
  };
  var SERVER_DISCONNECT_STATUS_TO_TRANSPORTER_STATUS = (_SERVER_DISCONNECT_ST = {}, _SERVER_DISCONNECT_ST[SERVER_DISCONNECT_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT] = TRANSPORTER_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT, _SERVER_DISCONNECT_ST);
  var TRANSPORTER_STATUS_NEED_UPDATE_CMP = [TRANSPORTER_STATUS.CLOSE_GOING_AWAY, TRANSPORTER_STATUS.CLOSE_PROTOCOL_ERROR, TRANSPORTER_STATUS.CLOSE_UNSUPPORTED, TRANSPORTER_STATUS.UNSUPPORTED_DATA, TRANSPORTER_STATUS.POLICY_VIOLATION, TRANSPORTER_STATUS.MISSING_EXTENSION, TRANSPORTER_STATUS.INTERNAL_ERROR, TRANSPORTER_STATUS.SERVICE_RESTART, TRANSPORTER_STATUS.TRY_AGAIN_LATER, TRANSPORTER_STATUS.TSL_HANDSHAKE, TRANSPORTER_STATUS.PING_FIRST_TIMEOUT, TRANSPORTER_STATUS.DISCONNECT_TOO_FAST];
  var TRANSPORTER_STATUS_NEED_RECONNECT = TRANSPORTER_STATUS_NEED_UPDATE_CMP.concat([TRANSPORTER_STATUS.PING_TIMEOUT, TRANSPORTER_STATUS.CLOSE_ABNORMAL, TRANSPORTER_STATUS.EXCEED_MESSAGE_ID_LIMIT]);
  var TRANSPORTER_STATUS_TO_CONNECTION_STATUS = (_TRANSPORTER_STATUS_T = {}, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_GOING_AWAY] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_PROTOCOL_ERROR] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_UNSUPPORTED] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_NO_STATUS] = CONNECTION_STATUS.DISCONNECTED, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_ABNORMAL] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.DISCONNECT_TOO_FAST] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.UNSUPPORTED_DATA] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.POLICY_VIOLATION] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_TOO_LARGE] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.MISSING_EXTENSION] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.INTERNAL_ERROR] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.SERVICE_RESTART] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.TRY_AGAIN_LATER] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.TSL_HANDSHAKE] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.PING_FIRST_TIMEOUT] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.PING_TIMEOUT] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T);

  var CONNECT_TYPE = {
    COMET: 'comet',
    WEBSOCKET: 'websocket'
  };
  var CONVERSATION_TYPE = {
    PRIVATE: 1,
    GROUP: 3,
    CHATROOM: 4,
    CUSTOMER_SERVICE: 5,
    SYSTEM: 6
  };
  var MESSAGE_DIRECTION = {
    SEND: 1,
    RECEIVE: 2
  };
  var MESSAGS_TIME_ORDER = {
    DESC: 0,
    ASC: 1
  };
  var CHATROOM_ORDER = {
    ASC: 1,
    DESC: 2
  };
  var RECALL_OBJECT_NAME = 'RC:RcCmd';
  var MENTIOND_TYPE = {
    ALL: 1,
    SINGAL: 2
  };
  var CONST = {
    CONNECT_TYPE: CONNECT_TYPE,
    CONNECTION_STATUS: CONNECTION_STATUS,
    CONVERSATION_TYPE: CONVERSATION_TYPE,
    MESSAGE_DIRECTION: MESSAGE_DIRECTION,
    MESSAGS_TIME_ORDER: MESSAGS_TIME_ORDER,
    CHATROOM_ORDER: CHATROOM_ORDER,
    RECALL_OBJECT_NAME: RECALL_OBJECT_NAME
  };

  var IM_TIMEOUT = 30000;
  var IM_PING_INTERVAL_TIME = 30000;
  var IM_PING_MAX_TIMEOUT = 6000;
  var IM_PING_MIN_TIMEOUT = 2000;
  var HTTP_TIMEOUT = 60000;
  var PULL_MSG_TIME = 180000;
  var NAVI_EXPIRED_TIME = 10800000;
  var CMP_SNIFF_INTERNAL_TIME = 1000;
  var FIRST_PING_TIMEOUT = 100;
  var NAVI_REQUEST_SUCCESS_CODE = 200;
  var NAVI_SEPARATOR_IN_TOKEN = '@';
  var DOMAIN_SEPARATOR_IN_NAVLIST = ';';
  var DOMAIN_SEPARATOR_IN_CMPLIST = ',';
  var MAX_SINGAL_ID = 65535;
  var MINIMUM_CONNECT_DURATION = 5000;
  var TYPE_HAS_CONVERSATION = [CONVERSATION_TYPE.PRIVATE, CONVERSATION_TYPE.GROUP, CONVERSATION_TYPE.SYSTEM];
  var PLATFORM = {
    WEB: 'web',
    WX: 'wx',
    ZFB: 'zfb',
    TT: 'tt',
    BAIDU: 'baidu',
    QUICK_APP: 'quick_app'
  };
  var REQUEST_METHOD = {
    POST: 'post',
    GET: 'get'
  };
  var STORAGE_ROOT_KEY = 'rc-';
  var STORAGE_NAVI = {
    ROOT_KEY_TPL: 'nav-{appkey}-{UID}',
    SUB_KEY: {
      CONNECT_TYPE: 'connettype',
      TIME_WHEN_SAVED: 'time',
      RESPONSE: 'resp'
    }
  };
  var STORAGE_SYNC_TIME = {
    ROOT_KEY_TPL: 'sync-{appkey}-{userId}',
    SUB_KEY: {
      SENDBOX: 'send',
      INBOX: 'in'
    }
  };
  var STORAGE_CONVERSATION = {
    ROOT_KEY_TPL: 'con-{appkey}-{userId}',
    SUB_KEY: {
      ROOT_TPL: '{type}-{id}',
      UNREAD_COUNT: 'c',
      UNREAD_LAST_TIME: 't',
      HAS_MENTIOND: 'hm',
      MENTIOND_INFO: 'm'
    }
  };
  var HTTP_PROTOCOL = {
    HTTP: 'http:',
    HTTPS: 'https:'
  };
  var WS_PROTOCOL = {
    WSS: 'wss:',
    WS: 'ws:'
  };
  var NAVI_CALLBACK_NAME = 'getServerEndpoint';
  var NAVI_TYPE = {
    COMET: 'cometnavi',
    WEBSOCKET: 'navi'
  };
  var NAVI_URL_TPL = '{url}/{type}.js?appId={appkey}&token={token}&callBack=' + NAVI_CALLBACK_NAME + '&r={random}&v=' + SDK_VERSION;
  var CMP_URL_TPL = '{protocol}//{domain}/websocket?appId={appkey}&token={token}&apiVer={apiVer}&sdkVer=' + SDK_VERSION;
  var COMET_REQ_HAS_TOPIC_URL_TPL = '{protocol}//{domain}/websocket?messageid={messageId}&header={headerCode}&sessionid={sessionId}&topic={topic}&targetid={targetId}&pid={pid}';
  var COMET_REQ_NO_TOPIC_URL_TPL = '{protocol}//{domain}/websocket?messageid={messageId}&header={headerCode}&sessionid={sessionId}&pid={pid}';
  var COMET_PULL_URL_TPL = '{protocol}//{domain}/pullmsg.js?sessionid={sessionId}&timestamp={timestamp}&pid={pid}';
  var TIMER_TYPE = {
    INTERVAL: 'interval',
    TIMEOUT: 'timeout'
  };
  var TIMER_STATUS = {
    PENNDING: 'pendding',
    BUSY: 'busy',
    ENDING: 'ending'
  };

  var UnKown = 'UnKown';

  var isMiniEnv = function isMiniEnv(global) {
    return global !== window;
  };

  var getEnvInfo = function getEnvInfo() {
    if (typeof wx !== 'undefined') {
      return {
        platform: PLATFORM.WX,
        global: wx
      };
    } else if (typeof swan !== 'undefined') {
      return {
        platform: PLATFORM.BAIDU,
        global: swan
      };
    } else if (typeof tt !== 'undefined') {
      return {
        platform: PLATFORM.TT,
        global: tt
      };
    } else if (typeof my !== 'undefined') {
      return {
        platform: PLATFORM.ZFB,
        global: my
      };
    } else {
      return {
        platform: PLATFORM.WEB,
        global: window
      };
    }
  };

  var getWebSystemInfo = function getWebSystemInfo() {
    var userAgent = navigator.userAgent;
    var version, type;
    var condition = {
      IE: /rv:([\d.]+)\) like Gecko|MSIE ([\d.]+)/,
      Edge: /Edge\/([\d.]+)/,
      Firefox: /Firefox\/([\d.]+)/,
      Opera: /(?:OPERA|OPR).([\d.]+)/,
      WeiXin: /MicroMessenger\/([\d.]+)/,
      QQBrowser: /QQBrowser\/([\d.]+)/,
      Chrome: /Chrome\/([\d.]+)/,
      Safari: /Version\/([\d.]+).*Safari/
    };

    for (var key in condition) {
      if (!condition.hasOwnProperty(key)) continue;
      var browserContent = userAgent.match(condition[key]);

      if (browserContent) {
        type = key;
        version = browserContent[1] || browserContent[2];
        break;
      }
    }

    return {
      model: type || UnKown,
      version: version || UnKown
    };
  };

  var getMiniSystemInfo = function getMiniSystemInfo(global) {
    var systemInfo = global.getSystemInfoSync() || {};
    var model = systemInfo.model,
        brand = systemInfo.brand;

    if (model && brand) {
      model = model + ' ' + brand;
    }

    systemInfo.model = model;
    return systemInfo;
  };

  var getProtocol = function getProtocol(global) {
    var protocol = {
      http: global.location.protocol || HTTP_PROTOCOL.HTTPS,
      ws: WS_PROTOCOL.WSS
    };
    var isHttp = protocol.http === HTTP_PROTOCOL.HTTP;

    if (isHttp) {
      protocol.ws = WS_PROTOCOL.WS;
    }

    return protocol;
  };

  var adaptGlobalObjectCreate = function adaptGlobalObjectCreate(global) {
    if (!global.Object.create) {
      global.Object.create = function (o, properties) {
        if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o);else if (o === null) throw new Error('This browser\'s implementation of Object.create is a shim and doesn\'t support \'null\' as the first argument.');
        if (typeof properties !== 'undefined') throw new Error('This browser\'s implementation of Object.create is a shim and doesn\'t support a second argument.');

        function F() {}

        F.prototype = o;
        return new F();
      };
    }
  };

  var envInfo = getEnvInfo();
  var platform = envInfo.platform,
      global$1 = envInfo.global;
  var isMini = isMiniEnv(global$1);
  var protocol = getProtocol(global$1);
  var system = isMini ? getMiniSystemInfo(global$1) : getWebSystemInfo();
  system.name = platform;
  adaptGlobalObjectCreate(global$1);
  var env = {
    global: global$1,
    system: system,
    isMini: isMini,
    protocol: protocol
  };

  var CacheStorage = function () {
    function CacheStorage(values) {
      this.caches = {};

      if (values) {
        this.caches = values;
      }
    }

    var _proto = CacheStorage.prototype;

    _proto.set = function set(key, value) {
      this.caches[key] = value;
    };

    _proto.remove = function remove(key) {
      var val = this.get(key);
      delete this.caches[key];
      return val;
    };

    _proto.get = function get(key) {
      return this.caches[key];
    };

    _proto.getKeys = function getKeys() {
      var keys = [];

      for (var key in this.caches) {
        keys.push(key);
      }

      return keys;
    };

    return CacheStorage;
  }();

  var global$2 = env.global,
      system$1 = env.system;
  var isZFB = system$1.name === PLATFORM.ZFB;

  var ZFBStorage = function () {
    function ZFBStorage() {
      this.cache = new CacheStorage();
    }

    var _proto = ZFBStorage.prototype;

    _proto.set = function set(key, value) {
      this.cache.set(key, value);
      global$2.setStorageSync({
        key: key,
        data: value
      });
    };

    _proto.get = function get(key) {
      return this.cache.get(key);
    };

    _proto.remove = function remove(key) {
      global$2.removeStorageSync({
        key: key
      });
      return this.cache.remove(key);
    };

    _proto.getKeys = function getKeys() {
      return this.cache.getKeys();
    };

    return ZFBStorage;
  }();

  var MiniStorage = function () {
    function MiniStorage() {
      this.cache = new CacheStorage();
    }

    var _proto2 = MiniStorage.prototype;

    _proto2.set = function set(key, value) {
      this.cache.set(key, value);
      global$2.setStorageSync(key, value);
    };

    _proto2.get = function get(key) {
      return this.cache.get(key);
    };

    _proto2.remove = function remove(key) {
      global$2.removeStorageSync(key);
      return this.cache.remove(key);
    };

    _proto2.getKeys = function getKeys() {
      return this.cache.getKeys();
    };

    return MiniStorage;
  }();

  var storage = isZFB ? ZFBStorage : MiniStorage;

  var JSON$1 = {
    parse: function parse(sJSON) {
      return new Function('', 'return (' + sJSON + ')')();
    },
    stringify: function stringify(value) {
      return JSON$1.str('', {
        '': value
      });
    },
    str: function str(key, holder) {
      var i,
          k,
          v,
          length,
          partial,
          value = holder[key],
          self = JSON$1;

      if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
        value = value.toJSON(key);
      }

      switch (typeof value) {
        case 'string':
          return self.quote(value);

        case 'number':
          return isFinite(value) ? String(value) : 'null';

        case 'boolean':
          return String(value);

        case 'object':
          if (!value) {
            return 'null';
          }

          partial = [];

          if (Object.prototype.toString.apply(value) === '[object Array]') {
            length = value.length;

            for (i = 0; i < length; i += 1) {
              partial[i] = self.str(i, value) || 'null';
            }

            v = partial.length === 0 ? '[]' : '[' + partial.join(',') + ']';
            return v;
          }

          for (k in value) {
            if (Object.prototype.hasOwnProperty.call(value, k)) {
              v = self.str(k, value);

              if (v) {
                partial.push(self.quote(k) + ':' + v);
              }
            }
          }

          v = partial.length === 0 ? '{}' : '{' + partial.join(',') + '}';
          return v;
      }
    },
    quote: function quote(string) {
      var self = JSON$1;
      self.rx_escapable.lastIndex = 0;
      return self.rx_escapable.test(string) ? '"' + string.replace(self.rx_escapable, function (a) {
        var c = self.meta[a];
        return typeof c === 'string' ? c : "\\u" + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
      }) + '"' : '"' + string + '"';
    },
    rx_escapable: new RegExp("[\\\"\\\\\"\0-\x1F\x7F-\x9F\xAD\u0600-\u0604\u070F\u17B4\u17B5\u200C-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF0-\uFFFF]", 'g'),
    meta: {
      '\b': '\\b',
      '	': '\\t',
      '\n': '\\n',
      '\f': '\\f',
      '\r': '\\r',
      '"': '\\"',
      '\'\'': '\\\'\'',
      '\\': '\\\\'
    }
  };

  var global$3 = env.global;
  var TEST_KEY = 'RC_TEST_KEY';
  var TEST_VALUE = 'RC_TEST_VALUE';

  var isSupportLocalStorage = function isSupportLocalStorage() {
    var isSupport = false;
    var localStorage = global$3.localStorage;

    if (localStorage) {
      try {
        localStorage.setItem(TEST_KEY, TEST_VALUE);
        var testVal = localStorage.getItem(TEST_KEY);

        if (testVal === TEST_VALUE) {
          isSupport = true;
        }

        localStorage.removeItem(TEST_KEY);
      } catch (e) {}
    }

    return isSupport;
  };

  var WebStorage = function () {
    function WebStorage() {}

    var _proto = WebStorage.prototype;

    _proto.set = function set(key, value) {
      global$3.localStorage.setItem(key, JSON$1.stringify({
        d: value
      }));
    };

    _proto.get = function get(key) {
      var value;
      var localValue = global$3.localStorage.getItem(key);

      try {
        localValue = JSON$1.parse(localValue);
      } catch (e) {
        localValue = {};
      }

      if (localValue && localValue.d) {
        value = localValue.d;
      }

      return value;
    };

    _proto.remove = function remove(key) {
      return global$3.localStorage.removeItem(key);
    };

    _proto.getKeys = function getKeys() {
      var keyList = [];

      for (var key in global$3.localStorage) {
        keyList.push(key);
      }

      return keyList;
    };

    return WebStorage;
  }();

  var WebStorage$1 = isSupportLocalStorage() ? WebStorage : CacheStorage;

  var isMini$1 = env.isMini;
  var Storage = isMini$1 ? storage : WebStorage$1,
      storage$1 = new Storage();

  var global$4 = env.global;

  var Socket = function () {
    function Socket(options) {
      this.socket = void 0;
      this.socket = global$4.connectSocket(options);
    }

    var _proto = Socket.prototype;

    _proto.send = function send(data) {
      this.socket.send(data);
    };

    _proto.close = function close() {
      this.socket.close();
    };

    _proto.onOpen = function onOpen(callback) {
      this.socket.onOpen(callback);
    };

    _proto.onMessage = function onMessage(callback) {
      this.socket.onMessage(callback);
    };

    _proto.onError = function onError(callback) {
      this.socket.onError(callback);
    };

    _proto.onClose = function onClose(callback) {
      this.socket.onClose(callback);
    };

    return Socket;
  }();

  var Socket$1 = function () {
    function Socket(options) {
      this.socket = void 0;
      var url = options.url;
      this.socket = new WebSocket(url);
      this.socket.binaryType = 'arraybuffer';
      return this;
    }

    var _proto = Socket.prototype;

    _proto.send = function send(data) {
      return this.socket.send(data);
    };

    _proto.close = function close() {
      this.socket.close();
    };

    _proto.onOpen = function onOpen(callback) {
      this.socket.addEventListener('open', callback);
    };

    _proto.onMessage = function onMessage(callback) {
      this.socket.addEventListener('message', callback);
    };

    _proto.onError = function onError(callback) {
      this.socket.addEventListener('error', callback);
    };

    _proto.onClose = function onClose(callback) {
      this.socket.addEventListener('close', callback);
    };

    return Socket;
  }();

  var isMini$2 = env.isMini;
  var Socket$2 = isMini$2 ? Socket : Socket$1;

  /*!
   基于 es6-promise
   * Github: https://github.com/stefanpenner/es6-promise
   * @overview es6-promise - a tiny implementation of Promises/A+.
   * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
   * @license   Licensed under MIT license
   *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
   * @version   v4.2.8+1e68dce6
   */
  var SparePromise = (function(){function a(a){var b=typeof a;return null!==a&&("object"===b||"function"===b)}function b(a){return "function"==typeof a}function c(a){P=a;}function d(a){Q=a;}function e(){return function(){return process.nextTick(j)}}function f(){return "undefined"!=typeof O?function(){O(j);}:i()}function g(){var a=0,b=new T(j),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2;}}function h(){var a=new MessageChannel;return a.port1.onmessage=j,function(){return a.port2.postMessage(0)}}function i(){var a=setTimeout;return function(){return a(j,1)}}function j(){var a,b,c;for(a=0;N>a;a+=2)b=W[a],c=W[a+1],b(c),W[a]=void 0,W[a+1]=void 0;N=0;}function k(){try{var a=Function("return this")().require("vertx");return O=a.runOnLoop||a.runOnContext,f()}catch(b){return i()}}function l(a,b){var e,f,c=this,d=new this.constructor(n);return void 0===d[Y]&&D(d),e=c._state,e?(f=arguments[e-1],Q(function(){return A(e,d,f,c._result)})):y(c,d,a,b),d}function m(a){var c,b=this;return a&&"object"==typeof a&&a.constructor===b?a:(c=new b(n),u(c,a),c)}function n(){}function o(){return new TypeError("You cannot resolve a promise with itself")}function p(){return new TypeError("A promises callback cannot return that same promise.")}function q(a,b,c,d){try{a.call(b,c,d);}catch(e){return e}}function r(a,b,c){Q(function(a){var d=!1,e=q(c,b,function(c){d||(d=!0,b!==c?u(a,c):w(a,c));},function(b){d||(d=!0,x(a,b));},"Settle: "+(a._label||" unknown promise"));!d&&e&&(d=!0,x(a,e));},a);}function s(a,b){b._state===$?w(a,b._result):b._state===_?x(a,b._result):y(b,void 0,function(b){return u(a,b)},function(b){return x(a,b)});}function t(a,c,d){c.constructor===a.constructor&&d===l&&c.constructor.resolve===m?s(a,c):void 0===d?w(a,c):b(d)?r(a,c,d):w(a,c);}function u(b,c){if(b===c)x(b,o());else if(a(c)){var d=void 0;try{d=c.then;}catch(e){return void x(b,e)}t(b,c,d);}else w(b,c);}function v(a){a._onerror&&a._onerror(a._result),z(a);}function w(a,b){a._state===Z&&(a._result=b,a._state=$,0!==a._subscribers.length&&Q(z,a));}function x(a,b){a._state===Z&&(a._state=_,a._result=b,Q(v,a));}function y(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null,e[f]=b,e[f+$]=c,e[f+_]=d,0===f&&a._state&&Q(z,a);}function z(a){var d,e,f,g,b=a._subscribers,c=a._state;if(0!==b.length){for(d=void 0,e=void 0,f=a._result,g=0;g<b.length;g+=3)d=b[g],e=b[g+c],d?A(c,d,e,f):e(f);a._subscribers.length=0;}}function A(a,c,d,e){var f=b(d),g=void 0,h=void 0,i=!0;if(f){try{g=d(e);}catch(j){i=!1,h=j;}if(c===g)return void x(c,p())}else g=e;c._state!==Z||(f&&i?u(c,g):i===!1?x(c,h):a===$?w(c,g):a===_&&x(c,g));}function B(a,b){try{b(function(b){u(a,b);},function(b){x(a,b);});}catch(c){x(a,c);}}function C(){return ab++}function D(a){a[Y]=ab++,a._state=void 0,a._result=void 0,a._subscribers=[];}function E(){return new Error("Array Methods must be provided an Array")}function F(a){return new bb(this,a).promise}function G(a){var b=this;return new b(M(a)?function(c,d){for(var e=a.length,f=0;e>f;f++)b.resolve(a[f]).then(c,d);}:function(a,b){return b(new TypeError("You must pass an array to race."))})}function H(a){var b=this,c=new b(n);return x(c,a),c}function I(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function J(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function K(){var c,d,a=void 0;if("undefined"!=typeof global)a=global;else if("undefined"!=typeof self)a=self;else try{a=Function("return this")();}catch(b){throw new Error("polyfill failed because global object is unavailable in this environment")}if(c=a.Promise){d=null;try{d=Object.prototype.toString.call(c.resolve());}catch(b){}if("[object Promise]"===d&&!c.cast)return}a.Promise=cb;}var M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb,L=void 0;return L=Array.isArray?Array.isArray:function(a){return "[object Array]"===Object.prototype.toString.call(a)},M=L,N=0,O=void 0,P=void 0,Q=function(a,b){W[N]=a,W[N+1]=b,N+=2,2===N&&(P?P(j):X());},R="undefined"!=typeof window?window:void 0,S=R||{},T=S.MutationObserver||S.WebKitMutationObserver,U="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,W=new Array(1e3),X=void 0,X=U?e():T?g():V?h():void 0===R&&"function"==typeof require?k():i(),Y=Math.random().toString(36).substring(2),Z=void 0,$=1,_=2,ab=0,bb=function(){function a(a,b){this._instanceConstructor=a,this.promise=new a(n),this.promise[Y]||D(this.promise),M(b)?(this.length=b.length,this._remaining=b.length,this._result=new Array(this.length),0===this.length?w(this.promise,this._result):(this.length=this.length||0,this._enumerate(b),0===this._remaining&&w(this.promise,this._result))):x(this.promise,E());}return a.prototype._enumerate=function(a){for(var b=0;this._state===Z&&b<a.length;b++)this._eachEntry(a[b],b);},a.prototype._eachEntry=function(a,b){var e,f,g,i,c=this._instanceConstructor,d=c.resolve;if(d===m){e=void 0,f=void 0,g=!1;try{e=a.then;}catch(h){g=!0,f=h;}e===l&&a._state!==Z?this._settledAt(a._state,b,a._result):"function"!=typeof e?(this._remaining--,this._result[b]=a):c===cb?(i=new c(n),g?x(i,f):t(i,a,e),this._willSettleAt(i,b)):this._willSettleAt(new c(function(b){return b(a)}),b);}else this._willSettleAt(d(a),b);},a.prototype._settledAt=function(a,b,c){var d=this.promise;d._state===Z&&(this._remaining--,a===_?x(d,c):this._result[b]=c),0===this._remaining&&w(d,this._result);},a.prototype._willSettleAt=function(a,b){var c=this;y(a,void 0,function(a){return c._settledAt($,b,a)},function(a){return c._settledAt(_,b,a)});},a}(),cb=function(){function a(b){this[Y]=C(),this._result=this._state=void 0,this._subscribers=[],n!==b&&("function"!=typeof b&&I(),this instanceof a?B(this,b):J());}return a.prototype["catch"]=function(a){return this.then(null,a)},a.prototype["finally"]=function(a){var c=this,d=c.constructor;return b(a)?c.then(function(b){return d.resolve(a()).then(function(){return b})},function(b){return d.resolve(a()).then(function(){throw b})}):c.then(a,a)},a}(),cb.prototype.then=l,cb.all=F,cb.race=G,cb.resolve=m,cb.reject=H,cb._setScheduler=c,cb._setAsap=d,cb._asap=Q,cb.polyfill=K,cb.Promise=cb,cb})();

  var global$5 = env.global,
      system$2 = env.system;
  var isZFB$1 = system$2.name === PLATFORM.ZFB;

  var zfbRequest = function zfbRequest(option) {
    var url = option.url,
        method = option.method,
        body = option.body,
        headers = option.headers,
        timeout = option.timeout;
    method = method || REQUEST_METHOD.GET;
    headers = headers || {};
    timeout = timeout || HTTP_TIMEOUT;
    return global$5.httpRequest({
      url: url,
      method: method,
      data: body,
      headers: headers,
      timeout: timeout,
      success: option.success,
      fail: function fail(result) {
        if (result.status === 202) {
          option.success(result);
        } else {
          option.fail(result);
        }
      }
    });
  };

  var request = isZFB$1 ? zfbRequest : global$5.request;

  var global$6 = env.global;

  var isValidRequest = function isValidRequest(obj) {
    return typeof obj === 'function' || typeof obj === 'object';
  };

  var createXHR = function createXHR() {
    var item = {
      XMLHttpRequest: function (_XMLHttpRequest) {
        function XMLHttpRequest() {
          return _XMLHttpRequest.apply(this, arguments);
        }

        XMLHttpRequest.toString = function () {
          return _XMLHttpRequest.toString();
        };

        return XMLHttpRequest;
      }(function () {
        return new XMLHttpRequest();
      }),
      XDomainRequest: function (_XDomainRequest) {
        function XDomainRequest() {
          return _XDomainRequest.apply(this, arguments);
        }

        XDomainRequest.toString = function () {
          return _XDomainRequest.toString();
        };

        return XDomainRequest;
      }(function () {
        return new XDomainRequest();
      }),
      ActiveXObject: function (_ActiveXObject) {
        function ActiveXObject() {
          return _ActiveXObject.apply(this, arguments);
        }

        ActiveXObject.toString = function () {
          return _ActiveXObject.toString();
        };

        return ActiveXObject;
      }(function () {
        return new ActiveXObject('Microsoft.XMLHTTP');
      })
    };
    var isXHR = isValidRequest(global$6.XMLHttpRequest) && 'withCredentials' in new XMLHttpRequest();
    var isXDR = isValidRequest(global$6.XDomainRequest);
    var key = isXHR ? 'XMLHttpRequest' : isXDR ? 'XDomainRequest' : 'ActiveXObject';
    return item[key]();
  };

  var request$1 = function request(option) {
    var url = option.url,
        method = option.method,
        body = option.body,
        headers = option.headers,
        success = option.success,
        fail = option.fail;
    method = method || REQUEST_METHOD.GET;
    var xhr = createXHR();
    xhr.open(method, url);

    if (headers && xhr.setRequestHeader) {
      for (var key in headers) {
        xhr.setRequestHeader(key, headers[key]);
      }
    }

    if ('onload' in xhr) {
      xhr.onload = function () {
        success(xhr.responseText, xhr);
      };

      xhr.onerror = function () {
        fail(xhr.responseText, xhr);
      };
    } else {
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          var result = xhr.responseText,
              status = xhr.status;

          if (status === 0) {
            fail(result, xhr, status);
          } else {
            success(result, xhr, status);
          }
        }
      };
    }

    xhr.send(body);
    return xhr;
  };

  var request$2 = env.isMini ? request : request$1;

  /*
   * JavaScript MD5
   * https://github.com/blueimp/JavaScript-MD5
   *
   * Copyright 2011, Sebastian Tschan
   * https://blueimp.net
   *
   * Licensed under the MIT license:
   * https://opensource.org/licenses/MIT
   *
   * Based on
   * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
   * Digest Algorithm, as defined in RFC 1321.
   * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
   * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
   * Distributed under the BSD License
   * See http://pajhome.org.uk/crypt/md5 for more info.
   */
  var md5 = (function(){function a(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function b(a,b){return a<<b|a>>>32-b}function c(c,d,e,f,g,h){return a(b(a(a(d,c),a(f,h)),g),e)}function d(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)}function e(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)}function f(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)}function g(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)}function h(b,c){var h,i,j,k,l,m,n,o,p;for(b[c>>5]|=128<<c%32,b[(c+64>>>9<<4)+14]=c,m=1732584193,n=-271733879,o=-1732584194,p=271733878,h=0;h<b.length;h+=16)i=m,j=n,k=o,l=p,m=d(m,n,o,p,b[h],7,-680876936),p=d(p,m,n,o,b[h+1],12,-389564586),o=d(o,p,m,n,b[h+2],17,606105819),n=d(n,o,p,m,b[h+3],22,-1044525330),m=d(m,n,o,p,b[h+4],7,-176418897),p=d(p,m,n,o,b[h+5],12,1200080426),o=d(o,p,m,n,b[h+6],17,-1473231341),n=d(n,o,p,m,b[h+7],22,-45705983),m=d(m,n,o,p,b[h+8],7,1770035416),p=d(p,m,n,o,b[h+9],12,-1958414417),o=d(o,p,m,n,b[h+10],17,-42063),n=d(n,o,p,m,b[h+11],22,-1990404162),m=d(m,n,o,p,b[h+12],7,1804603682),p=d(p,m,n,o,b[h+13],12,-40341101),o=d(o,p,m,n,b[h+14],17,-1502002290),n=d(n,o,p,m,b[h+15],22,1236535329),m=e(m,n,o,p,b[h+1],5,-165796510),p=e(p,m,n,o,b[h+6],9,-1069501632),o=e(o,p,m,n,b[h+11],14,643717713),n=e(n,o,p,m,b[h],20,-373897302),m=e(m,n,o,p,b[h+5],5,-701558691),p=e(p,m,n,o,b[h+10],9,38016083),o=e(o,p,m,n,b[h+15],14,-660478335),n=e(n,o,p,m,b[h+4],20,-405537848),m=e(m,n,o,p,b[h+9],5,568446438),p=e(p,m,n,o,b[h+14],9,-1019803690),o=e(o,p,m,n,b[h+3],14,-187363961),n=e(n,o,p,m,b[h+8],20,1163531501),m=e(m,n,o,p,b[h+13],5,-1444681467),p=e(p,m,n,o,b[h+2],9,-51403784),o=e(o,p,m,n,b[h+7],14,1735328473),n=e(n,o,p,m,b[h+12],20,-1926607734),m=f(m,n,o,p,b[h+5],4,-378558),p=f(p,m,n,o,b[h+8],11,-2022574463),o=f(o,p,m,n,b[h+11],16,1839030562),n=f(n,o,p,m,b[h+14],23,-35309556),m=f(m,n,o,p,b[h+1],4,-1530992060),p=f(p,m,n,o,b[h+4],11,1272893353),o=f(o,p,m,n,b[h+7],16,-155497632),n=f(n,o,p,m,b[h+10],23,-1094730640),m=f(m,n,o,p,b[h+13],4,681279174),p=f(p,m,n,o,b[h],11,-358537222),o=f(o,p,m,n,b[h+3],16,-722521979),n=f(n,o,p,m,b[h+6],23,76029189),m=f(m,n,o,p,b[h+9],4,-640364487),p=f(p,m,n,o,b[h+12],11,-421815835),o=f(o,p,m,n,b[h+15],16,530742520),n=f(n,o,p,m,b[h+2],23,-995338651),m=g(m,n,o,p,b[h],6,-198630844),p=g(p,m,n,o,b[h+7],10,1126891415),o=g(o,p,m,n,b[h+14],15,-1416354905),n=g(n,o,p,m,b[h+5],21,-57434055),m=g(m,n,o,p,b[h+12],6,1700485571),p=g(p,m,n,o,b[h+3],10,-1894986606),o=g(o,p,m,n,b[h+10],15,-1051523),n=g(n,o,p,m,b[h+1],21,-2054922799),m=g(m,n,o,p,b[h+8],6,1873313359),p=g(p,m,n,o,b[h+15],10,-30611744),o=g(o,p,m,n,b[h+6],15,-1560198380),n=g(n,o,p,m,b[h+13],21,1309151649),m=g(m,n,o,p,b[h+4],6,-145523070),p=g(p,m,n,o,b[h+11],10,-1120210379),o=g(o,p,m,n,b[h+2],15,718787259),n=g(n,o,p,m,b[h+9],21,-343485551),m=a(m,i),n=a(n,j),o=a(o,k),p=a(p,l);return [m,n,o,p]}function i(a){var b,c="",d=32*a.length;for(b=0;d>b;b+=8)c+=String.fromCharCode(255&a[b>>5]>>>b%32);return c}function j(a){var b,d,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(d=8*a.length,b=0;d>b;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function k(a){return i(h(j(a),8*a.length))}function l(a,b){var c,g,d=j(a),e=[],f=[];for(e[15]=f[15]=void 0,d.length>16&&(d=h(d,8*a.length)),c=0;16>c;c+=1)e[c]=909522486^d[c],f[c]=1549556828^d[c];return g=h(e.concat(j(b)),512+8*b.length),i(h(f.concat(g),640))}function m(a){var d,e,b="0123456789abcdef",c="";for(e=0;e<a.length;e+=1)d=a.charCodeAt(e),c+=b.charAt(15&d>>>4)+b.charAt(15&d);return c}function n(a){return unescape(encodeURIComponent(a))}function o(a){return k(n(a))}function p(a){return m(o(a))}function q(a,b){return l(n(a),n(b))}function r(a,b){return m(q(a,b))}function s(a,b,c){return b?c?q(b,a):r(b,a):c?o(a):p(a)}return s})();

  var global$7 = env.global;
  var Promise$1 = global$7.Promise;

  var isSupportPromise = function isSupportPromise() {
    if (!global$7.Promise) return false;

    var defer = function () {
      return global$7.Promise.resolve();
    }();

    return defer.then && defer["catch"] && defer["finally"];
  };

  var Defer = isSupportPromise() ? global$7.Promise : SparePromise;

  var noop = function noop(data) {
    return data;
  };

  var deferNoop = function deferNoop(data) {
    return Promise$1.resolve(data);
  };

  var JSON$2 = JSON$1;

  var allowError = function allowError(event) {
    var result;

    try {
      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        args[_key - 1] = arguments[_key];
      }

      result = event.apply(void 0, args);
    } catch (e) {
      result = null;
    }

    return result;
  };

  var toJSON = function toJSON(val) {
    return allowError(JSON$2.stringify, val);
  };

  var parseJSON = function parseJSON(val) {
    return allowError(JSON$2.parse, val);
  };

  var copy = function copy(val) {
    return parseJSON(toJSON(val));
  };

  var isObject = function isObject(val) {
    return Object.prototype.toString.call(val) === '[object Object]';
  };

  var isArray = function isArray(val) {
    return Object.prototype.toString.call(val).indexOf('Array') !== -1;
  };

  var isFunction = function isFunction(val) {
    return Object.prototype.toString.call(val) === '[object Function]';
  };

  var isString = function isString(val) {
    return Object.prototype.toString.call(val) === '[object String]';
  };

  var isBoolean = function isBoolean(val) {
    return Object.prototype.toString.call(val) === '[object Boolean]';
  };

  var isUndefined = function isUndefined(val) {
    return val === undefined || Object.prototype.toString.call(val) === '[object Undefined]';
  };

  var isNull = function isNull(val) {
    return Object.prototype.toString.call(val) === '[object Null]';
  };

  var isNumber = function isNumber(val) {
    return Object.prototype.toString.call(val) === '[object Number]';
  };

  var isArrayBuffer = function isArrayBuffer(val) {
    return Object.prototype.toString.call(val) === '[object ArrayBuffer]';
  };

  var isPromise = function isPromise(val) {
    var isTrue = false;

    try {
      isTrue = Object.prototype.toString.call(val) === '[object Promise]' || val && val.then && val["catch"] && val["finally"];
    } catch (e) {
      isTrue = false;
    }

    return isTrue;
  };

  var getTypeName = function getTypeName(data) {
    var typeName = Object.prototype.toString.call(data);
    return typeName.substring(8, typeName.length - 1);
  };

  var isEqual = function isEqual(source, target) {
    return source === target;
  };

  var ArrayBufferToArray = function ArrayBufferToArray(data) {
    if (isArrayBuffer(data)) {
      return [].slice.call(new Int8Array(data));
    }

    return data;
  };

  var ArrayBufferToUint8Array = function ArrayBufferToUint8Array(data) {
    if (isArrayBuffer(data)) {
      return new Uint8Array(data);
    }

    return data;
  };

  var forEach = function forEach(source, event, options) {
    options = options || {};
    event = event || noop;
    var _options = options,
        isReverse = _options.isReverse;

    var loopObj = function loopObj() {
      for (var key in source) {
        event(source[key], key, source);
      }
    };

    var loopArr = function loopArr() {
      if (isReverse) {
        for (var i = source.length - 1; i >= 0; i--) {
          event(source[i], i);
        }
      } else {
        for (var j = 0, len = source.length; j < len; j++) {
          event(source[j], j);
        }
      }
    };

    if (isObject(source)) {
      loopObj();
    }

    if (isArray(source) || isString(source)) {
      loopArr();
    }
  };

  var isEmpty = function isEmpty(val) {
    var result = true;

    if (isObject(val)) {
      forEach(val, function () {
        result = false;
      });
    }

    if (isString(val) || isArray(val)) {
      result = val.length === 0;
    }

    if (isNumber(val)) {
      result = val === 0;
    }

    return result;
  };

  var isNumberData = function isNumberData(val) {
    var isEmptyVal = isEmpty(val);
    val = Number(val);
    return isNumber(val) && !isEmptyVal;
  };

  var getKeys = function getKeys(obj) {
    var keyList = [];
    forEach(obj, function (val, key) {
      keyList.push(key);
    });
    return keyList;
  };

  var getValues = function getValues(obj) {
    var valList = [];
    forEach(obj, function (val) {
      valList.push(val);
    });
    return valList;
  };

  var getTimestamp = function getTimestamp(time) {
    return new Date(time).getTime();
  };

  var getCurrentTimestamp = function getCurrentTimestamp() {
    return new Date().getTime();
  };

  var isValidJSON = function isValidJSON(jsonStr) {
    var isValid = false;

    try {
      var obj = JSON$2.parse(jsonStr);
      var str = JSON$2.stringify(obj);
      isValid = str === jsonStr;
    } catch (e) {
      isValid = false;
    }

    return isValid;
  };

  var isSupportSocket = function isSupportSocket() {
    var isMini = env.isMini;

    if (isMini) {
      return true;
    }

    var Socket = global$7.WebSocket;

    if (isUndefined(Socket)) {
      return false;
    }

    var hasWS = typeof Socket === 'object' || typeof Socket === 'function';
    var isIntegrity = typeof Socket.OPEN === 'number';
    return hasWS && isIntegrity;
  };

  var indexOf = function indexOf(source, searchVal) {
    if (source.indexOf) {
      return source.indexOf(searchVal);
    }

    var index = -1;
    forEach(source, function (sub, i) {
      if (searchVal === sub) {
        index = i;
        return;
      }
    });
    return index;
  };

  var lastIndexOf = function lastIndexOf(source, searchVal) {
    if (source.lastIndexOf) {
      return source.lastIndexOf(searchVal);
    }

    var index = -1;
    forEach(source, function (sub, i) {
      if (searchVal === sub) {
        index = i;
        return;
      }
    }, {
      isReverse: true
    });
    return index;
  };

  var isInclude = function isInclude(source, searchVal) {
    var index = indexOf(source, searchVal);
    return index !== -1;
  };

  var substring = function substring(source, start, end) {
    return source.substring(start, end);
  };

  var spliceByChild = function spliceByChild(arr, item) {
    forEach(arr, function (child, index) {
      if (isEqual(child, item)) {
        arr.splice(index, 1);
      }
    }, {
      isReverse: true
    });
  };

  var parse16To10 = function parse16To10(num) {
    return parseInt(num, 16);
  };

  var isPlus = function isPlus(num) {
    return +num === num;
  };

  var filter = function filter(source, event) {
    var newArr = [];

    for (var i = 0, max = source.length; i < max; i++) {
      var data = source[i];

      if (event(data, i)) {
        newArr.push(data);
      }
    }

    return newArr;
  };

  var map = function map(source, event) {
    forEach(source, function (item, index) {
      source[index] = event(item, index);
    });
    return source;
  };

  var extend = function extend(destination, sources) {
    destination = destination || {};
    sources = sources || {};

    for (var key in sources) {
      var value = sources[key];

      if (!isUndefined(value)) {
        destination[key] = value;
      }
    }

    return destination;
  };

  var extendInShallow = function extendInShallow(destination, sources) {
    destination = copy(destination);
    sources = copy(sources);
    return extend(destination, sources);
  };

  var deferred = function deferred(callbacks) {
    return new Defer(callbacks);
  };

  var deferTimeout = function deferTimeout(timeout) {
    return deferred(function (resolve) {
      var timeouter = setTimeout(function () {
        resolve(timeouter);
      }, timeout);
    });
  };

  var tplEngine = function tplEngine(temp, data, regexp) {
    var replaceAction = function replaceAction(obj) {
      return temp.replace(regexp || /{([^}]+)}/g, function (match, name) {
        if (match.charAt(0) === '\\') {
          return match.slice(1);
        }

        return obj[name] !== undefined ? obj[name] : '{' + name + '}';
      });
    };

    if (!isArray(data)) {
      data = [data];
    }

    var ret = [];
    forEach(data, function (item) {
      ret.push(replaceAction(item));
    });
    return ret.join('');
  };

  var getRandomNum = function getRandomNum(max, min) {
    min = min || 0;
    var range = max - min,
        random = Math.random();
    return min + Math.round(random * range);
  };

  var Timer = function () {
    function Timer(options) {
      this._timerId = void 0;
      this._timerEvent = void 0;
      this._timerClearEvent = void 0;
      this.timeout = 0;
      this.type = TIMER_TYPE.TIMEOUT;
      this.status = TIMER_STATUS.PENNDING;
      var self = this;
      extend(self, options);
      var type = self.type;
      var isTimeout = type === TIMER_TYPE.TIMEOUT;

      if (isTimeout) {
        self._timerEvent = global$7.setTimeout;
        self._timerClearEvent = clearTimeout;
      } else {
        self._timerEvent = global$7.setInterval;
        self._timerClearEvent = clearInterval;
      }

      return self;
    }

    var _proto = Timer.prototype;

    _proto.start = function start(event, options) {
      options = options || {};
      var self = this,
          isTimeout = self.type === TIMER_TYPE.TIMEOUT;
      var _options2 = options,
          args = _options2.args,
          thisArg = _options2.thisArg;
      self.stop();
      self._timerId = self._timerEvent.call(global$7, function () {
        isTimeout && self.stop();
        event.apply(thisArg, args);
      }, self.timeout);
      self.status = TIMER_STATUS.BUSY;
    };

    _proto.stop = function stop() {
      var self = this;

      if (self._timerId) {
        self._timerClearEvent.call(global$7, self._timerId);

        self.status = TIMER_STATUS.ENDING;
      }
    };

    return Timer;
  }();

  var DeferHandler = function () {
    function DeferHandler(options) {
      this._list = {};
      this.timeout = IM_TIMEOUT;
      extend(this, options);
    }

    var _proto2 = DeferHandler.prototype;

    _proto2._isInvalid = function _isInvalid(id) {
      var handlers = this._list[id];
      return !isArray(handlers) || isEmpty(handlers);
    };

    _proto2._exec = function _exec(id, isError, data) {
      var self = this;

      if (self._isInvalid(id)) {
        return;
      }

      var handlers = self._list[id],
          handler = handlers[0];
      isError ? handler.reject(data) : handler.resolve(data);
      handlers.splice(0, 1);
    };

    _proto2.add = function add(id, defer, options) {
      options = options || {};
      var self = this;
      var resolve = defer.resolve,
          reject = defer.reject;
      var timeout = options.timeout || self.timeout;

      if (self._isInvalid(id)) {
        self._list[id] = [];
      }

      var timer = new Timer({
        timeout: timeout
      });
      timer.start(function () {
        self.reject(id, ERROR_INFO.TIMEOUT.code);
      });

      self._list[id].push({
        resolve: resolve,
        reject: reject,
        timer: timer
      });
    };

    _proto2.resolve = function resolve(id, data) {
      this._exec(id, false, data);
    };

    _proto2.reject = function reject(id, error) {
      this._exec(id, true, error);
    };

    return DeferHandler;
  }();

  var EventEmitter = function () {
    function EventEmitter() {
      this._events = void 0;
      this._events = {};
    }

    var _proto3 = EventEmitter.prototype;

    _proto3.on = function on(name, event) {
      var _events = this._events[name] || [];

      _events.push(event);

      this._events[name] = _events;
    };

    _proto3.off = function off(name, offEvent) {
      if (offEvent) {
        var _events = this._events[name] || [];

        spliceByChild(_events, offEvent);
      } else {
        delete this._events[name];
      }
    };

    _proto3.emit = function emit(name, data, error) {
      var _events = this._events[name];
      forEach(_events, function (event) {
        event(data, error);
      });
    };

    _proto3.clear = function clear() {
      this._events = {};
    };

    return EventEmitter;
  }();

  var decodeURI = function decodeURI(uri) {
    return global$7.decodeURIComponent(uri);
  };

  var encodeURI = function encodeURI(uri) {
    return global$7.encodeURIComponent(uri);
  };

  var int64ToTimestamp = function int64ToTimestamp(obj) {
    if (obj.low === undefined) {
      return obj;
    }

    var low = obj.low;

    if (low < 0) {
      low += 0xffffffff + 1;
    }

    low = low.toString(16);
    var timestamp = parseInt(obj.high.toString(16) + '00000000'.replace(new RegExp('0{' + low.length + '}$'), low), 16);
    return timestamp;
  };

  var batchInt64ToTimestamp = function batchInt64ToTimestamp(data) {
    forEach(data, function (item, key) {
      if (isObject(item)) {
        data[key] = int64ToTimestamp(item);
      }
    });
    return data;
  };

  var Queue = function () {
    function Queue(defaultConfig) {
      this._isRunning = false;
      this._list = [];
      this._defaultConfig = void 0;
      this._defaultConfig = defaultConfig;
    }

    var _proto4 = Queue.prototype;

    _proto4.add = function add(params) {
      params = params || this._defaultConfig;

      this._list.push(params);

      this.run();
    };

    _proto4.run = function run() {
      var self = this;
      var _isRunning = self._isRunning,
          _list = self._list;
      var isFinished = isEmpty(_list);

      if (_isRunning || isFinished) {
        return;
      }

      var firstItem = _list.splice(0, 1)[0];

      var event = firstItem.event,
          args = firstItem.args,
          thisArg = firstItem.thisArg;

      var next = function next() {
        self._isRunning = false;
        self.run();
      };

      if (!event) {
        return next();
      }

      self._isRunning = true;
      event.apply(thisArg, args)["finally"](next);
    };

    return Queue;
  }();

  var secondsToMilliseconds = function secondsToMilliseconds(seconds) {
    return seconds * 1000;
  };

  var request$3 = function request(url, options) {
    options = options || {};
    return deferred(function (resolve, reject) {
      options = extend(options, {
        url: url,
        success: function success(responseText, xhr, status) {
          resolve({
            responseText: responseText,
            xhr: xhr,
            status: status
          });
        },
        fail: function fail(result, xhr, status) {
          reject({
            result: result,
            xhr: xhr,
            status: status
          });
        }
      });
      request$2(options);
    });
  };

  var requestByUrlList = function requestByUrlList(urlList, options) {
    if (isEmpty(urlList)) {
      return Defer.reject();
    }

    var url = urlList[0];
    return request$3(url, options).then(function (result) {
      result = result || {};
      result.urlList = urlList;
      return result;
    })["catch"](function (error) {
      urlList.splice(0, 1);

      if (isEmpty(urlList)) {
        return Defer.reject(error);
      } else {
        return requestByUrlList(urlList, options);
      }
    });
  };

  var requestForFaster = function requestForFaster(urlList, option) {
    option = option || {};
    var timeInterval = option.timeInterval || 0;
    var faildCount = 0,
        totalCount = urlList.length;
    var requestXhrs = [];
    var totalTimer = new Timer({
      timeout: 15 * 1000
    });
    var reqCountdownTimers = [];

    var clearAll = function clearAll() {
      forEach(reqCountdownTimers, function (timer) {
        timer.stop();
      });
      forEach(requestXhrs, function (xhr) {
        xhr.abort();
      });
      reqCountdownTimers.length = 0;
      requestXhrs.length = 0;
    };

    var isAllFaild = function isAllFaild() {
      return faildCount === totalCount;
    };

    return deferred(function (resolve, reject) {
      var _success = function success(url, index) {
        clearAll();
        resolve({
          url: url,
          index: index
        });
      };

      var _fail = function fail() {
        clearAll();
        reject();
      };

      forEach(urlList, function (url, index) {
        var timer = new Timer({
          timeout: timeInterval * index
        });
        timer.start(function () {
          var xhr;
          var opt = extend({
            url: url,
            success: function success() {
              _success(url, index);
            },
            fail: function fail() {
              faildCount++;
              isAllFaild() && _fail();
            }
          }, option);
          xhr = request$2(opt);
          requestXhrs.push(xhr);
        });
        reqCountdownTimers.push(timer);
      });
      totalTimer.start(_fail);
    });
  };

  var NetworkDetecter = function () {
    function NetworkDetecter(option) {
      this._option = void 0;
      this._detectCount = 0;
      this._timeoutId = void 0;
      this._option = option;
    }

    var _proto5 = NetworkDetecter.prototype;

    _proto5._detect = function _detect() {
      var self = this;
      var _detectCount = self._detectCount,
          _option = self._option;
      var url = _option.url,
          timeout = _option.intervalTime,
          max = _option.max;
      _detectCount++;
      return request$3(url).then(function () {
        return;
      }, function (_ref) {
        var status = _ref.status;

        if (isEqual(status, 404)) {
          return;
        }

        var isAlreadyMax = max && isEqual(max, _detectCount);

        if (isAlreadyMax) {
          return Defer.reject();
        }

        return deferTimeout(timeout).then(function (timeoutId) {
          self._detectCount = _detectCount;
          self._timeoutId = timeoutId;
          return self._detect();
        });
      });
    };

    _proto5.start = function start() {
      return this._detect();
    };

    _proto5.stop = function stop() {
      var timeoutId = this._timeoutId;

      if (timeoutId) {
        clearTimeout(timeoutId);
      }
    };

    return NetworkDetecter;
  }();

  var toUpperCase = function toUpperCase(str, startIndex, endIndex) {
    if (isUndefined(startIndex) || isUndefined(endIndex)) {
      return str.toUpperCase();
    }

    var sliceStr = str.slice(startIndex, endIndex);
    str = str.replace(sliceStr, function (text) {
      return text.toUpperCase();
    });
    return str;
  };

  var getDomainByUrl = function getDomainByUrl(url) {
    var StartMark = '://',
        EndMark = '/';
    var urlProtocolIndex = indexOf(url, StartMark);
    var hasProtocol = urlProtocolIndex > -1;

    if (hasProtocol) {
      urlProtocolIndex = urlProtocolIndex + StartMark.length;
      url = substring(url, urlProtocolIndex, url.length);
    }

    var urlPathIndex = indexOf(url, EndMark);
    var hasPath = urlPathIndex > -1;

    if (hasPath) {
      url = substring(url, 0, urlPathIndex);
    }

    return url;
  };

  var getValidUrl = function getValidUrl(url, option) {
    option = option || {};
    var ProtocolMark = '://';
    var hasProtocol = isInclude(url, ProtocolMark);
    var localProtocol = env.protocol.http;
    var _option2 = option,
        protocol = _option2.protocol;

    if (protocol) {
      var domain = getDomainByUrl(url);
      url = protocol + "//" + domain;
    }

    if (hasProtocol) {
      var urlProtocolIndex = indexOf(url, ProtocolMark) + 1;
      var urlProtocol = substring(url, 0, urlProtocolIndex);
      var isHttpUrl = urlProtocol === HTTP_PROTOCOL.HTTP;
      var isLocalHttps = localProtocol === HTTP_PROTOCOL.HTTPS;

      if (isHttpUrl && isLocalHttps) {
        var _domain = getDomainByUrl(url);

        return HTTP_PROTOCOL.HTTPS + "//" + _domain;
      } else {
        return url;
      }
    } else {
      return localProtocol + "//" + url;
    }
  };

  var quickSort = function quickSort(arr, event) {
    var sort = function sort(array, left, right, event) {
      event = event || function (a, b) {
        return a <= b;
      };

      if (left < right) {
        var x = array[right],
            i = left - 1,
            temp;

        for (var j = left; j <= right; j++) {
          if (event(array[j], x)) {
            i++;
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
          }
        }

        sort(array, left, i - 1, event);
        sort(array, i + 1, right, event);
      }

      return array;
    };

    return sort(arr, 0, arr.length - 1, event);
  };

  var unique = function unique(arr, event) {
    var keyEvent = event || function (data) {
      return data;
    };

    var hashTable = {};
    var newArr = [];
    forEach(arr, function (data) {
      var key = keyEvent(data);

      if (!hashTable[key]) {
        hashTable[key] = true;
        newArr.push(data);
      }
    });
    return newArr;
  };

  var utils = {
    Storage: storage$1,
    Socket: Socket$2,
    Cache: CacheStorage,
    JSON: JSON$2,
    Defer: Defer,
    httpRequest: request$2,
    request: request$3,
    requestByUrlList: requestByUrlList,
    requestForFaster: requestForFaster,
    md5: md5,
    DeferHandler: DeferHandler,
    EventEmitter: EventEmitter,
    Timer: Timer,
    Queue: Queue,
    noop: noop,
    deferNoop: deferNoop,
    toJSON: toJSON,
    parseJSON: parseJSON,
    copy: copy,
    isObject: isObject,
    isArray: isArray,
    isFunction: isFunction,
    isArrayBuffer: isArrayBuffer,
    isString: isString,
    isBoolean: isBoolean,
    isUndefined: isUndefined,
    isNull: isNull,
    isNumber: isNumber,
    isNumberData: isNumberData,
    isPromise: isPromise,
    getTypeName: getTypeName,
    isPlus: isPlus,
    isEmpty: isEmpty,
    isEqual: isEqual,
    isValidJSON: isValidJSON,
    isSupportSocket: isSupportSocket,
    ArrayBufferToArray: ArrayBufferToArray,
    ArrayBufferToUint8Array: ArrayBufferToUint8Array,
    indexOf: indexOf,
    lastIndexOf: lastIndexOf,
    isInclude: isInclude,
    substring: substring,
    getKeys: getKeys,
    getValues: getValues,
    getTimestamp: getTimestamp,
    getCurrentTimestamp: getCurrentTimestamp,
    parse16To10: parse16To10,
    forEach: forEach,
    map: map,
    filter: filter,
    extend: extend,
    extendInShallow: extendInShallow,
    deferred: deferred,
    tplEngine: tplEngine,
    getRandomNum: getRandomNum,
    int64ToTimestamp: int64ToTimestamp,
    batchInt64ToTimestamp: batchInt64ToTimestamp,
    encodeURI: encodeURI,
    decodeURI: decodeURI,
    secondsToMilliseconds: secondsToMilliseconds,
    NetworkDetecter: NetworkDetecter,
    toUpperCase: toUpperCase,
    getDomainByUrl: getDomainByUrl,
    getValidUrl: getValidUrl,
    quickSort: quickSort,
    unique: unique
  };

  function _inheritsLoose(subClass, superClass) {
    subClass.prototype = Object.create(superClass.prototype);
    subClass.prototype.constructor = subClass;
    subClass.__proto__ = superClass;
  }

  var _PUBLISH_TOPIC_TO_CON, _CONVERSATION_TYPE_TO, _CONVERSATION_TYPE_TO2, _CONVERSATION_TYPE_TO3;
  var SUCCESS_CODE = 0;
  var PULL_MSG_TYPE = {
    NORMAL: 1,
    CHATROOM: 2
  };
  var MESSAGE_NAME = {
    CONN_ACK: 'ConnAckMessage',
    DISCONNECT: 'DisconnectMessage',
    PING_REQ: 'PingReqMessage',
    PING_RESP: 'PingRespMessage',
    PUBLISH: 'PublishMessage',
    PUB_ACK: 'PubAckMessage',
    QUERY: 'QueryMessage',
    QUERY_CON: 'QueryConMessage',
    QUERY_ACK: 'QueryAckMessage'
  };
  var QOS = {
    AT_MOST_ONCE: 0,
    AT_LEAST_ONCE: 1,
    EXACTLY_ONCE: 2,
    DEFAULT: 3,
    '0': 'AT_MOST_ONCE',
    '1': 'AT_LEAST_ONCE',
    '2': 'EXACTLY_ONCE',
    '3': 'DEFAULT'
  };
  var OPERATE_TYPE = {
    CONNECT: 1,
    '1': 'CONNECT',
    CONNACK: 2,
    '2': 'CONNACK',
    PUBLISH: 3,
    '3': 'PUBLISH',
    PUBACK: 4,
    '4': 'PUBACK',
    QUERY: 5,
    '5': 'QUERY',
    QUERYACK: 6,
    '6': 'QUERYACK',
    QUERYCON: 7,
    '7': 'QUERYCON',
    SUBSCRIBE: 8,
    '8': 'SUBSCRIBE',
    SUBACK: 9,
    '9': 'SUBACK',
    UNSUBSCRIBE: 10,
    '10': 'UNSUBSCRIBE',
    UNSUBACK: 11,
    '11': 'UNSUBACK',
    PINGREQ: 12,
    '12': 'PINGREQ',
    PINGRESP: 13,
    '13': 'PINGRESP',
    DISCONNECT: 14,
    '14': 'DISCONNECT'
  };
  var MESSAGE_TAG = {
    NONE: 0,
    PERSIT_ONLY: 1,
    COUNT_ONLY: 2,
    PERSIT_AND_COUNT: 3
  };
  var PUBLISH_TOPIC = {
    PRIVATE: 'ppMsgP',
    GROUP: 'pgMsgP',
    CHATROOM: 'chatMsg',
    CUSTOMER_SERVICE: 'pcMsgP',
    RECALL: 'recallMsg',
    NOTIFY_PULL_MSG: 's_ntf',
    RECEIVE_MSG: 's_msg',
    SYNC_STATUS: 's_stat',
    SYNC_CHRM_KV: 's_cmd'
  };
  var QUERY_TOPIC = {
    GET_SYNC_TIME: 'qrySessionsAtt',
    PULL_MSG: 'pullMsg',
    GET_CONVERSATION_LIST: 'qrySessions',
    REMOVE_CONVERSATION_LIST: 'delSessions',
    DELETE_MESSAGES: 'delMsg',
    CLEAR_UNREAD_COUNT: 'updRRTime',
    PULL_CHRM_MSG: 'chrmPull',
    JOIN_CHATROOM: 'joinChrm',
    QUIT_CHATROOM: 'exitChrm',
    GET_CHATROOM_INFO: 'queryChrmI',
    GET_OLD_CONVERSATION_LIST: 'qryRelation',
    REMOVE_OLD_CONVERSATION: 'delRelation',
    CLEAR_MESSAGES: {
      PRIVATE: 'cleanPMsg',
      GROUP: 'cleanGMsg',
      CUSTOMER_SERVICE: 'cleanCMsg',
      SYSTEM: 'cleanSMsg'
    }
  };
  var QUERY_HISTORY_TOPIC = {
    PRIVATE: 'qryPMsg',
    GROUP: 'qryGMsg',
    CHATROOM: 'qryCHMsg',
    CUSTOMER_SERVICE: 'qryCMsg',
    SYSTEM: 'qrySMsg'
  };
  var PUBLISH_TOPIC_TO_CONVERSATION_TYPE = (_PUBLISH_TOPIC_TO_CON = {}, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.PRIVATE] = CONVERSATION_TYPE.PRIVATE, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.GROUP] = CONVERSATION_TYPE.GROUP, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.CHATROOM] = CONVERSATION_TYPE.CHATROOM, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.CUSTOMER_SERVICE] = CONVERSATION_TYPE.CUSTOMER_SERVICE, _PUBLISH_TOPIC_TO_CON);
  var CONVERSATION_TYPE_TO_PUBLISH_TOPIC = (_CONVERSATION_TYPE_TO = {}, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.PRIVATE] = PUBLISH_TOPIC.PRIVATE, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.GROUP] = PUBLISH_TOPIC.GROUP, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.CHATROOM] = PUBLISH_TOPIC.CHATROOM, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.CUSTOMER_SERVICE] = PUBLISH_TOPIC.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO);
  var CONVERSATION_TYPE_TO_QUERY_HISTORY_TOPIC = (_CONVERSATION_TYPE_TO2 = {}, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.PRIVATE] = QUERY_HISTORY_TOPIC.PRIVATE, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.GROUP] = QUERY_HISTORY_TOPIC.GROUP, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.CHATROOM] = QUERY_HISTORY_TOPIC.CHATROOM, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.CUSTOMER_SERVICE] = QUERY_HISTORY_TOPIC.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.SYSTEM] = QUERY_HISTORY_TOPIC.SYSTEM, _CONVERSATION_TYPE_TO2);
  var CONVERSATION_TYPE_TO_CLEAR_MESSAGE_TOPIC = (_CONVERSATION_TYPE_TO3 = {}, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.PRIVATE] = QUERY_TOPIC.CLEAR_MESSAGES.PRIVATE, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.GROUP] = QUERY_TOPIC.CLEAR_MESSAGES.GROUP, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.CUSTOMER_SERVICE] = QUERY_TOPIC.CLEAR_MESSAGES.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.SYSTEM] = QUERY_TOPIC.CLEAR_MESSAGES.SYSTEM, _CONVERSATION_TYPE_TO3);

  var Header = function () {
    function Header(_type, _retain, _qos, _dup) {
      this.type = void 0;
      this.retain = false;
      this.qos = QOS.AT_LEAST_ONCE;
      this.dup = false;
      this.syncMsg = false;
      var isPlusType = utils.isPlus(_type);

      if (_type && isPlusType && arguments.length === 1) {
        this.retain = (_type & 1) > 0;
        this.qos = (_type & 6) >> 1;
        this.dup = (_type & 8) > 0;
        this.type = _type >> 4 & 15;
        this.syncMsg = (_type & 8) === 8;
      } else {
        this.type = _type;
        this.retain = _retain === undefined ? false : _retain;
        this.qos = _qos === undefined ? QOS.AT_LEAST_ONCE : _qos;
        this.dup = _dup === undefined ? false : _dup;
      }
    }

    var _proto = Header.prototype;

    _proto.encode = function encode() {
      var self = this;
      var validQosList = [QOS.AT_MOST_ONCE, QOS.AT_LEAST_ONCE, QOS.EXACTLY_ONCE, QOS.DEFAULT];
      utils.forEach(validQosList, function (qos) {
        if (self.qos === QOS[qos]) {
          self.qos = qos;
        }
      });

      var _byte = self.type << 4;

      _byte |= self.retain ? 1 : 0;
      _byte |= self.qos << 1;
      _byte |= self.dup ? 8 : 0;
      return _byte;
    };

    return Header;
  }();

  var BinaryHelper = {
    writeUTF: function writeUTF(str, isGetBytes) {
      var back = [],
          byteSize = 0;
      utils.forEach(str, function (_char, i) {
        var code = str.charCodeAt(i);

        if (code >= 0 && code <= 127) {
          byteSize += 1;
          back.push(code);
        } else if (code >= 128 && code <= 2047) {
          byteSize += 2;
          back.push(192 | 31 & code >> 6);
          back.push(128 | 63 & code);
        } else if (code >= 2048 && code <= 65535) {
          byteSize += 3;
          back.push(224 | 15 & code >> 12);
          back.push(128 | 63 & code >> 6);
          back.push(128 | 63 & code);
        }
      });
      utils.forEach(back, function (_char2, i) {
        if (_char2 > 255) {
          back[i] &= 255;
        }
      });

      if (isGetBytes) {
        return back;
      }

      if (byteSize <= 255) {
        return [0, byteSize].concat(back);
      } else {
        return [byteSize >> 8, byteSize & 255].concat(back);
      }
    },
    readUTF: function readUTF(arr) {
      var UTF = '';

      for (var i = 0, len = arr.length; i < len; i++) {
        var _char3 = arr[i];

        if (_char3 < 0) {
          arr[i] += 256;
        }

        var one = arr[i].toString(2),
            v = one.match(/^1+?(?=0)/);

        if (v && one.length === 8) {
          var bytesLength = v[0].length,
              store = '';

          for (var st = 0; st < bytesLength; st++) {
            store += arr[st + i].toString(2).slice(2);
          }

          UTF += String.fromCharCode(parseInt(store, 2));
          i += bytesLength - 1;
        } else {
          UTF += String.fromCharCode(arr[i]);
        }
      }

      return UTF;
    }
  };

  var RongStreamReader = function () {
    function RongStreamReader(arr) {
      this.pool = void 0;
      this.position = 0;
      this.poolLen = 0;
      this.pool = arr;
      this.poolLen = arr.length;
    }

    var _proto2 = RongStreamReader.prototype;

    _proto2.check = function check() {
      return this.position >= this.pool.length;
    };

    _proto2.readInt = function readInt() {
      var self = this;

      if (self.check()) {
        return -1;
      }

      var end = '';

      for (var i = 0; i < 4; i++) {
        var t = self.pool[self.position++].toString(16);

        if (t.length === 1) {
          t = '0' + t;
        }

        end += t.toString();
      }

      return utils.parse16To10(end);
    };

    _proto2.readLong = function readLong() {
      var self = this;

      if (self.check()) {
        return -1;
      }

      var end = '';

      for (var i = 0; i < 8; i++) {
        var t = self.pool[self.position++].toString(16);

        if (t.length === 1) {
          t = '0' + t;
        }

        end += t;
      }

      return utils.parse16To10(end);
    };

    _proto2.readByte = function readByte() {
      if (this.check()) {
        return -1;
      }

      var val = this.pool[this.position++];

      if (val > 255) {
        val &= 255;
      }

      return val;
    };

    _proto2.readUTF = function readUTF() {
      if (this.check()) {
        return '';
      }

      var big = this.readByte() << 8 | this.readByte();
      var pool = this.pool.subarray(this.position, this.position += big);
      return BinaryHelper.readUTF(pool);
    };

    _proto2.readAll = function readAll() {
      return this.pool.subarray(this.position, this.poolLen);
    };

    return RongStreamReader;
  }();

  var RongStreamWriter = function () {
    function RongStreamWriter() {
      this.pool = [];
      this.position = 0;
      this.writen = 0;
    }

    var _proto3 = RongStreamWriter.prototype;

    _proto3.write = function write(_byte2) {
      if (utils.isArray(_byte2)) {
        this.pool = this.pool.concat(_byte2);
      } else if (utils.isPlus(_byte2)) {
        if (_byte2 > 255) {
          _byte2 &= 255;
        }

        this.pool.push(_byte2);
        this.writen++;
      }

      return _byte2;
    };

    _proto3.writeArr = function writeArr(_byte3) {
      this.pool = this.pool.concat(_byte3);
      return _byte3;
    };

    _proto3.writeUTF = function writeUTF(str) {
      var val = BinaryHelper.writeUTF(str);
      this.pool = this.pool.concat(val);
      this.writen += val.length;
    };

    _proto3.getBytesArray = function getBytesArray() {
      return this.pool;
    };

    return RongStreamWriter;
  }();

  var IDENTIFIER = {
    PUB: 'pub',
    QUERY: 'qry'
  };

  var _getIdentifier = function getIdentifier(messageId, identifier) {
    if (messageId && identifier) {
      return identifier + '_' + messageId;
    } else if (messageId) {
      return messageId;
    } else {
      return utils.getCurrentTimestamp();
    }
  };

  var BaseReader = function () {
    function BaseReader(header) {
      this._name = void 0;
      this._header = void 0;
      this.lengthSize = 0;
      this.messageId = void 0;
      this.identifier = void 0;
      this._header = header;
    }

    var _proto = BaseReader.prototype;

    _proto.getIdentifier = function getIdentifier() {
      var messageId = this.messageId,
          identifier = this.identifier;
      return _getIdentifier(messageId, identifier);
    };

    _proto.read = function read(stream, length) {
      this.readMessage(stream, length);
    };

    _proto.readMessage = function readMessage(stream, length) {
      return {
        stream: stream,
        length: length
      };
    };

    return BaseReader;
  }();

  var BaseWriter = function () {
    function BaseWriter(headerType) {
      this._header = void 0;
      this.lengthSize = 0;
      this.data = void 0;
      this.messageId = void 0;
      this.topic = void 0;
      this.targetId = void 0;
      this.identifier = void 0;
      this._header = new Header(headerType, false, QOS.AT_MOST_ONCE, false);
    }

    var _proto2 = BaseWriter.prototype;

    _proto2.getIdentifier = function getIdentifier() {
      var messageId = this.messageId,
          identifier = this.identifier;
      return _getIdentifier(messageId, identifier);
    };

    _proto2.write = function write(stream) {
      var headerCode = this.getHeaderFlag();
      stream.write(headerCode);
      this.writeMessage(stream);
    };

    _proto2.writeMessage = function writeMessage(stream) {
      return stream;
    };

    _proto2.setHeaderQos = function setHeaderQos(qos) {
      this._header.qos = qos;
    };

    _proto2.getHeaderFlag = function getHeaderFlag() {
      return this._header.encode();
    };

    _proto2.getLengthSize = function getLengthSize() {
      return this.lengthSize;
    };

    _proto2.getBufferData = function getBufferData() {
      var stream = new RongStreamWriter();
      this.write(stream);
      var val = stream.getBytesArray();
      var binary = new Int8Array(val);
      return binary;
    };

    _proto2.getCometData = function getCometData() {
      var data = this.data || {};
      return utils.toJSON(data);
    };

    return BaseWriter;
  }();

  var ConnAckReader = function (_BaseReader) {
    _inheritsLoose(ConnAckReader, _BaseReader);

    function ConnAckReader() {
      var _this;

      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      _this = _BaseReader.call.apply(_BaseReader, [this].concat(args)) || this;
      _this._name = MESSAGE_NAME.CONN_ACK;
      _this.status = void 0;
      _this.userId = void 0;
      _this.timestamp = void 0;
      return _this;
    }

    var _proto3 = ConnAckReader.prototype;

    _proto3.readMessage = function readMessage(stream, msgLength) {
      stream.readByte();
      this.status = +stream.readByte();

      if (msgLength > ConnAckReader.MESSAGE_LENGTH) {
        this.userId = stream.readUTF();
        stream.readUTF();
        this.timestamp = stream.readLong();
      }
    };

    return ConnAckReader;
  }(BaseReader);

  ConnAckReader.MESSAGE_LENGTH = 2;

  var DisconnectReader = function (_BaseReader2) {
    _inheritsLoose(DisconnectReader, _BaseReader2);

    function DisconnectReader() {
      var _this2;

      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
        args[_key2] = arguments[_key2];
      }

      _this2 = _BaseReader2.call.apply(_BaseReader2, [this].concat(args)) || this;
      _this2._name = MESSAGE_NAME.DISCONNECT;
      _this2.status = void 0;
      return _this2;
    }

    var _proto4 = DisconnectReader.prototype;

    _proto4.readMessage = function readMessage(stream) {
      stream.readByte();
      this.status = +stream.readByte();
    };

    return DisconnectReader;
  }(BaseReader);

  DisconnectReader.MESSAGE_LENGTH = 2;

  var PingReqWriter = function (_BaseWriter) {
    _inheritsLoose(PingReqWriter, _BaseWriter);

    function PingReqWriter() {
      var _this3;

      _this3 = _BaseWriter.call(this, OPERATE_TYPE.PINGREQ) || this;
      _this3._name = MESSAGE_NAME.PING_REQ;
      return _this3;
    }

    return PingReqWriter;
  }(BaseWriter);

  var PingRespReader = function (_BaseReader3) {
    _inheritsLoose(PingRespReader, _BaseReader3);

    function PingRespReader() {
      var _this4;

      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
        args[_key3] = arguments[_key3];
      }

      _this4 = _BaseReader3.call.apply(_BaseReader3, [this].concat(args)) || this;
      _this4._name = MESSAGE_NAME.PING_RESP;
      return _this4;
    }

    return PingRespReader;
  }(BaseReader);

  var RetryableReader = function (_BaseReader4) {
    _inheritsLoose(RetryableReader, _BaseReader4);

    function RetryableReader() {
      var _this5;

      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
        args[_key4] = arguments[_key4];
      }

      _this5 = _BaseReader4.call.apply(_BaseReader4, [this].concat(args)) || this;
      _this5.messageId = void 0;
      return _this5;
    }

    var _proto5 = RetryableReader.prototype;

    _proto5.readMessage = function readMessage(stream) {
      var msgId = stream.readByte() * 256 + stream.readByte();
      this.messageId = parseInt(msgId, 10);
    };

    return RetryableReader;
  }(BaseReader);

  var RetryableWriter = function (_BaseWriter2) {
    _inheritsLoose(RetryableWriter, _BaseWriter2);

    function RetryableWriter() {
      var _this6;

      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
        args[_key5] = arguments[_key5];
      }

      _this6 = _BaseWriter2.call.apply(_BaseWriter2, [this].concat(args)) || this;
      _this6.messageId = void 0;
      return _this6;
    }

    var _proto6 = RetryableWriter.prototype;

    _proto6.writeMessage = function writeMessage(stream) {
      var id = this.messageId;
      var lsb = id & 255;
      var msb = (id & 65280) >> 8;
      stream.write(msb);
      stream.write(lsb);
    };

    return RetryableWriter;
  }(BaseWriter);

  var PublishReader = function (_RetryableReader) {
    _inheritsLoose(PublishReader, _RetryableReader);

    function PublishReader() {
      var _this7;

      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
        args[_key6] = arguments[_key6];
      }

      _this7 = _RetryableReader.call.apply(_RetryableReader, [this].concat(args)) || this;
      _this7._name = MESSAGE_NAME.PUBLISH;
      _this7.topic = void 0;
      _this7.data = void 0;
      _this7.targetId = void 0;
      _this7.date = void 0;
      _this7.syncMsg = false;
      _this7.identifier = IDENTIFIER.PUB;
      return _this7;
    }

    var _proto7 = PublishReader.prototype;

    _proto7.readMessage = function readMessage(stream) {
      this.date = stream.readInt();
      this.topic = stream.readUTF();
      this.targetId = stream.readUTF();
      RetryableReader.prototype.readMessage.apply(this, arguments);
      this.data = stream.readAll();
    };

    return PublishReader;
  }(RetryableReader);

  var PublishWriter = function (_RetryableWriter) {
    _inheritsLoose(PublishWriter, _RetryableWriter);

    function PublishWriter(topic, data, targetId) {
      var _this8;

      _this8 = _RetryableWriter.call(this, OPERATE_TYPE.PUBLISH) || this;
      _this8._name = MESSAGE_NAME.PUBLISH;
      _this8.topic = void 0;
      _this8.data = void 0;
      _this8.targetId = void 0;
      _this8.date = void 0;
      _this8.syncMsg = false;
      _this8.identifier = IDENTIFIER.PUB;
      _this8.topic = topic;
      _this8.data = utils.isString(data) ? BinaryHelper.writeUTF(data) : data;
      _this8.targetId = targetId;
      return _this8;
    }

    var _proto8 = PublishWriter.prototype;

    _proto8.writeMessage = function writeMessage(stream) {
      stream.writeUTF(this.topic);
      stream.writeUTF(this.targetId);
      RetryableWriter.prototype.writeMessage.apply(this, arguments);
      stream.write(this.data);
    };

    return PublishWriter;
  }(RetryableWriter);

  var PubAckReader = function (_RetryableReader2) {
    _inheritsLoose(PubAckReader, _RetryableReader2);

    function PubAckReader() {
      var _this9;

      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
        args[_key7] = arguments[_key7];
      }

      _this9 = _RetryableReader2.call.apply(_RetryableReader2, [this].concat(args)) || this;
      _this9._name = MESSAGE_NAME.PUB_ACK;
      _this9.status = void 0;
      _this9.date = 0;
      _this9.data = void 0;
      _this9.millisecond = 0;
      _this9.messageUId = void 0;
      _this9.timestamp = 0;
      _this9.identifier = IDENTIFIER.PUB;
      return _this9;
    }

    var _proto9 = PubAckReader.prototype;

    _proto9.readMessage = function readMessage(stream) {
      RetryableReader.prototype.readMessage.call(this, stream);
      this.date = stream.readInt();
      this.status = stream.readByte() * 256 + stream.readByte();
      this.millisecond = stream.readByte() * 256 + stream.readByte();
      this.timestamp = this.date * 1000 + this.millisecond;
      this.messageUId = stream.readUTF();
    };

    return PubAckReader;
  }(RetryableReader);

  var PubAckWriter = function (_RetryableWriter2) {
    _inheritsLoose(PubAckWriter, _RetryableWriter2);

    function PubAckWriter(messageId) {
      var _this10;

      _this10 = _RetryableWriter2.call(this, OPERATE_TYPE.PUBACK) || this;
      _this10._name = MESSAGE_NAME.PUB_ACK;
      _this10.status = void 0;
      _this10.date = 0;
      _this10.millisecond = 0;
      _this10.messageUId = void 0;
      _this10.timestamp = 0;
      _this10.messageId = messageId;
      return _this10;
    }

    var _proto10 = PubAckWriter.prototype;

    _proto10.writeMessage = function writeMessage(stream) {
      RetryableWriter.prototype.writeMessage.call(this, stream);
    };

    return PubAckWriter;
  }(RetryableWriter);

  var QueryWriter = function (_RetryableWriter3) {
    _inheritsLoose(QueryWriter, _RetryableWriter3);

    function QueryWriter(topic, data, targetId) {
      var _this11;

      _this11 = _RetryableWriter3.call(this, OPERATE_TYPE.QUERY) || this;
      _this11._name = MESSAGE_NAME.QUERY;
      _this11.topic = void 0;
      _this11.data = void 0;
      _this11.targetId = void 0;
      _this11.identifier = IDENTIFIER.QUERY;
      _this11.topic = topic;
      _this11.data = utils.isString(data) ? BinaryHelper.writeUTF(data) : data;
      _this11.targetId = targetId;
      return _this11;
    }

    var _proto11 = QueryWriter.prototype;

    _proto11.writeMessage = function writeMessage(stream) {
      stream.writeUTF(this.topic);
      stream.writeUTF(this.targetId);
      RetryableWriter.prototype.writeMessage.call(this, stream);
      stream.write(this.data);
    };

    return QueryWriter;
  }(RetryableWriter);

  var QueryConWriter = function (_RetryableWriter4) {
    _inheritsLoose(QueryConWriter, _RetryableWriter4);

    function QueryConWriter(messageId) {
      var _this12;

      _this12 = _RetryableWriter4.call(this, OPERATE_TYPE.QUERYCON) || this;
      _this12._name = MESSAGE_NAME.QUERY_CON;
      _this12.messageId = messageId;
      return _this12;
    }

    return QueryConWriter;
  }(RetryableWriter);

  var QueryAckReader = function (_RetryableReader3) {
    _inheritsLoose(QueryAckReader, _RetryableReader3);

    function QueryAckReader() {
      var _this13;

      for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
        args[_key8] = arguments[_key8];
      }

      _this13 = _RetryableReader3.call.apply(_RetryableReader3, [this].concat(args)) || this;
      _this13._name = MESSAGE_NAME.QUERY_ACK;
      _this13.data = void 0;
      _this13.status = void 0;
      _this13.date = void 0;
      _this13.identifier = IDENTIFIER.QUERY;
      return _this13;
    }

    var _proto12 = QueryAckReader.prototype;

    _proto12.readMessage = function readMessage(stream) {
      RetryableReader.prototype.readMessage.call(this, stream);
      this.date = stream.readInt();
      this.status = stream.readByte() * 256 + stream.readByte();
      this.data = stream.readAll();
    };

    return QueryAckReader;
  }(RetryableReader);

  var getReaderByHeader = function getReaderByHeader(header) {
    var type = header.type,
        msg = new BaseReader(header);

    switch (type) {
      case OPERATE_TYPE.CONNACK:
        msg = new ConnAckReader(header);
        break;

      case OPERATE_TYPE.PUBLISH:
        msg = new PublishReader(header);
        msg.syncMsg = header.syncMsg;
        break;

      case OPERATE_TYPE.PUBACK:
        msg = new PubAckReader(header);
        break;

      case OPERATE_TYPE.QUERYACK:
        msg = new QueryAckReader(header);
        break;

      case OPERATE_TYPE.SUBACK:
      case OPERATE_TYPE.UNSUBACK:
      case OPERATE_TYPE.PINGRESP:
        msg = new PingRespReader(header);
        break;

      case OPERATE_TYPE.DISCONNECT:
        msg = new DisconnectReader(header);
        break;

      default:
        throw new Error('No support for deserializing ' + type + ' messages');
    }

    return msg;
  };

  var readWSBuffer = function readWSBuffer(data) {
    var arr = new Uint8Array(data);
    var stream = new RongStreamReader(arr);
    var flags = stream.readByte(),
        header = new Header(flags);
    var msg = getReaderByHeader(header);
    msg.read(stream, arr.length - 1);
    return msg;
  };

  var readCometData = function readCometData(data) {
    var flags = data.headerCode,
        header = new Header(flags);
    var msg = getReaderByHeader(header);
    utils.forEach(data, function (item, key) {
      if (key in msg) {
        msg[key] = item;
      }
    });
    return msg;
  };

  var _PUBLISH_TOPIC_MAP_SE;
  var ENGINE_EVENT = {
    WATCH: 'watch',
    CONNECT: 'connect',
    RECONNECT: 'reconnect',
    DISCONNECT: 'disconnect',
    CHANGE_USER: 'change_user',
    GET_CONVERSATION_LIST: 'get_conversation_list',
    REMOVE_CONVERSATION_LIST: 'remove_conversation_list',
    REMOVE_CONVERSATION: 'remove_conversation',
    GET_TOTAL_UNREAD_COUNT: 'get_total_unread_count',
    CLEAR_UNREAD_COUNT: 'clear_unread_count',
    SEND_MESSAGE: 'send_message',
    GET_HISTORY_MSGS: 'get_history_msgs',
    DELETE_MESSAGES: 'delete_history_msgs',
    CLEAR_MESSAGES: 'clear_history_msgs',
    RECALL_MESSAGE: 'recall_message',
    JOIN_CHATROOM: 'join_chatroom',
    QUIT_CHATROOM: 'quit_chatroom',
    GET_CHATROOM_INFO: 'get_chatroom_info',
    GET_CHATROOM_MSGS: 'get_chatroom_msgs'
  };
  var ENGINE_EVENT_NEED_CONNECTED = [ENGINE_EVENT.GET_CONVERSATION_LIST, ENGINE_EVENT.REMOVE_CONVERSATION_LIST, ENGINE_EVENT.REMOVE_CONVERSATION, ENGINE_EVENT.GET_TOTAL_UNREAD_COUNT, ENGINE_EVENT.CLEAR_UNREAD_COUNT, ENGINE_EVENT.SEND_MESSAGE, ENGINE_EVENT.GET_HISTORY_MSGS, ENGINE_EVENT.DELETE_MESSAGES, ENGINE_EVENT.CLEAR_MESSAGES, ENGINE_EVENT.RECALL_MESSAGE, ENGINE_EVENT.JOIN_CHATROOM, ENGINE_EVENT.QUIT_CHATROOM, ENGINE_EVENT.GET_CHATROOM_INFO, ENGINE_EVENT.GET_CHATROOM_MSGS];
  var ENGINE_EVENT_NEED_DISCONNECTED = [ENGINE_EVENT.CONNECT, ENGINE_EVENT.RECONNECT];
  var IM_EVENT = {
    STATUS: 'status',
    MESSAGE: 'message',
    CONVERSATION: 'conversation'
  };
  var TRANSPORT_EVENT = {
    SIGNAL: 'signal',
    STATUS: 'status'
  };
  var SERVER_TASK = {
    DISCONNECTED: 'disconnected',
    SYNC_SELF_MSG: 'sync_self_other_client_msg',
    NOTIFY_PULL: 'notify_pull_msg',
    RECEIVE_MSG: 'receive_msg',
    SYNC_STATUS: 'sync_status',
    SYNC_CHRM_KV: 'sync_chrm_kv'
  };
  var PUBLISH_TOPIC_MAP_SERVER_TASK = (_PUBLISH_TOPIC_MAP_SE = {}, _PUBLISH_TOPIC_MAP_SE[PUBLISH_TOPIC.NOTIFY_PULL_MSG] = SERVER_TASK.NOTIFY_PULL, _PUBLISH_TOPIC_MAP_SE[PUBLISH_TOPIC.RECEIVE_MSG] = SERVER_TASK.RECEIVE_MSG, _PUBLISH_TOPIC_MAP_SE[PUBLISH_TOPIC.SYNC_STATUS] = SERVER_TASK.SYNC_STATUS, _PUBLISH_TOPIC_MAP_SE[PUBLISH_TOPIC.SYNC_CHRM_KV] = SERVER_TASK.SYNC_CHRM_KV, _PUBLISH_TOPIC_MAP_SE);

  var isEmpty$1 = utils.isEmpty,
      tplEngine$1 = utils.tplEngine,
      getRandomNum$1 = utils.getRandomNum;

  var getTransporterUrl = function getTransporterUrl(option) {
    var domain = option.domain,
        appkey = option.appkey,
        token = option.token,
        connectType = option.connectType,
        protocol = option.protocol;
    var isComet = connectType === CONNECT_TYPE.COMET;

    if (isEmpty$1(protocol)) {
      protocol = isComet ? env.protocol.http : env.protocol.ws;
    }

    return tplEngine$1(CMP_URL_TPL, {
      domain: domain,
      appkey: appkey,
      protocol: protocol,
      apiVer: getRandomNum$1(1e6),
      token: utils.encodeURI(token)
    });
  };

  var isGroup = function isGroup(type) {
    return type === CONVERSATION_TYPE.GROUP;
  };

  var isChatRoom = function isChatRoom(type) {
    return type === CONVERSATION_TYPE.CHATROOM;
  };

  var getConversationTypeList = function getConversationTypeList() {
    return utils.getValues(CONVERSATION_TYPE);
  };

  var isValidConversationType = function isValidConversationType(type) {
    var conversationTypeList = getConversationTypeList();
    return utils.isNumber(type) && utils.isInclude(conversationTypeList, type);
  };

  var getSessionId = function getSessionId(option) {
    var isPersited = option.isPersited,
        isCounted = option.isCounted,
        isMentiond = option.isMentiond;
    var sessionId = 0;

    if (isPersited) {
      sessionId = sessionId | 0x01;
    }

    if (isCounted) {
      sessionId = sessionId | 0x02;
    }

    if (isMentiond) {
      sessionId = sessionId | 0x04;
    }

    return sessionId;
  };

  var getPersitedAndCountedBySessionId = function getPersitedAndCountedBySessionId(sessionId) {
    var isPersited, isCounted;

    switch (sessionId) {
      case MESSAGE_TAG.COUNT_ONLY:
        isPersited = false;
        isCounted = true;
        break;

      case MESSAGE_TAG.PERSIT_ONLY:
        isPersited = true;
        isCounted = false;
        break;

      case MESSAGE_TAG.NONE:
        isPersited = isCounted = false;
        break;

      case MESSAGE_TAG.PERSIT_AND_COUNT:
      default:
        isPersited = isCounted = true;
        break;
    }

    return {
      isPersited: isPersited,
      isCounted: isCounted
    };
  };

  var getMessageOptionByStatus = function getMessageOptionByStatus(status) {
    var isPersited = true,
        isCounted = true,
        isMentiond = false;
    isPersited = !!(status & 0x10);
    isCounted = !!(status & 0x20);
    isMentiond = !!(status & 0x40);
    return {
      isPersited: isPersited,
      isCounted: isCounted,
      isMentiond: isMentiond
    };
  };

  var SignalId = {
    ids: {},
    temp: '{appkey}_{userId}',
    get: function get(option) {
      var key = utils.tplEngine(SignalId.temp, option);
      var id = SignalId.ids[key] || 0;
      id++;
      SignalId.ids[key] = id;
      return id;
    },
    clear: function clear(option) {
      var key = utils.tplEngine(SignalId.temp, option);
      SignalId.ids[key] = 0;
    },
    isExceedLimit: function isExceedLimit(id) {
      return id > MAX_SINGAL_ID;
    }
  };

  var RCSocket = function () {
    function RCSocket(options) {
      this._socket = void 0;
      this.eventEmitter = new utils.EventEmitter();
      this.KEY = {
        OPEN: 'open',
        MSG: 'msg',
        ERROR: 'error',
        CLOSE: 'close'
      };
      var self = this;
      var KEY = self.KEY;
      self._socket = new utils.Socket(options);

      self._socket.onOpen(function (data) {
        self.eventEmitter.emit(KEY.OPEN, data);
      });

      self._socket.onMessage(function (data) {
        self.eventEmitter.emit(KEY.MSG, data);
      });

      self._socket.onError(function (data) {
        self.eventEmitter.emit(KEY.ERROR, data);
      });

      self._socket.onClose(function (data) {
        self.eventEmitter.emit(KEY.CLOSE, data);
      });
    }

    var _proto = RCSocket.prototype;

    _proto.send = function send(data) {
      return this._socket.send(data);
    };

    _proto.close = function close() {
      this.eventEmitter.clear();

      this._socket.close();
    };

    _proto.onOpen = function onOpen(event) {
      this.eventEmitter.on(this.KEY.OPEN, event);
    };

    _proto.onMessage = function onMessage(event) {
      this.eventEmitter.on(this.KEY.MSG, event);
    };

    _proto.onError = function onError(event) {
      this.eventEmitter.on(this.KEY.ERROR, event);
    };

    _proto.onClose = function onClose(event) {
      this.eventEmitter.on(this.KEY.CLOSE, event);
    };

    return RCSocket;
  }();

  var RCStorage = function () {
    function RCStorage(suffix) {
      var _ref;

      this._cache = void 0;
      this.STORAGE_KEY = void 0;
      var storageKey = suffix ? STORAGE_ROOT_KEY + suffix : STORAGE_ROOT_KEY;
      var localCache = utils.Storage.get(storageKey) || {};
      this._cache = new utils.Cache((_ref = {}, _ref[storageKey] = localCache, _ref));
      this.STORAGE_KEY = storageKey;
    }

    var _proto2 = RCStorage.prototype;

    _proto2._get = function _get() {
      var KEY = this.STORAGE_KEY;
      return this._cache.get(KEY) || {};
    };

    _proto2._set = function _set(cache) {
      var KEY = this.STORAGE_KEY;
      cache = cache || {};

      this._cache.set(KEY, cache);

      utils.Storage.set(KEY, cache);
    };

    _proto2.set = function set(key, value) {
      var localValue = this._get();

      localValue[key] = value;

      this._set(localValue);
    };

    _proto2.remove = function remove(key) {
      var localValue = this._get();

      delete localValue[key];

      this._set(localValue);
    };

    _proto2.clear = function clear() {
      var KEY = this.STORAGE_KEY;
      utils.Storage.remove(KEY);

      this._cache.remove(KEY);
    };

    _proto2.get = function get(key) {
      var localValue = this._get();

      return localValue[key];
    };

    _proto2.getKeys = function getKeys() {
      var localValue = this._get();

      return utils.getKeys(localValue);
    };

    _proto2.getValues = function getValues() {
      return this._get() || {};
    };

    return RCStorage;
  }();

  var formatSyncTime = function formatSyncTime(_syncTime) {
    _syncTime = _syncTime || {};
    _syncTime.inboxTime = _syncTime.inboxTime || 0;
    _syncTime.sendboxTime = _syncTime.sendboxTime || 0;
    return _syncTime;
  };

  var MessageTimeSyner = function () {
    function MessageTimeSyner(option) {
      this._syncTime = void 0;
      this._storage = void 0;
      option = option || {};
      var _option = option,
          startSyncTime = _option.startSyncTime;

      this._initStorage(option);

      if (startSyncTime) {
        this._syncTime = formatSyncTime(startSyncTime);
      }
    }

    var _proto3 = MessageTimeSyner.prototype;

    _proto3._initStorage = function _initStorage(option) {
      var appkey = option.appkey,
          userId = option.userId;
      var ROOT_KEY = utils.tplEngine(STORAGE_SYNC_TIME.ROOT_KEY_TPL, {
        appkey: appkey,
        userId: userId
      });
      var storage = new RCStorage(ROOT_KEY);
      var syncTime = {
        sendboxTime: storage.get(STORAGE_SYNC_TIME.SUB_KEY.SENDBOX),
        inboxTime: storage.get(STORAGE_SYNC_TIME.SUB_KEY.INBOX)
      };
      this._storage = storage;
      this._syncTime = formatSyncTime(syncTime);
    };

    _proto3.setInbox = function setInbox(time) {
      this._syncTime.inboxTime = time;

      this._storage.set(STORAGE_SYNC_TIME.SUB_KEY.INBOX, time);
    };

    _proto3.setSendbox = function setSendbox(time) {
      this._syncTime.sendboxTime = time;

      this._storage.set(STORAGE_SYNC_TIME.SUB_KEY.SENDBOX, time);
    };

    _proto3.setByMessage = function setByMessage(msg) {
      var direction = msg.direction,
          sentTime = msg.sentTime;
      var isSelfSend = direction === MESSAGE_DIRECTION.SEND;
      isSelfSend ? this.setSendbox(sentTime) : this.setInbox(sentTime);
    };

    _proto3.get = function get() {
      return formatSyncTime(this._syncTime);
    };

    return MessageTimeSyner;
  }();

  var ChatRoomMessageTimeSyner = function () {
    function ChatRoomMessageTimeSyner() {
      this._pullTimes = {};
    }

    var _proto4 = ChatRoomMessageTimeSyner.prototype;

    _proto4.set = function set(chrmId, time) {
      this._pullTimes[chrmId] = time;
    };

    _proto4.get = function get(chrmId) {
      return this._pullTimes[chrmId] || 0;
    };

    _proto4.setByMessage = function setByMessage(msg) {
      var sentTime = msg.sentTime;
      var chrmId = msg.targetId;
      this.set(chrmId, sentTime);
    };

    return ChatRoomMessageTimeSyner;
  }();

  var getUIDByToken = function getUIDByToken(token) {
    return utils.md5(token).slice(8, 16);
  };

  var isIncludeNavi = function isIncludeNavi(token) {
    return utils.isInclude(token, NAVI_SEPARATOR_IN_TOKEN);
  };

  var getNaviListByToken = function getNaviListByToken(token) {
    var navDomainList = [];

    if (isIncludeNavi(token)) {
      var separatorIndex = utils.indexOf(token, NAVI_SEPARATOR_IN_TOKEN);
      var navsText = token.substring(separatorIndex + 1, token.length);
      var domainList = navsText.split(DOMAIN_SEPARATOR_IN_NAVLIST);
      utils.forEach(domainList, function (domain) {
        if (!isEmpty$1(domain)) {
          navDomainList.push(domain);
        }
      });
    }

    return navDomainList;
  };

  var getCMPDomainList = function getCMPDomainList(option) {
    var server = option.server,
        backupServer = option.backupServer;
    server = server || '
Download .txt
gitextract_ajuhcao0/

├── .gitignore
├── LICENSE
├── README.md
├── api-test/
│   ├── .gitignore
│   ├── README.md
│   ├── config.js
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   ├── json-alert.js
│   │   │   └── msg-expansion.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-3.0.0.js
│   │   │   ├── RongIMLib-3.0.3.js
│   │   │   ├── RongIMLib-3.0.5-mentioned.js
│   │   │   ├── RongIMLib-3.0.6.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test-v2/
│   ├── .gitignore
│   ├── README.md
│   ├── config.js
│   ├── debug.html
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   └── json-alert.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-2.3.1-revise-20200311-222.js
│   │   │   ├── RongIMLib-2.3.1-revise-20200311.js
│   │   │   ├── RongIMLib-2.3.5-bugfix-zhiyuan-20190408.js
│   │   │   ├── RongIMLib-2.5.1.js
│   │   │   ├── RongIMLib-2.5.3.js
│   │   │   ├── RongIMLib-2.5.4.js
│   │   │   ├── RongIMLib-2.5.5-private.js
│   │   │   ├── RongIMLib-2.5.5.js
│   │   │   ├── RongIMLib-2.5.6.js
│   │   │   ├── RongIMLib-2.5.9-release.js
│   │   │   ├── RongIMLib-2.5.9-silent.js
│   │   │   ├── RongIMLib.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test-v4/
│   ├── README.md
│   ├── config.js
│   ├── index.html
│   ├── js/
│   │   ├── common/
│   │   │   ├── api-list.js
│   │   │   ├── service.js
│   │   │   └── utils.js
│   │   ├── components/
│   │   │   ├── button.js
│   │   │   ├── json-alert.js
│   │   │   └── msg-expansion.js
│   │   ├── login.js
│   │   └── main.js
│   ├── lib/
│   │   ├── js/
│   │   │   ├── RongIMLib-4.1.0.js
│   │   │   ├── RongIMLib-4.2.0.js
│   │   │   ├── es6-promise.js
│   │   │   ├── vue-2.6.10.js
│   │   │   └── vue-json-pretty.js
│   │   └── styles/
│   │       ├── dragula-3.7.2.css
│   │       └── iview.css
│   └── styles/
│       ├── main.css
│       └── main.scss
├── api-test.html
├── calllib-v2/
│   ├── README.md
│   ├── demo.js
│   ├── group.html
│   ├── init.js
│   ├── private.html
│   ├── style/
│   │   └── main.css
│   └── user-media.html
├── calllib-v3/
│   ├── README.md
│   ├── docs/
│   │   ├── ready.md
│   │   ├── server.md
│   │   ├── show.md
│   │   └── web.md
│   ├── private.html
│   ├── server/
│   │   ├── index.js
│   │   ├── package.json
│   │   └── setting.js
│   ├── web/
│   │   ├── css/
│   │   │   ├── main.css
│   │   │   └── main.scss
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── call.js
│   │   │   ├── common/
│   │   │   │   ├── init.js
│   │   │   │   └── utils.js
│   │   │   ├── dialog.js
│   │   │   ├── login.js
│   │   │   └── main.js
│   │   ├── lib/
│   │   │   ├── vue-2.6.7.js
│   │   │   └── vue-router-3.0.2.js
│   │   └── setting.js
│   ├── web-ie/
│   │   ├── README.md
│   │   ├── css/
│   │   │   ├── main.css
│   │   │   └── main.scss
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── call.js
│   │   │   ├── common/
│   │   │   │   ├── init.js
│   │   │   │   └── utils.js
│   │   │   ├── dialog.js
│   │   │   ├── login.js
│   │   │   └── main.js
│   │   ├── lib/
│   │   │   ├── RongCallLib.3.1.5.js
│   │   │   ├── RongIMLib-2.5.1.js
│   │   │   ├── RongRTC-IE-3.0.4.js
│   │   │   ├── promise.js
│   │   │   ├── vue-2.6.7.js
│   │   │   └── vue-router-3.0.2.js
│   │   └── setting.js
│   └── web-im-v3/
│       ├── css/
│       │   ├── main.css
│       │   └── main.scss
│       ├── index.html
│       ├── js/
│       │   ├── call.js
│       │   ├── common/
│       │   │   ├── init.js
│       │   │   └── utils.js
│       │   ├── dialog.js
│       │   ├── login.js
│       │   └── main.js
│       ├── lib/
│       │   ├── vue-2.6.7.js
│       │   └── vue-router-3.0.2.js
│       └── setting.js
├── chameleon/
│   ├── README.md
│   ├── chameleon.config.js
│   ├── dist/
│   │   └── wx/
│   │       ├── app.js
│   │       ├── app.json
│   │       ├── app.wxss
│   │       ├── pages/
│   │       │   └── index/
│   │       │       ├── index.js
│   │       │       ├── index.json
│   │       │       └── index.wxml
│   │       └── static/
│   │           └── js/
│   │               ├── app.js
│   │               ├── common.js
│   │               ├── manifest.js
│   │               └── pages/
│   │                   └── index/
│   │                       └── index.js
│   ├── mock/
│   │   ├── api/
│   │   │   └── index.js
│   │   └── template/
│   │       └── index.php
│   ├── npm-shrinkwrap.json
│   ├── package.json
│   └── src/
│       ├── app/
│       │   └── app.cml
│       ├── assets/
│       │   └── js/
│       │       └── RongIMLib-2.4.0.js
│       ├── components/
│       │   └── demo-com/
│       │       └── demo-com.cml
│       ├── pages/
│       │   └── index/
│       │       └── index.cml
│       ├── router.config.json
│       └── store/
│           ├── actions.js
│           ├── getters.js
│           ├── index.js
│           ├── mutations.js
│           └── state.js
├── chatroom/
│   ├── chatroom.html
│   ├── chatroom.js
│   ├── chatroom.sdk.js
│   └── demo.html
├── chatroom-h5/
│   ├── README.md
│   ├── demo.html
│   ├── js/
│   │   ├── RongIMLib-2.5.12.js
│   │   ├── chatroom.js
│   │   ├── demo.js
│   │   ├── like.js
│   │   ├── mock.js
│   │   └── render.js
│   └── style/
│       └── chatroom.css
├── chatroom-h5-gif/
│   ├── README.md
│   ├── demo.html
│   ├── js/
│   │   ├── RongIMLib-2.5.12.js
│   │   ├── chatroom.js
│   │   ├── demo.js
│   │   ├── like.js
│   │   ├── mock.js
│   │   └── render.js
│   └── style/
│       └── chatroom.css
├── chrm-kv-demo/
│   ├── README.md
│   ├── css/
│   │   ├── main.css
│   │   └── main.scss
│   ├── index.html
│   ├── js/
│   │   ├── init.js
│   │   ├── main.js
│   │   └── utils.js
│   └── setting.js
├── common-im/
│   ├── css/
│   │   ├── common.css
│   │   └── main.css
│   ├── index.html
│   └── js/
│       └── service.js
├── connect-check.html
├── cs/
│   ├── jx/
│   │   ├── .gitignore
│   │   ├── .project
│   │   ├── Gruntfile.js
│   │   ├── README.md
│   │   ├── RongIMemoji.js
│   │   ├── cs.css
│   │   ├── cs.html
│   │   ├── cs.js
│   │   ├── dist/
│   │   │   └── cs.html
│   │   ├── emoji.js
│   │   ├── package.json
│   │   ├── phiz.js
│   │   ├── qiniu-upload.js
│   │   ├── template.js
│   │   ├── templates/
│   │   │   ├── button.html
│   │   │   ├── chat.html
│   │   │   ├── closebefore.html
│   │   │   ├── conversation.html
│   │   │   ├── endconversation.html
│   │   │   ├── evaluate.html
│   │   │   ├── imageView.html
│   │   │   ├── import.html
│   │   │   ├── leaveword.html
│   │   │   ├── main.html
│   │   │   ├── message.html
│   │   │   ├── messageTemplate.html
│   │   │   └── userInfo.html
│   │   ├── ui.html
│   │   └── utils.js
│   └── sobot/
│       ├── .gitignore
│       ├── Gruntfile.js
│       ├── README.md
│       ├── RongIMEmoji.js
│       ├── cs.css
│       ├── cs.html
│       ├── cs.js
│       ├── dist/
│       │   └── cs.html
│       ├── emoji.js
│       ├── package.json
│       ├── qiniu.js
│       ├── template.js
│       ├── templates/
│       │   ├── button.html
│       │   ├── chat.html
│       │   ├── closebefore.html
│       │   ├── conversation.html
│       │   ├── endconversation.html
│       │   ├── evaluate.html
│       │   ├── evaluateItem.html
│       │   ├── imageView.html
│       │   ├── import.html
│       │   ├── leaveword.html
│       │   ├── main.html
│       │   ├── message.html
│       │   ├── messageTemplate.html
│       │   └── userInfo.html
│       ├── test.html
│       ├── ui.html
│       ├── upload.js
│       └── utils.js
├── desktop/
│   ├── downloadExtra.html
│   ├── file.html
│   ├── index.html
│   ├── screenshot.html
│   ├── system.html
│   └── window.html
├── electron/
│   ├── desktop_share.html
│   ├── init.js
│   ├── main.js
│   ├── normal.html
│   ├── package.json
│   ├── requirejs-in-node.html
│   ├── sdk/
│   │   ├── RongIMLib-2.3.3.js
│   │   ├── RongIMLib-2.5.1.js
│   │   └── init.js
│   └── user_media.html
├── electron-vue/
│   ├── .babelrc
│   ├── .electron-vue/
│   │   ├── build.js
│   │   ├── dev-client.js
│   │   ├── dev-runner.js
│   │   ├── webpack.main.config.js
│   │   ├── webpack.renderer.config.js
│   │   └── webpack.web.config.js
│   ├── .eslintignore
│   ├── .eslintrc.js
│   ├── .gitignore
│   ├── .travis.yml
│   ├── README.md
│   ├── appveyor.yml
│   ├── package.json
│   ├── src/
│   │   ├── index.ejs
│   │   ├── main/
│   │   │   ├── index.dev.js
│   │   │   └── index.js
│   │   └── renderer/
│   │       ├── App.vue
│   │       ├── assets/
│   │       │   └── .gitkeep
│   │       ├── components/
│   │       │   └── Init.vue
│   │       ├── main.js
│   │       ├── router/
│   │       │   └── index.js
│   │       └── store/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── Counter.js
│   │               └── index.js
│   ├── static/
│   │   ├── .gitkeep
│   │   └── js/
│   │       ├── RongEmoji-2.2.7.js
│   │       └── RongIMLib-2.5.1.js
│   └── test/
│       ├── .eslintrc
│       ├── e2e/
│       │   ├── index.js
│       │   ├── specs/
│       │   │   └── Launch.spec.js
│       │   └── utils.js
│       └── unit/
│           ├── index.js
│           ├── karma.conf.js
│           └── specs/
│               └── LandingPage.spec.js
├── electron-vue-sdk-v3/
│   ├── .babelrc
│   ├── .electron-vue/
│   │   ├── build.js
│   │   ├── dev-client.js
│   │   ├── dev-runner.js
│   │   ├── webpack.main.config.js
│   │   ├── webpack.renderer.config.js
│   │   └── webpack.web.config.js
│   ├── .eslintignore
│   ├── .eslintrc.js
│   ├── .gitignore
│   ├── .travis.yml
│   ├── README.md
│   ├── appveyor.yml
│   ├── package.json
│   ├── src/
│   │   ├── index.ejs
│   │   ├── main/
│   │   │   ├── index.dev.js
│   │   │   └── index.js
│   │   └── renderer/
│   │       ├── App.vue
│   │       ├── assets/
│   │       │   └── .gitkeep
│   │       ├── components/
│   │       │   └── Init.vue
│   │       ├── main.js
│   │       ├── router/
│   │       │   └── index.js
│   │       └── store/
│   │           ├── index.js
│   │           └── modules/
│   │               ├── Counter.js
│   │               └── index.js
│   ├── static/
│   │   ├── .gitkeep
│   │   └── js/
│   │       ├── RongEmoji-2.2.7.js
│   │       ├── RongIMLib-2.5.1.js
│   │       └── RongIMLib-3.0.1-dev.es.js
│   └── test/
│       ├── .eslintrc
│       ├── e2e/
│       │   ├── index.js
│       │   ├── specs/
│       │   │   └── Launch.spec.js
│       │   └── utils.js
│       └── unit/
│           ├── index.js
│           ├── karma.conf.js
│           └── specs/
│               └── LandingPage.spec.js
├── emoji.html
├── faq.md
├── histroy-messages.html
├── im/
│   ├── .gitignore
│   ├── Gruntfile.js
│   ├── README.md
│   ├── emoji.js
│   ├── im.css
│   ├── im.html
│   ├── im.js
│   ├── libs/
│   │   ├── RongEmoji.js
│   │   ├── qiniu-upload.js
│   │   └── utils.js
│   ├── package.json
│   ├── template.js
│   └── templates/
│       ├── button.html
│       ├── chat.html
│       ├── closebefore.html
│       ├── conversation.html
│       ├── endconversation.html
│       ├── evaluate.html
│       ├── imMain.html
│       ├── imMessage.html
│       ├── imMessageTemplate.html
│       ├── imageView.html
│       ├── import.html
│       ├── leaveword.html
│       ├── main.html
│       ├── message.html
│       ├── messageTemplate.html
│       └── userInfo.html
├── im-ui-mod/
│   ├── component-ui.css
│   ├── reset.css
│   └── ui.html
├── init-muti.html
├── init-muti.js
├── init.js
├── integrate/
│   ├── chat/
│   │   ├── chat-guide.html
│   │   ├── chat.css
│   │   ├── chat.html
│   │   ├── chat.js
│   │   └── chat.json
│   ├── conversation-list/
│   │   ├── conversation-list-guide.html
│   │   ├── conversation-list.css
│   │   ├── conversation-list.html
│   │   ├── conversation-list.js
│   │   └── conversation-list.json
│   ├── guide.html
│   ├── init.html
│   ├── init.js
│   ├── integrate.css
│   ├── lib/
│   │   ├── jquery-3.1.1.js
│   │   └── vue-2.1.4.js
│   ├── login/
│   │   ├── login.css
│   │   ├── login.html
│   │   ├── login.js
│   │   └── login.json
│   ├── message/
│   │   ├── message-guide.html
│   │   ├── message.css
│   │   ├── message.html
│   │   ├── message.js
│   │   ├── message.json
│   │   └── upload/
│   │       ├── qiniu.js
│   │       ├── upload.js
│   │       └── uploadInit.js
│   ├── public/
│   │   ├── js/
│   │   │   ├── public-article.js
│   │   │   ├── public-chat.js
│   │   │   ├── public-common.js
│   │   │   ├── public-info.js
│   │   │   ├── public-list.js
│   │   │   └── public-search.js
│   │   ├── public-guide.html
│   │   ├── public-mock-data.json
│   │   ├── public.css
│   │   ├── public.html
│   │   └── template/
│   │       ├── public-article.html
│   │       ├── public-chat.html
│   │       ├── public-info.html
│   │       ├── public-list.html
│   │       └── public-search.html
│   ├── reset.css
│   └── server-api.md
├── js/
│   ├── message-output.js
│   └── pre-check.js
├── json-view/
│   ├── jquery.jsonview.js
│   └── jsonview.css
├── lib/
│   ├── RongCallLib.js
│   ├── RongEmoji-dev.js
│   ├── RongIMVoice-2.2.6.js
│   ├── jquery-3.1.1.js
│   ├── require.js
│   ├── seajs-2.1.1.js
│   └── vue-2.1.4.js
├── local-sdks/
│   ├── README.md
│   ├── emoji.html
│   ├── im.html
│   ├── sdk/
│   │   ├── RongIMLib-2.3.4.js
│   │   ├── RongIMLib-2.3.5.js
│   │   ├── RongIMLib-2.4.0.js
│   │   ├── RongIMLib-2.5.0.js
│   │   ├── RongIMLib-2.5.1.js
│   │   └── RongIMLib-2.5.3.js
│   ├── voice-amr-base64.json
│   └── voice.html
├── miniprogram-upload/
│   ├── README.md
│   ├── app.js
│   ├── app.json
│   ├── app.wxss
│   ├── pages/
│   │   ├── index/
│   │   │   ├── index.js
│   │   │   ├── index.json
│   │   │   ├── index.wxml
│   │   │   └── index.wxss
│   │   ├── lib/
│   │   │   └── RongIMLib-3.0.4-dev.js
│   │   └── services.js
│   ├── project.config.json
│   ├── sitemap.json
│   └── utils/
│       └── util.js
├── nav/
│   ├── README.md
│   ├── css/
│   │   ├── iconfont.css
│   │   └── style.css
│   ├── index.html
│   └── js/
│       ├── config.js
│       └── index.js
├── react/
│   ├── im.html
│   ├── react-16.2.js
│   └── react-dom-16.2.js
├── require.html
├── res/
│   ├── rongcloud.css
│   └── voice-amr-base64.json
├── rongrtc/
│   ├── README.md
│   ├── api/
│   │   └── api.html
│   ├── im.js
│   ├── mock.js
│   ├── screenshare/
│   │   ├── screenshare.html
│   │   └── screenshare.js
│   └── utils.js
├── rtc/
│   ├── README.md
│   ├── app/
│   │   ├── README.md
│   │   ├── config.js
│   │   ├── css/
│   │   │   ├── common.css
│   │   │   └── main.css
│   │   ├── index.html
│   │   ├── js/
│   │   │   ├── core.js
│   │   │   └── utils.js
│   │   └── lib/
│   │       ├── RongRTCEngine.js
│   │       └── adapter.js
│   └── whiteboard/
│       └── src/
│           ├── blink-wb.html
│           ├── config.js
│           ├── css/
│           │   ├── app.css
│           │   ├── enyo.css
│           │   ├── main.css
│           │   ├── style.css
│           │   ├── sweetalert.css
│           │   ├── upload.css
│           │   └── uploadfile.css
│           ├── js/
│           │   ├── Queue.src.js
│           │   ├── blink/
│           │   │   └── blinkEwb.js
│           │   ├── common.js
│           │   ├── core.js
│           │   ├── ewb/
│           │   │   ├── App.js
│           │   │   ├── Connection.js
│           │   │   ├── Svg.js
│           │   │   └── WhiteBoardApi.js
│           │   ├── lib/
│           │   │   ├── enyo-ilib/
│           │   │   │   └── ilib/
│           │   │   │       └── locale/
│           │   │   │           ├── ilibmanifest.json
│           │   │   │           ├── scripts.json
│           │   │   │           └── und/
│           │   │   │               └── CN/
│           │   │   │                   └── localeinfo.json
│           │   │   ├── enyo-ilib.js
│           │   │   ├── enyo.js
│           │   │   ├── layout.js
│           │   │   └── onyx.js
│           │   ├── raphael-min.js
│           │   └── raphael.inline_text_editing.js
│           └── resources/
│               ├── localeinfo.json
│               └── strings.json
├── sdk-unitest/
│   ├── emoji/
│   │   ├── emoji.js
│   │   ├── run.html
│   │   └── testcase.js
│   ├── im/
│   │   ├── RongIMLib-2.2.7.js
│   │   ├── run.html
│   │   └── testcase/
│   │       ├── 1-staticCheck.js
│   │       ├── 2-connect.js
│   │       └── 3-sendMessage.js
│   ├── index.html
│   ├── jasmine/
│   │   ├── 1.2.0/
│   │   │   ├── jasmine-html.js
│   │   │   ├── jasmine.css
│   │   │   └── jasmine.js
│   │   └── guide.js
│   └── libs/
│       ├── ua.js
│       └── underscore.js
├── seajs.html
├── sticker/
│   ├── README.md
│   ├── extend-stickers/
│   │   └── extend-sticker.js
│   ├── init.js
│   ├── message.html
│   ├── require.html
│   └── sticker.html
├── switch-users.html
├── unreadcount/
│   └── unreadcount.js
├── user-group.js
├── video/
│   ├── flowplayer/
│   │   ├── flowplayer-3.2.13.js
│   │   ├── flowplayer-3.2.18.swf
│   │   └── flowplayer.controls-3.2.16.swf
│   └── player.html
├── voice-autoplay.html
├── voice.html
├── vue/
│   ├── im/
│   │   ├── config.js
│   │   ├── conversation-list.js
│   │   ├── css/
│   │   │   ├── common.css
│   │   │   └── main.css
│   │   ├── im.html
│   │   ├── im.js
│   │   ├── js/
│   │   │   └── service.js
│   │   ├── lib/
│   │   │   ├── vue-2.1.4.js
│   │   │   └── vue-router-2.1.1.js
│   │   ├── message-list.js
│   │   └── routes.js
│   ├── normal.html
│   ├── require.html
│   └── vue-2.1.4.js
├── vue-cli/
│   ├── .eslintignore
│   ├── .gitignore
│   ├── README.md
│   ├── babel.config.js
│   ├── package.json
│   ├── public/
│   │   └── index.html
│   └── src/
│       ├── App.vue
│       ├── components/
│       │   └── Init.vue
│       └── main.js
└── vue-cli-4/
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── package.json
    ├── public/
    │   └── index.html
    └── src/
        ├── App.vue
        ├── components/
        │   └── Init.vue
        └── main.js
Download .txt
Showing preview only (828K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10598 symbols across 180 files)

FILE: api-test-v2/js/common/service.js
  function init (line 47) | function init(config, watcher) {
  function disconnect (line 99) | function disconnect() {
  function changeUser (line 106) | function changeUser(config, watcher) {
  function reconnect (line 116) | function reconnect(isAuto, url, rate) {
  function getConversationList (line 142) | function getConversationList(count) {
  function removeConversation (line 155) | function removeConversation(conversationType, targetId) {
  function getHistoryMessages (line 172) | function getHistoryMessages(timestrap, count, conversationType, targetId) {
  function clearHistoryMessages (line 188) | function clearHistoryMessages(timestamp, conversationType, targetId) {
  function deleteRemoteMessages (line 210) | function deleteRemoteMessages(messageUId, sentTime, messageDirection, co...
  function getUnreadCount (line 239) | function getUnreadCount(conversationType, targetId) {
  function getTotalUnreadCount (line 253) | function getTotalUnreadCount() {
  function clearUnreadCount (line 266) | function clearUnreadCount(conversationType, targetId) {
  function sendMessage (line 276) | function sendMessage(conversationType, targetId, msg, disableNotificatio...
  function sendTextMessage (line 306) | function sendTextMessage(text, conversationType, targetId, disableNotifi...
  function sendImageMessage (line 328) | function sendImageMessage(base64, imageUri, conversationType, targetId, ...
  function sendFileMessage (line 346) | function sendFileMessage(fileName, fileSize, fileType, fileUrl, conversa...
  function sendVoiceMessage (line 365) | function sendVoiceMessage(remoteUrl, duration, conversationType, targetI...
  function sendRecallMessage (line 382) | function sendRecallMessage(messageUId, sentTime, conversationType, targe...
  function sendAtMessage (line 413) | function sendAtMessage(text, methiondId, conversationType, targetId, dis...
  function registerMessage (line 448) | function registerMessage(messageName, objectName, isCounted, isPersited,...
  function sendRegisterMessage (line 462) | function sendRegisterMessage(messageType, props, conversationType, targe...
  function sendLocationMessage (line 480) | function sendLocationMessage(base64, latitude, longitude, poi, conversat...
  function sendRichContentMessage (line 500) | function sendRichContentMessage(title, content, imageUri, url, conversat...
  function sendTypingStatusMessage (line 519) | function sendTypingStatusMessage(conversationType, targetId, typingConte...
  function joinChatRoom (line 531) | function joinChatRoom(chatRoomId, count) {
  function quitChatRoom (line 546) | function quitChatRoom(chatRoomId) {
  function getChatRoomInfo (line 563) | function getChatRoomInfo(chatRoomId, count, order) {
  function sendChatroomMessage (line 578) | function sendChatroomMessage(text, conversationType, targetId) {
  function setChatroomEntry (line 586) | function setChatroomEntry(key, value, isAutoDelete, isSendNotification, ...
  function forceSetChatroomEntry (line 602) | function forceSetChatroomEntry(key, value, isAutoDelete, isSendNotificat...
  function removeChatroomEntry (line 618) | function removeChatroomEntry(key, isSendNotification, extra, chatRoomId) {
  function forceRemoveChatroomEntry (line 632) | function forceRemoveChatroomEntry(key, isSendNotification, extra, chatRo...
  function getChatroomEntry (line 646) | function getChatroomEntry(key, chatRoomId) {
  function getAllChatroomEntries (line 655) | function getAllChatroomEntries(chatRoomId) {
  function setConversationStatus (line 664) | function setConversationStatus(notificationStatus, isTop, conversationTy...
  function getLastCacheMsgUId (line 676) | function getLastCacheMsgUId() {
  function getLastCacheMsgSentTime (line 679) | function getLastCacheMsgSentTime() {
  function getLastCacheMsgDirection (line 682) | function getLastCacheMsgDirection() {

FILE: api-test-v2/js/common/utils.js
  function isObject (line 43) | function isObject(obj) {
  function isArray (line 46) | function isArray(arr) {
  function isNodeList (line 49) | function isNodeList(arr) {
  function isFunction (line 53) | function isFunction(arr) {
  function isString (line 56) | function isString(str) {
  function isBoolean (line 59) | function isBoolean(str) {
  function isUndefined (line 62) | function isUndefined(str) {
  function isNull (line 65) | function isNull(str) {
  function isNumber (line 68) | function isNumber(str) {
  function defered (line 72) | function defered(callback) {
  function tplEngine (line 76) | function tplEngine(temp, data, regexp) {
  function forEach (line 91) | function forEach(obj, callback, options) {
  function clearUndefKey (line 119) | function clearUndefKey(obj) {
  function map (line 128) | function map(arr, event) {
  function deepMap (line 135) | function deepMap(arr, event) {
  function isEqual (line 146) | function isEqual(obj1, obj2) {
  function getDom (line 160) | function getDom(id) {
  function queryAllDom (line 164) | function queryAllDom(sel) {
  function queryDom (line 168) | function queryDom(sel) {
  function removeDom (line 172) | function removeDom(dom) {
  function getParent (line 177) | function getParent(dom) {
  function getChildren (line 181) | function getChildren(dom) {
  function getTemp (line 185) | function getTemp(id) {
  function getDomIndex (line 190) | function getDomIndex(dom) {
  function toJSON (line 202) | function toJSON(obj) {
  function parseJSON (line 206) | function parseJSON(str) {
  function copy (line 214) | function copy(obj) {
  function hasClass (line 219) | function hasClass(el, className) {
  function timestampToString (line 232) | function timestampToString(timestamp) {
  function extend (line 243) | function extend(destination, sources) {
  function mountDialog (line 257) | function mountDialog(options, instance) {
  function reverse (line 268) | function reverse(obj) {
  function openUrl (line 273) | function openUrl(url) {
  function getBase64Image (line 277) | function getBase64Image() {
  function getIncreasNumber (line 291) | function getIncreasNumber() {
  function getUrlQuery (line 324) | function getUrlQuery() {
  function getRCUrlQuery (line 337) | function getRCUrlQuery() {
  function deferNoop (line 361) | function deferNoop() {

FILE: api-test-v2/js/main.js
  function runAllApi (line 46) | function runAllApi(allRefs, currentIndex, finishCallback) {
  function runOneByOne (line 70) | function runOneByOne(finishCallback) {
  function runLineByLine (line 81) | function runLineByLine(finishCallback) {
  function setConfig (line 90) | function setConfig(config) {
  function watchStatus (line 101) | function watchStatus(status) {
  function watchConversationStatus (line 120) | function watchConversationStatus(status) {
  function watchMessage (line 126) | function watchMessage(message) {
  function autoRun (line 141) | function autoRun() {
  function loginSuccessEvent (line 154) | function loginSuccessEvent(userId, config) {
  function login (line 166) | function login(config) {
  function getApiListMethods (line 184) | function getApiListMethods() {
  function getServiceMethods (line 230) | function getServiceMethods() {
  function start (line 355) | function start() {

FILE: api-test-v2/lib/js/RongIMLib-2.3.1-revise-20200311-222.js
  function safe_add (line 980) | function safe_add(x, y) {
  function bit_rol (line 989) | function bit_rol(num, cnt) {
  function md5_cmn (line 996) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 999) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1002) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1005) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1008) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1015) | function binl_md5(x, len) {
  function binl2rstr (line 1111) | function binl2rstr(input) {
  function rstr2binl (line 1124) | function rstr2binl(input) {
  function rstr_md5 (line 1140) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1147) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1168) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1184) | function str2rstr_utf8(input) {
  function raw_md5 (line 1191) | function raw_md5(s) {
  function hex_md5 (line 1194) | function hex_md5(s) {
  function raw_hmac_md5 (line 1197) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1200) | function hex_hmac_md5(k, d) {
  function md5 (line 1204) | function md5(string, key, raw) {
  function RongIMClient (line 1933) | function RongIMClient() {
  function Channel (line 4093) | function Channel(cb, self) {
  function Socket (line 4244) | function Socket() {
  function Client (line 4363) | function Client(token, appId) {
  function Bridge (line 4578) | function Bridge() {
  function MessageHandler (line 4632) | function MessageHandler(client) {
  function __ (line 4965) | function __() { this.constructor = d; }
  function MessageCallback (line 4972) | function MessageCallback(error) {
  function CallbackMapping (line 5009) | function CallbackMapping() {
  function PublishCallback (line 5075) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5105) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5138) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5218) | function Navigation() {
  function BaseMessage (line 5334) | function BaseMessage(arg) {
  function ConnectMessage (line 5418) | function ConnectMessage(header) {
  function ConnAckMessage (line 5513) | function ConnAckMessage(header) {
  function DisconnectMessage (line 5614) | function DisconnectMessage(header) {
  function PingReqMessage (line 5664) | function PingReqMessage(header) {
  function PingRespMessage (line 5676) | function PingRespMessage(header) {
  function RetryableMessage (line 5688) | function RetryableMessage(argu) {
  function PubAckMessage (line 5721) | function PubAckMessage(header) {
  function PublishMessage (line 5777) | function PublishMessage(header, two, three) {
  function QueryMessage (line 5854) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 5916) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 5931) | function QueryAckMessage(header) {
  function MessageOutputStream (line 5975) | function MessageOutputStream(_out) {
  function MessageInputStream (line 5992) | function MessageInputStream(In, isPolling) {
  function Header (line 6057) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6114) | function BinaryHelper() {
  function RongIMStream (line 6197) | function RongIMStream(arr) {
  function SocketTransportation (line 6329) | function SocketTransportation(_socket) {
  function PollingTransportation (line 6484) | function PollingTransportation(socket) {
  function Transportations (line 6731) | function Transportations() {
  function MessageUtil (line 6738) | function MessageUtil() {
  function MessageIdHandler (line 6916) | function MessageIdHandler() {
  function RongInnerTools (line 6944) | function RongInnerTools() {
  function MessageContent (line 6963) | function MessageContent(data) {
  function NotificationMessage (line 6974) | function NotificationMessage() {
  function StatusMessage (line 6982) | function StatusMessage() {
  function ModelUtil (line 6989) | function ModelUtil() {
  function CustomerStatusMessage (line 7023) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 7040) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 7060) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 7076) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 7091) | function HandShakeMessage(message) {
  function CustomerContact (line 7105) | function CustomerContact(message) {
  function EvaluateMessage (line 7120) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 7143) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 7159) | function SuspendMessage(message) {
  function TerminateMessage (line 7175) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 7194) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 7211) | function InformationNotificationMessage(message) {
  function CommandMessage (line 7232) | function CommandMessage(message) {
  function ContactNotificationMessage (line 7261) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 7288) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 7320) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 7352) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 7374) | function GroupNotificationMessage(msg) {
  function TextMessage (line 7395) | function TextMessage(message) {
  function TypingStatusMessage (line 7422) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 7440) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 7459) | function VoiceMessage(message) {
  function RecallCommandMessage (line 7487) | function RecallCommandMessage(message) {
  function ImageMessage (line 7509) | function ImageMessage(message) {
  function LocationMessage (line 7535) | function LocationMessage(message) {
  function RichContentMessage (line 7562) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 7586) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 7597) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 7608) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 7622) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 7647) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 7658) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 7669) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 7680) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 7691) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 7702) | function FileMessage(message) {
  function AcceptMessage (line 7721) | function AcceptMessage(message) {
  function RingingMessage (line 7734) | function RingingMessage(message) {
  function SummaryMessage (line 7745) | function SummaryMessage(message) {
  function HungupMessage (line 7763) | function HungupMessage(message) {
  function InviteMessage (line 7775) | function InviteMessage(message) {
  function MediaModifyMessage (line 7793) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 7805) | function MemberModifyMessage(message) {
  function ChannelInfo (line 7829) | function ChannelInfo(Id, Key) {
  function UserStatus (line 7837) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 7846) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 7852) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 7861) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 7867) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 7873) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 7903) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 7914) | function Group(id, name, portraitUri) {
  function Message (line 7923) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 7946) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 7968) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 7980) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 7994) | function UserInfo(id, name, portraitUri) {
  function ServerDataProvider (line 8006) | function ServerDataProvider() {
  function VCDataProvider (line 9461) | function VCDataProvider(addon) {
  function MemeoryProvider (line 10416) | function MemeoryProvider() {
  function LocalStorageProvider (line 10459) | function LocalStorageProvider() {
  function UserDataProvider (line 10531) | function UserDataProvider() {
  function FeatureDectector (line 10600) | function FeatureDectector(callback) {
  function FeaturePatcher (line 10639) | function FeaturePatcher() {
  function JSON (line 10657) | function JSON() {
  function PublicServiceMap (line 10733) | function PublicServiceMap() {
  function ConversationMap (line 10781) | function ConversationMap() {
  function CheckParam (line 10829) | function CheckParam() {
  function LimitableMap (line 10876) | function LimitableMap(limit) {
  function RongAjax (line 10894) | function RongAjax(options) {
  function RongUtil (line 10939) | function RongUtil() {
  function replaceAction (line 10979) | function replaceAction(object) {
  function RongObserver (line 11151) | function RongObserver() {
  function Timer (line 11186) | function Timer(config) {
  function InnerUtil (line 11201) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.3.1-revise-20200311.js
  function safe_add (line 982) | function safe_add(x, y) {
  function bit_rol (line 991) | function bit_rol(num, cnt) {
  function md5_cmn (line 998) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1001) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1004) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1007) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1010) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1017) | function binl_md5(x, len) {
  function binl2rstr (line 1113) | function binl2rstr(input) {
  function rstr2binl (line 1126) | function rstr2binl(input) {
  function rstr_md5 (line 1142) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1149) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1170) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1186) | function str2rstr_utf8(input) {
  function raw_md5 (line 1193) | function raw_md5(s) {
  function hex_md5 (line 1196) | function hex_md5(s) {
  function raw_hmac_md5 (line 1199) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1202) | function hex_hmac_md5(k, d) {
  function md5 (line 1206) | function md5(string, key, raw) {
  function RongIMClient (line 1935) | function RongIMClient() {
  function Channel (line 4133) | function Channel(cb, self) {
  function Socket (line 4285) | function Socket() {
  function Client (line 4404) | function Client(token, appId) {
  function Bridge (line 4619) | function Bridge() {
  function MessageHandler (line 4673) | function MessageHandler(client) {
  function __ (line 5006) | function __() { this.constructor = d; }
  function MessageCallback (line 5013) | function MessageCallback(error) {
  function CallbackMapping (line 5050) | function CallbackMapping() {
  function PublishCallback (line 5116) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5146) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5179) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5259) | function Navigation() {
  function BaseMessage (line 5382) | function BaseMessage(arg) {
  function ConnectMessage (line 5466) | function ConnectMessage(header) {
  function ConnAckMessage (line 5561) | function ConnAckMessage(header) {
  function DisconnectMessage (line 5662) | function DisconnectMessage(header) {
  function PingReqMessage (line 5712) | function PingReqMessage(header) {
  function PingRespMessage (line 5724) | function PingRespMessage(header) {
  function RetryableMessage (line 5736) | function RetryableMessage(argu) {
  function PubAckMessage (line 5769) | function PubAckMessage(header) {
  function PublishMessage (line 5825) | function PublishMessage(header, two, three) {
  function QueryMessage (line 5902) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 5964) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 5979) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6023) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6040) | function MessageInputStream(In, isPolling) {
  function Header (line 6105) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6162) | function BinaryHelper() {
  function RongIMStream (line 6245) | function RongIMStream(arr) {
  function SocketTransportation (line 6377) | function SocketTransportation(_socket) {
  function PollingTransportation (line 6532) | function PollingTransportation(socket) {
  function Transportations (line 6779) | function Transportations() {
  function MessageUtil (line 6786) | function MessageUtil() {
  function MessageIdHandler (line 6964) | function MessageIdHandler() {
  function RongInnerTools (line 6992) | function RongInnerTools() {
  function MessageContent (line 7011) | function MessageContent(data) {
  function NotificationMessage (line 7022) | function NotificationMessage() {
  function StatusMessage (line 7030) | function StatusMessage() {
  function ModelUtil (line 7037) | function ModelUtil() {
  function CustomerStatusMessage (line 7071) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 7088) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 7108) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 7124) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 7139) | function HandShakeMessage(message) {
  function CustomerContact (line 7153) | function CustomerContact(message) {
  function EvaluateMessage (line 7168) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 7191) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 7207) | function SuspendMessage(message) {
  function TerminateMessage (line 7223) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 7242) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 7259) | function InformationNotificationMessage(message) {
  function CommandMessage (line 7280) | function CommandMessage(message) {
  function ContactNotificationMessage (line 7309) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 7336) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 7368) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 7400) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 7422) | function GroupNotificationMessage(msg) {
  function TextMessage (line 7443) | function TextMessage(message) {
  function TypingStatusMessage (line 7470) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 7488) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 7507) | function VoiceMessage(message) {
  function RecallCommandMessage (line 7535) | function RecallCommandMessage(message) {
  function ImageMessage (line 7557) | function ImageMessage(message) {
  function LocationMessage (line 7583) | function LocationMessage(message) {
  function RichContentMessage (line 7610) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 7634) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 7645) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 7656) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 7670) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 7695) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 7706) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 7717) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 7728) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 7739) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 7750) | function FileMessage(message) {
  function AcceptMessage (line 7769) | function AcceptMessage(message) {
  function RingingMessage (line 7782) | function RingingMessage(message) {
  function SummaryMessage (line 7793) | function SummaryMessage(message) {
  function HungupMessage (line 7811) | function HungupMessage(message) {
  function InviteMessage (line 7823) | function InviteMessage(message) {
  function MediaModifyMessage (line 7841) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 7853) | function MemberModifyMessage(message) {
  function ChannelInfo (line 7877) | function ChannelInfo(Id, Key) {
  function UserStatus (line 7885) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 7894) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 7900) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 7909) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 7915) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 7921) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 7951) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 7962) | function Group(id, name, portraitUri) {
  function Message (line 7971) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 7994) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 8016) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 8028) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 8042) | function UserInfo(id, name, portraitUri) {
  function ServerDataProvider (line 8054) | function ServerDataProvider() {
  function VCDataProvider (line 9509) | function VCDataProvider(addon) {
  function MemeoryProvider (line 10464) | function MemeoryProvider() {
  function LocalStorageProvider (line 10507) | function LocalStorageProvider() {
  function UserDataProvider (line 10579) | function UserDataProvider() {
  function FeatureDectector (line 10648) | function FeatureDectector(callback) {
  function FeaturePatcher (line 10687) | function FeaturePatcher() {
  function JSON (line 10705) | function JSON() {
  function PublicServiceMap (line 10781) | function PublicServiceMap() {
  function ConversationMap (line 10829) | function ConversationMap() {
  function CheckParam (line 10877) | function CheckParam() {
  function LimitableMap (line 10924) | function LimitableMap(limit) {
  function RongAjax (line 10942) | function RongAjax(options) {
  function RongUtil (line 10987) | function RongUtil() {
  function replaceAction (line 11027) | function replaceAction(object) {
  function RongObserver (line 11242) | function RongObserver() {
  function Timer (line 11277) | function Timer(config) {
  function InnerUtil (line 11292) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.3.5-bugfix-zhiyuan-20190408.js
  function safe_add (line 922) | function safe_add(x, y) {
  function bit_rol (line 931) | function bit_rol(num, cnt) {
  function md5_cmn (line 938) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 941) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 944) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 947) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 950) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 957) | function binl_md5(x, len) {
  function binl2rstr (line 1053) | function binl2rstr(input) {
  function rstr2binl (line 1066) | function rstr2binl(input) {
  function rstr_md5 (line 1082) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1089) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1110) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1126) | function str2rstr_utf8(input) {
  function raw_md5 (line 1133) | function raw_md5(s) {
  function hex_md5 (line 1136) | function hex_md5(s) {
  function raw_hmac_md5 (line 1139) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1142) | function hex_hmac_md5(k, d) {
  function md5 (line 1146) | function md5(string, key, raw) {
  function RongIMClient (line 1892) | function RongIMClient() {
  function Channel (line 4047) | function Channel(cb, self) {
  function Socket (line 4225) | function Socket() {
  function Client (line 4344) | function Client(token, appId) {
  function Bridge (line 4569) | function Bridge() {
  function MessageHandler (line 4623) | function MessageHandler(client) {
  function __ (line 4955) | function __() { this.constructor = d; }
  function MessageCallback (line 4962) | function MessageCallback(error) {
  function CallbackMapping (line 4999) | function CallbackMapping() {
  function PublishCallback (line 5067) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5105) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5138) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5221) | function Navigation() {
  function BaseMessage (line 5344) | function BaseMessage(arg) {
  function ConnectMessage (line 5428) | function ConnectMessage(header) {
  function ConnAckMessage (line 5523) | function ConnAckMessage(header) {
  function DisconnectMessage (line 5624) | function DisconnectMessage(header) {
  function PingReqMessage (line 5674) | function PingReqMessage(header) {
  function PingRespMessage (line 5686) | function PingRespMessage(header) {
  function RetryableMessage (line 5698) | function RetryableMessage(argu) {
  function PubAckMessage (line 5731) | function PubAckMessage(header) {
  function PublishMessage (line 5787) | function PublishMessage(header, two, three) {
  function QueryMessage (line 5864) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 5926) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 5941) | function QueryAckMessage(header) {
  function MessageOutputStream (line 5985) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6002) | function MessageInputStream(In, isPolling) {
  function Header (line 6067) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6124) | function BinaryHelper() {
  function RongIMStream (line 6207) | function RongIMStream(arr) {
  function SocketTransportation (line 6339) | function SocketTransportation(_socket) {
  function PollingTransportation (line 6494) | function PollingTransportation(socket) {
  function Transportations (line 6741) | function Transportations() {
  function SyncTimeUtil (line 6748) | function SyncTimeUtil() {
  function MessageUtil (line 6785) | function MessageUtil() {
  function MessageIdHandler (line 6968) | function MessageIdHandler() {
  function RongInnerTools (line 6996) | function RongInnerTools() {
  function MessageContent (line 7015) | function MessageContent(data) {
  function NotificationMessage (line 7026) | function NotificationMessage() {
  function StatusMessage (line 7034) | function StatusMessage() {
  function ModelUtil (line 7041) | function ModelUtil() {
  function CustomerStatusMessage (line 7075) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 7092) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 7112) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 7128) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 7143) | function HandShakeMessage(message) {
  function CustomerContact (line 7160) | function CustomerContact(message) {
  function EvaluateMessage (line 7175) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 7198) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 7214) | function SuspendMessage(message) {
  function TerminateMessage (line 7230) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 7249) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 7266) | function InformationNotificationMessage(message) {
  function CommandMessage (line 7287) | function CommandMessage(message) {
  function ContactNotificationMessage (line 7316) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 7343) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 7375) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 7407) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 7429) | function GroupNotificationMessage(msg) {
  function TextMessage (line 7450) | function TextMessage(message) {
  function TypingStatusMessage (line 7474) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 7492) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 7511) | function VoiceMessage(message) {
  function RecallCommandMessage (line 7536) | function RecallCommandMessage(message) {
  function ImageMessage (line 7552) | function ImageMessage(message) {
  function LocationMessage (line 7575) | function LocationMessage(message) {
  function RichContentMessage (line 7602) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 7626) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 7637) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 7648) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 7662) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 7687) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 7698) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 7709) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 7720) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 7731) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 7742) | function FileMessage(message) {
  function AcceptMessage (line 7761) | function AcceptMessage(message) {
  function RingingMessage (line 7776) | function RingingMessage(message) {
  function SummaryMessage (line 7787) | function SummaryMessage(message) {
  function HungupMessage (line 7805) | function HungupMessage(message) {
  function InviteMessage (line 7819) | function InviteMessage(message) {
  function MediaModifyMessage (line 7839) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 7853) | function MemberModifyMessage(message) {
  function ChannelInfo (line 7879) | function ChannelInfo(Id, Key) {
  function UserStatus (line 7887) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 7896) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 7902) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 7911) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 7917) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 7923) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 7953) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 7964) | function Group(id, name, portraitUri) {
  function Message (line 7973) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 7996) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 8039) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 8051) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 8065) | function UserInfo(id, name, portraitUri) {
  function ServerDataProvider (line 8077) | function ServerDataProvider() {
  function VCDataProvider (line 9604) | function VCDataProvider(addon) {
  function MemeoryProvider (line 10566) | function MemeoryProvider() {
  function LocalStorageProvider (line 10621) | function LocalStorageProvider() {
  function UserDataProvider (line 10705) | function UserDataProvider() {
  function FeatureDectector (line 10789) | function FeatureDectector(callback) {
  function FeaturePatcher (line 10828) | function FeaturePatcher() {
  function JSON (line 10846) | function JSON() {
  function ScriptLoader (line 10922) | function ScriptLoader() {
  function PublicServiceMap (line 10956) | function PublicServiceMap() {
  function ConversationMap (line 11004) | function ConversationMap() {
  function CheckParam (line 11052) | function CheckParam() {
  function LimitableMap (line 11099) | function LimitableMap(limit) {
  function MemoryCache (line 11117) | function MemoryCache() {
  function RongAjax (line 11133) | function RongAjax(options) {
  function RongUtil (line 11178) | function RongUtil() {
  function replaceAction (line 11218) | function replaceAction(object) {
  function RongObserver (line 11397) | function RongObserver() {
  function Timer (line 11432) | function Timer(config) {
  function InnerUtil (line 11447) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.1.js
  function safe_add (line 1074) | function safe_add(x, y) {
  function bit_rol (line 1083) | function bit_rol(num, cnt) {
  function md5_cmn (line 1090) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1093) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1096) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1099) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1102) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1109) | function binl_md5(x, len) {
  function binl2rstr (line 1205) | function binl2rstr(input) {
  function rstr2binl (line 1218) | function rstr2binl(input) {
  function rstr_md5 (line 1234) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1241) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1262) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1278) | function str2rstr_utf8(input) {
  function raw_md5 (line 1285) | function raw_md5(s) {
  function hex_md5 (line 1288) | function hex_md5(s) {
  function raw_hmac_md5 (line 1291) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1294) | function hex_hmac_md5(k, d) {
  function md5 (line 1298) | function md5(string, key, raw) {
  function RongIMClient (line 2066) | function RongIMClient() {
  function Channel (line 4469) | function Channel(cb, self) {
  function Socket (line 4666) | function Socket() {
  function Client (line 4785) | function Client(token, appId) {
  function Bridge (line 5012) | function Bridge() {
  function MessageHandler (line 5066) | function MessageHandler(client) {
  function __ (line 5406) | function __() { this.constructor = d; }
  function MessageCallback (line 5413) | function MessageCallback(error) {
  function CallbackMapping (line 5450) | function CallbackMapping() {
  function PublishCallback (line 5518) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5556) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5589) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5676) | function Navigation() {
  function BaseMessage (line 5887) | function BaseMessage(arg) {
  function ConnectMessage (line 5971) | function ConnectMessage(header) {
  function ConnAckMessage (line 6066) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6167) | function DisconnectMessage(header) {
  function PingReqMessage (line 6217) | function PingReqMessage(header) {
  function PingRespMessage (line 6229) | function PingRespMessage(header) {
  function RetryableMessage (line 6241) | function RetryableMessage(argu) {
  function PubAckMessage (line 6274) | function PubAckMessage(header) {
  function PublishMessage (line 6330) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6407) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6469) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6484) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6528) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6545) | function MessageInputStream(In, isPolling) {
  function Header (line 6610) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6667) | function BinaryHelper() {
  function RongIMStream (line 6750) | function RongIMStream(arr) {
  function SocketTransportation (line 6882) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7038) | function PollingTransportation(socket) {
  function Transportations (line 7295) | function Transportations() {
  function SyncTimeUtil (line 7302) | function SyncTimeUtil() {
  function MessageUtil (line 7339) | function MessageUtil() {
  function MessageIdHandler (line 7546) | function MessageIdHandler() {
  function RongInnerTools (line 7574) | function RongInnerTools() {
  function MessageContent (line 7593) | function MessageContent(data) {
  function NotificationMessage (line 7604) | function NotificationMessage() {
  function StatusMessage (line 7612) | function StatusMessage() {
  function ModelUtil (line 7619) | function ModelUtil() {
  function CustomerStatusMessage (line 7653) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 7670) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 7690) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 7706) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 7721) | function HandShakeMessage(message) {
  function CustomerContact (line 7738) | function CustomerContact(message) {
  function EvaluateMessage (line 7753) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 7776) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 7792) | function SuspendMessage(message) {
  function TerminateMessage (line 7808) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 7827) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 7844) | function InformationNotificationMessage(message) {
  function CommandMessage (line 7865) | function CommandMessage(message) {
  function ContactNotificationMessage (line 7894) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 7921) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 7953) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 7985) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8007) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8028) | function TextMessage(message) {
  function TypingStatusMessage (line 8052) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8070) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8089) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8114) | function RecallCommandMessage(message) {
  function ImageMessage (line 8130) | function ImageMessage(message) {
  function LocationMessage (line 8153) | function LocationMessage(message) {
  function RichContentMessage (line 8180) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8204) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8215) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8226) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8240) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8265) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8276) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8287) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8298) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8309) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8320) | function FileMessage(message) {
  function HQVoiceMessage (line 8339) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8355) | function AcceptMessage(message) {
  function RingingMessage (line 8370) | function RingingMessage(message) {
  function SummaryMessage (line 8381) | function SummaryMessage(message) {
  function HungupMessage (line 8399) | function HungupMessage(message) {
  function InviteMessage (line 8413) | function InviteMessage(message) {
  function MediaModifyMessage (line 8433) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 8447) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 8470) | function RCCombineMessage(message) {
  function ChannelInfo (line 8495) | function ChannelInfo(Id, Key) {
  function UserStatus (line 8503) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 8512) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 8518) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 8527) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 8533) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 8539) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 8569) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 8580) | function Group(id, name, portraitUri) {
  function Message (line 8589) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 8612) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 8655) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 8667) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 8681) | function UserInfo(id, name, portraitUri) {
  function User (line 8690) | function User(id, token) {
  function Room (line 8698) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 8712) | function ServerDataProvider() {
  function VCDataProvider (line 10568) | function VCDataProvider(addon) {
  function MemeoryProvider (line 11733) | function MemeoryProvider() {
  function LocalStorageProvider (line 11788) | function LocalStorageProvider() {
  function UserDataProvider (line 11872) | function UserDataProvider() {
  function FeatureDectector (line 11956) | function FeatureDectector(callback) {
  function FeaturePatcher (line 11995) | function FeaturePatcher() {
  function JSON (line 12013) | function JSON() {
  function ScriptLoader (line 12089) | function ScriptLoader() {
  function PublicServiceMap (line 12123) | function PublicServiceMap() {
  function ConversationMap (line 12171) | function ConversationMap() {
  function CheckParam (line 12219) | function CheckParam() {
  function LimitableMap (line 12266) | function LimitableMap(limit) {
  function MemoryCache (line 12284) | function MemoryCache() {
  function RongAjax (line 12300) | function RongAjax(options) {
  function RongUtil (line 12345) | function RongUtil() {
  function replaceAction (line 12406) | function replaceAction(object) {
  function RongObserver (line 12600) | function RongObserver() {
  function Observer (line 12635) | function Observer() {
  function Timer (line 12656) | function Timer(config) {
  function IndexTools (line 12674) | function IndexTools(config) {
  function InnerUtil (line 12698) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.3.js
  function safe_add (line 1179) | function safe_add(x, y) {
  function bit_rol (line 1188) | function bit_rol(num, cnt) {
  function md5_cmn (line 1195) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1198) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1201) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1204) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1207) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1214) | function binl_md5(x, len) {
  function binl2rstr (line 1310) | function binl2rstr(input) {
  function rstr2binl (line 1323) | function rstr2binl(input) {
  function rstr_md5 (line 1339) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1346) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1367) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1383) | function str2rstr_utf8(input) {
  function raw_md5 (line 1390) | function raw_md5(s) {
  function hex_md5 (line 1393) | function hex_md5(s) {
  function raw_hmac_md5 (line 1396) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1399) | function hex_hmac_md5(k, d) {
  function md5 (line 1403) | function md5(string, key, raw) {
  function RongIMClient (line 2204) | function RongIMClient() {
  function Channel (line 4650) | function Channel(cb, self) {
  function Socket (line 4916) | function Socket() {
  function Client (line 5035) | function Client(token, appId) {
  function Bridge (line 5268) | function Bridge() {
  function MessageHandler (line 5328) | function MessageHandler(client) {
  function __ (line 5691) | function __() { this.constructor = d; }
  function MessageCallback (line 5698) | function MessageCallback(error) {
  function CallbackMapping (line 5735) | function CallbackMapping() {
  function PublishCallback (line 5803) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5841) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5874) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5970) | function Navigation() {
  function BaseMessage (line 6182) | function BaseMessage(arg) {
  function ConnectMessage (line 6266) | function ConnectMessage(header) {
  function ConnAckMessage (line 6361) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6462) | function DisconnectMessage(header) {
  function PingReqMessage (line 6512) | function PingReqMessage(header) {
  function PingRespMessage (line 6524) | function PingRespMessage(header) {
  function RetryableMessage (line 6536) | function RetryableMessage(argu) {
  function PubAckMessage (line 6569) | function PubAckMessage(header) {
  function PublishMessage (line 6625) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6702) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6764) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6779) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6823) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6840) | function MessageInputStream(In, isPolling) {
  function Header (line 6905) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6962) | function BinaryHelper() {
  function RongIMStream (line 7045) | function RongIMStream(arr) {
  function SocketTransportation (line 7177) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7342) | function PollingTransportation(socket) {
  function Transportations (line 7602) | function Transportations() {
  function SyncTimeUtil (line 7609) | function SyncTimeUtil() {
  function MessageUtil (line 7646) | function MessageUtil() {
  function MessageIdHandler (line 7855) | function MessageIdHandler() {
  function ChrmKVCaches (line 7882) | function ChrmKVCaches() {
  function ChrmKVHandler (line 7958) | function ChrmKVHandler() {
  function RongInnerTools (line 8068) | function RongInnerTools() {
  function UnreadCountHandler (line 8114) | function UnreadCountHandler() {
  function MessageContent (line 8208) | function MessageContent(data) {
  function NotificationMessage (line 8219) | function NotificationMessage() {
  function StatusMessage (line 8227) | function StatusMessage() {
  function ModelUtil (line 8234) | function ModelUtil() {
  function CustomerStatusMessage (line 8268) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8285) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8305) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8321) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8336) | function HandShakeMessage(message) {
  function CustomerContact (line 8353) | function CustomerContact(message) {
  function EvaluateMessage (line 8368) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8391) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8407) | function SuspendMessage(message) {
  function TerminateMessage (line 8423) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8442) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8459) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8480) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8509) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8536) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8568) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8600) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8622) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8643) | function TextMessage(message) {
  function TypingStatusMessage (line 8667) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8685) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8704) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8729) | function RecallCommandMessage(message) {
  function ImageMessage (line 8745) | function ImageMessage(message) {
  function LocationMessage (line 8768) | function LocationMessage(message) {
  function RichContentMessage (line 8795) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8819) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8830) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8841) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8855) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8880) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8891) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8902) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8913) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8924) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8935) | function FileMessage(message) {
  function HQVoiceMessage (line 8954) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8970) | function AcceptMessage(message) {
  function RingingMessage (line 8985) | function RingingMessage(message) {
  function SummaryMessage (line 8996) | function SummaryMessage(message) {
  function HungupMessage (line 9014) | function HungupMessage(message) {
  function InviteMessage (line 9028) | function InviteMessage(message) {
  function MediaModifyMessage (line 9048) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9062) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9085) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9107) | function ChrmKVNotificationMessage(message) {
  function ChannelInfo (line 9125) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9133) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9142) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9148) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9157) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9163) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9169) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9199) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9210) | function Group(id, name, portraitUri) {
  function Message (line 9219) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9242) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9285) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9297) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9311) | function UserInfo(id, name, portraitUri) {
  function User (line 9320) | function User(id, token) {
  function Room (line 9328) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9342) | function ServerDataProvider() {
  function VCDataProvider (line 11401) | function VCDataProvider(addon) {
  function MemeoryProvider (line 12597) | function MemeoryProvider() {
  function LocalStorageProvider (line 12652) | function LocalStorageProvider() {
  function UserDataProvider (line 12736) | function UserDataProvider() {
  function FeatureDectector (line 12820) | function FeatureDectector(callback) {
  function FeaturePatcher (line 12862) | function FeaturePatcher() {
  function JSON (line 12880) | function JSON() {
  function ScriptLoader (line 12956) | function ScriptLoader() {
  function PublicServiceMap (line 12990) | function PublicServiceMap() {
  function ConversationMap (line 13038) | function ConversationMap() {
  function CheckParam (line 13086) | function CheckParam() {
  function LimitableMap (line 13133) | function LimitableMap(limit) {
  function MemoryCache (line 13151) | function MemoryCache() {
  function RongAjax (line 13167) | function RongAjax(options) {
  function Prosumer (line 13211) | function Prosumer() {
  function RongUtil (line 13237) | function RongUtil() {
  function replaceAction (line 13310) | function replaceAction(object) {
  function RongObserver (line 13536) | function RongObserver() {
  function Observer (line 13571) | function Observer() {
  function Timer (line 13620) | function Timer(config) {
  function IndexTools (line 13638) | function IndexTools(config) {
  function InnerUtil (line 13662) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.4.js
  function safe_add (line 1177) | function safe_add(x, y) {
  function bit_rol (line 1186) | function bit_rol(num, cnt) {
  function md5_cmn (line 1193) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1196) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1199) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1202) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1205) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1212) | function binl_md5(x, len) {
  function binl2rstr (line 1308) | function binl2rstr(input) {
  function rstr2binl (line 1321) | function rstr2binl(input) {
  function rstr_md5 (line 1337) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1344) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1365) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1381) | function str2rstr_utf8(input) {
  function raw_md5 (line 1388) | function raw_md5(s) {
  function hex_md5 (line 1391) | function hex_md5(s) {
  function raw_hmac_md5 (line 1394) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1397) | function hex_hmac_md5(k, d) {
  function md5 (line 1401) | function md5(string, key, raw) {
  function RongIMClient (line 2202) | function RongIMClient() {
  function Channel (line 4648) | function Channel(cb, self) {
  function Socket (line 4904) | function Socket() {
  function Client (line 5023) | function Client(token, appId) {
  function Bridge (line 5256) | function Bridge() {
  function MessageHandler (line 5316) | function MessageHandler(client) {
  function __ (line 5679) | function __() { this.constructor = d; }
  function MessageCallback (line 5686) | function MessageCallback(error) {
  function CallbackMapping (line 5723) | function CallbackMapping() {
  function PublishCallback (line 5791) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5829) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5862) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5958) | function Navigation() {
  function BaseMessage (line 6170) | function BaseMessage(arg) {
  function ConnectMessage (line 6254) | function ConnectMessage(header) {
  function ConnAckMessage (line 6349) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6450) | function DisconnectMessage(header) {
  function PingReqMessage (line 6500) | function PingReqMessage(header) {
  function PingRespMessage (line 6512) | function PingRespMessage(header) {
  function RetryableMessage (line 6524) | function RetryableMessage(argu) {
  function PubAckMessage (line 6557) | function PubAckMessage(header) {
  function PublishMessage (line 6613) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6690) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6752) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6767) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6811) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6828) | function MessageInputStream(In, isPolling) {
  function Header (line 6893) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6950) | function BinaryHelper() {
  function RongIMStream (line 7033) | function RongIMStream(arr) {
  function SocketTransportation (line 7165) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7329) | function PollingTransportation(socket) {
  function Transportations (line 7589) | function Transportations() {
  function SyncTimeUtil (line 7596) | function SyncTimeUtil() {
  function MessageUtil (line 7633) | function MessageUtil() {
  function MessageIdHandler (line 7820) | function MessageIdHandler() {
  function ChrmKVCaches (line 7847) | function ChrmKVCaches() {
  function ChrmKVHandler (line 7923) | function ChrmKVHandler() {
  function RongInnerTools (line 8033) | function RongInnerTools() {
  function UnreadCountHandler (line 8079) | function UnreadCountHandler() {
  function MessageContent (line 8173) | function MessageContent(data) {
  function NotificationMessage (line 8184) | function NotificationMessage() {
  function StatusMessage (line 8192) | function StatusMessage() {
  function ModelUtil (line 8199) | function ModelUtil() {
  function CustomerStatusMessage (line 8233) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8250) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8270) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8286) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8301) | function HandShakeMessage(message) {
  function CustomerContact (line 8318) | function CustomerContact(message) {
  function EvaluateMessage (line 8333) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8356) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8372) | function SuspendMessage(message) {
  function TerminateMessage (line 8388) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8407) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8424) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8445) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8474) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8501) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8533) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8565) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8587) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8608) | function TextMessage(message) {
  function TypingStatusMessage (line 8632) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8650) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8669) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8694) | function RecallCommandMessage(message) {
  function ImageMessage (line 8710) | function ImageMessage(message) {
  function LocationMessage (line 8733) | function LocationMessage(message) {
  function RichContentMessage (line 8760) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8784) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8795) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8806) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8820) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8845) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8856) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8867) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8878) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8889) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8900) | function FileMessage(message) {
  function HQVoiceMessage (line 8919) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8935) | function AcceptMessage(message) {
  function RingingMessage (line 8950) | function RingingMessage(message) {
  function SummaryMessage (line 8961) | function SummaryMessage(message) {
  function HungupMessage (line 8979) | function HungupMessage(message) {
  function InviteMessage (line 8993) | function InviteMessage(message) {
  function MediaModifyMessage (line 9013) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9027) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9050) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9072) | function ChrmKVNotificationMessage(message) {
  function ChannelInfo (line 9090) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9098) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9107) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9113) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9122) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9128) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9134) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9164) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9175) | function Group(id, name, portraitUri) {
  function Message (line 9184) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9207) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9250) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9262) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9276) | function UserInfo(id, name, portraitUri) {
  function User (line 9285) | function User(id, token) {
  function Room (line 9293) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9307) | function ServerDataProvider() {
  function VCDataProvider (line 11366) | function VCDataProvider(addon) {
  function MemeoryProvider (line 12562) | function MemeoryProvider() {
  function LocalStorageProvider (line 12617) | function LocalStorageProvider() {
  function UserDataProvider (line 12701) | function UserDataProvider() {
  function FeatureDectector (line 12785) | function FeatureDectector(callback) {
  function FeaturePatcher (line 12824) | function FeaturePatcher() {
  function JSON (line 12842) | function JSON() {
  function ScriptLoader (line 12918) | function ScriptLoader() {
  function PublicServiceMap (line 12952) | function PublicServiceMap() {
  function ConversationMap (line 13000) | function ConversationMap() {
  function CheckParam (line 13048) | function CheckParam() {
  function LimitableMap (line 13095) | function LimitableMap(limit) {
  function MemoryCache (line 13113) | function MemoryCache() {
  function RongAjax (line 13129) | function RongAjax(options) {
  function Prosumer (line 13173) | function Prosumer() {
  function RongUtil (line 13199) | function RongUtil() {
  function replaceAction (line 13272) | function replaceAction(object) {
  function RongObserver (line 13502) | function RongObserver() {
  function Observer (line 13537) | function Observer() {
  function Timer (line 13586) | function Timer(config) {
  function IndexTools (line 13604) | function IndexTools(config) {
  function InnerUtil (line 13628) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.5-private.js
  function safe_add (line 1177) | function safe_add(x, y) {
  function bit_rol (line 1186) | function bit_rol(num, cnt) {
  function md5_cmn (line 1193) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1196) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1199) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1202) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1205) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1212) | function binl_md5(x, len) {
  function binl2rstr (line 1308) | function binl2rstr(input) {
  function rstr2binl (line 1321) | function rstr2binl(input) {
  function rstr_md5 (line 1337) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1344) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1365) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1381) | function str2rstr_utf8(input) {
  function raw_md5 (line 1388) | function raw_md5(s) {
  function hex_md5 (line 1391) | function hex_md5(s) {
  function raw_hmac_md5 (line 1394) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1397) | function hex_hmac_md5(k, d) {
  function md5 (line 1401) | function md5(string, key, raw) {
  function RongIMClient (line 2202) | function RongIMClient() {
  function Channel (line 4659) | function Channel(cb, self) {
  function Socket (line 4918) | function Socket() {
  function Client (line 5037) | function Client(token, appId) {
  function Bridge (line 5271) | function Bridge() {
  function MessageHandler (line 5331) | function MessageHandler(client) {
  function __ (line 5694) | function __() { this.constructor = d; }
  function MessageCallback (line 5701) | function MessageCallback(error) {
  function CallbackMapping (line 5738) | function CallbackMapping() {
  function PublishCallback (line 5806) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5844) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5877) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5973) | function Navigation() {
  function BaseMessage (line 6185) | function BaseMessage(arg) {
  function ConnectMessage (line 6269) | function ConnectMessage(header) {
  function ConnAckMessage (line 6364) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6465) | function DisconnectMessage(header) {
  function PingReqMessage (line 6515) | function PingReqMessage(header) {
  function PingRespMessage (line 6527) | function PingRespMessage(header) {
  function RetryableMessage (line 6539) | function RetryableMessage(argu) {
  function PubAckMessage (line 6572) | function PubAckMessage(header) {
  function PublishMessage (line 6628) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6705) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6767) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6782) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6826) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6843) | function MessageInputStream(In, isPolling) {
  function Header (line 6908) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6965) | function BinaryHelper() {
  function RongIMStream (line 7048) | function RongIMStream(arr) {
  function SocketTransportation (line 7180) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7344) | function PollingTransportation(socket) {
  function Transportations (line 7604) | function Transportations() {
  function SyncTimeUtil (line 7611) | function SyncTimeUtil() {
  function MessageUtil (line 7648) | function MessageUtil() {
  function MessageIdHandler (line 7835) | function MessageIdHandler() {
  function ChrmKVCaches (line 7862) | function ChrmKVCaches() {
  function ChrmKVHandler (line 7938) | function ChrmKVHandler() {
  function RongInnerTools (line 8048) | function RongInnerTools() {
  function UnreadCountHandler (line 8094) | function UnreadCountHandler() {
  function MessageContent (line 8188) | function MessageContent(data) {
  function NotificationMessage (line 8199) | function NotificationMessage() {
  function StatusMessage (line 8207) | function StatusMessage() {
  function ModelUtil (line 8214) | function ModelUtil() {
  function CustomerStatusMessage (line 8248) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8265) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8285) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8301) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8316) | function HandShakeMessage(message) {
  function CustomerContact (line 8333) | function CustomerContact(message) {
  function EvaluateMessage (line 8348) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8371) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8387) | function SuspendMessage(message) {
  function TerminateMessage (line 8403) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8422) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8439) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8460) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8489) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8516) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8548) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8580) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8602) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8623) | function TextMessage(message) {
  function TypingStatusMessage (line 8647) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8665) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8684) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8709) | function RecallCommandMessage(message) {
  function ImageMessage (line 8725) | function ImageMessage(message) {
  function LocationMessage (line 8748) | function LocationMessage(message) {
  function RichContentMessage (line 8775) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8799) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8810) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8821) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8835) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8860) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8871) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8882) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8893) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8904) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8915) | function FileMessage(message) {
  function HQVoiceMessage (line 8934) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8950) | function AcceptMessage(message) {
  function RingingMessage (line 8965) | function RingingMessage(message) {
  function SummaryMessage (line 8976) | function SummaryMessage(message) {
  function HungupMessage (line 8994) | function HungupMessage(message) {
  function InviteMessage (line 9008) | function InviteMessage(message) {
  function MediaModifyMessage (line 9028) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9042) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9065) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9087) | function ChrmKVNotificationMessage(message) {
  function ChannelInfo (line 9105) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9113) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9122) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9128) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9137) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9143) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9149) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9179) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9190) | function Group(id, name, portraitUri) {
  function Message (line 9199) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9222) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9265) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9277) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9291) | function UserInfo(id, name, portraitUri) {
  function User (line 9300) | function User(id, token) {
  function Room (line 9308) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9322) | function ServerDataProvider() {
  function VCDataProvider (line 11381) | function VCDataProvider(addon) {
  function MemeoryProvider (line 12591) | function MemeoryProvider() {
  function LocalStorageProvider (line 12646) | function LocalStorageProvider() {
  function UserDataProvider (line 12730) | function UserDataProvider() {
  function FeatureDectector (line 12814) | function FeatureDectector(callback) {
  function FeaturePatcher (line 12853) | function FeaturePatcher() {
  function JSON (line 12871) | function JSON() {
  function ScriptLoader (line 12947) | function ScriptLoader() {
  function PublicServiceMap (line 12981) | function PublicServiceMap() {
  function ConversationMap (line 13029) | function ConversationMap() {
  function CheckParam (line 13077) | function CheckParam() {
  function LimitableMap (line 13124) | function LimitableMap(limit) {
  function MemoryCache (line 13142) | function MemoryCache() {
  function RongAjax (line 13158) | function RongAjax(options) {
  function Prosumer (line 13202) | function Prosumer() {
  function RongUtil (line 13228) | function RongUtil() {
  function replaceAction (line 13301) | function replaceAction(object) {
  function RongObserver (line 13532) | function RongObserver() {
  function Observer (line 13567) | function Observer() {
  function Timer (line 13616) | function Timer(config) {
  function IndexTools (line 13634) | function IndexTools(config) {
  function InnerUtil (line 13658) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.5.js
  function safe_add (line 1177) | function safe_add(x, y) {
  function bit_rol (line 1186) | function bit_rol(num, cnt) {
  function md5_cmn (line 1193) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1196) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1199) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1202) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1205) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1212) | function binl_md5(x, len) {
  function binl2rstr (line 1308) | function binl2rstr(input) {
  function rstr2binl (line 1321) | function rstr2binl(input) {
  function rstr_md5 (line 1337) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1344) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1365) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1381) | function str2rstr_utf8(input) {
  function raw_md5 (line 1388) | function raw_md5(s) {
  function hex_md5 (line 1391) | function hex_md5(s) {
  function raw_hmac_md5 (line 1394) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1397) | function hex_hmac_md5(k, d) {
  function md5 (line 1401) | function md5(string, key, raw) {
  function RongIMClient (line 2202) | function RongIMClient() {
  function Channel (line 4659) | function Channel(cb, self) {
  function Socket (line 4922) | function Socket() {
  function Client (line 5044) | function Client(token, appId) {
  function Bridge (line 5277) | function Bridge() {
  function MessageHandler (line 5337) | function MessageHandler(client) {
  function __ (line 5700) | function __() { this.constructor = d; }
  function MessageCallback (line 5707) | function MessageCallback(error) {
  function CallbackMapping (line 5744) | function CallbackMapping() {
  function PublishCallback (line 5812) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5850) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5883) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5979) | function Navigation() {
  function BaseMessage (line 6191) | function BaseMessage(arg) {
  function ConnectMessage (line 6275) | function ConnectMessage(header) {
  function ConnAckMessage (line 6370) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6471) | function DisconnectMessage(header) {
  function PingReqMessage (line 6521) | function PingReqMessage(header) {
  function PingRespMessage (line 6533) | function PingRespMessage(header) {
  function RetryableMessage (line 6545) | function RetryableMessage(argu) {
  function PubAckMessage (line 6578) | function PubAckMessage(header) {
  function PublishMessage (line 6634) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6711) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6773) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6788) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6832) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6849) | function MessageInputStream(In, isPolling) {
  function Header (line 6914) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6971) | function BinaryHelper() {
  function RongIMStream (line 7054) | function RongIMStream(arr) {
  function SocketTransportation (line 7186) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7350) | function PollingTransportation(socket) {
  function Transportations (line 7610) | function Transportations() {
  function SyncTimeUtil (line 7617) | function SyncTimeUtil() {
  function MessageUtil (line 7654) | function MessageUtil() {
  function MessageIdHandler (line 7841) | function MessageIdHandler() {
  function ChrmKVCaches (line 7868) | function ChrmKVCaches() {
  function ChrmKVHandler (line 7944) | function ChrmKVHandler() {
  function RongInnerTools (line 8054) | function RongInnerTools() {
  function UnreadCountHandler (line 8100) | function UnreadCountHandler() {
  function MessageContent (line 8194) | function MessageContent(data) {
  function NotificationMessage (line 8205) | function NotificationMessage() {
  function StatusMessage (line 8213) | function StatusMessage() {
  function ModelUtil (line 8220) | function ModelUtil() {
  function CustomerStatusMessage (line 8254) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8271) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8291) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8307) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8322) | function HandShakeMessage(message) {
  function CustomerContact (line 8339) | function CustomerContact(message) {
  function EvaluateMessage (line 8354) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8377) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8393) | function SuspendMessage(message) {
  function TerminateMessage (line 8409) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8428) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8445) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8466) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8495) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8522) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8554) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8586) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8608) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8629) | function TextMessage(message) {
  function TypingStatusMessage (line 8653) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8671) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8690) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8715) | function RecallCommandMessage(message) {
  function ImageMessage (line 8731) | function ImageMessage(message) {
  function LocationMessage (line 8754) | function LocationMessage(message) {
  function RichContentMessage (line 8781) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8805) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8816) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8827) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8841) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8866) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8877) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8888) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8899) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8910) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8921) | function FileMessage(message) {
  function HQVoiceMessage (line 8940) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8956) | function AcceptMessage(message) {
  function RingingMessage (line 8971) | function RingingMessage(message) {
  function SummaryMessage (line 8982) | function SummaryMessage(message) {
  function HungupMessage (line 9000) | function HungupMessage(message) {
  function InviteMessage (line 9014) | function InviteMessage(message) {
  function MediaModifyMessage (line 9034) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9048) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9071) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9093) | function ChrmKVNotificationMessage(message) {
  function ChannelInfo (line 9111) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9119) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9128) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9134) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9143) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9149) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9155) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9185) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9196) | function Group(id, name, portraitUri) {
  function Message (line 9205) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9228) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9271) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9283) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9297) | function UserInfo(id, name, portraitUri) {
  function User (line 9306) | function User(id, token) {
  function Room (line 9314) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9328) | function ServerDataProvider() {
  function VCDataProvider (line 11387) | function VCDataProvider(addon) {
  function MemeoryProvider (line 12597) | function MemeoryProvider() {
  function LocalStorageProvider (line 12652) | function LocalStorageProvider() {
  function UserDataProvider (line 12736) | function UserDataProvider() {
  function FeatureDectector (line 12820) | function FeatureDectector(callback) {
  function FeaturePatcher (line 12859) | function FeaturePatcher() {
  function JSON (line 12877) | function JSON() {
  function ScriptLoader (line 12953) | function ScriptLoader() {
  function PublicServiceMap (line 12987) | function PublicServiceMap() {
  function ConversationMap (line 13035) | function ConversationMap() {
  function CheckParam (line 13083) | function CheckParam() {
  function LimitableMap (line 13130) | function LimitableMap(limit) {
  function MemoryCache (line 13148) | function MemoryCache() {
  function RongAjax (line 13164) | function RongAjax(options) {
  function Prosumer (line 13208) | function Prosumer() {
  function RongUtil (line 13234) | function RongUtil() {
  function replaceAction (line 13307) | function replaceAction(object) {
  function RongObserver (line 13537) | function RongObserver() {
  function Observer (line 13572) | function Observer() {
  function Timer (line 13621) | function Timer(config) {
  function IndexTools (line 13639) | function IndexTools(config) {
  function InnerUtil (line 13663) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.6.js
  function safe_add (line 1177) | function safe_add(x, y) {
  function bit_rol (line 1186) | function bit_rol(num, cnt) {
  function md5_cmn (line 1193) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1196) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1199) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1202) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1205) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1212) | function binl_md5(x, len) {
  function binl2rstr (line 1308) | function binl2rstr(input) {
  function rstr2binl (line 1321) | function rstr2binl(input) {
  function rstr_md5 (line 1337) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1344) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1365) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1381) | function str2rstr_utf8(input) {
  function raw_md5 (line 1388) | function raw_md5(s) {
  function hex_md5 (line 1391) | function hex_md5(s) {
  function raw_hmac_md5 (line 1394) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1397) | function hex_hmac_md5(k, d) {
  function md5 (line 1401) | function md5(string, key, raw) {
  function RongIMClient (line 2206) | function RongIMClient() {
  function Channel (line 4666) | function Channel(cb, self) {
  function Socket (line 4925) | function Socket() {
  function Client (line 5044) | function Client(token, appId) {
  function Bridge (line 5278) | function Bridge() {
  function MessageHandler (line 5338) | function MessageHandler(client) {
  function __ (line 5705) | function __() { this.constructor = d; }
  function MessageCallback (line 5712) | function MessageCallback(error) {
  function CallbackMapping (line 5749) | function CallbackMapping() {
  function PublishCallback (line 5817) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 5855) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 5888) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 5979) | function Navigation() {
  function BaseMessage (line 6191) | function BaseMessage(arg) {
  function ConnectMessage (line 6275) | function ConnectMessage(header) {
  function ConnAckMessage (line 6370) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6471) | function DisconnectMessage(header) {
  function PingReqMessage (line 6521) | function PingReqMessage(header) {
  function PingRespMessage (line 6533) | function PingRespMessage(header) {
  function RetryableMessage (line 6545) | function RetryableMessage(argu) {
  function PubAckMessage (line 6578) | function PubAckMessage(header) {
  function PublishMessage (line 6634) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6711) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6773) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6788) | function QueryAckMessage(header) {
  function MessageOutputStream (line 6832) | function MessageOutputStream(_out) {
  function MessageInputStream (line 6849) | function MessageInputStream(In, isPolling) {
  function Header (line 6914) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 6971) | function BinaryHelper() {
  function RongIMStream (line 7054) | function RongIMStream(arr) {
  function SocketTransportation (line 7191) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7355) | function PollingTransportation(socket) {
  function Transportations (line 7616) | function Transportations() {
  function SyncTimeUtil (line 7623) | function SyncTimeUtil() {
  function MessageUtil (line 7660) | function MessageUtil() {
  function MessageIdHandler (line 7862) | function MessageIdHandler() {
  function ChrmKVCaches (line 7889) | function ChrmKVCaches() {
  function ChrmKVHandler (line 7965) | function ChrmKVHandler() {
  function RongInnerTools (line 8075) | function RongInnerTools() {
  function UnreadCountHandler (line 8121) | function UnreadCountHandler() {
  function MessageContent (line 8215) | function MessageContent(data) {
  function NotificationMessage (line 8226) | function NotificationMessage() {
  function StatusMessage (line 8234) | function StatusMessage() {
  function ModelUtil (line 8241) | function ModelUtil() {
  function CustomerStatusMessage (line 8275) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8292) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8312) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8328) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8343) | function HandShakeMessage(message) {
  function CustomerContact (line 8360) | function CustomerContact(message) {
  function EvaluateMessage (line 8375) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8398) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8414) | function SuspendMessage(message) {
  function TerminateMessage (line 8430) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8449) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8466) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8487) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8516) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8543) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8575) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8607) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8629) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8650) | function TextMessage(message) {
  function TypingStatusMessage (line 8674) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 8692) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 8711) | function VoiceMessage(message) {
  function RecallCommandMessage (line 8736) | function RecallCommandMessage(message) {
  function ImageMessage (line 8752) | function ImageMessage(message) {
  function LocationMessage (line 8775) | function LocationMessage(message) {
  function RichContentMessage (line 8802) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 8826) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 8837) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 8848) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 8862) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 8887) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 8898) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 8909) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 8920) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 8931) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 8942) | function FileMessage(message) {
  function HQVoiceMessage (line 8961) | function HQVoiceMessage(message) {
  function AcceptMessage (line 8977) | function AcceptMessage(message) {
  function RingingMessage (line 8992) | function RingingMessage(message) {
  function SummaryMessage (line 9003) | function SummaryMessage(message) {
  function HungupMessage (line 9021) | function HungupMessage(message) {
  function InviteMessage (line 9035) | function InviteMessage(message) {
  function MediaModifyMessage (line 9055) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9069) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9092) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9114) | function ChrmKVNotificationMessage(message) {
  function ReferenceMessage (line 9129) | function ReferenceMessage(message) {
  function ChannelInfo (line 9154) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9162) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9171) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9177) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9186) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9192) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9198) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9228) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9239) | function Group(id, name, portraitUri) {
  function Message (line 9248) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9271) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9314) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9326) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9340) | function UserInfo(id, name, portraitUri) {
  function User (line 9349) | function User(id, token) {
  function Room (line 9357) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9371) | function ServerDataProvider() {
  function VCDataProvider (line 11437) | function VCDataProvider(addon) {
  function MemeoryProvider (line 12646) | function MemeoryProvider() {
  function LocalStorageProvider (line 12701) | function LocalStorageProvider() {
  function UserDataProvider (line 12785) | function UserDataProvider() {
  function FeatureDectector (line 12869) | function FeatureDectector(callback) {
  function FeaturePatcher (line 12908) | function FeaturePatcher() {
  function JSON (line 12926) | function JSON() {
  function ScriptLoader (line 13002) | function ScriptLoader() {
  function PublicServiceMap (line 13036) | function PublicServiceMap() {
  function ConversationMap (line 13084) | function ConversationMap() {
  function CheckParam (line 13132) | function CheckParam() {
  function LimitableMap (line 13179) | function LimitableMap(limit) {
  function MemoryCache (line 13197) | function MemoryCache() {
  function RongAjax (line 13213) | function RongAjax(options) {
  function Prosumer (line 13257) | function Prosumer() {
  function RongUtil (line 13283) | function RongUtil() {
  function replaceAction (line 13356) | function replaceAction(object) {
  function RongObserver (line 13620) | function RongObserver() {
  function Observer (line 13655) | function Observer() {
  function Timer (line 13704) | function Timer(config) {
  function IndexTools (line 13722) | function IndexTools(config) {
  function InnerUtil (line 13746) | function InnerUtil() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.9-release.js
  function safe_add (line 1181) | function safe_add(x, y) {
  function bit_rol (line 1190) | function bit_rol(num, cnt) {
  function md5_cmn (line 1197) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1200) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1203) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1206) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1209) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1216) | function binl_md5(x, len) {
  function binl2rstr (line 1312) | function binl2rstr(input) {
  function rstr2binl (line 1325) | function rstr2binl(input) {
  function rstr_md5 (line 1341) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1348) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1369) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1385) | function str2rstr_utf8(input) {
  function raw_md5 (line 1392) | function raw_md5(s) {
  function hex_md5 (line 1395) | function hex_md5(s) {
  function raw_hmac_md5 (line 1398) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1401) | function hex_hmac_md5(k, d) {
  function md5 (line 1405) | function md5(string, key, raw) {
  function RongIMClient (line 2210) | function RongIMClient() {
  function Channel (line 4753) | function Channel(cb, self) {
  function Socket (line 5057) | function Socket() {
  function Client (line 5176) | function Client(token, appId) {
  function Bridge (line 5430) | function Bridge() {
  function MessageHandler (line 5503) | function MessageHandler(client) {
  function __ (line 5902) | function __() { this.constructor = d; }
  function MessageCallback (line 5909) | function MessageCallback(error) {
  function CallbackMapping (line 5946) | function CallbackMapping() {
  function PublishCallback (line 6017) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 6055) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 6092) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 6183) | function Navigation() {
  function BaseMessage (line 6455) | function BaseMessage(arg) {
  function ConnectMessage (line 6539) | function ConnectMessage(header) {
  function ConnAckMessage (line 6634) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6735) | function DisconnectMessage(header) {
  function PingReqMessage (line 6785) | function PingReqMessage(header) {
  function PingRespMessage (line 6797) | function PingRespMessage(header) {
  function RetryableMessage (line 6809) | function RetryableMessage(argu) {
  function PubAckMessage (line 6842) | function PubAckMessage(header) {
  function PublishMessage (line 6898) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6975) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 7037) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 7052) | function QueryAckMessage(header) {
  function MessageOutputStream (line 7096) | function MessageOutputStream(_out) {
  function MessageInputStream (line 7113) | function MessageInputStream(In, isPolling) {
  function Header (line 7178) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 7235) | function BinaryHelper() {
  function RongIMStream (line 7318) | function RongIMStream(arr) {
  function SocketTransportation (line 7455) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7623) | function PollingTransportation(socket) {
  function IMHandler (line 7885) | function IMHandler() {
  function Transportations (line 7932) | function Transportations() {
  function SyncTimeUtil (line 7939) | function SyncTimeUtil() {
  function MessageUtil (line 7988) | function MessageUtil() {
  function MessageIdHandler (line 8205) | function MessageIdHandler() {
  function ChrmKVCaches (line 8232) | function ChrmKVCaches() {
  function ChrmKVHandler (line 8308) | function ChrmKVHandler() {
  function RongInnerTools (line 8418) | function RongInnerTools() {
  function UnreadCountHandler (line 8464) | function UnreadCountHandler() {
  function ConversationStatusManager (line 8557) | function ConversationStatusManager(option) {
  function FixedNaviRespHandler (line 8645) | function FixedNaviRespHandler() {
  function MessageContent (line 8711) | function MessageContent(data) {
  function NotificationMessage (line 8722) | function NotificationMessage() {
  function StatusMessage (line 8730) | function StatusMessage() {
  function ModelUtil (line 8737) | function ModelUtil() {
  function CustomerStatusMessage (line 8771) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8788) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8808) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8824) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8839) | function HandShakeMessage(message) {
  function CustomerContact (line 8856) | function CustomerContact(message) {
  function EvaluateMessage (line 8871) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8894) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8910) | function SuspendMessage(message) {
  function TerminateMessage (line 8926) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8945) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8962) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8983) | function CommandMessage(message) {
  function ContactNotificationMessage (line 9016) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 9043) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 9079) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 9115) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 9137) | function GroupNotificationMessage(msg) {
  function TextMessage (line 9158) | function TextMessage(message) {
  function TypingStatusMessage (line 9185) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 9203) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 9222) | function VoiceMessage(message) {
  function RecallCommandMessage (line 9250) | function RecallCommandMessage(message) {
  function ImageMessage (line 9266) | function ImageMessage(message) {
  function LocationMessage (line 9292) | function LocationMessage(message) {
  function RichContentMessage (line 9319) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 9343) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 9354) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 9365) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 9379) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 9404) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 9415) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 9426) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 9437) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 9448) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 9459) | function FileMessage(message) {
  function HQVoiceMessage (line 9478) | function HQVoiceMessage(message) {
  function AcceptMessage (line 9495) | function AcceptMessage(message) {
  function RingingMessage (line 9510) | function RingingMessage(message) {
  function SummaryMessage (line 9521) | function SummaryMessage(message) {
  function HungupMessage (line 9539) | function HungupMessage(message) {
  function InviteMessage (line 9553) | function InviteMessage(message) {
  function MediaModifyMessage (line 9573) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9587) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9610) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9633) | function ChrmKVNotificationMessage(message) {
  function LogCommandMessage (line 9648) | function LogCommandMessage(message) {
  function ReferenceMessage (line 9665) | function ReferenceMessage(message) {
  function GIFMessage (line 9688) | function GIFMessage(message) {
  function SightMessage (line 9712) | function SightMessage(message) {
  function ChannelInfo (line 9739) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9747) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9756) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9762) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9771) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9777) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9783) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9813) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9824) | function Group(id, name, portraitUri) {
  function Message (line 9833) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9857) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9900) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9912) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9926) | function UserInfo(id, name, portraitUri) {
  function User (line 9935) | function User(id, token) {
  function Room (line 9943) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9957) | function ServerDataProvider() {
  function VCDataProvider (line 12297) | function VCDataProvider(addon) {
  function LoggerType (line 13525) | function LoggerType() {
  function LoggerTag (line 13533) | function LoggerTag() {
  function LoggerReportType (line 13576) | function LoggerReportType() {
  function Logger (line 13587) | function Logger() {
  function LoggerUtil (line 13773) | function LoggerUtil() {
  function MemeoryProvider (line 13949) | function MemeoryProvider() {
  function LocalStorageProvider (line 14004) | function LocalStorageProvider() {
  function sessionStorageProvider (line 14088) | function sessionStorageProvider() {
  function UserDataProvider (line 14152) | function UserDataProvider() {
  function FeatureDectector (line 14236) | function FeatureDectector(callback) {
  function FeaturePatcher (line 14277) | function FeaturePatcher() {
  function JSON (line 14295) | function JSON() {
  function ScriptLoader (line 14371) | function ScriptLoader() {
  function PublicServiceMap (line 14405) | function PublicServiceMap() {
  function ConversationMap (line 14453) | function ConversationMap() {
  function CheckParam (line 14501) | function CheckParam() {
  function LimitableMap (line 14548) | function LimitableMap(limit) {
  function MemoryCache (line 14566) | function MemoryCache() {
  function RongAjax (line 14582) | function RongAjax(options) {
  function Prosumer (line 14626) | function Prosumer() {
  function RongUtil (line 14652) | function RongUtil() {
  function replaceAction (line 14728) | function replaceAction(object) {
  function RongObserver (line 15182) | function RongObserver() {
  function Observer (line 15217) | function Observer() {
  function Timer (line 15266) | function Timer(config) {
  function IndexTools (line 15284) | function IndexTools(config) {
  function InnerUtil (line 15308) | function InnerUtil() {
  function Base64 (line 15317) | function Base64() {
  function TextCompressor (line 15418) | function TextCompressor() {

FILE: api-test-v2/lib/js/RongIMLib-2.5.9-silent.js
  function safe_add (line 1181) | function safe_add(x, y) {
  function bit_rol (line 1190) | function bit_rol(num, cnt) {
  function md5_cmn (line 1197) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1200) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1203) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1206) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1209) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1216) | function binl_md5(x, len) {
  function binl2rstr (line 1312) | function binl2rstr(input) {
  function rstr2binl (line 1325) | function rstr2binl(input) {
  function rstr_md5 (line 1341) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1348) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1369) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1385) | function str2rstr_utf8(input) {
  function raw_md5 (line 1392) | function raw_md5(s) {
  function hex_md5 (line 1395) | function hex_md5(s) {
  function raw_hmac_md5 (line 1398) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1401) | function hex_hmac_md5(k, d) {
  function md5 (line 1405) | function md5(string, key, raw) {
  function RongIMClient (line 2210) | function RongIMClient() {
  function Channel (line 4749) | function Channel(cb, self) {
  function Socket (line 5053) | function Socket() {
  function Client (line 5172) | function Client(token, appId) {
  function Bridge (line 5421) | function Bridge() {
  function MessageHandler (line 5494) | function MessageHandler(client) {
  function __ (line 5893) | function __() { this.constructor = d; }
  function MessageCallback (line 5900) | function MessageCallback(error) {
  function CallbackMapping (line 5937) | function CallbackMapping() {
  function PublishCallback (line 6008) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 6046) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 6083) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 6174) | function Navigation() {
  function BaseMessage (line 6438) | function BaseMessage(arg) {
  function ConnectMessage (line 6522) | function ConnectMessage(header) {
  function ConnAckMessage (line 6617) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6718) | function DisconnectMessage(header) {
  function PingReqMessage (line 6768) | function PingReqMessage(header) {
  function PingRespMessage (line 6780) | function PingRespMessage(header) {
  function RetryableMessage (line 6792) | function RetryableMessage(argu) {
  function PubAckMessage (line 6825) | function PubAckMessage(header) {
  function PublishMessage (line 6881) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6958) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 7020) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 7035) | function QueryAckMessage(header) {
  function MessageOutputStream (line 7079) | function MessageOutputStream(_out) {
  function MessageInputStream (line 7096) | function MessageInputStream(In, isPolling) {
  function Header (line 7161) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 7218) | function BinaryHelper() {
  function RongIMStream (line 7301) | function RongIMStream(arr) {
  function SocketTransportation (line 7438) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7606) | function PollingTransportation(socket) {
  function IMHandler (line 7868) | function IMHandler() {
  function Transportations (line 7915) | function Transportations() {
  function SyncTimeUtil (line 7922) | function SyncTimeUtil() {
  function MessageUtil (line 7959) | function MessageUtil() {
  function MessageIdHandler (line 8176) | function MessageIdHandler() {
  function ChrmKVCaches (line 8203) | function ChrmKVCaches() {
  function ChrmKVHandler (line 8279) | function ChrmKVHandler() {
  function RongInnerTools (line 8389) | function RongInnerTools() {
  function UnreadCountHandler (line 8435) | function UnreadCountHandler() {
  function ConversationStatusManager (line 8528) | function ConversationStatusManager(option) {
  function MessageContent (line 8619) | function MessageContent(data) {
  function NotificationMessage (line 8630) | function NotificationMessage() {
  function StatusMessage (line 8638) | function StatusMessage() {
  function ModelUtil (line 8645) | function ModelUtil() {
  function CustomerStatusMessage (line 8679) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8696) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8716) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8732) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8747) | function HandShakeMessage(message) {
  function CustomerContact (line 8764) | function CustomerContact(message) {
  function EvaluateMessage (line 8779) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8802) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8818) | function SuspendMessage(message) {
  function TerminateMessage (line 8834) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8853) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8870) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8891) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8924) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8951) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8987) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 9023) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 9045) | function GroupNotificationMessage(msg) {
  function TextMessage (line 9066) | function TextMessage(message) {
  function TypingStatusMessage (line 9093) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 9111) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 9130) | function VoiceMessage(message) {
  function RecallCommandMessage (line 9158) | function RecallCommandMessage(message) {
  function ImageMessage (line 9174) | function ImageMessage(message) {
  function LocationMessage (line 9200) | function LocationMessage(message) {
  function RichContentMessage (line 9227) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 9251) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 9262) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 9273) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 9287) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 9312) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 9323) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 9334) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 9345) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 9356) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 9367) | function FileMessage(message) {
  function HQVoiceMessage (line 9386) | function HQVoiceMessage(message) {
  function AcceptMessage (line 9403) | function AcceptMessage(message) {
  function RingingMessage (line 9418) | function RingingMessage(message) {
  function SummaryMessage (line 9429) | function SummaryMessage(message) {
  function HungupMessage (line 9447) | function HungupMessage(message) {
  function InviteMessage (line 9461) | function InviteMessage(message) {
  function MediaModifyMessage (line 9481) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9495) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9518) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9540) | function ChrmKVNotificationMessage(message) {
  function LogCommandMessage (line 9555) | function LogCommandMessage(message) {
  function ReferenceMessage (line 9572) | function ReferenceMessage(message) {
  function GIFMessage (line 9595) | function GIFMessage(message) {
  function SightMessage (line 9619) | function SightMessage(message) {
  function ChannelInfo (line 9646) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9654) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9663) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9669) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9678) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9684) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9690) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9720) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9731) | function Group(id, name, portraitUri) {
  function Message (line 9740) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9764) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9807) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9819) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9833) | function UserInfo(id, name, portraitUri) {
  function User (line 9842) | function User(id, token) {
  function Room (line 9850) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9864) | function ServerDataProvider() {
  function VCDataProvider (line 12173) | function VCDataProvider(addon) {
  function LoggerType (line 13398) | function LoggerType() {
  function LoggerTag (line 13406) | function LoggerTag() {
  function LoggerReportType (line 13449) | function LoggerReportType() {
  function Logger (line 13460) | function Logger() {
  function LoggerUtil (line 13646) | function LoggerUtil() {
  function MemeoryProvider (line 13822) | function MemeoryProvider() {
  function LocalStorageProvider (line 13877) | function LocalStorageProvider() {
  function sessionStorageProvider (line 13961) | function sessionStorageProvider() {
  function UserDataProvider (line 14025) | function UserDataProvider() {
  function FeatureDectector (line 14109) | function FeatureDectector(callback) {
  function FeaturePatcher (line 14150) | function FeaturePatcher() {
  function JSON (line 14168) | function JSON() {
  function ScriptLoader (line 14244) | function ScriptLoader() {
  function PublicServiceMap (line 14278) | function PublicServiceMap() {
  function ConversationMap (line 14326) | function ConversationMap() {
  function CheckParam (line 14374) | function CheckParam() {
  function LimitableMap (line 14421) | function LimitableMap(limit) {
  function MemoryCache (line 14439) | function MemoryCache() {
  function RongAjax (line 14455) | function RongAjax(options) {
  function Prosumer (line 14499) | function Prosumer() {
  function RongUtil (line 14525) | function RongUtil() {
  function replaceAction (line 14601) | function replaceAction(object) {
  function RongObserver (line 15055) | function RongObserver() {
  function Observer (line 15090) | function Observer() {
  function Timer (line 15139) | function Timer(config) {
  function IndexTools (line 15157) | function IndexTools(config) {
  function InnerUtil (line 15181) | function InnerUtil() {
  function Base64 (line 15190) | function Base64() {
  function TextCompressor (line 15291) | function TextCompressor() {

FILE: api-test-v2/lib/js/RongIMLib.js
  function safe_add (line 1177) | function safe_add(x, y) {
  function bit_rol (line 1186) | function bit_rol(num, cnt) {
  function md5_cmn (line 1193) | function md5_cmn(q, a, b, x, s, t) {
  function md5_ff (line 1196) | function md5_ff(a, b, c, d, x, s, t) {
  function md5_gg (line 1199) | function md5_gg(a, b, c, d, x, s, t) {
  function md5_hh (line 1202) | function md5_hh(a, b, c, d, x, s, t) {
  function md5_ii (line 1205) | function md5_ii(a, b, c, d, x, s, t) {
  function binl_md5 (line 1212) | function binl_md5(x, len) {
  function binl2rstr (line 1308) | function binl2rstr(input) {
  function rstr2binl (line 1321) | function rstr2binl(input) {
  function rstr_md5 (line 1337) | function rstr_md5(s) {
  function rstr_hmac_md5 (line 1344) | function rstr_hmac_md5(key, data) {
  function rstr2hex (line 1365) | function rstr2hex(input) {
  function str2rstr_utf8 (line 1381) | function str2rstr_utf8(input) {
  function raw_md5 (line 1388) | function raw_md5(s) {
  function hex_md5 (line 1391) | function hex_md5(s) {
  function raw_hmac_md5 (line 1394) | function raw_hmac_md5(k, d) {
  function hex_hmac_md5 (line 1397) | function hex_hmac_md5(k, d) {
  function md5 (line 1401) | function md5(string, key, raw) {
  function RongIMClient (line 2206) | function RongIMClient() {
  function Channel (line 4740) | function Channel(cb, self) {
  function Socket (line 5024) | function Socket() {
  function Client (line 5143) | function Client(token, appId) {
  function Bridge (line 5392) | function Bridge() {
  function MessageHandler (line 5465) | function MessageHandler(client) {
  function __ (line 5850) | function __() { this.constructor = d; }
  function MessageCallback (line 5857) | function MessageCallback(error) {
  function CallbackMapping (line 5894) | function CallbackMapping() {
  function PublishCallback (line 5962) | function PublishCallback(_cb, _timeout) {
  function QueryCallback (line 6000) | function QueryCallback(_cb, _timeout) {
  function ConnectAck (line 6037) | function ConnectAck(_cb, _timeout, client) {
  function Navigation (line 6128) | function Navigation() {
  function BaseMessage (line 6387) | function BaseMessage(arg) {
  function ConnectMessage (line 6471) | function ConnectMessage(header) {
  function ConnAckMessage (line 6566) | function ConnAckMessage(header) {
  function DisconnectMessage (line 6667) | function DisconnectMessage(header) {
  function PingReqMessage (line 6717) | function PingReqMessage(header) {
  function PingRespMessage (line 6729) | function PingRespMessage(header) {
  function RetryableMessage (line 6741) | function RetryableMessage(argu) {
  function PubAckMessage (line 6774) | function PubAckMessage(header) {
  function PublishMessage (line 6830) | function PublishMessage(header, two, three) {
  function QueryMessage (line 6907) | function QueryMessage(header, two, three) {
  function QueryConMessage (line 6969) | function QueryConMessage(messageId) {
  function QueryAckMessage (line 6984) | function QueryAckMessage(header) {
  function MessageOutputStream (line 7028) | function MessageOutputStream(_out) {
  function MessageInputStream (line 7045) | function MessageInputStream(In, isPolling) {
  function Header (line 7110) | function Header(_type, _retain, _qos, _dup) {
  function BinaryHelper (line 7167) | function BinaryHelper() {
  function RongIMStream (line 7250) | function RongIMStream(arr) {
  function SocketTransportation (line 7387) | function SocketTransportation(_socket) {
  function PollingTransportation (line 7555) | function PollingTransportation(socket) {
  function IMHandler (line 7817) | function IMHandler() {
  function Transportations (line 7864) | function Transportations() {
  function SyncTimeUtil (line 7871) | function SyncTimeUtil() {
  function MessageUtil (line 7908) | function MessageUtil() {
  function MessageIdHandler (line 8114) | function MessageIdHandler() {
  function ChrmKVCaches (line 8141) | function ChrmKVCaches() {
  function ChrmKVHandler (line 8217) | function ChrmKVHandler() {
  function RongInnerTools (line 8327) | function RongInnerTools() {
  function UnreadCountHandler (line 8373) | function UnreadCountHandler() {
  function ConversationStatusManager (line 8466) | function ConversationStatusManager(option) {
  function MessageContent (line 8546) | function MessageContent(data) {
  function NotificationMessage (line 8557) | function NotificationMessage() {
  function StatusMessage (line 8565) | function StatusMessage() {
  function ModelUtil (line 8572) | function ModelUtil() {
  function CustomerStatusMessage (line 8606) | function CustomerStatusMessage(message) {
  function ChangeModeResponseMessage (line 8623) | function ChangeModeResponseMessage(message) {
  function ChangeModeMessage (line 8643) | function ChangeModeMessage(message) {
  function CustomerStatusUpdateMessage (line 8659) | function CustomerStatusUpdateMessage(message) {
  function HandShakeMessage (line 8674) | function HandShakeMessage(message) {
  function CustomerContact (line 8691) | function CustomerContact(message) {
  function EvaluateMessage (line 8706) | function EvaluateMessage(message) {
  function HandShakeResponseMessage (line 8729) | function HandShakeResponseMessage(message) {
  function SuspendMessage (line 8745) | function SuspendMessage(message) {
  function TerminateMessage (line 8761) | function TerminateMessage(message) {
  function IsTypingStatusMessage (line 8780) | function IsTypingStatusMessage(data) {
  function InformationNotificationMessage (line 8797) | function InformationNotificationMessage(message) {
  function CommandMessage (line 8818) | function CommandMessage(message) {
  function ContactNotificationMessage (line 8851) | function ContactNotificationMessage(message) {
  function ProfileNotificationMessage (line 8878) | function ProfileNotificationMessage(message) {
  function CommandNotificationMessage (line 8914) | function CommandNotificationMessage(message) {
  function DiscussionNotificationMessage (line 8950) | function DiscussionNotificationMessage(message) {
  function GroupNotificationMessage (line 8972) | function GroupNotificationMessage(msg) {
  function TextMessage (line 8993) | function TextMessage(message) {
  function TypingStatusMessage (line 9020) | function TypingStatusMessage(message) {
  function ReadReceiptMessage (line 9038) | function ReadReceiptMessage(message) {
  function VoiceMessage (line 9057) | function VoiceMessage(message) {
  function RecallCommandMessage (line 9085) | function RecallCommandMessage(message) {
  function ImageMessage (line 9101) | function ImageMessage(message) {
  function LocationMessage (line 9127) | function LocationMessage(message) {
  function RichContentMessage (line 9154) | function RichContentMessage(message) {
  function JrmfRedPacketMessage (line 9178) | function JrmfRedPacketMessage(message) {
  function JrmfRedPacketOpenedMessage (line 9189) | function JrmfRedPacketOpenedMessage(message) {
  function UnknownMessage (line 9200) | function UnknownMessage(message) {
  function PublicServiceCommandMessage (line 9214) | function PublicServiceCommandMessage(message) {
  function PublicServiceMultiRichContentMessage (line 9239) | function PublicServiceMultiRichContentMessage(messages) {
  function SyncReadStatusMessage (line 9250) | function SyncReadStatusMessage(message) {
  function ReadReceiptRequestMessage (line 9261) | function ReadReceiptRequestMessage(message) {
  function ReadReceiptResponseMessage (line 9272) | function ReadReceiptResponseMessage(message) {
  function PublicServiceRichContentMessage (line 9283) | function PublicServiceRichContentMessage(message) {
  function FileMessage (line 9294) | function FileMessage(message) {
  function HQVoiceMessage (line 9313) | function HQVoiceMessage(message) {
  function AcceptMessage (line 9330) | function AcceptMessage(message) {
  function RingingMessage (line 9345) | function RingingMessage(message) {
  function SummaryMessage (line 9356) | function SummaryMessage(message) {
  function HungupMessage (line 9374) | function HungupMessage(message) {
  function InviteMessage (line 9388) | function InviteMessage(message) {
  function MediaModifyMessage (line 9408) | function MediaModifyMessage(message) {
  function MemberModifyMessage (line 9422) | function MemberModifyMessage(message) {
  function RCCombineMessage (line 9445) | function RCCombineMessage(message) {
  function ChrmKVNotificationMessage (line 9467) | function ChrmKVNotificationMessage(message) {
  function LogCommandMessage (line 9482) | function LogCommandMessage(message) {
  function ReferenceMessage (line 9499) | function ReferenceMessage(message) {
  function GIFMessage (line 9522) | function GIFMessage(message) {
  function SightMessage (line 9546) | function SightMessage(message) {
  function ChannelInfo (line 9573) | function ChannelInfo(Id, Key) {
  function UserStatus (line 9581) | function UserStatus(platform, online, status) {
  function MentionedInfo (line 9590) | function MentionedInfo(type, userIdList, mentionedContent) {
  function DeleteMessage (line 9596) | function DeleteMessage(msgId, msgDataTime, direct) {
  function CustomServiceConfig (line 9605) | function CustomServiceConfig(isBlack, companyName, companyUrl) {
  function CustomServiceSession (line 9611) | function CustomServiceSession(uid, cid, pid, isQuited, type, adminHelloW...
  function Conversation (line 9617) | function Conversation(conversationTitle, conversationType, draft, isTop,...
  function Discussion (line 9647) | function Discussion(creatorId, id, memberIdList, name, isOpen) {
  function Group (line 9658) | function Group(id, name, portraitUri) {
  function Message (line 9667) | function Message(content, conversationType, extra, objectName, messageDi...
  function MessageTag (line 9690) | function MessageTag(isCounted, isPersited) {
  function PublicServiceMenuItem (line 9733) | function PublicServiceMenuItem(id, name, type, sunMenuItems, url) {
  function PublicServiceProfile (line 9745) | function PublicServiceProfile(conversationType, introduction, menu, name...
  function UserInfo (line 9759) | function UserInfo(id, name, portraitUri) {
  function User (line 9768) | function User(id, token) {
  function Room (line 9776) | function Room(id, user, mode, broadcastType, type) {
  function ServerDataProvider (line 9790) | function ServerDataProvider() {
  function VCDataProvider (line 12008) | function VCDataProvider(addon) {
  function LoggerType (line 13233) | function LoggerType() {
  function LoggerTag (line 13241) | function LoggerTag() {
  function LoggerReportType (line 13273) | function LoggerReportType() {
  function Logger (line 13284) | function Logger() {
  function LoggerUtil (line 13466) | function LoggerUtil() {
  function MemeoryProvider (line 13642) | function MemeoryProvider() {
  function LocalStorageProvider (line 13697) | function LocalStorageProvider() {
  function sessionStorageProvider (line 13781) | function sessionStorageProvider() {
  function UserDataProvider (line 13845) | function UserDataProvider() {
  function FeatureDectector (line 13929) | function FeatureDectector(callback) {
  function FeaturePatcher (line 13970) | function FeaturePatcher() {
  function JSON (line 13988) | function JSON() {
  function ScriptLoader (line 14064) | function ScriptLoader() {
  function PublicServiceMap (line 14098) | function PublicServiceMap() {
  function ConversationMap (line 14146) | function ConversationMap() {
  function CheckParam (line 14194) | function CheckParam() {
  function LimitableMap (line 14241) | function LimitableMap(limit) {
  function MemoryCache (line 14259) | function MemoryCache() {
  function RongAjax (line 14275) | function RongAjax(options) {
  function Prosumer (line 14319) | function Prosumer() {
  function RongUtil (line 14345) | function RongUtil() {
  function replaceAction (line 14418) | function replaceAction(object) {
  function RongObserver (line 14838) | function RongObserver() {
  function Observer (line 14873) | function Observer() {
  function Timer (line 14922) | function Timer(config) {
  function IndexTools (line 14940) | function IndexTools(config) {
  function InnerUtil (line 14964) | function InnerUtil() {
  function Base64 (line 14973) | function Base64() {
  function TextCompressor (line 15074) | function TextCompressor() {

FILE: api-test-v2/lib/js/es6-promise.js
  function t (line 1) | function t(t){var e=typeof t;return null!==t&&("object"===e||"function"=...
  function e (line 1) | function e(t){return"function"==typeof t}
  function n (line 1) | function n(t){W=t}
  function r (line 1) | function r(t){z=t}
  function o (line 1) | function o(){return function(){return process.nextTick(a)}}
  function i (line 1) | function i(){return"undefined"!=typeof U?function(){U(a)}:c()}
  function s (line 1) | function s(){var t=0,e=new H(a),n=document.createTextNode("");return e.o...
  function u (line 1) | function u(){var t=new MessageChannel;return t.port1.onmessage=a,functio...
  function c (line 1) | function c(){var t=setTimeout;return function(){return t(a,1)}}
  function a (line 1) | function a(){for(var t=0;t<N;t+=2){var e=Q[t],n=Q[t+1];e(n),Q[t]=void 0,...
  function f (line 1) | function f(){try{var t=Function("return this")().require("vertx");return...
  function l (line 1) | function l(t,e){var n=this,r=new this.constructor(v);void 0===r[V]&&x(r)...
  function h (line 1) | function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)ret...
  function v (line 1) | function v(){}
  function p (line 1) | function p(){return new TypeError("You cannot resolve a promise with its...
  function d (line 1) | function d(){return new TypeError("A promises callback cannot return tha...
  function _ (line 1) | function _(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}
  function y (line 1) | function y(t,e,n){z(function(t){var r=!1,o=_(n,e,function(n){r||(r=!0,e!...
  function m (line 1) | function m(t,e){e._state===Z?A(t,e._result):e._state===$?S(t,e._result):...
  function b (line 1) | function b(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.re...
  function w (line 1) | function w(e,n){if(e===n)S(e,p());else if(t(n)){var r=void 0;try{r=n.the...
  function g (line 1) | function g(t){t._onerror&&t._onerror(t._result),E(t)}
  function A (line 1) | function A(t,e){t._state===X&&(t._result=e,t._state=Z,0!==t._subscribers...
  function S (line 1) | function S(t,e){t._state===X&&(t._state=$,t._result=e,z(g,t))}
  function j (line 1) | function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]...
  function E (line 1) | function E(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r...
  function T (line 1) | function T(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=!0;if(i){try{s=r(o)}c...
  function M (line 1) | function M(t,e){try{e(function(e){w(t,e)},function(e){S(t,e)})}catch(n){...
  function P (line 1) | function P(){return tt++}
  function x (line 1) | function x(t){t[V]=tt++,t._state=void 0,t._result=void 0,t._subscribers=[]}
  function C (line 1) | function C(){return new Error("Array Methods must be provided an Array")}
  function O (line 1) | function O(t){return new et(this,t).promise}
  function k (line 1) | function k(t){var e=this;return new e(L(t)?function(n,r){for(var o=t.len...
  function F (line 1) | function F(t){var e=this,n=new e(v);return S(n,t),n}
  function Y (line 1) | function Y(){throw new TypeError("You must pass a resolver function as t...
  function q (line 1) | function q(){throw new TypeError("Failed to construct 'Promise': Please ...
  function D (line 1) | function D(){var t=void 0;if("undefined"!=typeof global)t=global;else if...
  function t (line 1) | function t(t,e){this._instanceConstructor=t,this.promise=new t(v),this.p...
  function t (line 1) | function t(e){this[V]=P(),this._result=this._state=void 0,this._subscrib...

FILE: api-test-v2/lib/js/vue-2.6.10.js
  function t (line 6) | function t(e){return null==e}
  function n (line 6) | function n(e){return null!=e}
  function r (line 6) | function r(e){return!0===e}
  function i (line 6) | function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==ty...
  function o (line 6) | function o(e){return null!==e&&"object"==typeof e}
  function s (line 6) | function s(e){return"[object Object]"===a.call(e)}
  function c (line 6) | function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t...
  function u (line 6) | function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof...
  function l (line 6) | function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?J...
  function f (line 6) | function f(e){var t=parseFloat(e);return isNaN(t)?e:t}
  function p (line 6) | function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i<r.len...
  function h (line 6) | function h(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(...
  function y (line 6) | function y(e,t){return m.call(e,t)}
  function g (line 6) | function g(e){var t=Object.create(null);return function(n){return t[n]||...
  function n (line 6) | function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e...
  function k (line 6) | function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n...
  function A (line 6) | function A(e,t){for(var n in t)e[n]=t[n];return e}
  function O (line 6) | function O(e){for(var t={},n=0;n<e.length;n++)e[n]&&A(t,e[n]);return t}
  function S (line 6) | function S(e,t,n){}
  function N (line 6) | function N(e,t){if(e===t)return!0;var n=o(e),r=o(t);if(!n||!r)return!n&&...
  function j (line 6) | function j(e,t){for(var n=0;n<e.length;n++)if(N(e[n],t))return n;return-1}
  function D (line 6) | function D(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments...
  function R (line 6) | function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,wr...
  function re (line 6) | function re(e){return"function"==typeof e&&/native code/.test(e.toString...
  function e (line 6) | function e(){this.set=Object.create(null)}
  function le (line 6) | function le(e){ue.push(e),ce.target=e}
  function fe (line 6) | function fe(){ue.pop(),ce.target=ue[ue.length-1]}
  function he (line 6) | function he(e){return new pe(void 0,void 0,void 0,String(e))}
  function me (line 6) | function me(e){var t=new pe(e.tag,e.data,e.children&&e.children.slice(),...
  function $e (line 6) | function $e(e){be=e}
  function Ce (line 6) | function Ce(e,t){var n;if(o(e)&&!(e instanceof pe))return y(e,"__ob__")&...
  function xe (line 6) | function xe(e,t,n,r,i){var o=new ce,a=Object.getOwnPropertyDescriptor(e,...
  function ke (line 6) | function ke(e,t,n){if(Array.isArray(e)&&c(t))return e.length=Math.max(e....
  function Ae (line 6) | function Ae(e,t){if(Array.isArray(e)&&c(t))e.splice(t,1);else{var n=e.__...
  function Se (line 6) | function Se(e,t){if(!t)return e;for(var n,r,i,o=oe?Reflect.ownKeys(t):Ob...
  function Te (line 6) | function Te(e,t,n){return n?function(){var r="function"==typeof t?t.call...
  function Ee (line 6) | function Ee(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n...
  function Ne (line 6) | function Ne(e,t,n,r){var i=Object.create(e||null);return t?A(i,t):i}
  function De (line 6) | function De(e,t,n){if("function"==typeof t&&(t=t.options),function(e,t){...
  function Le (line 6) | function Le(e,t,n,r){if("string"==typeof n){var i=e[t];if(y(i,n))return ...
  function Me (line 6) | function Me(e,t,n,r){var i=t[e],o=!y(n,e),a=n[e],s=Pe(Boolean,i.type);if...
  function Ie (line 6) | function Ie(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return ...
  function Fe (line 6) | function Fe(e,t){return Ie(e)===Ie(t)}
  function Pe (line 6) | function Pe(e,t){if(!Array.isArray(t))return Fe(t,e)?0:-1;for(var n=0,r=...
  function Re (line 6) | function Re(e,t,n){le();try{if(t)for(var r=t;r=r.$parent;){var i=r.$opti...
  function He (line 6) | function He(e,t,n,r,i){var o;try{(o=n?e.apply(t,n):e.call(t))&&!o._isVue...
  function Be (line 6) | function Be(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null...
  function Ue (line 6) | function Ue(e,t,n){if(!z&&!V||"undefined"==typeof console)throw e;consol...
  function qe (line 6) | function qe(){Je=!1;var e=Ke.slice(0);Ke.length=0;for(var t=0;t<e.length...
  function Ye (line 6) | function Ye(e,t){var n;if(Ke.push(function(){if(e)try{e.call(t)}catch(e)...
  function et (line 6) | function et(e){!function e(t,n){var r,i;var a=Array.isArray(t);if(!a&&!o...
  function nt (line 6) | function nt(e,t){function n(){var e=arguments,r=n.fns;if(!Array.isArray(...
  function rt (line 6) | function rt(e,n,i,o,a,s){var c,u,l,f;for(c in e)u=e[c],l=n[c],f=tt(c),t(...
  function it (line 6) | function it(e,i,o){var a;e instanceof pe&&(e=e.data.hook||(e.data.hook={...
  function ot (line 6) | function ot(e,t,r,i,o){if(n(t)){if(y(t,r))return e[r]=t[r],o||delete t[r...
  function at (line 6) | function at(e){return i(e)?[he(e)]:Array.isArray(e)?function e(o,a){var ...
  function st (line 6) | function st(e){return n(e)&&n(e.text)&&!1===e.isComment}
  function ct (line 6) | function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKey...
  function ut (line 6) | function ut(e,t){if(!e||!e.length)return{};for(var n={},r=0,i=e.length;r...
  function lt (line 6) | function lt(e){return e.isComment&&!e.asyncFactory||" "===e.text}
  function ft (line 6) | function ft(t,n,r){var i,o=Object.keys(n).length>0,a=t?!!t.$stable:!o,s=...
  function pt (line 6) | function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,...
  function dt (line 6) | function dt(e,t){return function(){return e[t]}}
  function vt (line 6) | function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)f...
  function ht (line 6) | function ht(e,t,n,r){var i,o=this.$scopedSlots[e];o?(n=n||{},r&&(n=A(A({...
  function mt (line 6) | function mt(e){return Le(this.$options,"filters",e)||E}
  function yt (line 6) | function yt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}
  function gt (line 6) | function gt(e,t,n,r,i){var o=F.keyCodes[t]||n;return i&&r&&!F.keyCodes[t...
  function _t (line 6) | function _t(e,t,n,r,i){if(n)if(o(n)){var a;Array.isArray(n)&&(n=O(n));va...
  function bt (line 6) | function bt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];...
  function $t (line 6) | function $t(e,t,n){return wt(e,"__once__"+t+(n?"_"+n:""),!0),e}
  function wt (line 6) | function wt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&...
  function Ct (line 6) | function Ct(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}
  function xt (line 6) | function xt(e,t){if(t)if(s(t)){var n=e.on=e.on?A({},e.on):{};for(var r i...
  function kt (line 6) | function kt(e,t,n,r){t=t||{$stable:!n};for(var i=0;i<e.length;i++){var o...
  function At (line 6) | function At(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];"string"==typeo...
  function Ot (line 6) | function Ot(e,t){return"string"==typeof e?t+e:e}
  function St (line 6) | function St(e){e._o=$t,e._n=f,e._s=l,e._l=vt,e._t=ht,e._q=N,e._i=j,e._m=...
  function Tt (line 6) | function Tt(t,n,i,o,a){var s,c=this,u=a.options;y(o,"_uid")?(s=Object.cr...
  function Et (line 6) | function Et(e,t,n,r,i){var o=me(e);return o.fnContext=n,o.fnOptions=r,t....
  function Nt (line 6) | function Nt(e,t){for(var n in t)e[b(n)]=t[n]}
  function Lt (line 6) | function Lt(i,a,s,c,l){if(!t(i)){var f=s.$options._base;if(o(i)&&(i=f.ex...
  function Mt (line 6) | function Mt(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}
  function Pt (line 6) | function Pt(e,a,s,c,u,l){return(Array.isArray(s)||i(s))&&(u=c,c=s,s=void...
  function Bt (line 6) | function Bt(e,t){return(e.__esModule||oe&&"Module"===e[Symbol.toStringTa...
  function Ut (line 6) | function Ut(e){return e.isComment&&e.asyncFactory}
  function zt (line 6) | function zt(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var r=e[t...
  function Vt (line 6) | function Vt(e,t){Rt.$on(e,t)}
  function Kt (line 6) | function Kt(e,t){Rt.$off(e,t)}
  function Jt (line 6) | function Jt(e,t){var n=Rt;return function r(){null!==t.apply(null,argume...
  function qt (line 6) | function qt(e,t,n){Rt=e,rt(t,n||{},Vt,Kt,Jt,e),Rt=void 0}
  function Zt (line 6) | function Zt(e){var t=Wt;return Wt=e,function(){Wt=t}}
  function Gt (line 6) | function Gt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}
  function Xt (line 6) | function Xt(e,t){if(t){if(e._directInactive=!1,Gt(e))return}else if(e._d...
  function Yt (line 6) | function Yt(e,t){le();var n=e.$options[t],r=t+" hook";if(n)for(var i=0,o...
  function un (line 6) | function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.i...
  function dn (line 6) | function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(...
  function vn (line 6) | function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){va...
  function mn (line 6) | function mn(e,t,n){var r=!te();"function"==typeof n?(pn.get=r?yn(t):gn(n...
  function yn (line 6) | function yn(e){return function(){var t=this._computedWatchers&&this._com...
  function gn (line 6) | function gn(e){return function(){return e.call(this,this)}}
  function _n (line 6) | function _n(e,t,n,r){return s(n)&&(r=n,n=n.handler),"string"==typeof n&&...
  function $n (line 6) | function $n(e){var t=e.options;if(e.super){var n=$n(e.super);if(n!==e.su...
  function wn (line 6) | function wn(e){this._init(e)}
  function Cn (line 6) | function Cn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r...
  function xn (line 6) | function xn(e){return e&&(e.Ctor.options.name||e.tag)}
  function kn (line 6) | function kn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeo...
  function An (line 6) | function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a...
  function On (line 6) | function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstanc...
  function r (line 6) | function r(){n.$off(e,r),t.apply(n,arguments)}
  function Bn (line 6) | function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.com...
  function Un (line 6) | function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),clas...
  function zn (line 6) | function zn(e,t){return e?t?e+" "+t:e:t||""}
  function Vn (line 6) | function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=...
  function Zn (line 6) | function Zn(e){return qn(e)?"svg":"math"===e?"math":void 0}
  function Yn (line 6) | function Yn(e){if("string"==typeof e){var t=document.querySelector(e);re...
  function tr (line 6) | function tr(e,t){var r=e.data.ref;if(n(r)){var i=e.context,o=e.component...
  function ir (line 6) | function ir(e,i){return e.key===i.key&&(e.tag===i.tag&&e.isComment===i.i...
  function or (line 6) | function or(e,t,r){var i,o,a={};for(i=t;i<=r;++i)n(o=e[i].key)&&(a[o]=i)...
  function sr (line 6) | function sr(e,t){(e.data.directives||t.data.directives)&&function(e,t){v...
  function ur (line 6) | function ur(e,t){var n,r,i=Object.create(null);if(!e)return i;for(n=0;n<...
  function lr (line 6) | function lr(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{})...
  function fr (line 6) | function fr(e,t,n,r,i){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,r,i)}c...
  function dr (line 6) | function dr(e,r){var i=r.componentOptions;if(!(n(i)&&!1===i.Ctor.options...
  function vr (line 6) | function vr(e,t,n){e.tagName.indexOf("-")>-1?hr(e,t,n):In(t)?Hn(n)?e.rem...
  function hr (line 6) | function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTARE...
  function yr (line 6) | function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(...
  function Ar (line 6) | function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0...
  function Or (line 6) | function Or(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";...
  function Sr (line 6) | function Sr(e,t){console.error("[Vue compiler]: "+e)}
  function Tr (line 6) | function Tr(e,t){return e?e.map(function(e){return e[t]}).filter(functio...
  function Er (line 6) | function Er(e,t,n,r,i){(e.props||(e.props=[])).push(Rr({name:t,value:n,d...
  function Nr (line 6) | function Nr(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(...
  function jr (line 6) | function jr(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(Rr({name:t,value:n...
  function Dr (line 6) | function Dr(e,t,n,r,i,o,a,s){(e.directives||(e.directives=[])).push(Rr({...
  function Lr (line 6) | function Lr(e,t,n){return n?"_p("+t+',"'+e+'")':e+t}
  function Mr (line 6) | function Mr(t,n,r,i,o,a,s,c){var u;(i=i||e).right?c?n="("+n+")==='click'...
  function Ir (line 6) | function Ir(e,t,n){var r=Fr(e,":"+t)||Fr(e,"v-bind:"+t);if(null!=r)retur...
  function Fr (line 6) | function Fr(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var i=e.attrsLis...
  function Pr (line 6) | function Pr(e,t){for(var n=e.attrsList,r=0,i=n.length;r<i;r++){var o=n[r...
  function Rr (line 6) | function Rr(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end...
  function Hr (line 6) | function Hr(e,t,n){var r=n||{},i=r.number,o="$$v";r.trim&&(o="(typeof $$...
  function Br (line 6) | function Br(e,t){var n=function(e){if(e=e.trim(),gr=e.length,e.indexOf("...
  function Ur (line 6) | function Ur(){return _r.charCodeAt(++$r)}
  function zr (line 6) | function zr(){return $r>=gr}
  function Vr (line 6) | function Vr(e){return 34===e||39===e}
  function Kr (line 6) | function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91==...
  function Jr (line 6) | function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}
  function Gr (line 6) | function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,argu...
  function Yr (line 6) | function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.t...
  function Qr (line 6) | function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}
  function ei (line 6) | function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=...
  function ri (line 6) | function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=...
  function ii (line 6) | function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t...
  function si (line 6) | function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}
  function ci (line 6) | function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}
  function hi (line 6) | function hi(e,r){var i=r.data,o=e.data;if(!(t(i.staticStyle)&&t(i.style)...
  function gi (line 6) | function gi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
  function _i (line 6) | function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.s...
  function bi (line 6) | function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A...
  function Ei (line 6) | function Ei(e){Ti(function(){Ti(e)})}
  function Ni (line 6) | function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n...
  function ji (line 6) | function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}
  function Di (line 6) | function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!...
  function Mi (line 6) | function Mi(e,t){var n,r=window.getComputedStyle(e),i=(r[ki+"Delay"]||""...
  function Ii (line 6) | function Ii(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.a...
  function Fi (line 6) | function Fi(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}
  function Pi (line 6) | function Pi(e,r){var i=e.elm;n(i._leaveCb)&&(i._leaveCb.cancelled=!0,i._...
  function Ri (line 6) | function Ri(e,r){var i=e.elm;n(i._enterCb)&&(i._enterCb.cancelled=!0,i._...
  function Hi (line 6) | function Hi(e){return"number"==typeof e&&!isNaN(e)}
  function Bi (line 6) | function Bi(e){if(t(e))return!1;var r=e.fns;return n(r)?Bi(Array.isArray...
  function Ui (line 6) | function Ui(e,t){!0!==t.data.show&&Pi(t)}
  function l (line 6) | function l(e){var t=u.parentNode(e);n(t)&&u.removeChild(t,e)}
  function f (line 6) | function f(e,t,i,o,a,c,l){if(n(e.elm)&&n(c)&&(e=c[l]=me(e)),e.isRootInse...
  function d (line 6) | function d(e,t){n(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingI...
  function v (line 6) | function v(e,t,r){n(e)&&(n(r)?u.parentNode(r)===e&&u.insertBefore(e,t,r)...
  function h (line 6) | function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)f(t[r],...
  function m (line 6) | function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;ret...
  function y (line 6) | function y(e,t){for(var r=0;r<s.create.length;++r)s.create[r](nr,e);n(o=...
  function g (line 6) | function g(e){var t;if(n(t=e.fnScopeId))u.setStyleScope(e.elm,t);else fo...
  function _ (line 6) | function _(e,t,n,r,i,o){for(;r<=i;++r)f(n[r],o,e,t,!1,n,r)}
  function b (line 6) | function b(e){var t,r,i=e.data;if(n(i))for(n(t=i.hook)&&n(t=t.destroy)&&...
  function $ (line 6) | function $(e,t,r){for(;t<=r;++t){var i=e[t];n(i)&&(n(i.tag)?(w(i),b(i)):...
  function w (line 6) | function w(e,t){if(n(t)||n(e.data)){var r,i=s.remove.length+1;for(n(t)?t...
  function C (line 6) | function C(e,t,r,i){for(var o=r;o<i;o++){var a=t[o];if(n(a)&&ir(e,a))ret...
  function x (line 6) | function x(e,i,o,a,c,l){if(e!==i){n(i.elm)&&n(a)&&(i=a[c]=me(i));var p=i...
  function k (line 6) | function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;els...
  function O (line 6) | function O(e,t,i,o){var a,s=t.tag,c=t.data,u=t.children;if(o=o||c&&c.pre...
  function Ki (line 6) | function Ki(e,t,n){Ji(e,t,n),(q||Z)&&setTimeout(function(){Ji(e,t,n)},0)}
  function Ji (line 6) | function Ji(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){f...
  function qi (line 6) | function qi(e,t){return t.every(function(t){return!N(t,e)})}
  function Wi (line 6) | function Wi(e){return"_value"in e?e._value:e.value}
  function Zi (line 6) | function Zi(e){e.target.composing=!0}
  function Gi (line 6) | function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"i...
  function Xi (line 6) | function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,...
  function Yi (line 6) | function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Y...
  function to (line 6) | function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abst...
  function no (line 6) | function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];...
  function ro (line 6) | function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{...
  function co (line 6) | function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._ent...
  function uo (line 6) | function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}
  function lo (line 6) | function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-...
  function Ho (line 6) | function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[...
  function ua (line 6) | function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAtt...
  function la (line 6) | function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t...
  function fa (line 6) | function fa(e,t){var n,r;(r=Ir(n=e,"key"))&&(n.key=r),e.plain=!e.key&&!e...
  function pa (line 6) | function pa(e){var t;if(t=Fr(e,"v-for")){var n=function(e){var t=e.match...
  function da (line 6) | function da(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push...
  function va (line 6) | function va(e){var t=e.name.replace(ia,"");return t||"#"!==e.name[0]&&(t...
  function ha (line 6) | function ha(e){var t=e.match(ra);if(t){var n={};return t.forEach(functio...
  function ma (line 6) | function ma(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].val...
  function _a (line 6) | function _a(e){return ua(e.tag,e.attrsList.slice(),e.parent)}
  function ka (line 6) | function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,funct...
  function Da (line 6) | function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var...
  function La (line 6) | function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+...
  function Ma (line 6) | function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var...
  function Pa (line 6) | function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?R...
  function Ra (line 6) | function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&...
  function Ha (line 6) | function Ha(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e...
  function Ba (line 6) | function Ba(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ua(e,...
  function Ua (line 6) | function Ua(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,i){if(!t.l...
  function za (line 6) | function za(e,t,n,r){var i=e.for,o=e.alias,a=e.iterator1?","+e.iterator1...
  function Va (line 6) | function Va(e,t){var n="{",r=function(e,t){var n=e.directives;if(!n)retu...
  function Ka (line 6) | function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}
  function Ja (line 6) | function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&...
  function qa (line 6) | function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o...
  function Wa (line 6) | function Wa(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}
  function Za (line 6) | function Za(e,t){return 1===e.type?Ra(e,t):3===e.type&&e.isComment?(r=e,...
  function Ga (line 6) | function Ga(e){for(var t="",n="",r=0;r<e.length;r++){var i=e[r],o=Xa(i.v...
  function Xa (line 6) | function Xa(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"...
  function Ya (line 6) | function Ya(e,t){try{return new Function(e)}catch(n){return t.push({err:...
  function Qa (line 6) | function Qa(e){var t=Object.create(null);return function(n,r,i){(r=A({},...
  function t (line 6) | function t(t,n){var r=Object.create(e),i=[],o=[];if(n)for(var a in n.mod...
  function is (line 6) | function is(e){return(ts=ts||document.createElement("div")).innerHTML=e?...

FILE: api-test-v2/lib/js/vue-json-pretty.js
  function t (line 1) | function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{...
  function r (line 1) | function r(e){return Object.prototype.toString.call(e).slice(8,-1).toLow...
  function n (line 1) | function n(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"==t...
  function r (line 1) | function r(e){return"/*# sourceMappingURL=data:application/json;charset=...
  function r (line 1) | function r(e){for(var t=0;t<e.length;t++){var n=e[t],r=l[n.id];if(r){r.r...
  function o (line 1) | function o(){var e=document.createElement("style");return e.type="text/c...
  function i (line 1) | function i(e){var t,n,r=document.querySelector("style["+m+'~="'+e.id+'"]...
  function s (line 1) | function s(e,t,n,r){var o=n?"":r.css;if(e.styleSheet)e.styleSheet.cssTex...
  function a (line 1) | function a(e,t){var n=t.css,r=t.media,o=t.sourceMap;if(r&&e.setAttribute...

FILE: api-test-v4/js/common/service.js
  function init (line 49) | function init(config, watcher) {
  function disconnect (line 113) | function disconnect() {
  function changeUser (line 117) | function changeUser(config) {
  function getConnectedTime (line 121) | function getConnectedTime() {
  function reconnect (line 129) | function reconnect() {
  function getConversationList (line 141) | function getConversationList(count, startTime, order) {
  function removeConversation (line 153) | function removeConversation(conversationType, targetId) {
  function getHistoryMessages (line 168) | function getHistoryMessages(timestrap, count, conversationType, targetId) {
  function clearHistoryMessages (line 189) | function clearHistoryMessages(timestamp, conversationType, targetId) {
  function deleteRemoteMessages (line 208) | function deleteRemoteMessages(messageUId, sentTime, messageDirection, co...
  function getUnreadCount (line 235) | function getUnreadCount(conversationType, targetId) {
  function getTotalUnreadCount (line 248) | async function getTotalUnreadCount() {
  function clearUnreadCount (line 256) | function clearUnreadCount(conversationType, targetId) {
  function setDraft (line 268) | function setDraft(conversationType, targetId, draft) {
  function getDraft (line 279) | function getDraft(conversationType, targetId) {
  function deleteDraft (line 290) | function deleteDraft(conversationType, targetId) {
  function sendMessage (line 298) | function sendMessage(conversationType, targetId, msg) {
  function sendTextMessage (line 322) | function sendTextMessage(text, conversationType, targetId, isStatusMessa...
  function sendImageMessage (line 361) | function sendImageMessage(base64, imageUri, conversationType, targetId, ...
  function sendFileMessage (line 382) | function sendFileMessage(fileName, fileSize, fileType, fileUrl, conversa...
  function sendVoiceMessage (line 404) | function sendVoiceMessage(remoteUrl, type, duration, conversationType, t...
  function sendRecallMessage (line 427) | function sendRecallMessage(messageUId, sentTime, conversationType, targe...
  function recallChatroomMessage (line 452) | function recallChatroomMessage(messageUId, sentTime, targetId, disableNo...
  function sendAtMessage (line 483) | function sendAtMessage(text, methiondId, conversationType, targetId, dis...
  function sendAtMessageByErrorParamField (line 506) | function sendAtMessageByErrorParamField(text, methiondId, conversationTy...
  function registerMessage (line 538) | function registerMessage(messageType, isPersited, isCounted, props) {
  function sendRegisterMessage (line 555) | function sendRegisterMessage(messageType, props, conversationType, targe...
  function sendLocationMessage (line 585) | function sendLocationMessage(base64, latitude, longitude, poi, conversat...
  function sendReferenceMessage (line 612) | function sendReferenceMessage(referContent, referMsgUserId, objName, con...
  function sendRichContentMessage (line 640) | function sendRichContentMessage(title, content, imageUri, url, conversat...
  function sendSightMessage (line 661) | function sendSightMessage(conversationType, targetId, sightUrl, content,...
  function joinChatRoom (line 686) | function joinChatRoom(chatRoomId, count) {
  function joinExistChatRoom (line 701) | function joinExistChatRoom(chatRoomId, count) {
  function quitChatRoom (line 715) | function quitChatRoom(chatRoomId) {
  function getChatRoomInfo (line 729) | function getChatRoomInfo(chatRoomId, count, order) {
  function getChatRoomHistoryMessages (line 738) | function getChatRoomHistoryMessages(chatRoomId, timestrap, count, order) {
  function getFileToken (line 749) | function getFileToken(fileType, fileName) {
  function getFileUrl (line 753) | function getFileUrl(fileType, fileName, originName) {
  function sendChatRoomMessage (line 763) | function sendChatRoomMessage(text, targetId) {
  function setChatRoomEntry (line 775) | function setChatRoomEntry(key, value, isAutoDelete, isSendNotification, ...
  function forceSetChatRoomEntry (line 788) | function forceSetChatRoomEntry(key, value, isAutoDelete, isSendNotificat...
  function removeChatRoomEntry (line 801) | function removeChatRoomEntry(key, isSendNotification, extra, chatRoomId) {
  function forceRemoveChatRoomEntry (line 812) | function forceRemoveChatRoomEntry(key, isSendNotification, extra, chatRo...
  function getChatRoomEntry (line 823) | function getChatRoomEntry(key, chatRoomId) {
  function getAllChatRoomEntries (line 829) | function getAllChatRoomEntries(chatRoomId) {
  function joinRTCRoom (line 835) | function joinRTCRoom(roomId, mode) {
  function pingRTCRoom (line 842) | function pingRTCRoom(roomId, mode) {
  function setRTCData (line 848) | function setRTCData(roomId, key, value, isInner, apiType, message) {
  function getRTCData (line 854) | function getRTCData(roomId, key, isInner, apiType) {
  function removeRTCData (line 860) | function removeRTCData(roomId, key, isInner, apiType) {
  function getRTCToken (line 866) | function getRTCToken(roomId) {
  function getRTCRoomInfo (line 872) | function getRTCRoomInfo(roomId) {
  function getRTCUserInfoList (line 878) | function getRTCUserInfoList(roomId) {
  function setRTCUserInfo (line 884) | function setRTCUserInfo(roomId) {
  function removeRTCUserInfo (line 893) | function removeRTCUserInfo(roomId) {
  function quitRTCRoom (line 901) | function quitRTCRoom(roomId, mode) {
  function setConversationStatus (line 908) | function setConversationStatus(isNotification, isTop, conversationType, ...
  function setMessageKV (line 918) | function setMessageKV(){
  function updateMessageExpansion (line 923) | function updateMessageExpansion(conversationType, targetId, messageUId, ...
  function removeMessageExpansion (line 952) | function removeMessageExpansion(conversationType, targetId, keys, messag...
  function removeMessageAllExpansion (line 974) | function removeMessageAllExpansion(conversationType, targetId, messageUI...
  function getLastCacheMsgUId (line 982) | function getLastCacheMsgUId() {
  function getLastCacheMsgSentTime (line 985) | function getLastCacheMsgSentTime() {
  function getLastCacheMsgDirection (line 988) | function getLastCacheMsgDirection() {

FILE: api-test-v4/js/common/utils.js
  function isObject (line 42) | function isObject(obj) {
  function isArray (line 45) | function isArray(arr) {
  function isNodeList (line 48) | function isNodeList(arr) {
  function isFunction (line 52) | function isFunction(arr) {
  function isString (line 55) | function isString(str) {
  function isBoolean (line 58) | function isBoolean(str) {
  function isUndefined (line 61) | function isUndefined(str) {
  function isNull (line 64) | function isNull(str) {
  function isNumber (line 67) | function isNumber(str) {
  function defered (line 71) | function defered(callback) {
  function isEmpty (line 74) | function isEmpty(val) {
  function tplEngine (line 90) | function tplEngine(temp, data, regexp) {
  function forEach (line 105) | function forEach(obj, callback, options) {
  function clearUndefKey (line 133) | function clearUndefKey(obj) {
  function map (line 142) | function map(arr, event) {
  function deepMap (line 149) | function deepMap(arr, event) {
  function isEqual (line 160) | function isEqual(obj1, obj2) {
  function getDom (line 174) | function getDom(id) {
  function queryAllDom (line 178) | function queryAllDom(sel) {
  function queryDom (line 182) | function queryDom(sel) {
  function removeDom (line 186) | function removeDom(dom) {
  function getParent (line 191) | function getParent(dom) {
  function getChildren (line 195) | function getChildren(dom) {
  function getTemp (line 199) | function getTemp(id) {
  function getDomIndex (line 204) | function getDomIndex(dom) {
  function toJSON (line 216) | function toJSON(obj) {
  function parseJSON (line 220) | function parseJSON(str) {
  function copy (line 228) | function copy(obj) {
  function hasClass (line 233) | function hasClass(el, className) {
  function timestampToString (line 246) | function timestampToString(timestamp) {
  function extend (line 257) | function extend(destination, sources) {
  function mountDialog (line 271) | function mountDialog(options, instance) {
  function reverse (line 282) | function reverse(obj) {
  function openUrl (line 287) | function openUrl(url) {
  function getBase64Image (line 291) | function getBase64Image() {
  function getIncreasNumber (line 305) | function getIncreasNumber() {
  function getUrlQuery (line 338) | function getUrlQuery() {
  function getRCUrlQuery (line 351) | function getRCUrlQuery() {
  function deferNoop (line 375) | function deferNoop() {

FILE: api-test-v4/js/main.js
  function runAllApi (line 46) | function runAllApi(allRefs, currentIndex, finishCallback) {
  function runOneByOne (line 70) | function runOneByOne(finishCallback) {
  function runLineByLine (line 81) | function runLineByLine(finishCallback) {
  function setConfig (line 90) | function setConfig(config) {
  function watchStatus (line 101) | function watchStatus(status) {
  function watchMessage (line 120) | function watchMessage(message) {
  function watchChatroom (line 135) | function watchChatroom(entries) {
  function innerEl (line 141) | function innerEl(text) {
  function watchExpansion (line 156) | function watchExpansion(event) {
  function autoRun (line 177) | function autoRun() {
  function loginSuccessEvent (line 190) | function loginSuccessEvent(userId, config) {
  function login (line 202) | function login(config) {
  function getApiListMethods (line 222) | function getApiListMethods() {
  function getServiceMethods (line 268) | function getServiceMethods() {
  function start (line 520) | function start() {

FILE: api-test-v4/lib/js/RongIMLib-4.1.0.js
  function __awaiter (line 26) | function __awaiter(thisArg, _arguments, P, generator) {
  function _typeof (line 36) | function _typeof(obj) {
  function _classCallCheck (line 52) | function _classCallCheck(instance, Constructor) {
  function _defineProperties (line 58) | function _defineProperties(target, props) {
  function _createClass (line 68) | function _createClass(Constructor, protoProps, staticProps) {
  function _defineProperty (line 74) | function _defineProperty(obj, key, value) {
  function _inherits (line 89) | function _inherits(subClass, superClass) {
  function _getPrototypeOf (line 104) | function _getPrototypeOf(o) {
  function _setPrototypeOf (line 111) | function _setPrototypeOf(o, p) {
  function _isNativeReflectConstruct (line 120) | function _isNativeReflectConstruct() {
  function _construct (line 133) | function _construct(Parent, args, Class) {
  function _isNativeFunction (line 150) | function _isNativeFunction(fn) {
  function _wrapNativeSuper (line 154) | function _wrapNativeSuper(Class) {
  function _newArrowCheck (line 188) | function _newArrowCheck(innerThis, boundThis) {
  function _assertThisInitialized (line 194) | function _assertThisInitialized(self) {
  function _possibleConstructorReturn (line 202) | function _possibleConstructorReturn(self, call) {
  function _createSuper (line 210) | function _createSuper(Derived) {
  function _superPropBase (line 229) | function _superPropBase(object, property) {
  function _get (line 238) | function _get(target, property, receiver) {
  function _toConsumableArray (line 259) | function _toConsumableArray(arr) {
  function _arrayWithoutHoles (line 263) | function _arrayWithoutHoles(arr) {
  function _iterableToArray (line 267) | function _iterableToArray(iter) {
  function _unsupportedIterableToArray (line 271) | function _unsupportedIterableToArray(o, minLen) {
  function _arrayLikeToArray (line 280) | function _arrayLikeToArray(arr, len) {
  function _nonIterableSpread (line 288) | function _nonIterableSpread() {
  function define (line 302) | function define(obj, key, value) {
  function wrap (line 320) | function wrap(innerFn, outerFn, self, tryLocsList) {
  function tryCatch (line 330) | function tryCatch(fn, obj, arg) {
  function Generator (line 350) | function Generator() {}
  function GeneratorFunction (line 352) | function GeneratorFunction() {}
  function GeneratorFunctionPrototype (line 354) | function GeneratorFunctionPrototype() {}
  function defineIteratorMethods (line 374) | function defineIteratorMethods(prototype) {
  function AsyncIterator (line 405) | function AsyncIterator(generator, PromiseImpl) {
  function makeInvokeMethod (line 463) | function makeInvokeMethod(innerFn, self, context) {
  function maybeInvokeDelegate (line 529) | function maybeInvokeDelegate(delegate, context) {
  function pushTryEntry (line 598) | function pushTryEntry(locs) {
  function resetTryEntry (line 615) | function resetTryEntry(entry) {
  function Context (line 622) | function Context(tryLocsList) {
  function values (line 654) | function values(iterable) {
  function doneResult (line 693) | function doneResult() {
  function handle (line 738) | function handle(loc, caught) {
  function AppCache (line 1141) | function AppCache(value) {
  function AppStorage (line 1185) | function AppStorage(runtime, suffix) {
  function Todo (line 1273) | function Todo(message) {
  function Logger (line 1389) | function Logger(_tag) {
  function RCAssertError (line 1592) | function RCAssertError(message) {
  function __awaiter$1 (line 1897) | function __awaiter$1(thisArg, _arguments, P, generator) {
  function Header (line 1981) | function Header(type) {
  function BinaryHelper (line 2023) | function BinaryHelper() {
  function RongStreamReader (line 2123) | function RongStreamReader(arr) {
  function RongStreamWriter (line 2222) | function RongStreamWriter() {
  function protobuf (line 2408) | function protobuf(a) {
  function DataCodec (line 5986) | function DataCodec(connectType) {
  function BaseReader (line 7034) | function BaseReader(header) {
  function BaseWriter (line 7072) | function BaseWriter(headerType) {
  function ConnAckReader (line 7137) | function ConnAckReader() {
  function DisconnectReader (line 7179) | function DisconnectReader() {
  function PingReqWriter (line 7212) | function PingReqWriter() {
  function PingRespReader (line 7235) | function PingRespReader(header) {
  function RetryableReader (line 7253) | function RetryableReader() {
  function RetryableWriter (line 7283) | function RetryableWriter() {
  function PublishReader (line 7312) | function PublishReader() {
  function PublishWriter (line 7351) | function PublishWriter(topic, data, targetId) {
  function PubAckReader (line 7386) | function PubAckReader() {
  function PubAckWriter (line 7429) | function PubAckWriter(messageId) {
  function QueryWriter (line 7460) | function QueryWriter(topic, data, targetId) {
  function QueryConWriter (line 7494) | function QueryConWriter(messageId) {
  function QueryAckReader (line 7513) | function QueryAckReader() {
  function WebSocketChannel (line 7858) | function WebSocketChannel(_runtime, watcher) {
  function CometChannel (line 8347) | function CometChannel(_runtime, watcher) {
  function Navi (line 8800) | function Navi(_runtime, _appkey, _navigators) {
  function Letterbox (line 9040) | function Letterbox(_runtime, _appkey) {
  function KVStore (line 9114) | function KVStore(chatroomId, currentUserId) {
  function ChrmEntryHandler (line 9219) | function ChrmEntryHandler(engine) {
  function JoinedChrmManager (line 9337) | function JoinedChrmManager(_runtime, _appkey, _userId, _canJoinMulipleCh...
  function EventDispatcher (line 9396) | function EventDispatcher() {
  function ConversationStatus (line 9473) | function ConversationStatus(engine, appkey, currentUserId) {
  function ConversationStore (line 9628) | function ConversationStore(runtime, _appkey, _currentUserId) {
  function ConversationManager (line 9824) | function ConversationManager(engine, appkey, userId, updatedConversation...
  function JSEngine (line 10257) | function JSEngine(runtime, appkey, watcher, apiVersion) {
  function Heartbeat (line 12807) | function Heartbeat(pongRes, connectionListener) {
  function CPPEngine (line 12876) | function CPPEngine(_runtime, _appkey, _watcher, _apiVersion, _cppProtoco...
  function PluginContext (line 14462) | function PluginContext(_context) {
  function RTCPluginContext (line 14515) | function RTCPluginContext() {
  function cloneMessage (line 14616) | function cloneMessage(message) {
  function APIContext (line 14621) | function APIContext(_runtime, options) {
  function tranReceivedMessage (line 16073) | function tranReceivedMessage(msg) {
  function tranReceiveConversation (line 16104) | function tranReceiveConversation(conversation) {
  function tranReceiveUpdateConversation (line 16123) | function tranReceiveUpdateConversation(conversation) {
  function assertSendMsgOption (line 16145) | function assertSendMsgOption(options) {
  class Conversation (line 16332) | class Conversation {
    method constructor (line 16333) | constructor(_context, option) {
    method destory (line 16341) | destory() {
    method read (line 16352) | read() {
    method getUnreadCount (line 16363) | getUnreadCount() {
    method send (line 16380) | send(options) {
    method setStatus (line 16399) | setStatus(status) {
    method getMessages (line 16414) | getMessages(options) {
    method recall (line 16436) | recall(options) {
    method deleteMessages (line 16450) | deleteMessages(messages) {
    method clearMessages (line 16471) | clearMessages(options) {
    method updateMessageExpansion (line 16485) | updateMessageExpansion(expansion, message) {
    method removeMessageExpansion (line 16508) | removeMessageExpansion(keys, message) {
    method setDraft (line 16531) | setDraft(draft) {
    method getDraft (line 16545) | getDraft() {
    method deleteDraft (line 16559) | deleteDraft() {
  class ConversationModule (line 16568) | class ConversationModule {
    method constructor (line 16569) | constructor(apiContext) {
    method getList (line 16576) | getList(options) {
    method get (line 16591) | get(options) {
    method remove (line 16595) | remove(options) {
    method getTotalUnreadCount (line 16602) | getTotalUnreadCount() {
    method merge (line 16616) | merge(option) {
  class Chatroom (line 16642) | class Chatroom {
    method constructor (line 16643) | constructor(context, id) {
    method join (line 16650) | join(options) {
    method joinExist (line 16662) | joinExist(options) {
    method quit (line 16674) | quit() {
    method getInfo (line 16686) | getInfo(options = {}) {
    method setEntry (line 16703) | setEntry(options) {
    method forceSetEntry (line 16716) | forceSetEntry(options) {
    method removeEntry (line 16732) | removeEntry(options) {
    method forceRemoveEntry (line 16745) | forceRemoveEntry(options) {
    method getEntry (line 16757) | getEntry(key
    method getAllEntries (line 16776) | getAllEntries() {
    method send (line 16788) | send(options) {
    method getMessages (line 16807) | getMessages(options) {
    method recall (line 16828) | recall(options) {
  class ChatroomModule (line 16841) | class ChatroomModule {
    method constructor (line 16842) | constructor(apiContext) {
    method get (line 16849) | get(option) {
  class RTCClient (line 16855) | class RTCClient {
    method constructor (line 16856) | constructor(_options, _context) {
    method join (line 16861) | join() {
    method quit (line 16870) | quit() {
    method getRoomInfo (line 16876) | getRoomInfo() {
    method setUserInfo (line 16885) | setUserInfo(info) {
    method removeUserInfo (line 16891) | removeUserInfo(info) {
    method setData (line 16897) | setData(key, value, isInner, apiType, message) {
    method setUserData (line 16903) | setUserData(key, value, isInner, message) {
    method setRTCUserData (line 16912) | setRTCUserData(message, valueInfo, objectName) {
    method getData (line 16918) | getData(keys, isInner, apiType) {
    method getUserData (line 16924) | getUserData(keys, isInner) {
    method removeData (line 16927) | removeData(keys, isInner, apiType, message) {
    method removeUserData (line 16933) | removeUserData(keys, isInner, message) {
    method setRoomData (line 16936) | setRoomData(key, value, isInner, message) {
    method getRoomData (line 16939) | getRoomData(keys, isInner) {
    method removeRoomData (line 16942) | removeRoomData(keys, isInner, message) {
    method setState (line 16945) | setState(content) {
    method getUserList (line 16951) | getUserList() {
    method getUserInfoList (line 16960) | getUserInfoList() {
    method getToken (line 16969) | getToken() {
    method ping (line 16978) | ping() {
    method send (line 16984) | send(options) {
  function httpReq (line 17045) | function httpReq(options) {
  function createWebSocket (line 17084) | function createWebSocket(url, protocols) {
  method isSupportSocket (line 17118) | isSupportSocket() {
  method createDataChannel (line 17127) | createDataChannel(watcher, connectType) {
  method message (line 17151) | message(message) {
  method status (line 17154) | status(status) {
  class IMClient (line 17158) | class IMClient {
    method constructor (line 17159) | constructor(apiContext) {
    method install (line 17173) | install(plugin, options) {
    method watch (line 17180) | watch(options) {
    method unwatch (line 17239) | unwatch() {
    method rtcInnerWatch (line 17248) | rtcInnerWatch(attrs) {
    method rtcInnerUnwatch (line 17272) | rtcInnerUnwatch() {
    method connect (line 17280) | connect(options) {
    method reconnect (line 17295) | reconnect() {
    method disconnect (line 17308) | disconnect() {
    method getAppInfo (line 17314) | getAppInfo() {
    method getConnectedTime (line 17324) | getConnectedTime() {
    method getConnectionStatus (line 17330) | getConnectionStatus() {
    method getConnectionUserId (line 17336) | getConnectionUserId() {
    method getFileToken (line 17345) | getFileToken(fileType, fileName) {
    method getFileUrl (line 17352) | getFileUrl(
    method changeUser (line 17384) | changeUser(options) {
    method registerMessageType (line 17398) | registerMessageType(messageType, isPersited, isCounted, prototypes) {

FILE: api-test-v4/lib/js/RongIMLib-4.2.0.js
  class AppCache (line 174) | class AppCache {
    method constructor (line 175) | constructor(value) {
    method set (line 181) | set(key, value) {
    method remove (line 184) | remove(key) {
    method get (line 189) | get(key) {
    method getKeys (line 192) | getKeys() {
  class AppStorage (line 200) | class AppStorage {
    method constructor (line 201) | constructor(runtime, suffix) {
    method _get (line 210) | _get() {
    method _set (line 214) | _set(cache) {
    method set (line 220) | set(key, value) {
    method remove (line 225) | remove(key) {
    method clear (line 230) | clear() {
    method get (line 235) | get(key) {
    method getKeys (line 239) | getKeys() {
    method getValues (line 247) | getValues() {
  class Todo (line 252) | class Todo extends Error {
    method constructor (line 253) | constructor(message) {
  class Logger (line 347) | class Logger {
    method constructor (line 348) | constructor(_tag) {
    method _defaultStdout (line 369) | _defaultStdout(level, ...args) {
    method _out (line 372) | _out(level, ...args) {
    method set (line 380) | set(outLevel, stdout) {
  class EventEmitter (line 554) | class EventEmitter {
    method constructor (line 555) | constructor() {
    method on (line 563) | on(eventType, listener) {
    method off (line 575) | off(eventType, listener) {
    method emit (line 596) | emit(eventType, data) {
    method removeAll (line 607) | removeAll(eventType) {
    method clear (line 613) | clear() {
  class RCAssertError (line 670) | class RCAssertError extends Error {
    method constructor (line 671) | constructor(message) {
  function __awaiter (line 961) | function __awaiter(thisArg, _arguments, P, generator) {
  class Header (line 1041) | class Header {
    method constructor (line 1042) | constructor(type, retain = false, qos = QOS.AT_LEAST_ONCE, dup = false) {
    method encode (line 1062) | encode() {
  class BinaryHelper (line 1081) | class BinaryHelper {
    method writeUTF (line 1088) | static writeUTF(str, isGetBytes) {
    method readUTF (line 1131) | static readUTF(arr) {
  class RongStreamReader (line 1181) | class RongStreamReader {
    method constructor (line 1182) | constructor(arr) {
    method check (line 1190) | check() {
    method readInt (line 1196) | readInt() {
    method readLong (line 1214) | readLong() {
    method readByte (line 1232) | readByte() {
    method readUTF (line 1245) | readUTF() {
    method readAll (line 1256) | readAll() {
  class RongStreamWriter (line 1264) | class RongStreamWriter {
    method constructor (line 1265) | constructor() {
    method write (line 1276) | write(byte) {
    method writeArr (line 1290) | writeArr(byte) {
    method writeUTF (line 1303) | writeUTF(str) {
    method getBytesArray (line 1318) | getBytesArray() {
  method getArrayData (line 1434) | getArrayData() {
  function protobuf (line 2076) | function protobuf (a) {
  class DataCodec (line 2836) | class DataCodec {
    method constructor (line 2837) | constructor(connectType) {
    method decodeByPBName (line 2845) | decodeByPBName(data, pbName, option) {
    method _readBytes (line 2877) | _readBytes(content) {
    method _formatBytes (line 2894) | _formatBytes(content) {
    method _formatSyncMessages (line 2909) | _formatSyncMessages(data, option) {
    method _formatReceivedMessage (line 2927) | _formatReceivedMessage(data, option) {
    method _formatSentMessage (line 2975) | _formatSentMessage(data, option) {
    method _formatHistoryMessages (line 3010) | _formatHistoryMessages(data, option) {
    method _formatConversationList (line 3028) | _formatConversationList(serverData, option) {
    method _formatChatRoomInfos (line 3049) | _formatChatRoomInfos(data) {
    method _formatChatRoomKVList (line 3064) | _formatChatRoomKVList(data) {
    method _formatUserSetting (line 3087) | _formatUserSetting(data) {
    method _formatConversationStatus (line 3101) | _formatConversationStatus(data) {
    method _formatRTCUserList (line 3132) | _formatRTCUserList(rtcInfos) {
    method _formatRTCData (line 3149) | _formatRTCData(data) {
    method _formatRTCRoomInfo (line 3160) | _formatRTCRoomInfo(data) {
    method encodeServerConfParams (line 3177) | encodeServerConfParams() {
    method _getUpMsgModule (line 3185) | _getUpMsgModule(conversation, option) {
    method encodeUpMsg (line 3220) | encodeUpMsg(conversation, option) {
    method encodeSyncMsg (line 3227) | encodeSyncMsg(syncMsgArgs) {
    method encodeChrmSyncMsg (line 3239) | encodeChrmSyncMsg(time, count) {
    method encodeGetHistoryMsg (line 3250) | encodeGetHistoryMsg(targetId, option) {
    method encodeGetConversationList (line 3262) | encodeGetConversationList(option) {
    method encodeOldConversationList (line 3275) | encodeOldConversationList(option) {
    method encodeRemoveConversationList (line 3291) | encodeRemoveConversationList(conversationList) {
    method encodeDeleteMessages (line 3307) | encodeDeleteMessages(conversationType, targetId, list) {
    method encodeClearMessages (line 3325) | encodeClearMessages(targetId, timestamp) {
    method encodeClearUnreadCount (line 3335) | encodeClearUnreadCount(conversation, option) {
    method encodeJoinOrQuitChatRoom (line 3348) | encodeJoinOrQuitChatRoom() {
    method encodeGetChatRoomInfo (line 3358) | encodeGetChatRoomInfo(count, order) {
    method encodeGetFileToken (line 3367) | encodeGetFileToken(fileType, fileName) {
    method encodeGetFileUrl (line 3376) | encodeGetFileUrl(inputPBName, fileType, fileName, originName) {
    method encodeModifyChatRoomKV (line 3388) | encodeModifyChatRoomKV(chrmId, entry, currentUserId) {
    method encodePullChatRoomKV (line 3426) | encodePullChatRoomKV(time) {
    method encodePullUserSetting (line 3434) | encodePullUserSetting(version) {
    method encodeGetConversationStatus (line 3442) | encodeGetConversationStatus(time) {
    method encodeSetConversationStatus (line 3450) | encodeSetConversationStatus(statusList) {
    method encodeJoinRTCRoom (line 3494) | encodeJoinRTCRoom(mode, broadcastType) {
    method encodeQuitRTCRoom (line 3504) | encodeQuitRTCRoom() {
    method encodeSetRTCData (line 3510) | encodeSetRTCData(key, value, isInner, apiType, message) {
    method encodeUserSetRTCData (line 3531) | e
Copy disabled (too large) Download .json
Condensed preview — 578 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (29,817K chars).
[
  {
    "path": ".gitignore",
    "chars": 181,
    "preview": "node_modules\n.DS_Store\nelectron-vue/node_modules\nelectron-vue/dist\nelectron-vue/build\ncalllib-v3/server/node_modules\ncal"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2017 融云 RongCloud\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 4855,
    "preview": "# 引导说明\n\n写给前端新手的工程管理建议: [https://support.rongcloud.cn/kb/NzUx](https://support.rongcloud.cn/kb/NzUx)\n\n开发 IM 的基本思路: [https"
  },
  {
    "path": "api-test/.gitignore",
    "chars": 35,
    "preview": ".node_modules\n.sass-cache\n*.css.map"
  },
  {
    "path": "api-test/README.md",
    "chars": 11,
    "preview": "# api-test\n"
  },
  {
    "path": "api-test/config.js",
    "chars": 581,
    "preview": "(function (win) {\n\n  var isDebug = false;\n\n  var im = {\n    appkey: 'n19jmcy59f1q9',\n    token: 'Kn2p4uokgY5AZOFVsKTbKq+"
  },
  {
    "path": "api-test/index.html",
    "chars": 9693,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "api-test/js/common/api-list.js",
    "chars": 35955,
    "preview": "(function (win, dependencies) {\n  var RongIMLib = win.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient;\n\n  var RongI"
  },
  {
    "path": "api-test/js/common/service.js",
    "chars": 22146,
    "preview": "(function(win) {\n  var RongIMLib = win.RongIMLib,\n    RongIM = win.RongIM,\n    RongIMClient = RongIMLib.RongIMClient,\n  "
  },
  {
    "path": "api-test/js/common/utils.js",
    "chars": 9525,
    "preview": "(function (win) {\n\n  var Defer = win.Promise || ES6Promise;\n  var Vue = win.Vue;\n\n  var TypeColor = {\n    FAILED: '#ed40"
  },
  {
    "path": "api-test/js/components/button.js",
    "chars": 3460,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test/js/components/json-alert.js",
    "chars": 757,
    "preview": "(function (win, dependencies) {\n  var RongIM = dependencies.RongIM;\n  var utils = RongIM.Utils;\n\n  RongIM.dialog = RongI"
  },
  {
    "path": "api-test/js/components/msg-expansion.js",
    "chars": 769,
    "preview": "(function (win, dependencies, components) {\n    var Vue = dependencies.Vue,\n      RongIM = dependencies.RongIM,\n      ut"
  },
  {
    "path": "api-test/js/login.js",
    "chars": 1427,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test/js/main.js",
    "chars": 10463,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    iview = dependencies.iview,\n    VueJsonPre"
  },
  {
    "path": "api-test/lib/js/RongIMLib-3.0.0.js",
    "chars": 318244,
    "preview": "/*\n* RongIMLib.js v3.0.0\n* Release Date: Fri Mar 27 2020 09:51:18 GMT+0800 (China Standard Time)\n* Copyright 2020 RongCl"
  },
  {
    "path": "api-test/lib/js/RongIMLib-3.0.3.js",
    "chars": 408475,
    "preview": "/*\n* RongIMLib.js v3.0.3-dev\n* Release Date: Tue Jun 09 2020 15:21:33 GMT+0800 (China Standard Time)\n* Copyright 2020 Ro"
  },
  {
    "path": "api-test/lib/js/RongIMLib-3.0.5-mentioned.js",
    "chars": 456974,
    "preview": "/*\n* RongIMLib.js v3.0.5-dev\n* CodeVersion: 03caf1eb0aea5d9db625b9b939e52338de427ba1\n* Release Date: Wed Aug 12 2020 19:"
  },
  {
    "path": "api-test/lib/js/RongIMLib-3.0.6.js",
    "chars": 460361,
    "preview": "/*\n* RongIMLib.js v3.0.6-dev\n* CodeVersion: bd0b45c07bd62b49b88cfc01b0e0d37aca0ae91c\n* Release Date: Thu Aug 13 2020 18:"
  },
  {
    "path": "api-test/lib/js/es6-promise.js",
    "chars": 6484,
    "preview": "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define"
  },
  {
    "path": "api-test/lib/js/vue-2.6.10.js",
    "chars": 93670,
    "preview": "/*!\n * Vue.js v2.6.11\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof e"
  },
  {
    "path": "api-test/lib/js/vue-json-pretty.js",
    "chars": 30662,
    "preview": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.am"
  },
  {
    "path": "api-test/lib/styles/dragula-3.7.2.css",
    "chars": 547,
    "preview": ".gu-mirror {\n  position: fixed !important;\n  margin: 0 !important;\n  z-index: 9999 !important;\n  opacity: 0.8;\n  -ms-fil"
  },
  {
    "path": "api-test/lib/styles/iview.css",
    "chars": 323223,
    "preview": ".ivu-load-loop{-webkit-animation:ani-load-loop 1s linear infinite;animation:ani-load-loop 1s linear infinite}@-webkit-ke"
  },
  {
    "path": "api-test/styles/main.css",
    "chars": 3928,
    "preview": "html, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  padding: 10px; }\n\n.rong-box {\n  height: 100%;\n  overflow"
  },
  {
    "path": "api-test/styles/main.scss",
    "chars": 4518,
    "preview": "@charset \"utf-8\";\n// sass-lint:disable nesting-depth\nhtml, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  pad"
  },
  {
    "path": "api-test-v2/.gitignore",
    "chars": 35,
    "preview": ".node_modules\n.sass-cache\n*.css.map"
  },
  {
    "path": "api-test-v2/README.md",
    "chars": 11,
    "preview": "# api-test\n"
  },
  {
    "path": "api-test-v2/config.js",
    "chars": 574,
    "preview": "(function (win) {\n\n  var isDebug = false;\n\n  var im = {\n    appkey: 'n19jmcy59f1q9',\n    token: 'Kn2p4uokgY5AZOFVsKTbKq+"
  },
  {
    "path": "api-test-v2/debug.html",
    "chars": 2350,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "api-test-v2/index.html",
    "chars": 9589,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "api-test-v2/js/common/api-list.js",
    "chars": 17954,
    "preview": "(function (win, dependencies) {\n  var RongIMLib = win.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient;\n\n  var RongI"
  },
  {
    "path": "api-test-v2/js/common/service.js",
    "chars": 21761,
    "preview": "(function(win) {\n  var RongIMLib = win.RongIMLib,\n    RongIM = win.RongIM,\n    RongIMClient = RongIMLib.RongIMClient,\n  "
  },
  {
    "path": "api-test-v2/js/common/utils.js",
    "chars": 11373,
    "preview": "(function (win) {\n\n  var Defer = win.Promise || ES6Promise;\n  var Vue = win.Vue;\n\n  var TypeColor = {\n    FAILED: '#ed40"
  },
  {
    "path": "api-test-v2/js/components/button.js",
    "chars": 3453,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test-v2/js/components/json-alert.js",
    "chars": 757,
    "preview": "(function (win, dependencies) {\n  var RongIM = dependencies.RongIM;\n  var utils = RongIM.Utils;\n\n  RongIM.dialog = RongI"
  },
  {
    "path": "api-test-v2/js/login.js",
    "chars": 1424,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test-v2/js/main.js",
    "chars": 10471,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    iview = dependencies.iview,\n    VueJsonPre"
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.3.1-revise-20200311-222.js",
    "chars": 484405,
    "preview": "/*\n切换新版 SDK 检查记录:杨川\n\n修改红包消息命名错误\nJrmfReadPacketMessage => JrmfRedPacketMessage\nJrmfReadPacketOpenedMessage => JrmfRedPack"
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.3.1-revise-20200311.js",
    "chars": 488392,
    "preview": "/*\n切换新版 SDK 检查记录:杨川\n\n修改红包消息命名错误\nJrmfReadPacketMessage => JrmfRedPacketMessage\nJrmfReadPacketOpenedMessage => JrmfRedPack"
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.3.5-bugfix-zhiyuan-20190408.js",
    "chars": 496410,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    bugfix: 自己给自己发消息, targetId 为 '"
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.1.js",
    "chars": 552740,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.3.js",
    "chars": 597343,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    修改:\n        只走 wss 和 https\n*/\n"
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.4.js",
    "chars": 596161,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.5-private.js",
    "chars": 597459,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.5.js",
    "chars": 597602,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.6.js",
    "chars": 601072,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.9-release.js",
    "chars": 689694,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    Release Date: Tue Jul 14 2020 "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib-2.5.9-silent.js",
    "chars": 683611,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    Release Date: Mon Jul 06 2020 "
  },
  {
    "path": "api-test-v2/lib/js/RongIMLib.js",
    "chars": 672713,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "api-test-v2/lib/js/es6-promise.js",
    "chars": 6484,
    "preview": "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define"
  },
  {
    "path": "api-test-v2/lib/js/vue-2.6.10.js",
    "chars": 93670,
    "preview": "/*!\n * Vue.js v2.6.11\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof e"
  },
  {
    "path": "api-test-v2/lib/js/vue-json-pretty.js",
    "chars": 30662,
    "preview": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.am"
  },
  {
    "path": "api-test-v2/lib/styles/dragula-3.7.2.css",
    "chars": 547,
    "preview": ".gu-mirror {\n  position: fixed !important;\n  margin: 0 !important;\n  z-index: 9999 !important;\n  opacity: 0.8;\n  -ms-fil"
  },
  {
    "path": "api-test-v2/lib/styles/iview.css",
    "chars": 323223,
    "preview": ".ivu-load-loop{-webkit-animation:ani-load-loop 1s linear infinite;animation:ani-load-loop 1s linear infinite}@-webkit-ke"
  },
  {
    "path": "api-test-v2/styles/main.css",
    "chars": 3928,
    "preview": "html, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  padding: 10px; }\n\n.rong-box {\n  height: 100%;\n  overflow"
  },
  {
    "path": "api-test-v2/styles/main.scss",
    "chars": 4518,
    "preview": "@charset \"utf-8\";\n// sass-lint:disable nesting-depth\nhtml, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  pad"
  },
  {
    "path": "api-test-v4/README.md",
    "chars": 11,
    "preview": "# api-test\n"
  },
  {
    "path": "api-test-v4/config.js",
    "chars": 578,
    "preview": "(function (win) {\n\n  var isDebug = false;\n\n  var im = {\n    appkey: 'n19jmcy59f1q9',\n    token: 'Kn2p4uokgY5AZOFVsKTbKq+"
  },
  {
    "path": "api-test-v4/index.html",
    "chars": 12383,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "api-test-v4/js/common/api-list.js",
    "chars": 40832,
    "preview": "(function (win, dependencies) {\n  var RongIMLib = win.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient;\n\n  var RongI"
  },
  {
    "path": "api-test-v4/js/common/service.js",
    "chars": 28195,
    "preview": "(function(win) {\n  var RongIMLib = win.RongIMLib,\n    RongIM = win.RongIM,\n    RongIMClient = RongIMLib.RongIMClient,\n  "
  },
  {
    "path": "api-test-v4/js/common/utils.js",
    "chars": 9849,
    "preview": "(function (win) {\n\n  var Defer = win.Promise || ES6Promise;\n  var Vue = win.Vue;\n\n  var TypeColor = {\n    FAILED: '#ed40"
  },
  {
    "path": "api-test-v4/js/components/button.js",
    "chars": 3632,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test-v4/js/components/json-alert.js",
    "chars": 757,
    "preview": "(function (win, dependencies) {\n  var RongIM = dependencies.RongIM;\n  var utils = RongIM.Utils;\n\n  RongIM.dialog = RongI"
  },
  {
    "path": "api-test-v4/js/components/msg-expansion.js",
    "chars": 769,
    "preview": "(function (win, dependencies, components) {\n    var Vue = dependencies.Vue,\n      RongIM = dependencies.RongIM,\n      ut"
  },
  {
    "path": "api-test-v4/js/login.js",
    "chars": 1427,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    RongIM = dependencies.RongIM,\n    utils = "
  },
  {
    "path": "api-test-v4/js/main.js",
    "chars": 15963,
    "preview": "(function (win, dependencies, components) {\n  var Vue = dependencies.Vue,\n    iview = dependencies.iview,\n    VueJsonPre"
  },
  {
    "path": "api-test-v4/lib/js/RongIMLib-4.1.0.js",
    "chars": 640993,
    "preview": "/**\n * @rongcloud/imlib-v4\n * Version: v4.1.0\n * CommitId: 0012eb74bbf7318ea4a4e2ee3e3e858d6849090c\n * Date: Mon Dec 28 "
  },
  {
    "path": "api-test-v4/lib/js/RongIMLib-4.2.0.js",
    "chars": 525955,
    "preview": "/*\n * RCEngine - v4.2.0\n * CommitId - 1838ab715d966e65fa509d4d5e4ffd76827367a7\n * Tue Jan 12 2021 20:56:53 GMT+0800 (Chi"
  },
  {
    "path": "api-test-v4/lib/js/es6-promise.js",
    "chars": 6484,
    "preview": "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define"
  },
  {
    "path": "api-test-v4/lib/js/vue-2.6.10.js",
    "chars": 93670,
    "preview": "/*!\n * Vue.js v2.6.11\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof e"
  },
  {
    "path": "api-test-v4/lib/js/vue-json-pretty.js",
    "chars": 30662,
    "preview": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.am"
  },
  {
    "path": "api-test-v4/lib/styles/dragula-3.7.2.css",
    "chars": 547,
    "preview": ".gu-mirror {\n  position: fixed !important;\n  margin: 0 !important;\n  z-index: 9999 !important;\n  opacity: 0.8;\n  -ms-fil"
  },
  {
    "path": "api-test-v4/lib/styles/iview.css",
    "chars": 323223,
    "preview": ".ivu-load-loop{-webkit-animation:ani-load-loop 1s linear infinite;animation:ani-load-loop 1s linear infinite}@-webkit-ke"
  },
  {
    "path": "api-test-v4/styles/main.css",
    "chars": 4537,
    "preview": "html, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  padding: 10px; }\n\n.rong-box {\n  height: 100%;\n  overflow"
  },
  {
    "path": "api-test-v4/styles/main.scss",
    "chars": 5037,
    "preview": "@charset \"utf-8\";\n// sass-lint:disable nesting-depth\nhtml, body {\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n  pad"
  },
  {
    "path": "api-test.html",
    "chars": 37705,
    "preview": "\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>WebSDK API test</title>\n</head>\n<body>\n\n<link rel=\"stylesheet\" hr"
  },
  {
    "path": "calllib-v2/README.md",
    "chars": 1740,
    "preview": "### 文档\n\n开通音视频服务,请参考 [音视频开通指南](http://www.rongcloud.cn/docs/call.html#open)\n\nCallLib [开发指南](http://www.rongcloud.cn/docs/"
  },
  {
    "path": "calllib-v2/demo.js",
    "chars": 4850,
    "preview": "var RongCallLib = RongCallLib.init({\n  RongIMLib: RongIMLib\n});\n\nvar tools = {\n  //仅支持类选择器和 Id 选择器\n  getDom: function(se"
  },
  {
    "path": "calllib-v2/group.html",
    "chars": 2885,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title> CallLib </title>\n  <link rel=\"stylesheet\" hre"
  },
  {
    "path": "calllib-v2/init.js",
    "chars": 3184,
    "preview": "\"use strict\";\n\n;\n(function(dependencies) {\n\n  var global = dependencies.global;\n  var RongIMLib = dependencies.RongIMLib"
  },
  {
    "path": "calllib-v2/private.html",
    "chars": 2626,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title> CallLib </title>\n  <link rel=\"stylesheet\" hre"
  },
  {
    "path": "calllib-v2/style/main.css",
    "chars": 2441,
    "preview": " html,body{\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  position: absolute;\n  z-index: -3;\n} \n.rong-container{\n  width"
  },
  {
    "path": "calllib-v2/user-media.html",
    "chars": 2013,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>user media</title>\n</head>\n\n<body onload=\"init()\">"
  },
  {
    "path": "calllib-v3/README.md",
    "chars": 694,
    "preview": "# CallLib Demo\n\n`注意事项:`\n\n1、需开通 [音视频 3.0 服务](./docs/ready.md)\n\n2、旧版 calllib-v3 demo 请参考: [calllib-v3-old](https://github."
  },
  {
    "path": "calllib-v3/docs/ready.md",
    "chars": 360,
    "preview": "## 前期准备\n\nSealRTC Web 是基于 [RongCloud Web CallLib](https://www.rongcloud.cn/docs/web_calllib.html) 的音视频示例,通过此示例,可更好的帮助您集成、"
  },
  {
    "path": "calllib-v3/docs/server.md",
    "chars": 837,
    "preview": "## CallLib Demo Server\n\n**Demo Server 作用**\n\n1、为 CallLib Web Demo 提供获取 token 的接口\n\n2、自动创建群组, 提供进行群组音视频的能力\n\n<b>注</b>: 运行 We"
  },
  {
    "path": "calllib-v3/docs/show.md",
    "chars": 432,
    "preview": "## 演示示例\n\n#### CallLib Demo Web 浏览器兼容性说明\n\n![](./images/compatible.png)\n\n1、在谷歌浏览器使用两个 Tab 页面分别打开 Web Demo: [http://localho"
  },
  {
    "path": "calllib-v3/docs/web.md",
    "chars": 738,
    "preview": "## CallLib Demo Web\n\n1、下载 Demo Web 源码\n\n[https://github.com/rongcloud/websdk-demo/tree/master/calllib-v3/web](https://git"
  },
  {
    "path": "calllib-v3/private.html",
    "chars": 745,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>已废弃 CallLib</title>\n  <style>\n    body {\n     "
  },
  {
    "path": "calllib-v3/server/index.js",
    "chars": 2290,
    "preview": "var app = require('express')(),\n  setting = require('./setting'),\n  http = require('http'),\n  bodyParser = require(\"body"
  },
  {
    "path": "calllib-v3/server/package.json",
    "chars": 316,
    "preview": "{\n  \"name\": \"server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo "
  },
  {
    "path": "calllib-v3/server/setting.js",
    "chars": 76,
    "preview": "module.exports = {\n  appkey: 'appkey',\n  secret: 'secret',\n  port: '9929'\n};"
  },
  {
    "path": "calllib-v3/web/css/main.css",
    "chars": 6838,
    "preview": "@charset \"UTF-8\";\n/* 超出部分省略 */\n.ellipsis, .rong-dialog-box .rong-dialog-user-list-content span {\n  overflow: hidden;\n  w"
  },
  {
    "path": "calllib-v3/web/css/main.scss",
    "chars": 6248,
    "preview": "/* 超出部分省略 */\n.ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\nhtml, body {\n  margin:"
  },
  {
    "path": "calllib-v3/web/index.html",
    "chars": 4996,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "calllib-v3/web/js/call.js",
    "chars": 10577,
    "preview": "(function (RongCall, dependencies) {\n  /* 通话逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue,\n    RongIMLib = win."
  },
  {
    "path": "calllib-v3/web/js/common/init.js",
    "chars": 2306,
    "preview": "(function (RongCall, dependencies) {\n  var RongIMLib = dependencies.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient"
  },
  {
    "path": "calllib-v3/web/js/common/utils.js",
    "chars": 6577,
    "preview": "(function (dependencies) {\n  var win = dependencies.win;\n\n  var noop = function () {};\n\n  var Dom = {\n    get: function "
  },
  {
    "path": "calllib-v3/web/js/dialog.js",
    "chars": 2315,
    "preview": "(function (RongCall) {\n  /* 弹框 */\n\n  var utils = RongCall.utils;\n\n  function removeSelf($el) {\n    var parent = $el.pare"
  },
  {
    "path": "calllib-v3/web/js/login.js",
    "chars": 1010,
    "preview": "(function (RongCall, dependencies) {\n  /* 登录逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue;\n  var utils = RongCa"
  },
  {
    "path": "calllib-v3/web/js/main.js",
    "chars": 1084,
    "preview": "(function (RongCall, dependencies) {\n  'use strict';\n\n  var Vue = dependencies.Vue,\n    VueRouter = dependencies.VueRout"
  },
  {
    "path": "calllib-v3/web/lib/vue-2.6.7.js",
    "chars": 340083,
    "preview": "/*!\n * Vue.js v2.6.7\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  ty"
  },
  {
    "path": "calllib-v3/web/lib/vue-router-3.0.2.js",
    "chars": 65602,
    "preview": "/*!\n  * vue-router v3.0.2\n  * (c) 2018 Evan You\n  * @license MIT\n  */\n(function (global, factory) {\n\ttypeof exports === "
  },
  {
    "path": "calllib-v3/web/setting.js",
    "chars": 714,
    "preview": "(function (global, factory) {\n  if (typeof exports === 'object' && module !== 'undefined') {\n    module.exports = factor"
  },
  {
    "path": "calllib-v3/web-ie/README.md",
    "chars": 607,
    "preview": "# CallLib IE Web\n\n### 使用说明\n\n1、CallLib IE 接口与 CallLib Web 一致, 可参考[文档](http://127.0.0.1:8000/rtc/calllib/web/summary)\n\n2、C"
  },
  {
    "path": "calllib-v3/web-ie/css/main.css",
    "chars": 6931,
    "preview": "@charset \"UTF-8\";\n/* 超出部分省略 */\n.ellipsis, .rong-dialog-box .rong-dialog-user-list-content span {\n  overflow: hidden;\n  w"
  },
  {
    "path": "calllib-v3/web-ie/css/main.scss",
    "chars": 6381,
    "preview": "/* 超出部分省略 */\n.ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\nhtml, body {\n  margin:"
  },
  {
    "path": "calllib-v3/web-ie/index.html",
    "chars": 4835,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "calllib-v3/web-ie/js/call.js",
    "chars": 12140,
    "preview": "(function (RongCall, dependencies) {\n  /* 通话逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue,\n    RongIMLib = win."
  },
  {
    "path": "calllib-v3/web-ie/js/common/init.js",
    "chars": 3538,
    "preview": "(function (RongCall, dependencies) {\n  var RongIMLib = dependencies.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient"
  },
  {
    "path": "calllib-v3/web-ie/js/common/utils.js",
    "chars": 9954,
    "preview": "(function (dependencies) {\n  var win = dependencies.win;\n  var RongCall = win.RongCall || {};\n\n  var noop = function () "
  },
  {
    "path": "calllib-v3/web-ie/js/dialog.js",
    "chars": 2315,
    "preview": "(function (RongCall) {\n  /* 弹框 */\n\n  var utils = RongCall.utils;\n\n  function removeSelf($el) {\n    var parent = $el.pare"
  },
  {
    "path": "calllib-v3/web-ie/js/login.js",
    "chars": 1270,
    "preview": "(function (RongCall, dependencies) {\n  /* 登录逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue;\n  var utils = RongCa"
  },
  {
    "path": "calllib-v3/web-ie/js/main.js",
    "chars": 1084,
    "preview": "(function (RongCall, dependencies) {\n  'use strict';\n\n  var Vue = dependencies.Vue,\n    VueRouter = dependencies.VueRout"
  },
  {
    "path": "calllib-v3/web-ie/lib/RongCallLib.3.1.5.js",
    "chars": 63452,
    "preview": "/*\n* RongCallLib.js v3.1.5\n* Release Date: Tue Sep 17 2019 10:09:49 GMT+0800 (China Standard Time)\n* Copyright 2019 Rong"
  },
  {
    "path": "calllib-v3/web-ie/lib/RongIMLib-2.5.1.js",
    "chars": 552076,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "calllib-v3/web-ie/lib/RongRTC-IE-3.0.4.js",
    "chars": 152315,
    "preview": "/*\n* RongRTC.js v3.0.4\n* Copyright 2019 RongCloud\n* Released under the MIT License.\n*/\n(function (global, factory) {\n  t"
  },
  {
    "path": "calllib-v3/web-ie/lib/promise.js",
    "chars": 18241,
    "preview": "(function () {\n  /*!\n 基于 es6-promise\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copy"
  },
  {
    "path": "calllib-v3/web-ie/lib/vue-2.6.7.js",
    "chars": 340083,
    "preview": "/*!\n * Vue.js v2.6.7\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  ty"
  },
  {
    "path": "calllib-v3/web-ie/lib/vue-router-3.0.2.js",
    "chars": 65602,
    "preview": "/*!\n  * vue-router v3.0.2\n  * (c) 2018 Evan You\n  * @license MIT\n  */\n(function (global, factory) {\n\ttypeof exports === "
  },
  {
    "path": "calllib-v3/web-ie/setting.js",
    "chars": 708,
    "preview": "(function (global, factory) {\n  if (typeof exports === 'object' && module !== 'undefined') {\n    module.exports = factor"
  },
  {
    "path": "calllib-v3/web-im-v3/css/main.css",
    "chars": 6838,
    "preview": "@charset \"UTF-8\";\n/* 超出部分省略 */\n.ellipsis, .rong-dialog-box .rong-dialog-user-list-content span {\n  overflow: hidden;\n  w"
  },
  {
    "path": "calllib-v3/web-im-v3/css/main.scss",
    "chars": 6248,
    "preview": "/* 超出部分省略 */\n.ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\nhtml, body {\n  margin:"
  },
  {
    "path": "calllib-v3/web-im-v3/index.html",
    "chars": 4569,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "calllib-v3/web-im-v3/js/call.js",
    "chars": 10730,
    "preview": "(function (RongCall, dependencies) {\n  /* 通话逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue,\n    RongIMLib = win."
  },
  {
    "path": "calllib-v3/web-im-v3/js/common/init.js",
    "chars": 1537,
    "preview": "(function (RongCall, dependencies) {\n  var RongIMLib = dependencies.RongIMLib,\n    RongIMClient = RongIMLib.RongIMClient"
  },
  {
    "path": "calllib-v3/web-im-v3/js/common/utils.js",
    "chars": 6577,
    "preview": "(function (dependencies) {\n  var win = dependencies.win;\n\n  var noop = function () {};\n\n  var Dom = {\n    get: function "
  },
  {
    "path": "calllib-v3/web-im-v3/js/dialog.js",
    "chars": 2315,
    "preview": "(function (RongCall) {\n  /* 弹框 */\n\n  var utils = RongCall.utils;\n\n  function removeSelf($el) {\n    var parent = $el.pare"
  },
  {
    "path": "calllib-v3/web-im-v3/js/login.js",
    "chars": 1010,
    "preview": "(function (RongCall, dependencies) {\n  /* 登录逻辑 */\n\n  var win = dependencies.win,\n    Vue = win.Vue;\n  var utils = RongCa"
  },
  {
    "path": "calllib-v3/web-im-v3/js/main.js",
    "chars": 1084,
    "preview": "(function (RongCall, dependencies) {\n  'use strict';\n\n  var Vue = dependencies.Vue,\n    VueRouter = dependencies.VueRout"
  },
  {
    "path": "calllib-v3/web-im-v3/lib/vue-2.6.7.js",
    "chars": 340083,
    "preview": "/*!\n * Vue.js v2.6.7\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n  ty"
  },
  {
    "path": "calllib-v3/web-im-v3/lib/vue-router-3.0.2.js",
    "chars": 65602,
    "preview": "/*!\n  * vue-router v3.0.2\n  * (c) 2018 Evan You\n  * @license MIT\n  */\n(function (global, factory) {\n\ttypeof exports === "
  },
  {
    "path": "calllib-v3/web-im-v3/setting.js",
    "chars": 714,
    "preview": "(function (global, factory) {\n  if (typeof exports === 'object' && module !== 'undefined') {\n    module.exports = factor"
  },
  {
    "path": "chameleon/README.md",
    "chars": 774,
    "preview": "### 集成步骤\n\n### chameleon-tool 基本使用\n\n1. 全局安装 chameleon-tool 构建工具: `npm i -g chameleon-tool`\n  \n2. 创建项目: `cml init project`"
  },
  {
    "path": "chameleon/chameleon.config.js",
    "chars": 700,
    "preview": "\n// 设置静态资源的线上路径\nconst publicPath = '//www.static.chameleon.com/cml';\n// 设置api请求前缀\nconst apiPrefix = 'https://api.chamele"
  },
  {
    "path": "chameleon/dist/wx/app.js",
    "chars": 140,
    "preview": "var __CML__GLOBAL = require('/static/js/manifest.js')\n__CML__GLOBAL.App = App;\nrequire('/static/js/common.js')\nrequire('"
  },
  {
    "path": "chameleon/dist/wx/app.json",
    "chars": 277,
    "preview": "{\n    \"window\": {\n        \"backgroundTextStyle\": \"dark\",\n        \"navigationBarBackgroundColor\": \"#343434\",\n        \"nav"
  },
  {
    "path": "chameleon/dist/wx/app.wxss",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chameleon/dist/wx/pages/index/index.js",
    "chars": 171,
    "preview": "var __CML__GLOBAL = require('../../static/js/manifest.js')\n__CML__GLOBAL.Page = Page;\nrequire('../../static/js/common.js"
  },
  {
    "path": "chameleon/dist/wx/pages/index/index.json",
    "chars": 29,
    "preview": "{\n    \"usingComponents\": {}\n}"
  },
  {
    "path": "chameleon/dist/wx/pages/index/index.wxml",
    "chars": 1212,
    "preview": "<view class=\"rong-main  cml-base cml-view\">\n  <h1 class=\" cml-base cml-h1\">{{title}}</h1>\n  <view class=\" cml-base cml-v"
  },
  {
    "path": "chameleon/dist/wx/static/js/app.js",
    "chars": 8083,
    "preview": "var __CML__GLOBAL = require(\"./manifest.js\");\n__CML__GLOBAL.webpackJsonp([0],{\n\n/***/ \"../../../../../.nvm/versions/node"
  },
  {
    "path": "chameleon/dist/wx/static/js/common.js",
    "chars": 382,
    "preview": "var __CML__GLOBAL = require(\"./manifest.js\");\n__CML__GLOBAL.webpackJsonp([2],[\n/* 0 */\n/***/ (function(module, exports, "
  },
  {
    "path": "chameleon/dist/wx/static/js/manifest.js",
    "chars": 3954,
    "preview": "/******/ var __CML__GLOBAL = {};\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback"
  },
  {
    "path": "chameleon/dist/wx/static/js/pages/index/index.js",
    "chars": 375690,
    "preview": "var __CML__GLOBAL = require(\"../../manifest.js\");\n__CML__GLOBAL.webpackJsonp([1],{\n\n/***/ \"../../../../../.nvm/versions/"
  },
  {
    "path": "chameleon/mock/api/index.js",
    "chars": 249,
    "preview": "\nmodule.exports = [\n  {\n    method: ['get', 'post'],\n    path: '/api/getMessage',\n    controller: function (req, res, ne"
  },
  {
    "path": "chameleon/mock/template/index.php",
    "chars": 129,
    "preview": "<?php\n\t$chameleon = array(\n\t\t\"errno\"=> \"0\",\n\t\t\"errmsg\"=> \"\",\n\t\t\"pageData\"=> array(\n\t\t\t\"name\"=>\"chameleon\",\n\t\t\t\"age\" => 1"
  },
  {
    "path": "chameleon/npm-shrinkwrap.json",
    "chars": 3415,
    "preview": "{\n  \"name\": \"connectDemo\",\n  \"version\": \"1.0.0\",\n  \"lockfileVersion\": 1,\n  \"requires\": true,\n  \"dependencies\": {\n    \"ch"
  },
  {
    "path": "chameleon/package.json",
    "chars": 375,
    "preview": "{\n  \"name\": \"connectDemo\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A chameleon project\",\n  \"author\": \"\",\n  \"private\": tr"
  },
  {
    "path": "chameleon/src/app/app.cml",
    "chars": 562,
    "preview": "<template>\n  <app store=\"{{store}}\" router-config=\"{{routerConfig}}\"></app>\n</template>\n<script>\nimport store from '../s"
  },
  {
    "path": "chameleon/src/assets/js/RongIMLib-2.4.0.js",
    "chars": 518545,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n*/\n(function(global, factory) {\n  "
  },
  {
    "path": "chameleon/src/components/demo-com/demo-com.cml",
    "chars": 925,
    "preview": "<template>\n  <view class=\"demo-com\">\n    <text class=\"title\">{{title}}</text>\n    <image src=\"{{imageSrc}}\" class=\"logo\""
  },
  {
    "path": "chameleon/src/pages/index/index.cml",
    "chars": 6918,
    "preview": "<template>\n  <view class=\"rong-main\">\n    <h1>{{ title }}</h1>\n    <view>\n      <text class=\"rong-label\">appkey: </text>"
  },
  {
    "path": "chameleon/src/router.config.json",
    "chars": 206,
    "preview": "{\n  \"mode\": \"history\",\n  \"domain\": \"https://www.chameleon.com\",\n  \"routes\":[\n    {\n      \"url\": \"/cml/h5/index\",\n      \""
  },
  {
    "path": "chameleon/src/store/actions.js",
    "chars": 20,
    "preview": "\nexport default {\n}\n"
  },
  {
    "path": "chameleon/src/store/getters.js",
    "chars": 19,
    "preview": "export default {\n}\n"
  },
  {
    "path": "chameleon/src/store/index.js",
    "chars": 247,
    "preview": "import actions from './actions'\nimport getters from './getters'\nimport state from './state'\nimport mutations from './mut"
  },
  {
    "path": "chameleon/src/store/mutations.js",
    "chars": 20,
    "preview": "\nexport default {\n}\n"
  },
  {
    "path": "chameleon/src/store/state.js",
    "chars": 41,
    "preview": "\nconst state = {\n}\n\nexport default state\n"
  },
  {
    "path": "chatroom/chatroom.html",
    "chars": 11436,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>弹幕聊天室</title>\n<style>\n\tbody{\n        width: 100%;\n        ma"
  },
  {
    "path": "chatroom/chatroom.js",
    "chars": 5097,
    "preview": "//基于 Web IM SDK 封装的聊天室中间层示例\n;(function (global, factory, namespace) {\n    if(typeof exports === 'object' && typeof modul"
  },
  {
    "path": "chatroom/chatroom.sdk.js",
    "chars": 1607,
    "preview": "function render(data, template) {\n    template = template || \"\";\n    data = data || [\"\"];\n    var re = /{{((?:(?!}}).)+)"
  },
  {
    "path": "chatroom/demo.html",
    "chars": 5299,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>chatroom component</title>\n</head>\n<body>\n\n\n<style"
  },
  {
    "path": "chatroom-h5/README.md",
    "chars": 357,
    "preview": "## 实现功能\nDemo 中实现了集成 2.x SDK 实现聊天室功能,实现聊天室内发送消息,点赞等功能。\n\n## Demo 启动\n可使用 nginx 代理静态页面。\n\n**访问地址**\n\nhttp://localhost:8080/tes"
  },
  {
    "path": "chatroom-h5/demo.html",
    "chars": 2054,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>挖财钱堂学院理财小白训练</title>\n\t<meta name=\"screen-orient"
  },
  {
    "path": "chatroom-h5/js/RongIMLib-2.5.12.js",
    "chars": 708713,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    Release Date: Fri Sep 18 2020 "
  },
  {
    "path": "chatroom-h5/js/chatroom.js",
    "chars": 3893,
    "preview": "; (function (global, factory, namespace) {\n\tif (typeof exports === 'object' && typeof module !== 'undefined') {\n\t\tmodule"
  },
  {
    "path": "chatroom-h5/js/demo.js",
    "chars": 4438,
    "preview": "var ht = new HeartsFlow({\n  canvasEl: '.rc-hearts-canvas',\n  amount: 1\n});\n\nvar lastTime = new Date(), num = 1, t;\nvar i"
  },
  {
    "path": "chatroom-h5/js/like.js",
    "chars": 4025,
    "preview": "class HeartsFlow {\n  constructor(data) {\n    this.el = document.querySelector(data.canvasEl);\n    this.w = 200;\n    this"
  },
  {
    "path": "chatroom-h5/js/mock.js",
    "chars": 730,
    "preview": "function getUserInfo(id) {\n  let userList = {\n    '11': {\n      portrait: 'http://rongcloud-image.ronghub.com/004d0444c2"
  },
  {
    "path": "chatroom-h5/js/render.js",
    "chars": 1992,
    "preview": "function render(data, template) {\n    template = template || \"\";\n    data = data || [\"\"];\n    var re = /{{((?:(?!}}).)+)"
  },
  {
    "path": "chatroom-h5/style/chatroom.css",
    "chars": 4569,
    "preview": "body,\nhtml {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n}\n\n#view {\n  width: 100%;\n  height: 100%;\n  position: relative;\n"
  },
  {
    "path": "chatroom-h5-gif/README.md",
    "chars": 357,
    "preview": "## 实现功能\nDemo 中实现了集成 2.x SDK 实现聊天室功能,实现聊天室内发送消息,点赞等功能。\n\n## Demo 启动\n可使用 nginx 代理静态页面。\n\n**访问地址**\n\nhttp://localhost:8080/tes"
  },
  {
    "path": "chatroom-h5-gif/demo.html",
    "chars": 2054,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>挖财钱堂学院理财小白训练</title>\n\t<meta name=\"screen-orient"
  },
  {
    "path": "chatroom-h5-gif/js/RongIMLib-2.5.12.js",
    "chars": 708713,
    "preview": "/*\n    说明: 请勿修改 header.js 和 footer.js\n    用途: 自动拼接暴露方式\n    命令: grunt release 中 concat\n    Release Date: Fri Sep 18 2020 "
  },
  {
    "path": "chatroom-h5-gif/js/chatroom.js",
    "chars": 3893,
    "preview": "; (function (global, factory, namespace) {\n\tif (typeof exports === 'object' && typeof module !== 'undefined') {\n\t\tmodule"
  },
  {
    "path": "chatroom-h5-gif/js/demo.js",
    "chars": 4438,
    "preview": "var ht = new HeartsFlow({\n  canvasEl: '.rc-hearts-canvas',\n  amount: 1\n});\n\nvar lastTime = new Date(), num = 1, t;\nvar i"
  },
  {
    "path": "chatroom-h5-gif/js/like.js",
    "chars": 4025,
    "preview": "class HeartsFlow {\n  constructor(data) {\n    this.el = document.querySelector(data.canvasEl);\n    this.w = 200;\n    this"
  },
  {
    "path": "chatroom-h5-gif/js/mock.js",
    "chars": 730,
    "preview": "function getUserInfo(id) {\n  let userList = {\n    '11': {\n      portrait: 'http://rongcloud-image.ronghub.com/004d0444c2"
  },
  {
    "path": "chatroom-h5-gif/js/render.js",
    "chars": 1992,
    "preview": "function render(data, template) {\n    template = template || \"\";\n    data = data || [\"\"];\n    var re = /{{((?:(?!}}).)+)"
  },
  {
    "path": "chatroom-h5-gif/style/chatroom.css",
    "chars": 4559,
    "preview": "body,\nhtml {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n}\n\n#view {\n  width: 100%;\n  height: 100%;\n  position: relative;\n"
  },
  {
    "path": "chrm-kv-demo/README.md",
    "chars": 908,
    "preview": "### 聊天室自定义属性 Demo\n\n#### Demo 作用\n\n1. 验证自定义属性功能是否可用\n2. 提供接口直接接口调用, 方便开发者调试\n\n`注:` 若需实现复杂业务逻辑, 开发者可根据以下文档集成\n\n文档: [https://do"
  },
  {
    "path": "chrm-kv-demo/css/main.css",
    "chars": 1416,
    "preview": "html, body {\n  width: 100%;\n  height: 100%;\n  color: #333;\n}\n\nhtml button, body button {\n  outline: none;\n}\n\n.rong-chrm-"
  },
  {
    "path": "chrm-kv-demo/css/main.scss",
    "chars": 1435,
    "preview": "$black: #333;\n\nhtml, body {\n  width: 100%;\n  height: 100%;\n  color: $black;\n  button {\n    outline: none;\n  }\n}\n.rong-ch"
  },
  {
    "path": "chrm-kv-demo/index.html",
    "chars": 3064,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "chrm-kv-demo/js/init.js",
    "chars": 2994,
    "preview": "(function (dependencies) {\n  var win = dependencies.win,\n    RongIMLib = dependencies.RongIMLib,\n    RongIMClient = Rong"
  },
  {
    "path": "chrm-kv-demo/js/main.js",
    "chars": 7462,
    "preview": "(function (dependencies) {\n  var RongIM = dependencies.RongIM,\n    win = dependencies.win,\n    RongIMLib = win.RongIMLib"
  },
  {
    "path": "chrm-kv-demo/js/utils.js",
    "chars": 2207,
    "preview": "(function (dependencies) {\n  var win = dependencies.win;\n\n  var isObject = function (obj) {\n    return Object.prototype."
  },
  {
    "path": "chrm-kv-demo/setting.js",
    "chars": 240,
    "preview": "window.setting = {\n  appkey: 'appkey',\n  userList: [\n    {\n      token: 'user1 token'\n    },\n    {\n      token: 'user2 t"
  },
  {
    "path": "common-im/css/common.css",
    "chars": 450,
    "preview": "html,body{\n\tmargin: 0;\n\tpadding: 0;\n\tfont-size: 12px;\n\theight: 100%;\n\twidth: 100%;\n\toverflow: hidden;\n}\n\na{\n\ttext-decora"
  },
  {
    "path": "common-im/css/main.css",
    "chars": 3586,
    "preview": ".rong-im{\n\tposition: relative;\n    width: 100%;\n    height: 100%;\n    min-width: 1200px;\n    background: url(images/main"
  },
  {
    "path": "common-im/index.html",
    "chars": 9973,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>Rong-IM-Vue</title>\n\t<link rel=\"icon\" type=\"imag"
  },
  {
    "path": "common-im/js/service.js",
    "chars": 11761,
    "preview": "\"use strict\";\n(function(global, factory) {\n  if (typeof exports === 'object' && typeof module !== 'undefined') {\n    mod"
  },
  {
    "path": "connect-check.html",
    "chars": 4145,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>connect,receive message</title>\n</head>\n<body>\n\n<l"
  },
  {
    "path": "cs/jx/.gitignore",
    "chars": 18,
    "preview": "node_modules\ntemp\n"
  },
  {
    "path": "cs/jx/.project",
    "chars": 643,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>customer-service</name>\n\t<comment></comment>\n\t<projec"
  },
  {
    "path": "cs/jx/Gruntfile.js",
    "chars": 1764,
    "preview": "'use strict';\nvar glob = require('glob');\nvar fs = require('fs');\nmodule.exports = function(grunt) {\n    grunt.initConfi"
  },
  {
    "path": "cs/jx/README.md",
    "chars": 2959,
    "preview": "# 使用说明\n1. 在页面引入以下资源\n```\n<!-- Web SDK 相关资源 SDK 针对自建客服做出了一些修改 -->\n<script src=\"../RongIMLib-cs.js\"></script>\n<script src=\""
  }
]

// ... and 378 more files (download for full content)

About this extraction

This page contains the full source code of the rongcloud/websdk-demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 578 files (27.0 MB), approximately 7.1M tokens, and a symbol index with 10598 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!