diff --git a/App.vue b/App.vue index f44cfc8..e4cd2d0 100644 --- a/App.vue +++ b/App.vue @@ -1,15 +1,410 @@ - diff --git a/api/api.js b/api/api.js index f452cd9..329b707 100644 --- a/api/api.js +++ b/api/api.js @@ -439,6 +439,64 @@ const api = { getOfficeList(data){ return request('/expertAPI/officeList', data, 'post', false); }, + newConsultList(data){ + return request('/expertAPI/newConsultList', data, 'post', false); + }, + consultListHis(data){ + return request('/expertAPI/consultListHis', data, 'post', false); + }, + listNewInterrogation(data){ + return request('/expertAPI/listNewInterrogation', data, 'post', false); + }, + listMyAnsweredInterrogation(data){ + return request('/expertAPI/listMyAnsweredInterrogation', data, 'post', false); + }, + getInterrogation(data){ + return request('/expertAPI/getInterrogation', data, 'post', false); + }, + interrogationPatientInfo(data){ + return request('/expertAPI/InterrogationPatientInfo', data, 'post', false); + }, + updateInterrogationAnswer(data){ + return request('/expertAPI/updateInterrogationAnswer', data, 'post', false); + }, + addInterrogationAnswer(data){ + return request('/expertAPI/addInterrogationAnswer', data, 'post', false); + }, + videoDetail(data){ + return request('/expertAPI/videoDetail', data, 'post', false); + }, + addVideoWatchRecord(data){ + return request('/expertAPI/addVideoWatchRecord', data, 'post', false); + }, + videoCommentListV2(data){ + return request('/expertAPI/videoCommentListV2', data, 'post', false); + }, + isVideoDownloadRecord(data){ + return request('/expertAPI/isVideoDownloadRecord', data, 'post', false); + }, + getWelfareNum(data){ + return request('/expertAPI/getWelfareNum', data, 'post', false); + }, + payVideoDownload(data){ + return request('/expertAPI/payVideoDownload', data, 'post', false); + }, + addCommentV2(data){ + return request('/expertAPI/addCommentV2', data, 'post', false); + }, + collection(data){ + return request('/expertAPI/collection', data, 'post', false); + }, + discollection(data){ + return request('/expertAPI/discollection', data, 'post', false); + }, + meetingV2Video(data){ + return request('/expertAPI/meetingV2Video', data, 'post', false); + }, + + + + } diff --git a/components/Appellation.vue b/components/Appellation.vue new file mode 100644 index 0000000..764b4a7 --- /dev/null +++ b/components/Appellation.vue @@ -0,0 +1,54 @@ + + {{ appellation }} + + + + + diff --git a/components/Avatar.vue b/components/Avatar.vue new file mode 100644 index 0000000..6c55b6d --- /dev/null +++ b/components/Avatar.vue @@ -0,0 +1,193 @@ + + + + + + + + + + {{ appellation }} + + + + + + + + diff --git a/components/Badge.vue b/components/Badge.vue new file mode 100644 index 0000000..3b638dd --- /dev/null +++ b/components/Badge.vue @@ -0,0 +1,58 @@ + + + + {{ text }} + {{ props.num }} + + + + + + diff --git a/components/Empty.vue b/components/Empty.vue new file mode 100644 index 0000000..d8ef90a --- /dev/null +++ b/components/Empty.vue @@ -0,0 +1,41 @@ + + + + {{ text }} + + + + + diff --git a/components/FormInput.vue b/components/FormInput.vue new file mode 100644 index 0000000..0afac40 --- /dev/null +++ b/components/FormInput.vue @@ -0,0 +1,139 @@ + + + + + + + + + + + + {{ rule.message }} + + + + + + diff --git a/components/Icon.vue b/components/Icon.vue new file mode 100644 index 0000000..77c8c2c --- /dev/null +++ b/components/Icon.vue @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + diff --git a/components/MessageOneLine.vue b/components/MessageOneLine.vue new file mode 100644 index 0000000..a111430 --- /dev/null +++ b/components/MessageOneLine.vue @@ -0,0 +1,105 @@ + + + + + {{ item.value }} + + + + + + + + + + + diff --git a/components/Modal.vue b/components/Modal.vue new file mode 100644 index 0000000..99c1c2a --- /dev/null +++ b/components/Modal.vue @@ -0,0 +1,112 @@ + + + + + {{ title }} + + + + {{ cancelText }} + + + {{ confirmText }} + + + + + + + + + diff --git a/components/NavBar.vue b/components/NavBar.vue new file mode 100644 index 0000000..2626fdf --- /dev/null +++ b/components/NavBar.vue @@ -0,0 +1,103 @@ + + + + + + + + + + {{ title }} + {{ subTitle }} + + + + + + + + + + + + + diff --git a/components/NetworkAlert.vue b/components/NetworkAlert.vue new file mode 100644 index 0000000..a32f667 --- /dev/null +++ b/components/NetworkAlert.vue @@ -0,0 +1,73 @@ + + + {{ text }} + + + + + + diff --git a/components/PersonSelect.vue b/components/PersonSelect.vue new file mode 100644 index 0000000..714a7ae --- /dev/null +++ b/components/PersonSelect.vue @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + {{ btnText || t('okText') }} + + + + + + + + diff --git a/components/Tooltip.vue b/components/Tooltip.vue new file mode 100644 index 0000000..7826d06 --- /dev/null +++ b/components/Tooltip.vue @@ -0,0 +1,353 @@ + + + + + + {}" + :style="[ + style, + { + visibility: isShow ? 'visible' : 'hidden', + color: color === 'white' ? '' : '#fff', + boxShadow: + color === 'white' + ? '0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d' + : '', + }, + ]" + > + {{ content }} + + + + + + + + + diff --git a/components/UserCard.vue b/components/UserCard.vue new file mode 100644 index 0000000..6346ff2 --- /dev/null +++ b/components/UserCard.vue @@ -0,0 +1,117 @@ + + + + + + + + {{ alias }} + {{ t('name') }}:{{ nick || account }} + + {{ nick || account }} + + {{ t('accountText') }}:{{ props.account }} + + + + + + + + + + + diff --git a/components/empty/empty.vue b/components/empty/empty.vue index 9880ec5..af50838 100644 --- a/components/empty/empty.vue +++ b/components/empty/empty.vue @@ -13,8 +13,11 @@ diff --git a/components/uni-components/uni-popup/components/uni-popup-dialog/keypress.js b/components/uni-components/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..babff23 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,49 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false, + }, + }, + mounted() { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'], + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find((key) => { + const keyName = $event.key + const value = keyNames[key] + return ( + value === keyName || (Array.isArray(value) && value.includes(keyName)) + ) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => { + return null + }, +} +// #endif diff --git a/components/uni-components/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/components/uni-components/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..b5eee79 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,275 @@ + + + + {{titleText}} + + + + {{content}} + + + + + + + + + + {{closeText}} + + + {{okText}} + + + + + + + + + diff --git a/components/uni-components/uni-popup/components/uni-popup-message/uni-popup-message.vue b/components/uni-components/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + + {{message}} + + + + + + + diff --git a/components/uni-components/uni-popup/components/uni-popup-share/uni-popup-share.vue b/components/uni-components/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..5be7624 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + {{shareTitleText}} + + + + + {{item.text}} + + + + + + {{cancelText}} + + + + + + diff --git a/components/uni-components/uni-popup/components/uni-popup/i18n/en.json b/components/uni-components/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..5653abd --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/components/uni-components/uni-popup/components/uni-popup/i18n/index.js b/components/uni-components/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..efd9208 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant, +} diff --git a/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hans.json b/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..f84ab39 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hant.json b/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..2f6cf3d --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/components/uni-components/uni-popup/components/uni-popup/keypress.js b/components/uni-components/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..2786bc0 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,49 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false, + }, + }, + mounted() { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'], + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find((key) => { + const keyName = $event.key + const value = keyNames[key] + return ( + value === keyName || (Array.isArray(value) && value.includes(keyName)) + ) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => { + return null + }, +} +// #endif diff --git a/components/uni-components/uni-popup/components/uni-popup/popup.js b/components/uni-components/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c8ea062 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,23 @@ +export default { + data() { + return {} + }, + created() { + this.popup = this.getParent() + }, + methods: { + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent + let parentName = parent.$options.name + while (parentName !== name) { + parent = parent.$parent + if (!parent) return false + parentName = parent.$options.name + } + return parent + }, + }, +} diff --git a/components/uni-components/uni-popup/components/uni-popup/uni-popup.vue b/components/uni-components/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..248a366 --- /dev/null +++ b/components/uni-components/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + + + diff --git a/components/uni-components/uni-scss/changelog.md b/components/uni-components/uni-scss/changelog.md new file mode 100644 index 0000000..592ae61 --- /dev/null +++ b/components/uni-components/uni-scss/changelog.md @@ -0,0 +1,15 @@ +## 1.0.3(2022-01-21) + +- 优化 组件示例 + +## 1.0.2(2021-11-22) + +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 + +## 1.0.1(2021-11-22) + +- 修复 vue3 中 scss 语法兼容问题 + +## 1.0.0(2021-11-18) + +- init diff --git a/components/uni-components/uni-scss/index.scss b/components/uni-components/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/components/uni-components/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/components/uni-components/uni-scss/package.json b/components/uni-components/uni-scss/package.json new file mode 100644 index 0000000..05b09b0 --- /dev/null +++ b/components/uni-components/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/components/uni-components/uni-scss/readme.md b/components/uni-components/uni-scss/readme.md new file mode 100644 index 0000000..100db51 --- /dev/null +++ b/components/uni-components/uni-scss/readme.md @@ -0,0 +1,5 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) + +#### 如使用过程中有任何问题,或者您对 uni-ui 有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/components/uni-components/uni-scss/styles/index.scss b/components/uni-components/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/components/uni-components/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/components/uni-components/uni-scss/styles/setting/_border.scss b/components/uni-components/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/components/uni-components/uni-scss/styles/setting/_color.scss b/components/uni-components/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/components/uni-components/uni-scss/styles/setting/_radius.scss b/components/uni-components/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/components/uni-components/uni-scss/styles/setting/_space.scss b/components/uni-components/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/components/uni-components/uni-scss/styles/setting/_styles.scss b/components/uni-components/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/components/uni-components/uni-scss/styles/setting/_text.scss b/components/uni-components/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/components/uni-components/uni-scss/styles/setting/_variables.scss b/components/uni-components/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/components/uni-components/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/components/uni-components/uni-scss/styles/tools/functions.scss b/components/uni-components/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/components/uni-components/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/components/uni-components/uni-scss/theme.scss b/components/uni-components/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/components/uni-components/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/components/uni-components/uni-scss/variables.scss b/components/uni-components/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/components/uni-components/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/components/uni-components/uni-transition/components/uni-transition/createAnimation.js b/components/uni-components/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..255b9a9 --- /dev/null +++ b/components/uni-components/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,153 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误 + this.animation = uni.createAnimation({ + ...options, + }) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {}, + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if (type === 'rotate') { + unit = 'deg' + } + styles.styles.transform += `${type}(${args + unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition( + ref, + { + styles, + ...config, + }, + (res) => { + resolve() + } + ) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { styles, config } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign( + {}, + this.options, + config + ) + this.currentStepAnimates[this.next].styles.transformOrigin = + this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if (!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + +const animateTypes1 = [ + 'matrix', + 'matrix3d', + 'rotate', + 'rotate3d', + 'rotateX', + 'rotateY', + 'rotateZ', + 'scale', + 'scale3d', + 'scaleX', + 'scaleY', + 'scaleZ', + 'skew', + 'skewX', + 'skewY', + 'translate', + 'translate3d', + 'translateX', + 'translateY', + 'translateZ', +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach((type) => { + MPAnimation.prototype[type] = function (...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if (!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/components/uni-components/uni-transition/components/uni-transition/uni-transition.vue b/components/uni-components/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..bfbba93 --- /dev/null +++ b/components/uni-components/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,286 @@ + + + + + + + + + + + + diff --git a/components/uniVideo/uniVideo.vue b/components/uniVideo/uniVideo.vue index c39df56..148a500 100644 --- a/components/uniVideo/uniVideo.vue +++ b/components/uniVideo/uniVideo.vue @@ -77,7 +77,7 @@ this.videoVid = event.detail.value; }, - setVid() { + setVid(vid) { if(!this.videoVid) { uni.showToast({ title: "请输入视频Vid", @@ -87,7 +87,7 @@ } const { vodPlayer } = this; vodPlayer.setVid({ - vid:this.videoVid, + vid:this.videoVid || vid, level:0 }, (ret) => { this.text = JSON.stringify(ret); diff --git a/esmNim.js b/esmNim.js new file mode 100644 index 0000000..eada091 --- /dev/null +++ b/esmNim.js @@ -0,0 +1,29079 @@ +/*! For license information please see esmNim.js.LICENSE.txt */ +var e = { + d: (t, i) => { + for (var r in i) + e.o(i, r) && + !e.o(t, r) && + Object.defineProperty(t, r, { enumerable: !0, get: i[r] }) + }, +} +;(e.g = (function () { + if ('object' == typeof globalThis) return globalThis + try { + return this || new Function('return this')() + } catch (e) { + if ('object' == typeof window) return window + } +})()), + (e.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)) +var t = {} +e.d(t, { p: () => sc, K: () => pe }) +var i = + 'undefined' != typeof globalThis + ? globalThis + : 'undefined' != typeof window + ? window + : void 0 !== e.g + ? e.g + : 'undefined' != typeof self + ? self + : {} +function r(e) { + var t = { exports: {} } + return e(t, t.exports), t.exports +} +var s, + n, + o, + a, + c, + d, + l, + p, + h, + u, + m, + g, + v, + f, + y, + I, + M, + _, + E, + T, + S, + C, + N, + A, + R, + O, + b, + k, + V, + P, + L, + D, + w, + U, + x, + F, + B, + $, + G, + j, + q, + H, + Y, + K, + W, + J, + z, + X, + Q, + Z, + ee, + te, + ie, + re, + se, + ne = r(function (e) { + var t = Object.prototype.hasOwnProperty, + i = '~' + function r() {} + function s(e, t, i) { + ;(this.fn = e), (this.context = t), (this.once = i || !1) + } + function n(e, t, r, n, o) { + if ('function' != typeof r) + throw new TypeError('The listener must be a function') + var a = new s(r, n || e, o), + c = i ? i + t : t + return ( + e._events[c] + ? e._events[c].fn + ? (e._events[c] = [e._events[c], a]) + : e._events[c].push(a) + : ((e._events[c] = a), e._eventsCount++), + e + ) + } + function o(e, t) { + 0 == --e._eventsCount ? (e._events = new r()) : delete e._events[t] + } + function a() { + ;(this._events = new r()), (this._eventsCount = 0) + } + Object.create && + ((r.prototype = Object.create(null)), new r().__proto__ || (i = !1)), + (a.prototype.eventNames = function () { + var e, + r, + s = [] + if (0 === this._eventsCount) return s + for (r in (e = this._events)) t.call(e, r) && s.push(i ? r.slice(1) : r) + return Object.getOwnPropertySymbols + ? s.concat(Object.getOwnPropertySymbols(e)) + : s + }), + (a.prototype.listeners = function (e) { + var t = i ? i + e : e, + r = this._events[t] + if (!r) return [] + if (r.fn) return [r.fn] + for (var s = 0, n = r.length, o = new Array(n); s < n; s++) + o[s] = r[s].fn + return o + }), + (a.prototype.listenerCount = function (e) { + var t = i ? i + e : e, + r = this._events[t] + return r ? (r.fn ? 1 : r.length) : 0 + }), + (a.prototype.emit = function (e, t, r, s, n, o) { + var a = i ? i + e : e + if (!this._events[a]) return !1 + var c, + d, + l = this._events[a], + p = arguments.length + if (l.fn) { + switch ((l.once && this.removeListener(e, l.fn, void 0, !0), p)) { + case 1: + return l.fn.call(l.context), !0 + case 2: + return l.fn.call(l.context, t), !0 + case 3: + return l.fn.call(l.context, t, r), !0 + case 4: + return l.fn.call(l.context, t, r, s), !0 + case 5: + return l.fn.call(l.context, t, r, s, n), !0 + case 6: + return l.fn.call(l.context, t, r, s, n, o), !0 + } + for (d = 1, c = new Array(p - 1); d < p; d++) c[d - 1] = arguments[d] + l.fn.apply(l.context, c) + } else { + var h, + u = l.length + for (d = 0; d < u; d++) + switch ( + (l[d].once && this.removeListener(e, l[d].fn, void 0, !0), p) + ) { + case 1: + l[d].fn.call(l[d].context) + break + case 2: + l[d].fn.call(l[d].context, t) + break + case 3: + l[d].fn.call(l[d].context, t, r) + break + case 4: + l[d].fn.call(l[d].context, t, r, s) + break + default: + if (!c) + for (h = 1, c = new Array(p - 1); h < p; h++) + c[h - 1] = arguments[h] + l[d].fn.apply(l[d].context, c) + } + } + return !0 + }), + (a.prototype.on = function (e, t, i) { + return n(this, e, t, i, !1) + }), + (a.prototype.once = function (e, t, i) { + return n(this, e, t, i, !0) + }), + (a.prototype.removeListener = function (e, t, r, s) { + var n = i ? i + e : e + if (!this._events[n]) return this + if (!t) return o(this, n), this + var a = this._events[n] + if (a.fn) + a.fn !== t || (s && !a.once) || (r && a.context !== r) || o(this, n) + else { + for (var c = 0, d = [], l = a.length; c < l; c++) + (a[c].fn !== t || (s && !a[c].once) || (r && a[c].context !== r)) && + d.push(a[c]) + d.length ? (this._events[n] = 1 === d.length ? d[0] : d) : o(this, n) + } + return this + }), + (a.prototype.removeAllListeners = function (e) { + var t + return ( + e + ? ((t = i ? i + e : e), this._events[t] && o(this, t)) + : ((this._events = new r()), (this._eventsCount = 0)), + this + ) + }), + (a.prototype.off = a.prototype.removeListener), + (a.prototype.addListener = a.prototype.on), + (a.prefixed = i), + (a.EventEmitter = a), + (e.exports = a) + }), + oe = r(function (e, t) { + e.exports = (function () { + function e() { + e = function () { + return t + } + var t = {}, + i = Object.prototype, + r = i.hasOwnProperty, + s = 'function' == typeof Symbol ? Symbol : {}, + n = s.iterator || '@@iterator', + o = s.asyncIterator || '@@asyncIterator', + a = s.toStringTag || '@@toStringTag' + function c(e, t, i) { + return ( + Object.defineProperty(e, t, { + value: i, + enumerable: !0, + configurable: !0, + writable: !0, + }), + e[t] + ) + } + try { + c({}, '') + } catch (t) { + c = function (e, t, i) { + return (e[t] = i) + } + } + function d(e, t, i, r) { + var s = t && t.prototype instanceof h ? t : h, + n = Object.create(s.prototype), + o = new S(r || []) + return ( + (n._invoke = (function (e, t, i) { + var r = 'suspendedStart' + return function (s, n) { + if ('executing' === r) + throw new Error('Generator is already running') + if ('completed' === r) { + if ('throw' === s) throw n + return { value: void 0, done: !0 } + } + for (i.method = s, i.arg = n; ; ) { + var o = i.delegate + if (o) { + var a = _(o, i) + if (a) { + if (a === p) continue + return a + } + } + if ('next' === i.method) i.sent = i._sent = i.arg + else if ('throw' === i.method) { + if ('suspendedStart' === r) throw ((r = 'completed'), i.arg) + i.dispatchException(i.arg) + } else 'return' === i.method && i.abrupt('return', i.arg) + r = 'executing' + var c = l(e, t, i) + if ('normal' === c.type) { + if ( + ((r = i.done ? 'completed' : 'suspendedYield'), + c.arg === p) + ) + continue + return { value: c.arg, done: i.done } + } + 'throw' === c.type && + ((r = 'completed'), (i.method = 'throw'), (i.arg = c.arg)) + } + } + })(e, i, o)), + n + ) + } + function l(e, t, i) { + try { + return { type: 'normal', arg: e.call(t, i) } + } catch (e) { + return { type: 'throw', arg: e } + } + } + t.wrap = d + var p = {} + function h() {} + function u() {} + function m() {} + var g = {} + c(g, n, function () { + return this + }) + var v = Object.getPrototypeOf, + f = v && v(v(C([]))) + f && f !== i && r.call(f, n) && (g = f) + var y = (m.prototype = h.prototype = Object.create(g)) + function I(e) { + ;['next', 'throw', 'return'].forEach(function (t) { + c(e, t, function (e) { + return this._invoke(t, e) + }) + }) + } + function M(e, t) { + function i(s, n, o, a) { + var c = l(e[s], e, n) + if ('throw' !== c.type) { + var d = c.arg, + p = d.value + return p && 'object' == typeof p && r.call(p, '__await') + ? t.resolve(p.__await).then( + function (e) { + i('next', e, o, a) + }, + function (e) { + i('throw', e, o, a) + } + ) + : t.resolve(p).then( + function (e) { + ;(d.value = e), o(d) + }, + function (e) { + return i('throw', e, o, a) + } + ) + } + a(c.arg) + } + var s + this._invoke = function (e, r) { + function n() { + return new t(function (t, s) { + i(e, r, t, s) + }) + } + return (s = s ? s.then(n, n) : n()) + } + } + function _(e, t) { + var i = e.iterator[t.method] + if (void 0 === i) { + if (((t.delegate = null), 'throw' === t.method)) { + if ( + e.iterator.return && + ((t.method = 'return'), + (t.arg = void 0), + _(e, t), + 'throw' === t.method) + ) + return p + ;(t.method = 'throw'), + (t.arg = new TypeError( + "The iterator does not provide a 'throw' method" + )) + } + return p + } + var r = l(i, e.iterator, t.arg) + if ('throw' === r.type) + return (t.method = 'throw'), (t.arg = r.arg), (t.delegate = null), p + var s = r.arg + return s + ? s.done + ? ((t[e.resultName] = s.value), + (t.next = e.nextLoc), + 'return' !== t.method && + ((t.method = 'next'), (t.arg = void 0)), + (t.delegate = null), + p) + : s + : ((t.method = 'throw'), + (t.arg = new TypeError('iterator result is not an object')), + (t.delegate = null), + p) + } + function E(e) { + var t = { tryLoc: e[0] } + 1 in e && (t.catchLoc = e[1]), + 2 in e && ((t.finallyLoc = e[2]), (t.afterLoc = e[3])), + this.tryEntries.push(t) + } + function T(e) { + var t = e.completion || {} + ;(t.type = 'normal'), delete t.arg, (e.completion = t) + } + function S(e) { + ;(this.tryEntries = [{ tryLoc: 'root' }]), + e.forEach(E, this), + this.reset(!0) + } + function C(e) { + if (e) { + var t = e[n] + if (t) return t.call(e) + if ('function' == typeof e.next) return e + if (!isNaN(e.length)) { + var i = -1, + s = function t() { + for (; ++i < e.length; ) + if (r.call(e, i)) return (t.value = e[i]), (t.done = !1), t + return (t.value = void 0), (t.done = !0), t + } + return (s.next = s) + } + } + return { next: N } + } + function N() { + return { value: void 0, done: !0 } + } + return ( + (u.prototype = m), + c(y, 'constructor', m), + c(m, 'constructor', u), + (u.displayName = c(m, a, 'GeneratorFunction')), + (t.isGeneratorFunction = function (e) { + var t = 'function' == typeof e && e.constructor + return ( + !!t && + (t === u || 'GeneratorFunction' === (t.displayName || t.name)) + ) + }), + (t.mark = function (e) { + return ( + Object.setPrototypeOf + ? Object.setPrototypeOf(e, m) + : ((e.__proto__ = m), c(e, a, 'GeneratorFunction')), + (e.prototype = Object.create(y)), + e + ) + }), + (t.awrap = function (e) { + return { __await: e } + }), + I(M.prototype), + c(M.prototype, o, function () { + return this + }), + (t.AsyncIterator = M), + (t.async = function (e, i, r, s, n) { + void 0 === n && (n = Promise) + var o = new M(d(e, i, r, s), n) + return t.isGeneratorFunction(i) + ? o + : o.next().then(function (e) { + return e.done ? e.value : o.next() + }) + }), + I(y), + c(y, a, 'Generator'), + c(y, n, function () { + return this + }), + c(y, 'toString', function () { + return '[object Generator]' + }), + (t.keys = function (e) { + var t = [] + for (var i in e) t.push(i) + return ( + t.reverse(), + function i() { + for (; t.length; ) { + var r = t.pop() + if (r in e) return (i.value = r), (i.done = !1), i + } + return (i.done = !0), i + } + ) + }), + (t.values = C), + (S.prototype = { + constructor: S, + reset: function (e) { + if ( + ((this.prev = 0), + (this.next = 0), + (this.sent = this._sent = void 0), + (this.done = !1), + (this.delegate = null), + (this.method = 'next'), + (this.arg = void 0), + this.tryEntries.forEach(T), + !e) + ) + for (var t in this) + 't' === t.charAt(0) && + r.call(this, t) && + !isNaN(+t.slice(1)) && + (this[t] = void 0) + }, + stop: function () { + this.done = !0 + var e = this.tryEntries[0].completion + if ('throw' === e.type) throw e.arg + return this.rval + }, + dispatchException: function (e) { + if (this.done) throw e + var t = this + function i(i, r) { + return ( + (o.type = 'throw'), + (o.arg = e), + (t.next = i), + r && ((t.method = 'next'), (t.arg = void 0)), + !!r + ) + } + for (var s = this.tryEntries.length - 1; s >= 0; --s) { + var n = this.tryEntries[s], + o = n.completion + if ('root' === n.tryLoc) return i('end') + if (n.tryLoc <= this.prev) { + var a = r.call(n, 'catchLoc'), + c = r.call(n, 'finallyLoc') + if (a && c) { + if (this.prev < n.catchLoc) return i(n.catchLoc, !0) + if (this.prev < n.finallyLoc) return i(n.finallyLoc) + } else if (a) { + if (this.prev < n.catchLoc) return i(n.catchLoc, !0) + } else { + if (!c) + throw new Error('try statement without catch or finally') + if (this.prev < n.finallyLoc) return i(n.finallyLoc) + } + } + } + }, + abrupt: function (e, t) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var s = this.tryEntries[i] + if ( + s.tryLoc <= this.prev && + r.call(s, 'finallyLoc') && + this.prev < s.finallyLoc + ) { + var n = s + break + } + } + n && + ('break' === e || 'continue' === e) && + n.tryLoc <= t && + t <= n.finallyLoc && + (n = null) + var o = n ? n.completion : {} + return ( + (o.type = e), + (o.arg = t), + n + ? ((this.method = 'next'), (this.next = n.finallyLoc), p) + : this.complete(o) + ) + }, + complete: function (e, t) { + if ('throw' === e.type) throw e.arg + return ( + 'break' === e.type || 'continue' === e.type + ? (this.next = e.arg) + : 'return' === e.type + ? ((this.rval = this.arg = e.arg), + (this.method = 'return'), + (this.next = 'end')) + : 'normal' === e.type && t && (this.next = t), + p + ) + }, + finish: function (e) { + for (var t = this.tryEntries.length - 1; t >= 0; --t) { + var i = this.tryEntries[t] + if (i.finallyLoc === e) + return this.complete(i.completion, i.afterLoc), T(i), p + } + }, + catch: function (e) { + for (var t = this.tryEntries.length - 1; t >= 0; --t) { + var i = this.tryEntries[t] + if (i.tryLoc === e) { + var r = i.completion + if ('throw' === r.type) { + var s = r.arg + T(i) + } + return s + } + } + throw new Error('illegal catch attempt') + }, + delegateYield: function (e, t, i) { + return ( + (this.delegate = { iterator: C(e), resultName: t, nextLoc: i }), + 'next' === this.method && (this.arg = void 0), + p + ) + }, + }), + t + ) + } + function t(e) { + return ( + (t = + 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator + ? function (e) { + return typeof e + } + : function (e) { + return e && + 'function' == typeof Symbol && + e.constructor === Symbol && + e !== Symbol.prototype + ? 'symbol' + : typeof e + }), + t(e) + ) + } + function i(e, t) { + for (var i = 0; i < t.length; i++) { + var r = t[i] + ;(r.enumerable = r.enumerable || !1), + (r.configurable = !0), + 'value' in r && (r.writable = !0), + Object.defineProperty(e, r.key, r) + } + } + var r = { + isDataReportEnable: !0, + maxSize: 100, + msgListMaxSize: 1e3, + cacheMaxSize: 1e3, + maxDelay: 3e5, + maxInterval: 3e4, + minInterval: 1e4, + timeout: 5e3, + autoStart: !0, + loginFailIgnoreInterval: 72e5, + }, + s = function () {}, + n = (function () { + function n(e) { + ;(function (e, t) { + if (!(e instanceof t)) + throw new TypeError('Cannot call a class as a function') + })(this, n), + (this.isUploadEnable = !0), + (this.serverAllowUpload = !1), + (this.initConfigLoaded = !1), + (this.loading = !1), + (this.isDestroyed = !1), + (this.reportConfig = r), + (this.configPath = 'dispatcher/req'), + (this.dataReportPath = 'statics/report/common/form'), + (this.traceMsgCache = {}), + (this.reqRetryCount = 0), + (this.highPriorityMsgList = []), + (this.msgList = []), + (this.lowPriorityMsgList = []), + (this.cacheMsgList = []), + (this.lastReportTime = Date.now()), + (this.timer = null), + (this.endedAsyncMsgByModule = {}), + (this.lastFailLogin = {}), + this.setConfig(e), + this.reportConfig.isDataReportEnable && + this.reportConfig.autoStart && + this.initUploadConfig() + } + return ( + (function (e, t, r) { + t && i(e.prototype, t), + Object.defineProperty(e, 'prototype', { writable: !1 }) + })(n, [ + { + key: 'setConfig', + value: function (e) { + var t = Object.assign({}, this.reportConfig.common, e.common) + ;(this.reportConfig = Object.assign( + {}, + this.reportConfig, + e + )), + (this.reportConfig.common = t), + this.reportConfig.common.sdk_type || + (this.reportConfig.common.sdk_type = 'im') + }, + }, + { + key: 'reportImmediately', + value: function (e, t) { + var i = this + this.reportConfig.isDataReportEnable && + this.reportConfig + .request( + e, + Object.assign( + { + dataType: 'json', + method: 'POST', + timeout: this.reportConfig.timeout, + }, + t + ) + ) + .catch(function (e) { + var t, r + null === + (r = + null === (t = i.reportConfig) || void 0 === t + ? void 0 + : t.logger) || + void 0 === r || + r.warn('Reporter immediately upload failed', e) + }) + }, + }, + { + key: 'report', + value: function (e, t) { + var i = + arguments.length > 2 && void 0 !== arguments[2] + ? arguments[2] + : {} + if ( + (i.priority || (i.priority = this.getEventPriority(e, t)), + this.reportConfig.isDataReportEnable && e) + ) { + if ('login' === e && !1 === t.succeed && t.process_id) { + var s = + t.extension && + t.extension.find(function (e) { + return 'TCP' === e.operation_type + }), + n = (s && s.target) || '', + o = t.process_id + n, + a = this.lastFailLogin[o] || 0 + if (t.start_time - a < r.loginFailIgnoreInterval) return + this.lastFailLogin[o] = t.start_time + } + var c = Date.now() + 'HIGH' === i.priority + ? this.highPriorityMsgList.push({ + module: e, + msg: t, + createTime: c, + }) + : 'NORMAL' === i.priority + ? this.msgList.push({ module: e, msg: t, createTime: c }) + : 'LOW' === i.priority && + this.lowPriorityMsgList.push({ + module: e, + msg: t, + createTime: c, + }), + this.highPriorityMsgList.length > + this.reportConfig.msgListMaxSize && + this.highPriorityMsgList.shift(), + this.msgList.length > this.reportConfig.msgListMaxSize && + this.msgList.shift(), + this.lowPriorityMsgList.length > + this.reportConfig.msgListMaxSize && + this.lowPriorityMsgList.shift(), + this.doReport() + } + }, + }, + { + key: 'reportTraceStart', + value: function (e, t) { + if ( + this.reportConfig.isDataReportEnable && + e && + !this.traceMsgCache[e] + ) { + var i = Object.assign( + Object.assign({ start_time: Date.now() }, t), + { extension: [] } + ) + this.traceMsgCache[e] = i + } + }, + }, + { key: 'reportTraceUpdate', value: function (e) {} }, + { + key: 'reportTraceUpdateV2', + value: function (e, t, i) { + var r, + s = this + if ( + this.reportConfig.isDataReportEnable && + this.traceMsgCache[e] + ) { + var n = this.traceMsgCache[e].extension, + o = n.length, + a = new Date().getTime() + 0 === o + ? (t.duration = a - this.traceMsgCache[e].start_time) + : n[o - 1].end_time + ? (t.duration = a - n[o - 1].end_time) + : (t.duration = a - this.traceMsgCache[e].start_time), + n.push(Object.assign({ end_time: a }, t)) + var c = n.length - 1 + ;(null == i ? void 0 : i.asyncParams) && + ((r = this.traceMsgCache[e]).asyncPromiseArray || + (r.asyncPromiseArray = []), + this.traceMsgCache[e].asyncPromiseArray.push( + i.asyncParams.then(function (t) { + s.traceMsgCache[e] && + s.traceMsgCache[e].extension[c] && + Object.assign(s.traceMsgCache[e].extension[c], t) + }) + )) + } + }, + }, + { + key: 'reportTraceEnd', + value: function (e) { + var t, + i = this, + r = + !(arguments.length > 1 && void 0 !== arguments[1]) || + arguments[1] + if ( + this.reportConfig.isDataReportEnable && + this.traceMsgCache[e] + ) + if ('nos' !== e || !1 === r) { + 'boolean' == typeof r + ? (this.traceMsgCache[e].succeed = !!r) + : (this.traceMsgCache[e].state = r), + (this.traceMsgCache[e].duration = + Date.now() - this.traceMsgCache[e].start_time), + this.traceMsgCache[e].extension.forEach(function (e) { + delete e.end_time + }) + var s = this.traceMsgCache[e] + if ( + ((this.traceMsgCache[e] = null), s.asyncPromiseArray) + ) { + ;(t = this.endedAsyncMsgByModule)[e] || (t[e] = []), + this.endedAsyncMsgByModule[e].push(s) + var n = function () { + i.endedAsyncMsgByModule[e] && + i.endedAsyncMsgByModule[e].includes(s) && + (delete s.asyncPromiseArray, + i.report(e, s, { + priority: i.getEventPriority(e, s), + })) + } + Promise.all(s.asyncPromiseArray).then(n).catch(n) + } else + this.report(e, s, { + priority: this.getEventPriority(e, s), + }) + } else this.traceMsgCache[e] = null + }, + }, + { + key: 'getEventPriority', + value: function (e, t) { + if ('exceptions' === e) { + if (0 === t.action) return 'HIGH' + if (2 === t.action) return 'HIGH' + if (1 === t.action && 0 !== t.exception_service) + return 'HIGH' + } else { + if ('msgReceive' === e) return 'LOW' + if ('nim_api_trace' === e) return 'LOW' + } + return 'NORMAL' + }, + }, + { + key: 'reportTraceCancel', + value: function (e) { + this.reportConfig.isDataReportEnable && + ((this.endedAsyncMsgByModule[e] = []), + (this.traceMsgCache[e] = null)) + }, + }, + { + key: 'pause', + value: function () { + this.reportConfig.isDataReportEnable && + (this.isUploadEnable = !1) + }, + }, + { + key: 'restore', + value: function () { + this.reportConfig.isDataReportEnable && + ((this.isUploadEnable = !0), + this.initConfigLoaded || this.initUploadConfig()) + }, + }, + { + key: 'destroy', + value: function () { + var e = this + this.reportConfig.isDataReportEnable && + (Object.keys(this.traceMsgCache).forEach(function (t) { + e.reportTraceEnd(t, 1) + }), + null !== this.timer && clearTimeout(this.timer), + (this.setConfig = s), + (this.report = s), + (this.reportTraceStart = s), + (this.reportTraceUpdate = s), + (this.reportTraceEnd = s), + (this.pause = s), + (this.restore = s), + (this.destroy = s), + (this.reqRetryCount = 0), + (this.cacheMsgList = []), + (this.traceMsgCache = {}), + (this.lowPriorityMsgList = []), + (this.msgList = []), + (this.highPriorityMsgList = []), + (this.reportConfig = {}), + (this.isDestroyed = !0)) + }, + }, + { + key: 'initUploadConfig', + value: function () { + var i, r + return (function (e, t, i, r) { + function s(e) { + return e instanceof i + ? e + : new i(function (t) { + t(e) + }) + } + return new (i || (i = Promise))(function (t, i) { + function n(e) { + try { + a(r.next(e)) + } catch (e) { + i(e) + } + } + function o(e) { + try { + a(r.throw(e)) + } catch (e) { + i(e) + } + } + function a(e) { + e.done ? t(e.value) : s(e.value).then(n, o) + } + a((r = r.apply(e, [])).next()) + }) + })( + this, + 0, + void 0, + e().mark(function s() { + var n, + o, + a, + c, + d, + l = this + return e().wrap( + function (s) { + for (;;) + switch ((s.prev = s.next)) { + case 0: + if (!this.loading) { + s.next = 2 + break + } + return s.abrupt('return') + case 2: + ;(this.loading = !0), + (n = this.reportConfig.common || {}), + (o = this.reportConfig.compassDataEndpoint + .split(',') + .map(function (e) { + return '' + .concat(e, '/') + .concat(l.configPath) + })), + (a = e().mark(function t(s) { + return e().wrap( + function (e) { + for (;;) + switch ((e.prev = e.next)) { + case 0: + if ( + !l.initConfigLoaded && + !l.isDestroyed + ) { + e.next = 2 + break + } + return e.abrupt('return', 'break') + case 2: + return ( + (e.prev = 2), + (e.next = 5), + l.reportConfig + .request(o[s], { + method: 'GET', + dataType: 'json', + params: { + deviceId: n.dev_id, + sdkVer: n.sdk_ver, + platform: n.platform, + hostEnv: n.host_env, + appkey: n.app_key, + }, + timeout: + l.reportConfig.timeout, + }) + .then(function (e) { + var t, i + if (!l.isDestroyed) { + if ( + 200 === e.status && + e.data && + 200 === e.data.code + ) { + l.initConfigLoaded = !0 + var r = + e.data.data || {} + ;(l.reportConfig.maxSize = + r.maxSize > 1e3 + ? 1e3 + : r.maxSize), + (l.reportConfig.maxInterval = + r.maxInterval > 1e4 + ? 1e4 + : r.maxInterval), + (l.reportConfig.maxInterval = + r.maxInterval < 10 + ? 10 + : r.maxInterval), + (l.reportConfig.minInterval = + r.minInterval < 2 + ? 2 + : r.minInterval), + (l.reportConfig.maxDelay = + r.maxDelay || 300), + (l.reportConfig.maxInterval = + 1e3 * + l.reportConfig + .maxInterval), + (l.reportConfig.minInterval = + 1e3 * + l.reportConfig + .minInterval), + (l.reportConfig.maxDelay = + 1e3 * + l.reportConfig + .maxDelay), + r.endpoint + ? (l.dataReportEndpoint = + r.endpoint) + : (l.dataReportEndpoint = + o[s]), + (l.serverAllowUpload = + !0), + (l.loading = !1), + l.reportHeartBeat() + } else + 200 === e.status && + (l.initConfigLoaded = + !0) + null === + (i = + null === + (t = + l.reportConfig) || + void 0 === t + ? void 0 + : t.logger) || + void 0 === i || + i.log( + 'Get reporter upload config success' + ) + } + }) + .catch(function (e) { + var t, i + l.isDestroyed || + ((l.loading = !1), + null === + (i = + null === + (t = + l.reportConfig) || + void 0 === t + ? void 0 + : t.logger) || + void 0 === i || + i.error( + 'Get reporter upload config failed', + e + ), + l.reqRetryCount < 12 && + (l.reqRetryCount++, + setTimeout(function () { + l.isDestroyed || + l.initUploadConfig() + }, 8e3))) + }) + ) + case 5: + e.next = 14 + break + case 7: + if ( + ((e.prev = 7), + (e.t0 = e.catch(2)), + !l.isDestroyed) + ) { + e.next = 11 + break + } + return e.abrupt('return', { + v: void 0, + }) + case 11: + ;(l.loading = !1), + null === + (r = + null === + (i = l.reportConfig) || + void 0 === i + ? void 0 + : i.logger) || + void 0 === r || + r.error( + 'Exec reporter request failed', + e.t0 + ), + l.reqRetryCount < 12 && + (l.reqRetryCount++, + setTimeout(function () { + l.isDestroyed || + l.initUploadConfig() + }, 8e3)) + case 14: + case 'end': + return e.stop() + } + }, + t, + null, + [[2, 7]] + ) + })), + (c = 0) + case 7: + if (!(c < o.length)) { + s.next = 17 + break + } + return s.delegateYield(a(c), 't0', 9) + case 9: + if ('break' !== (d = s.t0)) { + s.next = 12 + break + } + return s.abrupt('break', 17) + case 12: + if ('object' !== t(d)) { + s.next = 14 + break + } + return s.abrupt('return', d.v) + case 14: + c++, (s.next = 7) + break + case 17: + case 'end': + return s.stop() + } + }, + s, + this + ) + }) + ) + }, + }, + { + key: 'reportHeartBeat', + value: function () { + var e = this + this.isDestroyed || + ((this.timer = setTimeout(function () { + e.reportHeartBeat() + }, this.reportConfig.minInterval)), + this.doReport()) + }, + }, + { + key: 'doReport', + value: function () { + if (!this.isDestroyed) { + var e = + this.highPriorityMsgList.length + + this.msgList.length + + this.lowPriorityMsgList.length + + this.cacheMsgList.length > + 2 * this.reportConfig.maxSize + ? this.reportConfig.minInterval + : this.reportConfig.maxInterval + Date.now() - this.lastReportTime >= e && this.upload() + } + }, + }, + { + key: 'getUploadMsg', + value: function () { + var e = this, + t = {}, + i = Date.now() + ;(this.highPriorityMsgList = this.highPriorityMsgList.filter( + function (t) { + return i - t.createTime < e.reportConfig.maxDelay + } + )), + (this.msgList = this.msgList.filter(function (t) { + return i - t.createTime < e.reportConfig.maxDelay + })), + (this.lowPriorityMsgList = this.lowPriorityMsgList.filter( + function (t) { + return i - t.createTime < e.reportConfig.maxDelay + } + )), + (this.cacheMsgList = this.cacheMsgList.filter(function (t) { + return i - t.createTime < e.reportConfig.maxDelay + })) + var r = this.highPriorityMsgList.slice( + 0, + this.reportConfig.maxSize + ) + if ( + ((this.highPriorityMsgList = this.highPriorityMsgList.slice( + r.length + )), + r.length < this.reportConfig.maxSize) + ) { + var s = this.reportConfig.maxSize - r.length + ;(r = r.concat(this.msgList.slice(0, s))), + (this.msgList = this.msgList.slice(s)) + } + if (r.length < this.reportConfig.maxSize) { + var n = this.reportConfig.maxSize - r.length + ;(r = r.concat(this.lowPriorityMsgList.slice(0, n))), + (this.lowPriorityMsgList = + this.lowPriorityMsgList.slice(n)) + } + if (r.length < this.reportConfig.maxSize) { + var o = this.reportConfig.maxSize - r.length + ;(r = r.concat(this.cacheMsgList.slice(0, o))), + (this.cacheMsgList = this.cacheMsgList.slice(o)) + } + return ( + r.forEach(function (e) { + t[e.module] + ? t[e.module].push(e.msg) + : (t[e.module] = [e.msg]) + }), + { uploadMsgArr: r, uploadMsg: t } + ) + }, + }, + { + key: 'upload', + value: function () { + var e, + t, + i = this + if ( + this.isUploadEnable && + this.serverAllowUpload && + !( + this.lastReportTime && + Date.now() - this.lastReportTime < + this.reportConfig.minInterval + ) + ) { + var r = this.getUploadMsg(), + s = r.uploadMsgArr, + n = r.uploadMsg + if (s.length) { + this.lastReportTime = Date.now() + try { + var o = '' + .concat(this.dataReportEndpoint, '/') + .concat(this.dataReportPath) + this.reportConfig + .request(o, { + dataType: 'json', + method: 'POST', + data: { + common: this.reportConfig.common, + event: n, + }, + headers: { sdktype: 'im' }, + timeout: this.reportConfig.timeout, + }) + .catch(function (e) { + var t, r + ;(i.cacheMsgList = i.cacheMsgList + .concat(s) + .slice(0, i.reportConfig.cacheMaxSize)), + null === + (r = + null === (t = i.reportConfig) || void 0 === t + ? void 0 + : t.logger) || + void 0 === r || + r.warn('Reporter upload failed', e) + }) + } catch (i) { + null === + (t = + null === (e = this.reportConfig) || void 0 === e + ? void 0 + : e.logger) || + void 0 === t || + t.warn('Exec reporter request failed', i) + } + clearTimeout(this.timer), this.reportHeartBeat() + } + } + }, + }, + ]), + n + ) + })() + return n + })() + }) +!(function (e) { + ;(e[(e.V2NIM_DATA_SYNC_TYPE_LEVEL_FULL = 0)] = + 'V2NIM_DATA_SYNC_TYPE_LEVEL_FULL'), + (e[(e.V2NIM_DATA_SYNC_TYPE_LEVEL_BASIC = 1)] = + 'V2NIM_DATA_SYNC_TYPE_LEVEL_BASIC') +})(s || (s = {})), + (function (e) { + ;(e[(e.V2NIM_DATA_SYNC_TYPE_MAIN = 1)] = 'V2NIM_DATA_SYNC_TYPE_MAIN'), + (e[(e.V2NIM_DATA_SYNC_TYPE_TEAM_MEMBER = 2)] = + 'V2NIM_DATA_SYNC_TYPE_TEAM_MEMBER'), + (e[(e.V2NIM_DATA_SYNC_TYPE_SUPER_TEAM_MEMBER = 3)] = + 'V2NIM_DATA_SYNC_TYPE_SUPER_TEAM_MEMBER') + })(n || (n = {})), + (function (e) { + ;(e[(e.V2NIM_DATA_SYNC_STATE_WAITING = 1)] = + 'V2NIM_DATA_SYNC_STATE_WAITING'), + (e[(e.V2NIM_DATA_SYNC_STATE_SYNCING = 2)] = + 'V2NIM_DATA_SYNC_STATE_SYNCING'), + (e[(e.V2NIM_DATA_SYNC_STATE_COMPLETED = 3)] = + 'V2NIM_DATA_SYNC_STATE_COMPLETED') + })(o || (o = {})), + (function (e) { + ;(e[(e.V2NIM_CONVERSATION_TYPE_UNKNOWN = 0)] = + 'V2NIM_CONVERSATION_TYPE_UNKNOWN'), + (e[(e.V2NIM_CONVERSATION_TYPE_P2P = 1)] = 'V2NIM_CONVERSATION_TYPE_P2P'), + (e[(e.V2NIM_CONVERSATION_TYPE_TEAM = 2)] = + 'V2NIM_CONVERSATION_TYPE_TEAM'), + (e[(e.V2NIM_CONVERSATION_TYPE_SUPER_TEAM = 3)] = + 'V2NIM_CONVERSATION_TYPE_SUPER_TEAM') + })(a || (a = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_STATUS_DEFAULT = 0)] = 'V2NIM_MESSAGE_STATUS_DEFAULT'), + (e[(e.V2NIM_MESSAGE_STATUS_REVOKE = 1)] = 'V2NIM_MESSAGE_STATUS_REVOKE'), + (e[(e.V2NIM_MESSAGE_STATUS_BACKFILL = 2)] = + 'V2NIM_MESSAGE_STATUS_BACKFILL') + })(c || (c = {})), + (function (e) { + ;(e[(e.V2NIM_FRIEND_MODE_TYPE_ADD = 1)] = 'V2NIM_FRIEND_MODE_TYPE_ADD'), + (e[(e.V2NIM_FRIEND_MODE_TYPE_APPLY = 2)] = 'V2NIM_FRIEND_MODE_TYPE_APPLY') + })(d || (d = {})), + (function (e) { + ;(e[(e.V2NIM_FRIEND_ADD_APPLICATION_TYPE_RECEIVED = 1)] = + 'V2NIM_FRIEND_ADD_APPLICATION_TYPE_RECEIVED'), + (e[(e.V2NIM_FRIEND_ADD_APPLICATION_TYPE_REJECTED = 2)] = + 'V2NIM_FRIEND_ADD_APPLICATION_TYPE_REJECTED') + })(l || (l = {})), + (function (e) { + ;(e[(e.V2NIM_FRIEND_ADD_APPLICATION_STATUS_INIT = 0)] = + 'V2NIM_FRIEND_ADD_APPLICATION_STATUS_INIT'), + (e[(e.V2NIM_FRIEND_ADD_APPLICATION_STATUS_AGREED = 1)] = + 'V2NIM_FRIEND_ADD_APPLICATION_STATUS_AGREED'), + (e[(e.V2NIM_FRIEND_ADD_APPLICATION_STATUS_REJECTED = 2)] = + 'V2NIM_FRIEND_ADD_APPLICATION_STATUS_REJECTED'), + (e[(e.V2NIM_FRIEND_ADD_APPLICATION_STATUS_EXPIRED = 3)] = + 'V2NIM_FRIEND_ADD_APPLICATION_STATUS_EXPIRED'), + (e[(e.V2NIM_FRIEND_ADD_APPLICATION_STATUS_DIRECT_ADD = 4)] = + 'V2NIM_FRIEND_ADD_APPLICATION_STATUS_DIRECT_ADD') + })(p || (p = {})), + (function (e) { + ;(e[(e.V2NIM_FRIEND_DELETION_TYPE_BY_SELF = 1)] = + 'V2NIM_FRIEND_DELETION_TYPE_BY_SELF'), + (e[(e.V2NIM_FRIEND_DELETION_TYPE_BY_PEER = 2)] = + 'V2NIM_FRIEND_DELETION_TYPE_BY_PEER') + })(h || (h = {})), + (function (e) { + ;(e[(e.V2NIM_FRIEND_VERIFY_TYPE_ADD = 1)] = 'V2NIM_FRIEND_VERIFY_TYPE_ADD'), + (e[(e.V2NIM_FRIEND_VERIFY_TYPE_APPLY = 2)] = + 'V2NIM_FRIEND_VERIFY_TYPE_APPLY'), + (e[(e.V2NIM_FRIEND_VERIFY_TYPE_ACCEPT = 3)] = + 'V2NIM_FRIEND_VERIFY_TYPE_ACCEPT'), + (e[(e.V2NIM_FRIEND_VERIFY_TYPE_REJECT = 4)] = + 'V2NIM_FRIEND_VERIFY_TYPE_REJECT') + })(u || (u = {})), + (function (e) { + ;(e[(e.V2NIM_LOGIN_AUTH_TYPE_DEFAULT = 0)] = + 'V2NIM_LOGIN_AUTH_TYPE_DEFAULT'), + (e[(e.V2NIM_LOGIN_AUTH_TYPE_DYNAMIC_TOKEN = 1)] = + 'V2NIM_LOGIN_AUTH_TYPE_DYNAMIC_TOKEN'), + (e[(e.V2NIM_LOGIN_AUTH_TYPE_THIRD_PARTY = 2)] = + 'V2NIM_LOGIN_AUTH_TYPE_THIRD_PARTY') + })(m || (m = {})), + (function (e) { + ;(e[(e.V2NIM_LOGIN_STATUS_LOGOUT = 0)] = 'V2NIM_LOGIN_STATUS_LOGOUT'), + (e[(e.V2NIM_LOGIN_STATUS_LOGINED = 1)] = 'V2NIM_LOGIN_STATUS_LOGINED'), + (e[(e.V2NIM_LOGIN_STATUS_LOGINING = 2)] = 'V2NIM_LOGIN_STATUS_LOGINING'), + (e[(e.V2NIM_LOGIN_STATUS_UNLOGIN = 3)] = 'V2NIM_LOGIN_STATUS_UNLOGIN') + })(g || (g = {})), + (function (e) { + ;(e[(e.V2NIM_LOGIN_CLIENT_TYPE_UNKNOWN = 0)] = + 'V2NIM_LOGIN_CLIENT_TYPE_UNKNOWN'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_ANDROID = 1)] = + 'V2NIM_LOGIN_CLIENT_TYPE_ANDROID'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_IOS = 2)] = 'V2NIM_LOGIN_CLIENT_TYPE_IOS'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_PC = 4)] = 'V2NIM_LOGIN_CLIENT_TYPE_PC'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_WP = 8)] = 'V2NIM_LOGIN_CLIENT_TYPE_WP'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_WEB = 16)] = 'V2NIM_LOGIN_CLIENT_TYPE_WEB'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_RESTFUL = 32)] = + 'V2NIM_LOGIN_CLIENT_TYPE_RESTFUL'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_MAC_OS = 64)] = + 'V2NIM_LOGIN_CLIENT_TYPE_MAC_OS'), + (e[(e.V2NIM_LOGIN_CLIENT_TYPE_HARMONY_OS = 65)] = + 'V2NIM_LOGIN_CLIENT_TYPE_HARMONY_OS') + })(v || (v = {})), + (function (e) { + ;(e[(e.V2NIM_KICKED_OFFLINE_REASON_CLIENT_EXCLUSIVE = 1)] = + 'V2NIM_KICKED_OFFLINE_REASON_CLIENT_EXCLUSIVE'), + (e[(e.V2NIM_KICKED_OFFLINE_REASON_SERVER = 2)] = + 'V2NIM_KICKED_OFFLINE_REASON_SERVER'), + (e[(e.V2NIM_KICKED_OFFLINE_REASON_CLIENT = 3)] = + 'V2NIM_KICKED_OFFLINE_REASON_CLIENT'), + (e[(e.V2NIM_KICKED_OFFLINE_REASON_CLIENT_QUIETLY = 4)] = + 'V2NIM_KICKED_OFFLINE_REASON_CLIENT_QUIETLY') + })(f || (f = {})), + (function (e) { + ;(e[(e.V2NIM_LOGIN_CLIENT_CHANGE_LIST = 1)] = + 'V2NIM_LOGIN_CLIENT_CHANGE_LIST'), + (e[(e.V2NIM_LOGIN_CLIENT_CHANGE_LOGIN = 2)] = + 'V2NIM_LOGIN_CLIENT_CHANGE_LOGIN'), + (e[(e.V2NIM_LOGIN_CLIENT_CHANGE_LOGOUT = 3)] = + 'V2NIM_LOGIN_CLIENT_CHANGE_LOGOUT') + })(y || (y = {})), + (function (e) { + ;(e[(e.V2NIM_CONNECT_STATUS_DISCONNECTED = 0)] = + 'V2NIM_CONNECT_STATUS_DISCONNECTED'), + (e[(e.V2NIM_CONNECT_STATUS_CONNECTED = 1)] = + 'V2NIM_CONNECT_STATUS_CONNECTED'), + (e[(e.V2NIM_CONNECT_STATUS_CONNECTING = 2)] = + 'V2NIM_CONNECT_STATUS_CONNECTING'), + (e[(e.V2NIM_CONNECT_STATUS_WAITING = 3)] = 'V2NIM_CONNECT_STATUS_WAITING') + })(I || (I = {})), + (function (e) { + ;(e[(e.NIM_MESSAGE_AI_STREAM_STATUS_STREAMING = -1)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_STREAMING'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_NONE = 0)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_NONE'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_PLACEHOLDER = 1)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_PLACEHOLDER'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_CANCEL = 2)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_CANCEL'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_UPDATE = 3)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_UPDATE'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_COMPLETE = 4)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_COMPLETE'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_EXCEPTION = 5)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_EXCEPTION') + })(M || (M = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_AI_STREAM_STOP_OP_DEFAULT = 0)] = + 'V2NIM_MESSAGE_AI_STREAM_STOP_OP_DEFAULT'), + (e[(e.V2NIM_MESSAGE_AI_STREAM_STOP_OP_REVOKE = 1)] = + 'V2NIM_MESSAGE_AI_STREAM_STOP_OP_REVOKE'), + (e[(e.V2NIM_MESSAGE_AI_STREAM_STOP_OP_UPDATE = 2)] = + 'V2NIM_MESSAGE_AI_STREAM_STOP_OP_UPDATE') + })(_ || (_ = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_AI_REGEN_OP_UPDATE = 1)] = + 'V2NIM_MESSAGE_AI_REGEN_OP_UPDATE'), + (e[(e.V2NIM_MESSAGE_AI_REGEN_OP_NEW = 2)] = + 'V2NIM_MESSAGE_AI_REGEN_OP_NEW') + })(E || (E = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_AI_STATUS_UNKNOW = 0)] = + 'V2NIM_MESSAGE_AI_STATUS_UNKNOW'), + (e[(e.V2NIM_MESSAGE_AI_STATUS_AT = 1)] = 'V2NIM_MESSAGE_AI_STATUS_AT'), + (e[(e.V2NIM_MESSAGE_AI_STATUS_RESPONSE = 2)] = + 'V2NIM_MESSAGE_AI_STATUS_RESPONSE') + })(T || (T = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_TYPE_INVALID = -1)] = 'V2NIM_MESSAGE_TYPE_INVALID'), + (e[(e.V2NIM_MESSAGE_TYPE_TEXT = 0)] = 'V2NIM_MESSAGE_TYPE_TEXT'), + (e[(e.V2NIM_MESSAGE_TYPE_IMAGE = 1)] = 'V2NIM_MESSAGE_TYPE_IMAGE'), + (e[(e.V2NIM_MESSAGE_TYPE_AUDIO = 2)] = 'V2NIM_MESSAGE_TYPE_AUDIO'), + (e[(e.V2NIM_MESSAGE_TYPE_VIDEO = 3)] = 'V2NIM_MESSAGE_TYPE_VIDEO'), + (e[(e.V2NIM_MESSAGE_TYPE_LOCATION = 4)] = 'V2NIM_MESSAGE_TYPE_LOCATION'), + (e[(e.V2NIM_MESSAGE_TYPE_NOTIFICATION = 5)] = + 'V2NIM_MESSAGE_TYPE_NOTIFICATION'), + (e[(e.V2NIM_MESSAGE_TYPE_FILE = 6)] = 'V2NIM_MESSAGE_TYPE_FILE'), + (e[(e.V2NIM_MESSAGE_TYPE_AVCHAT = 7)] = 'V2NIM_MESSAGE_TYPE_AVCHAT'), + (e[(e.V2NIM_MESSAGE_TYPE_TIPS = 10)] = 'V2NIM_MESSAGE_TYPE_TIPS'), + (e[(e.V2NIM_MESSAGE_TYPE_ROBOT = 11)] = 'V2NIM_MESSAGE_TYPE_ROBOT'), + (e[(e.V2NIM_MESSAGE_TYPE_CALL = 12)] = 'V2NIM_MESSAGE_TYPE_CALL'), + (e[(e.V2NIM_MESSAGE_TYPE_CUSTOM = 100)] = 'V2NIM_MESSAGE_TYPE_CUSTOM') + })(S || (S = {})), + (function (e) { + ;(e[(e.V2NIM_SEARCH_KEYWORD_MATCH_TYPE_OR = 0)] = + 'V2NIM_SEARCH_KEYWORD_MATCH_TYPE_OR'), + (e[(e.V2NIM_SEARCH_KEYWORD_MATCH_TYPE_AND = 1)] = + 'V2NIM_SEARCH_KEYWORD_MATCH_TYPE_AND') + })(C || (C = {})), + (function (e) { + ;(e[(e.V2NIM_SEARCH_DIRECTION_BACKWARD = 0)] = + 'V2NIM_SEARCH_DIRECTION_BACKWARD'), + (e[(e.V2NIM_SEARCH_DIRECTION_FORWARD = 1)] = + 'V2NIM_SEARCH_DIRECTION_FORWARD') + })(N || (N = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_UNDEFINED = -1)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_UNDEFINED'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE = 0)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_KICK = 1)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_KICK'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LEAVE = 2)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LEAVE'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_UPDATE_TINFO = 3)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_UPDATE_TINFO'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS = 4)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_APPLY_PASS = 5)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_APPLY_PASS'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_OWNER_TRANSFER = 6)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_OWNER_TRANSFER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_ADD_MANAGER = 7)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_ADD_MANAGER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_REMOVE_MANAGER = 8)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_REMOVE_MANAGER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE_ACCEPT = 9)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE_ACCEPT'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_BANNED_TEAM_MEMBER = 10)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_BANNED_TEAM_MEMBER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE = 401)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_KICK = 402)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_KICK'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_LEAVE = 403)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_LEAVE'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_UPDATE_TINFO = 404)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_UPDATE_TINFO'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_DISMISS = 405)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_DISMISS'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_APPLY_PASS = 410)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_APPLY_PASS'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_OWNER_TRANSFER = 406)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_OWNER_TRANSFER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_ADD_MANAGER = 407)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_ADD_MANAGER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_REMOVE_MANAGER = 408)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_REMOVE_MANAGER'), + (e[(e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE_ACCEPT = 411)] = + 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_INVITE_ACCEPT'), + (e[ + (e.V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_BANNED_TEAM_MEMBER = 409) + ] = 'V2NIM_MESSAGE_NOTIFICATION_TYPE_SUPER_TEAM_BANNED_TEAM_MEMBER') + })(A || (A = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_UNKNOWN = 0)] = + 'V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_UNKNOWN'), + (e[(e.V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_SUCCESS = 1)] = + 'V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_SUCCESS'), + (e[(e.V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_FAILED = 2)] = + 'V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_FAILED'), + (e[(e.V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_UPLOADING = 3)] = + 'V2NIM_MESSAGE_ATTACHMENT_UPLOAD_STATE_UPLOADING') + })(R || (R = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_SENDING_STATE_UNKNOWN = 0)] = + 'V2NIM_MESSAGE_SENDING_STATE_UNKNOWN'), + (e[(e.V2NIM_MESSAGE_SENDING_STATE_SUCCEEDED = 1)] = + 'V2NIM_MESSAGE_SENDING_STATE_SUCCEEDED'), + (e[(e.V2NIM_MESSAGE_SENDING_STATE_FAILED = 2)] = + 'V2NIM_MESSAGE_SENDING_STATE_FAILED'), + (e[(e.V2NIM_MESSAGE_SENDING_STATE_SENDING = 3)] = + 'V2NIM_MESSAGE_SENDING_STATE_SENDING') + })(O || (O = {})), + (function (e) { + ;(e[(e.V2NIM_QUERY_DIRECTION_DESC = 0)] = 'V2NIM_QUERY_DIRECTION_DESC'), + (e[(e.V2NIM_QUERY_DIRECTION_ASC = 1)] = 'V2NIM_QUERY_DIRECTION_ASC') + })(b || (b = {})), + (function (e) { + ;(e[(e.V2NIM_CLEAR_HISTORY_MODE_ALL = 0)] = 'V2NIM_CLEAR_HISTORY_MODE_ALL'), + (e[(e.V2NIM_CLEAR_HISTORY_MODE_LOCAL = 1)] = + 'V2NIM_CLEAR_HISTORY_MODE_LOCAL'), + (e[(e.V2NIM_CLEAR_HISTORY_MODE_LOCAL_IRREPARABLY = 2)] = + 'V2NIM_CLEAR_HISTORY_MODE_LOCAL_IRREPARABLY') + })(k || (k = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_REVOKE_TYPE_UNDEFINED = 0)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_UNDEFINED'), + (e[(e.V2NIM_MESSAGE_REVOKE_TYPE_P2P_BOTHWAY = 1)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_P2P_BOTHWAY'), + (e[(e.V2NIM_MESSAGE_REVOKE_TYPE_TEAM_BOTHWAY = 2)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_TEAM_BOTHWAY'), + (e[(e.V2NIM_MESSAGE_REVOKE_TYPE_SUPERTEAM_BOTHWAY = 3)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_SUPERTEAM_BOTHWAY'), + (e[(e.V2NIM_MESSAGE_REVOKE_TYPE_P2P_ONEWAY = 4)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_P2P_ONEWAY'), + (e[(e.V2NIM_MESSAGE_REVOKE_TYPE_TEAM_ONEWAY = 5)] = + 'V2NIM_MESSAGE_REVOKE_TYPE_TEAM_ONEWAY') + })(V || (V = {})), + (function (e) { + ;(e[(e.V2NIM_MESSAGE_PIN_STATE_NOT_PINNED = 0)] = + 'V2NIM_MESSAGE_PIN_STATE_NOT_PINNED'), + (e[(e.V2NIM_MESSAGE_PIN_STATE_PINNED = 1)] = + 'V2NIM_MESSAGE_PIN_STATE_PINNED'), + (e[(e.V2NIM_MESSAGE_PIN_STATE_UPDATED = 2)] = + 'V2NIM_MESSAGE_PIN_STATE_UPDATED') + })(P || (P = {})), + (function (e) { + ;(e[(e.V2NIM_QUICK_COMMENT_STATE_ADD = 1)] = + 'V2NIM_QUICK_COMMENT_STATE_ADD'), + (e[(e.V2NIM_QUICK_COMMENT_STATE_REMOVE = 2)] = + 'V2NIM_QUICK_COMMENT_STATE_REMOVE') + })(L || (L = {})), + (function (e) { + ;(e[(e.V2NIM_CLIENT_ANTISPAM_OPERATE_NONE = 0)] = + 'V2NIM_CLIENT_ANTISPAM_OPERATE_NONE'), + (e[(e.V2NIM_CLIENT_ANTISPAM_OPERATE_REPLACE = 1)] = + 'V2NIM_CLIENT_ANTISPAM_OPERATE_REPLACE'), + (e[(e.V2NIM_CLIENT_ANTISPAM_OPERATE_CLIENT_SHIELD = 2)] = + 'V2NIM_CLIENT_ANTISPAM_OPERATE_CLIENT_SHIELD'), + (e[(e.V2NIM_CLIENT_ANTISPAM_OPERATE_SERVER_SHIELD = 3)] = + 'V2NIM_CLIENT_ANTISPAM_OPERATE_SERVER_SHIELD') + })(D || (D = {})), + (function (e) { + ;(e[(e.V2NIM_SORT_ORDER_DESC = 0)] = 'V2NIM_SORT_ORDER_DESC'), + (e[(e.V2NIM_SORT_ORDER_ASC = 1)] = 'V2NIM_SORT_ORDER_ASC') + })(w || (w = {})), + (function (e) { + ;(e[(e.P2P_DELETE_MSG = 7)] = 'P2P_DELETE_MSG'), + (e[(e.TEAM_DELETE_MSG = 8)] = 'TEAM_DELETE_MSG'), + (e[(e.SUPERTEAM_DELETE_MSG = 12)] = 'SUPERTEAM_DELETE_MSG'), + (e[(e.P2P_ONE_WAY_DELETE_MSG = 13)] = 'P2P_ONE_WAY_DELETE_MSG'), + (e[(e.TEAM_ONE_WAY_DELETE_MSG = 14)] = 'TEAM_ONE_WAY_DELETE_MSG'), + (e[(e.CUSTOM_P2P_MSG = 100)] = 'CUSTOM_P2P_MSG'), + (e[(e.CUSTOM_TEAM_MSG = 101)] = 'CUSTOM_TEAM_MSG'), + (e[(e.CUSTOM_SUPERTEAM_MSG = 103)] = 'CUSTOM_SUPERTEAM_MSG') + })(U || (U = {})), + (function (e) { + ;(e[(e.NIM_MESSAGE_STREAM_STATUS_STREAMING = -1)] = + 'NIM_MESSAGE_STREAM_STATUS_STREAMING'), + (e[(e.NIM_MESSAGE_STREAM_STATUS_NONE = 0)] = + 'NIM_MESSAGE_STREAM_STATUS_NONE'), + (e[(e.NIM_MESSAGE_STREAM_STATUS_PLACEHOLDER = 1)] = + 'NIM_MESSAGE_STREAM_STATUS_PLACEHOLDER'), + (e[(e.NIM_MESSAGE_STREAM_STATUS_CANCEL = 2)] = + 'NIM_MESSAGE_STREAM_STATUS_CANCEL'), + (e[(e.NIM_MESSAGE_AI_STREAM_STATUS_UPDATE = 3)] = + 'NIM_MESSAGE_AI_STREAM_STATUS_UPDATE'), + (e[(e.NIM_MESSAGE_STREAM_STATUS_COMPLETE = 4)] = + 'NIM_MESSAGE_STREAM_STATUS_COMPLETE'), + (e[(e.NIM_MESSAGE_STREAM_STATUS_EXCEPTION = 5)] = + 'NIM_MESSAGE_STREAM_STATUS_EXCEPTION') + })(x || (x = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_MESSAGE_MUTE_MODE_OFF = 0)] = + 'V2NIM_TEAM_MESSAGE_MUTE_MODE_OFF'), + (e[(e.V2NIM_TEAM_MESSAGE_MUTE_MODE_ON = 1)] = + 'V2NIM_TEAM_MESSAGE_MUTE_MODE_ON'), + (e[(e.V2NIM_TEAM_MESSAGE_MUTE_MODE_NORMAL_ON = 2)] = + 'V2NIM_TEAM_MESSAGE_MUTE_MODE_NORMAL_ON') + })(F || (F = {})), + (function (e) { + ;(e[(e.V2NIM_P2P_MESSAGE_MUTE_MODE_OFF = 0)] = + 'V2NIM_P2P_MESSAGE_MUTE_MODE_OFF'), + (e[(e.V2NIM_P2P_MESSAGE_MUTE_MODE_ON = 1)] = + 'V2NIM_P2P_MESSAGE_MUTE_MODE_ON') + })(B || (B = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_ALL = 0)] = + 'V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_ALL'), + (e[(e.V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_NORMAL = 1)] = + 'V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_NORMAL'), + (e[(e.V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_MANAGER = 2)] = + 'V2NIM_TEAM_MEMBER_ROLE_QUERY_TYPE_MANAGER') + })($ || ($ = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_TYPE_INVALID = 0)] = 'V2NIM_TEAM_TYPE_INVALID'), + (e[(e.V2NIM_TEAM_TYPE_ADVANCED = 1)] = 'V2NIM_TEAM_TYPE_ADVANCED'), + (e[(e.V2NIM_TEAM_TYPE_SUPER = 2)] = 'V2NIM_TEAM_TYPE_SUPER') + })(G || (G = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_JOIN_MODE_FREE = 0)] = 'V2NIM_TEAM_JOIN_MODE_FREE'), + (e[(e.V2NIM_TEAM_JOIN_MODE_APPLY = 1)] = 'V2NIM_TEAM_JOIN_MODE_APPLY'), + (e[(e.V2NIM_TEAM_JOIN_MODE_INVITE = 2)] = 'V2NIM_TEAM_JOIN_MODE_INVITE') + })(j || (j = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_AGREE_MODE_AUTH = 0)] = 'V2NIM_TEAM_AGREE_MODE_AUTH'), + (e[(e.V2NIM_TEAM_AGREE_MODE_NO_AUTH = 1)] = + 'V2NIM_TEAM_AGREE_MODE_NO_AUTH') + })(q || (q = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_INVITE_MODE_MANAGER = 0)] = + 'V2NIM_TEAM_INVITE_MODE_MANAGER'), + (e[(e.V2NIM_TEAM_INVITE_MODE_ALL = 1)] = 'V2NIM_TEAM_INVITE_MODE_ALL') + })(H || (H = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER = 0)] = + 'V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER'), + (e[(e.V2NIM_TEAM_UPDATE_INFO_MODE_ALL = 1)] = + 'V2NIM_TEAM_UPDATE_INFO_MODE_ALL') + })(Y || (Y = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_CHAT_BANNED_MODE_UNBAN = 0)] = + 'V2NIM_TEAM_CHAT_BANNED_MODE_UNBAN'), + (e[(e.V2NIM_TEAM_CHAT_BANNED_MODE_BANNED_NORMAL = 1)] = + 'V2NIM_TEAM_CHAT_BANNED_MODE_BANNED_NORMAL'), + (e[(e.V2NIM_TEAM_CHAT_BANNED_MODE_BANNED_ALL = 3)] = + 'V2NIM_TEAM_CHAT_BANNED_MODE_BANNED_ALL') + })(K || (K = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER = 0)] = + 'V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER'), + (e[(e.V2NIM_TEAM_UPDATE_EXTENSION_MODE_ALL = 1)] = + 'V2NIM_TEAM_UPDATE_EXTENSION_MODE_ALL') + })(W || (W = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_MEMBER_ROLE_NORMAL = 0)] = + 'V2NIM_TEAM_MEMBER_ROLE_NORMAL'), + (e[(e.V2NIM_TEAM_MEMBER_ROLE_OWNER = 1)] = + 'V2NIM_TEAM_MEMBER_ROLE_OWNER'), + (e[(e.V2NIM_TEAM_MEMBER_ROLE_MANAGER = 2)] = + 'V2NIM_TEAM_MEMBER_ROLE_MANAGER') + })(J || (J = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION = 0)] = + 'V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_TYPE_REJECT_APPLICATION = 1)] = + 'V2NIM_TEAM_JOIN_ACTION_TYPE_REJECT_APPLICATION'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION = 2)] = + 'V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_TYPE_REJECT_INVITATION = 3)] = + 'V2NIM_TEAM_JOIN_ACTION_TYPE_REJECT_INVITATION') + })(z || (z = {})), + (function (e) { + ;(e[(e.V2NIM_TEAM_JOIN_ACTION_STATUS_INIT = 0)] = + 'V2NIM_TEAM_JOIN_ACTION_STATUS_INIT'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_STATUS_AGREED = 1)] = + 'V2NIM_TEAM_JOIN_ACTION_STATUS_AGREED'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_STATUS_REJECTED = 2)] = + 'V2NIM_TEAM_JOIN_ACTION_STATUS_REJECTED'), + (e[(e.V2NIM_TEAM_JOIN_ACTION_STATUS_EXPIRED = 3)] = + 'V2NIM_TEAM_JOIN_ACTION_STATUS_EXPIRED') + })(X || (X = {})), + (function (e) { + ;(e[(e.teamApply = 0)] = 'teamApply'), + (e[(e.teamApplyReject = 1)] = 'teamApplyReject'), + (e[(e.teamInvite = 2)] = 'teamInvite'), + (e[(e.teamInviteReject = 3)] = 'teamInviteReject'), + (e[(e.tlistUpdate = 4)] = 'tlistUpdate'), + (e[(e.superTeamApply = 15)] = 'superTeamApply'), + (e[(e.superTeamApplyReject = 16)] = 'superTeamApplyReject'), + (e[(e.superTeamInvite = 17)] = 'superTeamInvite'), + (e[(e.superTeamInviteReject = 18)] = 'superTeamInviteReject') + })(Q || (Q = {})), + (function (e) { + ;(e[(e.V2NIM_AI_MODEL_TYPE_UNKNOW = 0)] = 'V2NIM_AI_MODEL_TYPE_UNKNOW'), + (e[(e.V2NIM_AI_MODEL_TYPE_QWEN = 1)] = 'V2NIM_AI_MODEL_TYPE_QWEN'), + (e[(e.V2NIM_AI_MODEL_TYPE_AZURE = 2)] = 'V2NIM_AI_MODEL_TYPE_AZURE'), + (e[(e.V2NIM_AI_MODEL_TYPE_PRIVATE = 3)] = 'V2NIM_AI_MODEL_TYPE_PRIVATE') + })(Z || (Z = {})), + (function (e) { + ;(e[(e.V2NIM_AI_MODEL_STREAM_CALL_STATUS_NONE = 0)] = + 'V2NIM_AI_MODEL_STREAM_CALL_STATUS_NONE'), + (e[(e.V2NIM_AI_MODEL_STREAM_CALL_STATUS_CANCEL = 2)] = + 'V2NIM_AI_MODEL_STREAM_CALL_STATUS_CANCEL'), + (e[(e.V2NIM_AI_MODEL_STREAM_CALL_STATUS_COMPLETE = 4)] = + 'V2NIM_AI_MODEL_STREAM_CALL_STATUS_COMPLETE'), + (e[(e.V2NIM_AI_MODEL_STREAM_CALL_STATUS_EXCEPTION = 5)] = + 'V2NIM_AI_MODEL_STREAM_CALL_STATUS_EXCEPTION') + })(ee || (ee = {})), + (function (e) { + ;(e.V2NIM_AI_MODEL_ROLE_TYPE_SYSTEM = 'system'), + (e.V2NIM_AI_MODEL_ROLE_TYPE_USER = 'user'), + (e.V2NIM_AI_MODEL_ROLE_TYPE_ASSISTANT = 'assistant') + })(te || (te = {})), + (function (e) { + ;(e[(e.V2NIM_SIGNALLING_EVENT_TYPE_UNKNOWN = 0)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_UNKNOWN'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_CLOSE = 1)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_CLOSE'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_JOIN = 2)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_JOIN'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_INVITE = 3)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_INVITE'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_CANCEL_INVITE = 4)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_CANCEL_INVITE'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_REJECT = 5)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_REJECT'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_ACCEPT = 6)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_ACCEPT'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_LEAVE = 7)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_LEAVE'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_CONTROL = 8)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_CONTROL'), + (e[(e.V2NIM_SIGNALLING_EVENT_TYPE_KICK = 9)] = + 'V2NIM_SIGNALLING_EVENT_TYPE_KICK') + })(ie || (ie = {})), + (function (e) { + ;(e[(e.V2NIM_SIGNALLING_CHANNEL_TYPE_AUDIO = 1)] = + 'V2NIM_SIGNALLING_CHANNEL_TYPE_AUDIO'), + (e[(e.V2NIM_SIGNALLING_CHANNEL_TYPE_VIDEO = 2)] = + 'V2NIM_SIGNALLING_CHANNEL_TYPE_VIDEO'), + (e[(e.V2NIM_SIGNALLING_CHANNEL_TYPE_CUSTOM = 3)] = + 'V2NIM_SIGNALLING_CHANNEL_TYPE_CUSTOM') + })(re || (re = {})), + (function (e) { + ;(e[(e.V2NIM_USER_STATUS_TYPE_UNKNOWN = 0)] = + 'V2NIM_USER_STATUS_TYPE_UNKNOWN'), + (e[(e.V2NIM_USER_STATUS_TYPE_LOGIN = 1)] = + 'V2NIM_USER_STATUS_TYPE_LOGIN'), + (e[(e.V2NIM_USER_STATUS_TYPE_LOGOUT = 2)] = + 'V2NIM_USER_STATUS_TYPE_LOGOUT'), + (e[(e.V2NIM_USER_STATUS_TYPE_DISCONNECT = 3)] = + 'V2NIM_USER_STATUS_TYPE_DISCONNECT') + })(se || (se = {})) +var ae = { + V2NIM_ERROR_CODE_UNKNOWN: { code: 0, message: 'unknown error' }, + V2NIM_ERROR_CODE_SUCCESS: { code: 200, message: 'success' }, + V2NIM_ERROR_CODE_HANDSHAKE: { code: 201, message: 'handshake error' }, + V2NIM_ERROR_CODE_REQUEST_TEMPERARY_FORBIDDEN: { + code: 398, + message: 'request temprary forbidden', + }, + V2NIM_ERROR_CODE_SERVER_UNIT_ERROR: { + code: 399, + message: 'server unit error', + }, + V2NIM_ERROR_CODE_FORBIDDEN: { code: 403, message: 'forbidden' }, + V2NIM_ERROR_CODE_NOT_FOUND: { code: 404, message: 'not found' }, + V2NIM_ERROR_CODE_PARAMETER_ERROR: { code: 414, message: 'parameter error' }, + V2NIM_ERROR_CODE_RATE_LIMIT_REACHED: { + code: 416, + message: 'rate limit reached', + }, + V2NIM_ERROR_CODE_MULTI_LOGIN_FORBIDDEN: { + code: 417, + message: 'multi login forbidden', + }, + V2NIM_ERROR_CODE_SERVER_INTERNAL_ERROR: { + code: 500, + message: 'server internal error', + }, + V2NIM_ERROR_CODE_SERVER_BUSY: { code: 503, message: 'server busy' }, + V2NIM_ERROR_CODE_APP_UNREACHABLE: { + code: 511, + message: 'app server unreachable', + }, + V2NIM_ERROR_CODE_SERVICE_UNAVAILABLE: { + code: 514, + message: 'service unavailable', + }, + V2NIM_ERROR_CODE_PROTOCOL_BLACKHOLE_FILTERED: { + code: 599, + message: 'protocol filtered by blackhole rule', + }, + V2NIM_ERROR_CODE_NO_PERMISSION: { + code: 997, + message: 'appid has no permission to call the protocol', + }, + V2NIM_ERROR_CODE_UNPACK_ERROR: { code: 998, message: 'unpack error' }, + V2NIM_ERROR_CODE_PACK_ERROR: { code: 999, message: 'pack error' }, + V2NIM_ERROR_CODE_IM_DISABLED: { code: 101301, message: 'IM disabled' }, + V2NIM_ERROR_CODE_SERVICE_ADDRESS_INVALID: { + code: 101302, + message: 'service address invalid', + }, + V2NIM_ERROR_CODE_APPKEY_NOT_EXIST: { + code: 101303, + message: 'appkey not exist', + }, + V2NIM_ERROR_CODE_BUNDLEID_CHECK_FAILED: { + code: 101304, + message: 'bundleid check failed', + }, + V2NIM_ERROR_CODE_APPKEY_BLOCKED: { + code: 101403, + message: 'appkey blocked', + }, + V2NIM_ERROR_CODE_INVALID_TOKEN: { code: 102302, message: 'invalid token' }, + V2NIM_ERROR_CODE_ROBOT_NOT_ALLOWED: { + code: 102303, + message: 'robot not allowed', + }, + V2NIM_ERROR_CODE_ACCOUNT_NOT_EXIST: { + code: 102404, + message: 'account not exist', + }, + V2NIM_ERROR_CODE_ACCOUNT_CHAT_BANNED: { + code: 102421, + message: 'account chat banned', + }, + V2NIM_ERROR_CODE_ACCOUNT_BANNED: { + code: 102422, + message: 'account banned', + }, + V2NIM_ERROR_CODE_ACCOUNT_IN_BLOCK_LIST: { + code: 102426, + message: 'account in block list', + }, + V2NIM_ERROR_CODE_USER_PROFILE_NOT_EXIST: { + code: 103404, + message: 'user profile not exist', + }, + V2NIM_ERROR_CODE_USER_PROFILE_HIT_ANTISPAM: { + code: 103451, + message: 'user profile hit antispam', + }, + V2NIM_ERROR_CODE_PEER_FRIEND_LIMIT: { + code: 104301, + message: 'peer friend limit', + }, + V2NIM_ERROR_CODE_FRIEND_APPLICATION_NOT_EXIST: { + code: 104302, + message: 'friend application not exist', + }, + V2NIM_ERROR_CODE_FRIEND_NOT_EXIST: { + code: 104404, + message: 'friend not exist', + }, + V2NIM_ERROR_CODE_FRIEND_ALREADY_EXIST: { + code: 104405, + message: 'friend already exist', + }, + V2NIM_ERROR_CODE_SELF_FRIEND_OPERATION_NOT_ALLOWED: { + code: 104429, + message: 'self friend operation not allowed', + }, + V2NIM_ERROR_CODE_FRIEND_LIMIT: { code: 104435, message: 'friend limit' }, + V2NIM_ERROR_CODE_FRIEND_OPERATION_RATE_LIMIT: { + code: 104449, + message: 'friend operation rate limit', + }, + V2NIM_ERROR_CODE_FRIEND_HIT_ANTISPAM: { + code: 104451, + message: 'friend hit antispam', + }, + V2NIM_ERROR_CODE_SELF_MUTE_OPERATION_NOT_ALLOWED: { + code: 105429, + message: 'self mute operation not allowed', + }, + V2NIM_ERROR_CODE_MUTE_LIST_LIMIT: { + code: 105435, + message: 'mute list limit', + }, + V2NIM_ERROR_CODE_SELF_BLOCK_LIST_OPERATION_NOT_ALLOWED: { + code: 106429, + message: 'self block list operation not allowed', + }, + V2NIM_ERROR_CODE_BLOCK_LIST_LIMIT: { + code: 106435, + message: 'block list limit', + }, + V2NIM_ERROR_CODE_REVOKE_THIRD_PARTY_MESSAGE_NOT_ALLOWED: { + code: 107301, + message: 'revoke third party message not allowed', + }, + V2NIM_ERROR_CODE_SHORT_TO_LONG_URL_FAILED: { + code: 107307, + message: 'short to long URL failed', + }, + V2NIM_ERROR_CODE_URL_INVALID: { code: 107308, message: 'URL invalid' }, + V2NIM_ERROR_CODE_DURATION_OUT_OF_RANGE: { + code: 107309, + message: 'duration out of range', + }, + V2NIM_ERROR_CODE_GET_FILE_META_INFO_FAILED: { + code: 107310, + message: 'get file meta info failed', + }, + V2NIM_ERROR_CODE_AUDIO_FILE_SIZE_LIMIT: { + code: 107311, + message: 'audio file size limit', + }, + V2NIM_ERROR_CODE_VOICE_TO_TEXT_TIMEOUT: { + code: 107312, + message: 'voice to text timeout', + }, + V2NIM_ERROR_CODE_VOICE_TO_TEXT_FAILED: { + code: 107313, + message: 'voice to text failed', + }, + V2NIM_ERROR_CODE_REVOKE_EXCEED_TIME_LIMIT: { + code: 107314, + message: 'revoke message exceed time limit', + }, + V2NIM_ERROR_CODE_REVOKE_MESSAGE_NOT_ALLOWED: { + code: 107315, + message: 'revoke specific message not allowed', + }, + V2NIM_ERROR_CODE_FORCE_PUSH_LIST_LIMIT: { + code: 107316, + message: 'force push list limit', + }, + V2NIM_ERROR_CODE_TEAM_MESSAGE_RECEIPT_RATE_LIMIT: { + code: 107317, + message: 'team message receipt rate limit', + }, + V2NIM_ERROR_CODE_SNAPSHOT_NOT_EXIST: { + code: 107318, + message: 'snapshot not exist', + }, + V2NIM_ERROR_CODE_PIN_LIMIT: { code: 107319, message: 'pin limit' }, + V2NIM_ERROR_CODE_PIN_NOT_EXIST: { code: 107320, message: 'pin not exist' }, + V2NIM_ERROR_CODE_QUICK_COMMENT_LIMIT: { + code: 107321, + message: 'quick comment limit', + }, + V2NIM_ERROR_CODE_PIN_ALREADY_EXIST: { + code: 107322, + message: 'pin already exist', + }, + V2NIM_ERROR_CODE_VOICE_TO_TEXT_FUNCTION_DISABLED: { + code: 107333, + message: 'voice to text function disabled', + }, + V2NIM_ERROR_CODE_CLOUD_SEARCH_FUNCTION_DISABLED: { + code: 107334, + message: 'cloud search function disabled', + }, + V2NIM_ERROR_CODE_ONE_WAY_DELETE_FUNCTION_DISABLED: { + code: 107335, + message: 'one-way delete function disabled', + }, + V2NIM_ERRPR_CODE_ONEWAY_DELETION_NOT_ALLOW_FOR_TARGET_MESSAGES: { + code: 107338, + message: 'one-way deletion is not allowed for target messages', + }, + V2NIM_ERRPR_CODE_SENDER_CANNOT_INCLUDED_IN_TARGET_LIST: { + code: 107339, + message: 'The message sender cannot be included in the target list', + }, + V2NIM_ERROR_CODE_ROBOT_CANNOT_SEND_TARGET_MESSAGE: { + code: 107340, + message: 'Robot can not send target message', + }, + V2NIM_ERROR_CODE_PIN_TARGET_MESSAGE_NOT_ALLOWED: { + code: 107345, + message: 'Pin target message is not allowed', + }, + V2NIM_ERROR_CODE_TARGET_MESSAGE_NOT_ALLOWED_REPLY: { + code: 107346, + message: 'Target message not allowed reply', + }, + V2NIM_ERROR_CODE_TARGET_MESSAGE_NOT_ALLOWED_QUICK_COMMENT: { + code: 107347, + message: 'Target message not allowed quick comment', + }, + V2NIM_ERROR_CODE_REVOKE_MESSAGE_TO_SELF_NOT_ALLOWED: { + code: 107429, + message: 'revoke message to self not allowed', + }, + V2NIM_ERROR_CODE_APP_CHAT_BANNED: { + code: 107410, + message: 'app chat banned', + }, + V2NIM_ERROR_CODE_QUICK_COMMENT_FUNCTION_DISABLED: { + code: 107326, + message: 'quick comment function disabled', + }, + V2NIM_ERROR_CODE_PIN_FUNCTION_DISABLED: { + code: 107327, + message: 'PIN function disabled', + }, + V2NIM_ERROR_CODE_TEAM_READ_RECEIPT_FUNCTION_DISABLED: { + code: 107324, + message: 'read receipt for team messages function disabled', + }, + V2NIM_ERROR_CODE_P2P_READ_RECEIPT_FUNCTION_DISABLED: { + code: 107325, + message: 'read receipt for p2p messages function disabled', + }, + V2NIM_ERROR_CODE_RATE_LIMIT_FOR_MESSAGING_REACHED: { + code: 107323, + message: 'rate limit for messaging reached', + }, + V2NIM_ERROR_CODE_MESSAGE_HIT_ANTISPAM: { + code: 107451, + message: 'message hit antispam', + }, + V2NIM_ERROR_CODE_MESSAGE_NOT_EXIST: { + code: 107404, + message: 'message not exist', + }, + V2NIM_ERROR_CODE_UNSENDING_MESSAGE_EXPIRED: { + code: 107406, + message: 'unsending message expired', + }, + V2NIM_ERROR_CODE_TEAM_MARK_READ_FAILED: { + code: 107302, + message: + 'sending message failed for marking message read failed for too many team members', + }, + V2NIM_ERROR_CODE_SENDER_OR_MANAGER_PERMISSION_ONLY_REVOKE: { + code: 107303, + message: 'only sender or manager can revoke message', + }, + V2NIM_ERROR_CODE_DELETE_SELF_MESSAGE_NOT_ALLOWED: { + code: 107328, + message: 'delete self message not allowed', + }, + V2NIM_ERROR_CODE_NOT_CHATBOT_ACCOUNT: { + code: 107329, + message: 'is not chatbot account', + }, + V2NIM_ERROR_CODE_MESSAGE_SENSE_REQUIRED: { + code: 107330, + message: 'sender or receiver must sense message', + }, + V2NIM_ERROR_CODE_HIGH_PRIORITY_MESSAGE_RATE_LIMIT: { + code: 107304, + message: 'rate limit of high-priority messages exceeded', + }, + ACK_MESSAGE_BE_HIGH_PRIORITY: { + code: 107305, + message: 'ack message should be high-priority', + }, + V2NIM_ERROR_CODE_DUPLICATE_CLIENT_MESSAGE_ID: { + code: 107306, + message: 'duplicate client message ID', + }, + V2NIM_ERROR_CODE_INVALID_TIME_RANGE: { + code: 107439, + message: 'invalid time range', + }, + V2NIM_ERROR_CODE_NOT_ADVANCED_TEAM: { + code: 108302, + message: 'not advanced team', + }, + V2NIM_ERROR_CODE_TEAM_MANAGER_LIMIT: { + code: 108303, + message: 'team manager limit', + }, + V2NIM_ERROR_CODE_JOINED_TEAM_LIMIT: { + code: 108305, + message: 'joined team limit', + }, + V2NIM_ERROR_CODE_TEAM_NORMAL_MEMBER_CHAT_BANNED: { + code: 108306, + message: 'team normal member chat banned', + }, + V2NIM_ERROR_CODE_INVITED_ACCOUNT_NOT_FRIEND: { + code: 108307, + message: 'invited account not friend', + }, + V2NIM_ERROR_CODE_REJECT_ALL_TEAM_APPLICATIONS: { + code: 108308, + message: 'reject all team applications', + }, + V2NIM_ERROR_CODE_TARGETING_MESSAGE_FOR_TEAM_DISABLED: { + code: 108318, + message: 'Targeting messages for group chat is disabled', + }, + V2NIM_ERROR_CODE_INCLUSIVE_AS_FALSE_NOT_ALLOWED_FOR_SUPER_TEAM: { + code: 108319, + message: 'Setting "inclusive" to false for super teams is not allowed', + }, + V2NIM_ERROR_CODE_CANNOT_MAKE_SUPER_TEAM_MESSAGE_VISIBLE_TO_NEW_MEMBERS: { + code: 108320, + message: + 'Cannot make super team targeted messages visible to new members', + }, + V2NIM_ERROR_CODE_CANNOT_ALLOW_TARGETED_MESSAGES_INCLUSIVE_TO_NEW_MEMBERS: { + code: 108321, + message: 'Cannot allow targeted messages inclusive to new members', + }, + V2NIM_ERROR_CODE_TEAM_NOT_EXIST: { + code: 108404, + message: 'team not exist', + }, + V2NIM_ERROR_CODE_TEAM_ALREADY_CHAT_BANNED: { + code: 108420, + message: 'team already chat banned', + }, + V2NIM_ERROR_CODE_ALL_TEAM_MEMBER_CHAT_BANNED: { + code: 108423, + message: 'all team member chat banned', + }, + V2NIM_ERROR_CODE_EXTENDED_SUPER_TEAM_LIMIT: { + code: 108434, + message: 'extended super team limit', + }, + V2NIM_ERROR_CODE_CREATED_TEAM_LIMIT: { + code: 108435, + message: 'created team limit', + }, + V2NIM_ERROR_CODE_TEAM_INVITATION_LIMIT: { + code: 108437, + message: 'team invitation limit', + }, + V2NIM_ERROR_CODE_TEAM_HIT_ANTISPAM: { + code: 108451, + message: 'team hit antispam', + }, + V2NIM_ERROR_CODE_EXTENDED_SUPER_TEAM_LIMIT_NOT_CONFIGURED: { + code: 108304, + message: 'extended super team limit not configured', + }, + V2NIM_ERROR_CODE_SUPER_TEAM_SERVICE_DISABLED: { + code: 108311, + message: 'super team service disabled', + }, + V2NIM_ERROR_CODE_TEAM_READ_RECEIPT_RECORD_NOT_FOUND: { + code: 108301, + message: 'read receipt record for the team message not found', + }, + V2NIM_ERROR_CODE_NOT_MANAGER: { + code: 108430, + message: 'unable to assign owner manager', + }, + V2NIM_ERROR_CODE_ONLINE_MEMBER_COUNT_DISABLED: { + code: 108406, + message: 'number of online users service disabled', + }, + V2NIM_ERROR_CODE_TRANSFER_DISABLED: { + code: 108310, + message: 'unable to transfer the ownership to owner', + }, + V2NIM_ERROR_CODE_CREATE_TEAM_DISABLED: { + code: 108309, + message: 'unable to create team with more than %s people', + }, + V2NIM_ERROR_CODE_EXTENDED_SUPER_TEAM_CREATE_FAILED: { + code: 108313, + message: + '/ extended super team creation failed,use open api to create the team', + }, + V2NIM_ERROR_CODE_TEAM_MESSAGE_READ_RECEIPT_DISABLED: { + code: 108312, + message: 'read receipt for team messages function disabled', + }, + V2NIM_ERROR_CODE_RETRY: { + code: 108449, + message: 'an error occurred, try again', + }, + V2NIM_ERROR_CODE_CHAT_BAN_LIST_CONTAIN_NOT_TEAM_MEMBER: { + code: 109301, + message: 'list of chat banned users contains non team members', + }, + V2NIM_ERROR_CODE_CHAT_BAN_LIST_CONTAIN_OPERATOR: { + code: 109303, + message: 'list of chat banned users contains the operator', + }, + V2NIM_ERROR_CODE_CHAT_BAN_LIST_CONTAIN_TEAM_OWNER: { + code: 109304, + message: 'list of chat banned users contains the team owner', + }, + V2NIM_ERROR_CODE_OPERATION_ON_TEAM_MANAGER_NOT_ALLOWED: { + code: 109305, + message: 'operation on team manager not allowed', + }, + V2NIM_ERROR_CODE_NO_TEAM_INVITE_PERMISSION: { + code: 109306, + message: 'no team invite permission', + }, + V2NIM_ERROR_CODE_TEAM_OWNER_QUIT_NOT_ALLOWED: { + code: 109307, + message: 'team owner quit not allowed', + }, + V2NIM_ERROR_CODE_TEAM_OWNER_IN_KICK_LIST: { + code: 109308, + message: 'list of kicked user contains the team owner', + }, + V2NIM_ERROR_CODE_INVITE_ROBOT_ACCOUNT_NOT_ALLOWED: { + code: 109309, + message: 'invite robot account not allowed', + }, + V2NIM_ERROR_CODE_KICK_OPERATOR_NOT_ALLOWED: { + code: 109310, + message: 'kick operator not allowed', + }, + V2NIM_ERROR_CODE_TEAM_MEMBER_ALREADY_EXIST: { + code: 109311, + message: 'team member already exist', + }, + V2NIM_ERROR_CODE_TEAM_INVITATION_OR_APPLICATION_NOT_EXIST: { + code: 109313, + message: 'team invitation or application not exist', + }, + V2NIM_ERROR_CODE_OPERATION_ON_TEAM_OWNER_NOT_ALLOWED: { + code: 109314, + message: 'operation on team owner not allowed', + }, + V2NIM_ERROR_CODE_FORCED_PUSH_LIST_INCLUDES_NON_TARGETED_ACCOUNTS: { + code: 109318, + message: 'The forced push list includes non-targeted accounts', + }, + V2NIM_ERROR_CODE_TEAM_MEMBER_NOT_EXIST: { + code: 109404, + message: 'team member not exist', + }, + V2NIM_ERROR_CODE_TEAM_MEMBER_CHAT_BANNED: { + code: 109424, + message: 'team member chat banned', + }, + V2NIM_ERROR_CODE_TEAM_OWNER_OPERATION_PERMISSION_REQUIRED: { + code: 109427, + message: 'team owner operation permission required', + }, + V2NIM_ERROR_CODE_TEAM_OWNER_OR_MANAGER_OPERATION_PERMISSION_REQUIRED: { + code: 109432, + message: 'team owner or manager operation permission required', + }, + V2NIM_ERROR_CODE_TEAM_MEMBER_CONCURRENT_OPERATION_FAILED: { + code: 109449, + message: 'team member concurrent operation failed', + }, + V2NIM_ERROR_CODE_TEAM_MEMBER_HIT_ANTISPAM: { + code: 109451, + message: 'team member hit antispam', + }, + V2NIM_ERROR_CODE_CONVERSATION_AND_ACCOUNT_MISMATCH: { + code: 110302, + message: 'conversation and account mismatch', + }, + V2NIM_ERROR_CODE_CONVERSATION_STICK_TOP_LIMIT: { + code: 110303, + message: 'conversation stick top limit', + }, + V2NIM_ERROR_CODE_CONVERSATION_BELONGED_GROUP_LIMIT: { + code: 110304, + message: 'conversation belonged group limit', + }, + V2NIM_ERROR_CODE_CONVERSATION_IS_NOT_STICK_TOP: { + code: 110305, + message: 'conversation is not stick top', + }, + V2NIM_ERROR_CODE_STICK_TOP_DISABLED: { + code: 110306, + message: 'conversation stick top disabled', + }, + V2NIM_ERROR_CODE_CONVERSATION_NOT_EXIST: { + code: 110404, + message: 'conversation not exist', + }, + V2NIM_ERROR_CODE_CHATROOM_LINK_UNAVAILABLE: { + code: 113304, + message: 'chatroom link unavailable', + }, + V2NIM_ERROR_CODE_IM_CONNECTION_ABNORMAL: { + code: 113305, + message: 'IM connection abnormal', + }, + V2NIM_ERROR_CODE_CHATROOM_NOT_EXIST: { + code: 113404, + message: 'chatroom not exist', + }, + V2NIM_ERROR_CODE_CHATROOM_CLOSED: { + code: 113406, + message: 'chatroom closed', + }, + V2NIM_ERROR_CODE_CHATROOM_REPEATED_OPERATION: { + code: 113409, + message: 'chatroom repeated operation', + }, + V2NIM_ERROR_CODE_CHATROOM_DISABLED: { + code: 113410, + message: 'chatroom disabled', + }, + V2NIM_ERROR_CODE_ALL_CHATROOM_MEMBER_CHAT_BANNED: { + code: 113423, + message: 'all chatroom member chat banned', + }, + V2NIM_ERROR_CODE_CHATROOM_HIT_ANTISPAM: { + code: 113451, + message: 'chatroom hit antispam', + }, + V2NIM_ERROR_CODE_ANONYMOUS_MEMBER_FORBIDDEN: { + code: 114303, + message: 'anonymous member forbidden', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_NOT_EXIST: { + code: 114404, + message: 'chatroom member not exist', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_REPEATED_OPERATION: { + code: 114405, + message: 'chatroom member repeated operation', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_CHAT_BANNED: { + code: 114421, + message: 'chatroom member chat banned', + }, + V2NIM_ERROR_CODE_ACCOUNT_IN_CHATROOM_BLOCK_LIST: { + code: 114426, + message: 'account in chatroom block list', + }, + V2NIM_ERROR_CODE_CHATROOM_OWNER_OPERATION_PERMISSION_REQUIRED: { + code: 114427, + message: 'chatroom owner operation permission required', + }, + V2NIM_ERROR_CODE_SELF_IN_CHATROOM_MEMBER_OPERATION_LIST: { + code: 114429, + message: 'self in chatroom member operation list', + }, + V2NIM_ERROR_CODE_CHATROOM_OWNER_OR_MANAGER_OPERATION_PERMISSION_REQUIRED: { + code: 114432, + message: 'chatroom owner or manager operation permission required', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_LIMIT: { + code: 114437, + message: 'chatroom member limit', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_CONCURRENT_OPERATION_FAILED: { + code: 114449, + message: 'chatroom member concurrent operation failed', + }, + V2NIM_ERROR_CODE_CHATROOM_MEMBER_HIT_ANTISPAM: { + code: 114451, + message: 'chatroom member hit antispam', + }, + V2NIM_ERROR_CODE_CONVERSATION_GROUP_NOT_EXIST: { + code: 116404, + message: 'conversation group not exist', + }, + V2NIM_ERROR_CODE_CONVERSATION_GROUP_LIMIT: { + code: 116435, + message: 'conversation group limit', + }, + V2NIM_ERROR_CODE_CONVERSATIONS_IN_GROUP_LIMIT: { + code: 116437, + message: 'conversations in group limit', + }, + V2NIM_ERROR_CODE_COLLECTION_LIMIT: { + code: 189301, + message: 'collection limit', + }, + V2NIM_ERROR_CODE_COLLECTION_NOT_EXIST: { + code: 189302, + message: 'collection not exist', + }, + V2NIM_ERROR_CODE_COLLECTION_CONCURRENT_OPERATION_FAILED: { + code: 189449, + message: 'collection concurrent operation failed', + }, + V2NIM_ERROR_CODE_INTERNAL: { code: 190001, message: 'internal error' }, + V2NIM_ERROR_CODE_ILLEGAL_STATE: { code: 190002, message: 'illegal state' }, + V2NIM_ERROR_CODE_MISUSE: { code: 191001, message: 'misuse' }, + V2NIM_ERROR_CODE_CANCELLED: { + code: 191002, + message: 'operation cancelled', + }, + V2NIM_ERROR_CODE_CALLBACK_FAILED: { + code: 191003, + message: 'callback failed', + }, + V2NIM_ERROR_CODE_INVALID_PARAMETER: { + code: 191004, + message: 'invalid parameter', + }, + V2NIM_ERROR_CODE_TIMEOUT: { code: 191005, message: 'timeout' }, + V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST: { + code: 191006, + message: 'resource not exist', + }, + V2NIM_ERROR_CODE_RESOURCE_ALREADY_EXIST: { + code: 191007, + message: 'resource already exist', + }, + V2NIM_ERROR_CODE_CONNECT_FAILED: { + code: 192001, + message: 'connect failed', + }, + V2NIM_ERROR_CODE_CONNECT_TIMEOUT: { + code: 192002, + message: 'connect timeout', + }, + V2NIM_ERROR_CODE_DISCONNECT: { code: 192003, message: 'disconnect' }, + V2NIM_ERROR_CODE_PROTOCOL_TIMEOUT: { + code: 192004, + message: 'protocol timeout', + }, + V2NIM_ERROR_CODE_PROTOCOL_SEND_FAILED: { + code: 192005, + message: 'protocol send failed', + }, + V2NIM_ERROR_CODE_REQUEST_FAILED: { + code: 192006, + message: 'request failed', + }, + V2NIM_ERROR_CODE_FILE_NOT_FOUND: { + code: 194001, + message: 'file not found', + }, + V2NIM_ERROR_CODE_FILE_CREATE_FAILED: { + code: 194002, + message: 'file create failed', + }, + V2NIM_ERROR_CODE_FILE_OPEN_FAILED: { + code: 194003, + message: 'file open failed', + }, + V2NIM_ERROR_CODE_FILE_WRITE_FAILED: { + code: 194004, + message: 'file write failed', + }, + V2NIM_ERROR_CODE_FILE_READ_FAILED: { + code: 194005, + message: 'file read failed', + }, + V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED: { + code: 194006, + message: 'file upload failed', + }, + V2NIM_ERROR_CODE_FILE_DOWNLOAD_FAILED: { + code: 194007, + message: 'file download failed', + }, + V2NIM_ERROR_CODE_CLIENT_ANTISPAM: { + code: 195001, + message: 'client anti-spam', + }, + V2NIM_ERROR_CODE_SERVER_ANTISPAM: { + code: 195002, + message: 'server anti-spam', + }, + V2NIM_ERROR_CODE_STREAM_OUTPUT_STOPPED: { + code: 189318, + message: 'Streaming text response stopped', + }, + V2NIM_ERROR_CODE_STREAM_OUTPUT_GENERATED: { + code: 189319, + message: 'Streaming text response generated', + }, + V2NIM_ERROR_CODE_STREAM_OUTPUT_ABORTED: { + code: 189320, + message: 'Streaming text response aborted due to exception', + }, + V2NIM_ERROR_CODE_INTERRUPTION_REJECTED: { + code: 189321, + message: 'Non-streaming messages cannot be interrupted', + }, + }, + ce = Object.keys(ae), + de = ce.reduce(function (e, t) { + var i = ae[t] + return (e[t] = i.code), e + }, {}), + le = ce.reduce(function (e, t) { + var i = ae[t] + return (e[i.code] = i.message), e + }, {}), + pe = Object.freeze({ + __proto__: null, + V2NIMErrorCode: de, + V2NIMErrorDesc: le, + get V2NIMDataSyncLevel() { + return s + }, + get V2NIMDataSyncType() { + return n + }, + get V2NIMDataSyncState() { + return o + }, + get V2NIMConversationType() { + return a + }, + get V2NIMLastMessageState() { + return c + }, + get V2NIMFriendAddMode() { + return d + }, + get V2NIMFriendAddApplicationType() { + return l + }, + get V2NIMFriendAddApplicationStatus() { + return p + }, + get V2NIMFriendDeletionType() { + return h + }, + get V2NIMFriendVerifyType() { + return u + }, + get V2NIMLoginAuthType() { + return m + }, + get V2NIMLoginStatus() { + return g + }, + get V2NIMLoginClientType() { + return v + }, + get V2NIMKickedOfflineReason() { + return f + }, + get V2NIMLoginClientChange() { + return y + }, + get V2NIMConnectStatus() { + return I + }, + get V2NIMMessageType() { + return S + }, + get V2NIMMessageNotificationType() { + return A + }, + get V2NIMMessageAttachmentUploadState() { + return R + }, + get V2NIMMessageSendingState() { + return O + }, + get V2NIMQueryDirection() { + return b + }, + get V2NIMMessageRevokeType() { + return V + }, + get V2NIMMessagePinState() { + return P + }, + get V2NIMMessageQuickCommentType() { + return L + }, + get V2NIMClientAntispamOperateType() { + return D + }, + get V2NIMSortOrder() { + return w + }, + get V2NIMSystemMessageType() { + return U + }, + get V2NIMMessageAIStreamStatus() { + return M + }, + get V2NIMMessageAIStreamStopOpType() { + return _ + }, + get V2NIMMessageAIRegenOpType() { + return E + }, + get V2NIMMessageAIStatus() { + return T + }, + get V2NIMSearchKeywordMatchType() { + return C + }, + get V2NIMClearHistoryMode() { + return k + }, + get V2NIMMessageStreamStatus() { + return x + }, + get V2NIMTeamMessageMuteMode() { + return F + }, + get V2NIMP2PMessageMuteMode() { + return B + }, + get V2NIMTeamMemberRoleQueryType() { + return $ + }, + get V2NIMTeamType() { + return G + }, + get V2NIMTeamJoinMode() { + return j + }, + get V2NIMTeamAgreeMode() { + return q + }, + get V2NIMTeamInviteMode() { + return H + }, + get V2NIMTeamUpdateInfoMode() { + return Y + }, + get V2NIMTeamChatBannedMode() { + return K + }, + get V2NIMTeamUpdateExtensionMode() { + return W + }, + get V2NIMTeamJoinActionType() { + return z + }, + get V2NIMTeamJoinActionStatus() { + return X + }, + get V2NIMTeamNotificationType() { + return Q + }, + get V2NIMTeamMemberRole() { + return J + }, + get V2NIMAIModelRoleType() { + return te + }, + get V2NIMAIModelType() { + return Z + }, + get V2NIMAIModelStreamCallStatus() { + return ee + }, + get V2NIMSignallingChannelType() { + return re + }, + get V2NIMSignallingEventType() { + return ie + }, + get V2NIMUserStatusType() { + return se + }, + }) +class he extends Error { + constructor(e) { + super(e.desc), + (this.name = 'V2NIMError'), + (this.code = e.code || 0), + (this.desc = e.desc || le[this.code] || ve[this.code] || ''), + (this.message = this.desc), + (this.detail = e.detail || {}) + } + toString() { + var e, + t = `${this.name}\n code: ${this.code}\n message: "${ + this.message + }"\n detail: ${this.detail ? JSON.stringify(this.detail) : ''}` + return ( + (null === (e = null == this ? void 0 : this.detail) || void 0 === e + ? void 0 + : e.rawError) && (t += `\n rawError: ${this.detail.rawError.message}`), + t + ) + } +} +class ue extends he { + constructor(e, t = {}, i) { + super({ + code: de.V2NIM_ERROR_CODE_PARAMETER_ERROR, + detail: { reason: e, rules: i, data: t }, + }), + (this.name = 'validateError'), + (this.message = + this.message + '\n' + JSON.stringify(this.detail, null, 2)), + (this.data = t), + (this.rules = i) + } +} +class me extends he { + constructor(e) { + var t, i, r + super({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: null === (t = e.detail) || void 0 === t ? void 0 : t.reason, + rules: null === (i = e.detail) || void 0 === i ? void 0 : i.rules, + data: null === (r = e.detail) || void 0 === r ? void 0 : r.data, + }, + }), + (this.name = 'ValidateErrorV2') + } +} +class ge extends he { + constructor(e) { + super(Object.assign({ code: 400 }, e)), + (this.desc = this.desc || 'upload file error'), + (this.message = this.desc), + (this.name = 'uploadError') + } +} +var ve = { + 200: null, + 406: null, + 808: null, + 810: null, + 302: 'The user name or password is incorrect.', + 405: 'Parameter length too long', + 408: 'Client request timed out', + 415: 'Client network unavailable', + 422: 'Account disabled', + 508: 'Expiration date', + 509: 'Invalid', + 7101: 'Be pulled black', + 700: 'Partial failure of batch operation', + 801: 'The number of people in the team has reached the upper limit', + 802: 'No permission', + 803: 'The team does not exist or has not changed', + 804: 'The user is not in the team', + 805: 'Team type mismatch', + 806: 'The number of teams created has reached the limit', + 807: 'Team member not valid', + 809: 'Already in the team', + 811: 'The number of accounts in the forced push list exceeds the limit', + 812: 'The team is muted', + 813: 'Due to the limited number of team, some pull people successfully', + 814: 'Disable team message read service', + 815: 'Maximum number of team administrators', + 816: 'Batch operation partial failure', + 9102: 'Channel failure', + 9103: 'This call has been answered / rejected at another end', + 10201: 'Signaling: target NIM client is offline', + 10202: 'Signaling: push is unreachable', + 10404: 'Signaling: channel not exists', + 10405: 'Signaling: channel already exists', + 10406: 'Signaling: member of channel not exists', + 10407: 'Signaling: member of channel already exists', + 10408: 'Signaling: the invitation request does not exist or has expired', + 10409: 'Signaling: the invitation request has been rejected', + 10410: 'Signaling: the invitation request has been accepted', + 10414: 'Signaling: request parameter error', + 10417: 'Signaling: uid conflict', + 10419: 'Signaling: the number of members of channel exceed the limit', + 10420: 'Signaling: member is already in the channel on other client', + 10700: 'Signaling: phased success', + 13002: 'Abnormal chatroom status', + 13003: 'In the blacklist', + 13004: 'In the mute list', + 13006: 'All members are muted, and only the administrator can speak', +} +function fe(e, t) { + return t instanceof RegExp ? '__REGEXP ' + t.toString() : t +} +function ye(e, t = {}, i, r = !1) { + var s = {} + return ( + Object.keys(e).forEach((n) => { + var o = e[n].type, + a = i ? `In ${i}, ` : '' + if (null == t) { + var c = `${a}param is null or undefined` + throw r + ? new me({ + detail: { reason: c, data: { key: n }, rules: 'required' }, + }) + : new ue(c, { key: n }, 'required') + } + if (void 0 === t[n]) { + if (!1 === e[n].required) return void (s[n] = t[n]) + var d = `${a}param '${n}' is required` + throw r + ? new me({ + detail: { reason: d, data: { key: n }, rules: 'required' }, + }) + : new ue(d, { key: n }, 'required') + } + var l = Ie[o] + if (l && !l(t, n, e[n], r)) { + var p = `${a}param '${n}' unexpected`, + h = { key: n, value: t[n] } + throw r + ? new me({ + detail: { reason: p, data: h, rules: JSON.stringify(e[n], fe) }, + }) + : new ue(p, h, JSON.stringify(e[n], fe)) + } + s[n] = t[n] + }), + s + ) +} +var Ie = { + string: function (e, t, i) { + var { allowEmpty: r, max: s, min: n, regExp: o } = i, + a = e[t] + return !( + 'string' != typeof a || + (!1 === r && '' === a) || + ('number' == typeof s && a.length > s) || + ('number' == typeof n && a.length < n) || + ((function (e) { + return '[object RegExp]' === Object.prototype.toString.call(e) + })(o) && + !o.test(a)) + ) + }, + number: function (e, t, i) { + var { min: r, max: s } = i, + n = e[t] + return !( + 'number' != typeof n || + ('number' == typeof r && n < r) || + ('number' == typeof s && n > s) + ) + }, + boolean: function (e, t) { + return 'boolean' == typeof e[t] + }, + file: function (e, t) { + return !0 + }, + enum: function (e, t, i) { + var { values: r } = i, + s = e[t] + return !r || r.indexOf(s) > -1 + }, + jsonstr: function (e, t) { + try { + var i = JSON.parse(e[t]) + return 'object' == typeof i && null !== i + } catch (e) { + return !1 + } + }, + func: function (e, t) { + return 'function' == typeof e[t] + }, + array: function (e, t, i, r = !1) { + var { itemType: s, itemRules: n, rules: o, min: a, max: c, values: d } = i, + l = e[t] + if (!Array.isArray(l)) return !1 + if ('number' == typeof c && l.length > c) return !1 + if ('number' == typeof a && l.length < a) return !1 + if (n) + l.forEach((e, i) => { + ye({ [i]: n }, { [i]: e }, `${t}[${i}]`, r) + }) + else if (o) l.forEach((e, i) => ye(o, e, `${t}[${i}]`, r)) + else if ('enum' === s) { + if ( + d && + (function (e, t) { + return (t = t || []), (e = e || []).filter((e) => -1 === t.indexOf(e)) + })(l, d).length + ) + return !1 + } else if (s && !l.every((e) => typeof e === s)) return !1 + return !0 + }, + object: function (e, t, i, r = !1) { + var { rules: s, allowEmpty: n } = i, + o = e[t] + if ('object' != typeof o || null === o) return !1 + if (s) { + var a = Object.keys(s), + c = Object.keys(o).filter((e) => a.indexOf(e) > -1) + if (!1 === n && 0 === c.length) return !1 + ye(s, o, t, r) + } + return !0 + }, +} +function Me(e, t) { + if (!e) throw new he({ code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE }) + ye( + { + conversationId: { + type: 'string', + allowEmpty: !1, + regExp: new RegExp(`^${e}\\|[1-3]\\|`), + }, + }, + { conversationId: t }, + '', + !0 + ) +} +class _e { + constructor() { + ;(this.timerList = []), + (this.id = 1), + (this.timer = null), + (this.timeout = 0) + } + addTimer(e, t = 0, i = 1) { + var r = new Date().getTime(), + s = this.id + return ( + this.timerList.push({ + id: s, + loop: i, + count: 0, + timeout: r + t, + interval: t, + callback: e, + }), + this.id++, + this.checkTimer(r), + s + ) + } + checkTimer(e = new Date().getTime()) { + if ( + (this.removeFinished(), 0 !== this.timerList.length || null == this.timer) + ) { + var t = 0 + for (var i of this.timerList) + (0 === t || t > i.timeout) && (t = i.timeout) + 0 !== this.timerList.length && + (null === this.timer || t < this.timeout || this.timeout < e) && + ((this.timer = setTimeout(this.nowTime.bind(this), t - e)), + (this.timeout = t)) + } + } + nowTime() { + var e = new Date().getTime() + for (var t of this.timerList) + e >= t.timeout && (t.callback(), t.count++, (t.timeout = e + t.interval)) + this.clerTime(), this.checkTimer(e) + } + clerTime() { + null !== this.timer && (clearTimeout(this.timer), (this.timer = null)) + } + deleteTimer(e) { + for (var t = this.timerList.length - 1; t >= 0; t--) + this.timerList[t].id === e && this.timerList.splice(t, 1) + } + removeFinished() { + for (var e = this.timerList.length - 1; e >= 0; e--) { + var t = this.timerList[e] + t.loop >= 0 && t.count >= t.loop && this.timerList.splice(e, 1) + } + } + destroy() { + this.clerTime(), (this.timerList = []), (this.id = 1), (this.timer = null) + } +} +function Ee(e, t) { + var i = {} + for (var r in e) + Object.prototype.hasOwnProperty.call(e, r) && + t.indexOf(r) < 0 && + (i[r] = e[r]) + if (null != e && 'function' == typeof Object.getOwnPropertySymbols) { + var s = 0 + for (r = Object.getOwnPropertySymbols(e); s < r.length; s++) + t.indexOf(r[s]) < 0 && + Object.prototype.propertyIsEnumerable.call(e, r[s]) && + (i[r[s]] = e[r[s]]) + } + return i +} +function Te(e, t, i, r) { + return new (i || (i = Promise))(function (s, n) { + function o(e) { + try { + c(r.next(e)) + } catch (e) { + n(e) + } + } + function a(e) { + try { + c(r.throw(e)) + } catch (e) { + n(e) + } + } + function c(e) { + e.done + ? s(e.value) + : (function (e) { + return e instanceof i + ? e + : new i(function (t) { + t(e) + }) + })(e.value).then(o, a) + } + c((r = r.apply(e, t || [])).next()) + }) +} +function Se(e) { + return ( + null != e && + 'object' == typeof e && + Object.getPrototypeOf(e) == Object.prototype + ) +} +function Ce(e, t) { + var i = Se(e) || Array.isArray(e), + r = Se(t) || Array.isArray(t) + if (i && r) { + for (var s in t) { + var n = Ce(e[s], t[s]) + void 0 !== n && (e[s] = n) + } + return e + } + return t +} +var Ne = { + getNetworkStatus: () => Promise.resolve({ net_type: 0, net_connect: !0 }), + onNetworkStatusChange(e) {}, + offNetworkStatusChange() {}, + }, + Ae = { + setLogger: function (e) { + throw new Error('setLogger not implemented.') + }, + platform: '', + WebSocket: class { + constructor(e, t) { + throw ( + ((this.CONNECTING = 0), + (this.OPEN = 1), + (this.CLOSING = 2), + (this.CLOSED = 3), + (this.binaryType = ''), + new Error('Method not implemented.')) + ) + } + close(e, t) { + throw new Error('Method not implemented.') + } + send(e) { + throw new Error('Method not implemented.') + } + onclose(e) { + throw new Error('Method not implemented.') + } + onerror(e) { + throw new Error('Method not implemented.') + } + onmessage(e) { + throw new Error('Method not implemented.') + } + onopen(e) { + throw new Error('Method not implemented.') + } + }, + localStorage: {}, + request: function (e, t) { + throw new Error('request not implemented.') + }, + uploadFile: function (e) { + throw new Error('uploadFile not implemented.') + }, + getSystemInfo: function () { + throw new Error('getSystemInfo not implemented.') + }, + getFileUploadInformation(e) { + throw new Error('getFileUploadInformation not implemented.') + }, + envPayload: {}, + net: Ne, + logStorage: class { + constructor(e) {} + open() { + return Promise.resolve() + } + close() {} + addLogs(e) { + return Promise.resolve() + } + extractLogs() { + return Promise.resolve() + } + afterUpload() { + return Promise.resolve() + } + }, + }, + Re = ['error', 'warn', 'log', 'debug'], + Oe = function () {}, + be = ['off', 'error', 'warn', 'log', 'debug'] +class ke { + constructor(e, t = {}) { + ;(this.storageArr = []), + (this.debugLevel = 'off'), + (this.timer = 0), + (this.strategies = { + debug: { name: 'debg', func: console.log }, + log: { name: 'info', func: console.log }, + warn: { name: 'warn', func: console.warn }, + error: { name: 'erro', func: console.error }, + }), + (this.debug = Oe), + (this.log = Oe), + (this.warn = Oe), + (this.error = Oe), + (this.iid = Math.round(1e3 * Math.random())), + (this.debugLevel = be.includes(e) ? e : 'off'), + t.debugLevel && + (this.debugLevel = be.includes(t.debugLevel) + ? t.debugLevel + : this.debugLevel), + (this.logStorage = + !1 === t.storageEnable + ? null + : new Ae.logStorage(null == t ? void 0 : t.storageName)), + this.setOptions(t), + this.setLogFunc(this.debugLevel), + this.setTimer(), + Ae.setLogger(this), + this.open() + } + getDebugMode() { + return 'debug' === this.debugLevel + } + open() { + this.logStorage && + this.logStorage + .open() + .then(() => { + this.log('Logger::open success') + }) + .catch((e) => { + this.warn('Logger::open failed', e) + }) + } + setOptions(e) { + if (e && e.logFunc) { + var t = e.logFunc + for (var i in t) { + var r = i, + s = t[r] + s && (this.strategies[r].func = s) + } + } + } + setLogFunc(e, t = 'log') { + var i = Re.findIndex((t) => t === e), + r = Re.findIndex((e) => e === t) + Re.forEach((e, t) => { + this[e] = function () { + if (!(t > i && t > r)) { + var s = Array.prototype.slice.call(arguments), + n = this.strategies[e], + o = this.formatArgs(s, n.name) + t <= r && this.logStorage && this.prepareSaveLog(o, e), + t <= i && n.func(o) + } + } + }) + } + extractLogs() { + var e + return this.logStorage + ? null === (e = this.logStorage) || void 0 === e + ? void 0 + : e.extractLogs() + : Promise.resolve('') + } + afterUpload() { + var e + return this.logStorage + ? null === (e = this.logStorage) || void 0 === e + ? void 0 + : e.afterUpload() + : Promise.resolve('') + } + prepareSaveLog(e, t) { + this.storageArr.push({ + text: e, + level: t, + time: Date.now(), + iid: this.iid, + }), + this.timer || this.setTimer(), + this.storageArr.length >= 100 && + (this.triggerTimer(), (this.storageArr = [])) + } + saveLogs() { + return Te(this, void 0, void 0, function* () { + if (this.logStorage) { + var e = this.storageArr + this.storageArr = [] + try { + yield this.logStorage.addLogs(e) + } catch (e) {} + } + }) + } + clearTimer() { + this.timer && clearTimeout(this.timer), (this.timer = 0) + } + setTimer() { + this.clearTimer(), + (this.timer = setTimeout(this.triggerTimer.bind(this), 5e3)) + } + triggerTimer() { + this.clearTimer(), this.saveLogs() + } + formatArgs(e, t) { + var i = new Date() + return ( + `[NIM ${this.iid} ${t} ${ + i.getMonth() + 1 + }-${i.getDate()} ${i.getHours()}:${i.getMinutes()}:${i.getSeconds()}:${i.getMilliseconds()}] ` + + e + .map((e) => + e instanceof he + ? e.toString() + : e instanceof Error + ? e && e.message + ? e.message + : e + : 'object' == typeof e + ? JSON.stringify(e) + : e + ) + .join(' ') + ) + } + destroy() { + ;(this.debug = Oe), + (this.log = Oe), + (this.warn = Oe), + (this.error = Oe), + this.saveLogs(), + this.clearTimer(), + (this.storageArr = []), + this.logStorage && this.logStorage.close() + } +} +function Ve(e, t) { + if ('object' != typeof e || null === e) return e + for (var i = (t = t || '').split('.'), r = 0; r < i.length; r++) { + var s = i[r], + n = e[s], + o = s.indexOf('['), + a = s.indexOf(']') + if (-1 !== o && -1 !== a && o < a) { + var c = s.slice(0, o), + d = parseInt(s.slice(o + 1, a)) + ;(n = e[c]), (n = Array.isArray(n) ? n[d] : void 0) + } + if (null == n) return n + e = n + } + return e +} +var Pe, + Le = + ((Pe = function () { + return ((65536 * (1 + Math.random())) | 0).toString(16).substring(1) + }), + function () { + return Pe() + Pe() + Pe() + Pe() + Pe() + Pe() + Pe() + Pe() + }) +function De() { + var { hostEnvEnum: e } = Ae.getSystemInfo() + return 6 === e || 102 === e || 103 === e || 104 === e +} +function we(e, t) { + return (function (e, t, i, r) { + for (var s in ((e = e || {}), + (i = i || {}), + (r = r || (() => {})), + (t = t || {}))) { + var n = r(e[s], t[s]) + e[s] = void 0 === n ? t[s] : n + } + for (var o in i) { + var a = r(e[o], i[o]) + e[o] = void 0 === a ? i[o] : a + } + return e + })({}, e, t, function (e, t) { + return void 0 === t ? e : t + }) +} +function Ue() { + return Promise.resolve() +} +function xe() {} +function Fe(e) { + var t = e.lastIndexOf('.'), + i = t > -1 ? e.slice(t + 1) : '' + return /^\d+$/.test(i.trim()) && (i = ''), i +} +function Be(e, t, i) { + return 0 === e.length || e[0][t] <= i + ? 0 + : e[e.length - 1][t] > i + ? e.length + : e.findIndex((r, s) => { + if (e[s - 1] && e[s - 1][t] > i && i >= r[t]) return !0 + }) +} +function $e(e, t, i, r) { + var s = 'number' == typeof Ve(e, 'raw.r[0]') ? `${e.raw.r[0]}` : void 0 + return (t[i] = t[i] || s || r), t +} +class Ge { + constructor(e) { + ;(this.lastSuccUploadHost = ''), (this.core = e) + } + getFileUploadInformation(e) { + return Ae.getFileUploadInformation(e) + } + request(e, t, i) { + var r = new Date().getTime(), + s = (null == i ? void 0 : i.exception_service) || 0 + return Ae.request(e, t).catch((i) => { + var n, + o, + a, + c, + d = i + throw ( + (this.core.reporter.reportTraceStart('exceptions', { + user_id: + this.core.options.account || + (null === + (o = + null === (n = this.core) || void 0 === n ? void 0 : n.auth) || + void 0 === o + ? void 0 + : o.account), + trace_id: + null === + (c = + null === (a = this.core.clientSocket) || void 0 === a + ? void 0 + : a.socket) || void 0 === c + ? void 0 + : c.sessionId, + start_time: r, + action: 1, + exception_service: s, + }), + this.core.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: 'number' == typeof d.code ? d.code : 0, + description: d.message || `${d.code}`, + operation_type: 0, + target: e, + context: t ? JSON.stringify(t) : '', + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.core.reporter.reportTraceEnd('exceptions', 1), + i) + ) + }) + } + uploadFile(e) { + var t, i, r, s + return Te(this, void 0, void 0, function* () { + for ( + var n = 'BROWSER' === Ae.platform, + o = n ? e.chunkUploadHostBackupList : e.commonUploadHostBackupList, + a = n ? e.chunkUploadHost : e.commonUploadHost, + c = o.indexOf(a), + d = -1 === c ? [a, ...o] : [a, ...o.slice(0, c), ...o.slice(c + 1)], + l = Math.max(d.indexOf(this.lastSuccUploadHost), 0), + p = null, + h = 0; + h < d.length; + h++ + ) { + var u = new Date().getTime(), + m = d[(h + l) % d.length] + try { + var g = yield Ae.uploadFile( + Object.assign( + Object.assign({}, e), + n ? { chunkUploadHost: m } : { commonUploadHost: m } + ) + ) + return ( + (this.lastSuccUploadHost = m), + 'string' == typeof g.size && (g.size = parseInt(g.size)), + 'string' == typeof g.dur && (g.dur = parseInt(g.dur)), + 'string' == typeof g.w && (g.w = parseInt(g.w)), + 'string' == typeof g.h && (g.h = parseInt(g.h)), + g + ) + } catch (e) { + this.core.cloudStorage.nos.nosErrorCount--, (p = e) + var v = e + if ( + (this.core.reporter.reportTraceStart('exceptions', { + user_id: + this.core.options.account || + (null === + (i = + null === (t = this.core) || void 0 === t + ? void 0 + : t.auth) || void 0 === i + ? void 0 + : i.account), + trace_id: + null === + (s = + null === (r = this.core.clientSocket) || void 0 === r + ? void 0 + : r.socket) || void 0 === s + ? void 0 + : s.sessionId, + start_time: u, + action: 1, + exception_service: 3, + }), + this.core.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: 'number' == typeof v.code ? v.code : 0, + description: v.message || `${v.code}`, + operation_type: 1, + target: m, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.core.reporter.reportTraceEnd('exceptions', 1), + e && + (e.code === de.V2NIM_ERROR_CODE_CANCELLED || 10499 === e.errCode)) + ) + throw e + } + } + throw p + }) + } +} +var je = 'https://abt-online.netease.im/v1/api/abt/client/getExperimentInfo' +class qe { + constructor(e, t) { + ;(this.abtInfo = {}), + (this.core = e), + (this.config = we( + { + isAbtestEnable: !0, + abtestUrl: je, + abtestProjectKey: 'imElite_sdk_abtest_web', + }, + t + )) + } + setOptions(e) { + this.config = we(this.config, e) + } + abtRequest() { + var e, t + return Te(this, void 0, void 0, function* () { + if ( + this.config.isAbtestEnable && + !this.abtInfo.experiments && + this.config.abtestUrl + ) { + var i + try { + i = yield this.core.adapters.request( + this.config.abtestUrl, + { + method: 'POST', + dataType: 'json', + headers: { sdktype: 'ABTest' }, + data: { + clientInfo: { + projectKey: this.config.abtestProjectKey, + appKey: this.core.options.appkey, + osType: 'Web', + sdkVersion: '10.9.30', + deviceId: this.core.config.deviceId, + }, + useLocalCache: !0, + }, + }, + { exception_service: 7 } + ) + } catch (e) { + this.core.logger.warn('ABTest request failed') + } + this.abtInfo = + (null === + (t = + null === (e = null == i ? void 0 : i.data) || void 0 === e + ? void 0 + : e.data) || void 0 === t + ? void 0 + : t.abtInfo) || {} + } + }) + } +} +class He { + constructor() { + this.abortFns = [] + } + add(e) { + var t = (function (e) { + var t = {}, + i = new Promise(function (e, i) { + t.abort = i + }) + return (t.promise = Promise.race([e, i])), t + })(e) + return this.abortFns.push(t.abort), t.promise + } + clear(e) { + this.abortFns.forEach((t) => + t( + e || + new he({ + code: de.V2NIM_ERROR_CODE_CANCELLED, + detail: { reason: 'Aborted' }, + }) + ) + ), + (this.abortFns = []) + } + destroy() { + this.clear() + } +} +var Ye = { tolerantRTT: 3e3, bestRTT: 100, maxChances: 5, enable: !0 }, + Ke = { timestamp: 0, rtt: 0, baseClock: 0, baseTime: 0 } +class We { + constructor(e, t, i = 'getServerTime') { + ;(this.serverOrigin = Ke), + (this.config = Ye), + (this.isSettingNTP = !1), + (this.currentChance = 0), + (this.failedDelay = 2e3), + (this.successDelay = 3e5), + (this.timer = 0), + (this.cmdName = 'getServerTime'), + (this.core = e), + (this.logger = e.logger), + (this.promiseManager = new He()), + (this.cmdName = i), + t && this.setOptions(t) + } + setOptions(e) { + this.config = Object.assign({}, Ye, this.config, e) + } + reset() { + this.timer && clearTimeout(this.timer), + this.promiseManager.clear(), + (this.serverOrigin = Ke), + (this.currentChance = 0) + } + setOriginTimetick() { + return Te(this, void 0, void 0, function* () { + if ( + this.config.enable && + !(this.isSettingNTP || this.currentChance >= this.config.maxChances) + ) { + var e = Ve(this.core, 'auth.status'), + t = Ve(this.core, 'status'), + i = Ve(this.core, 'V2NIMLoginService.lifeCycle.loginStatus') + if ('logined' === e || 'logined' === t || 1 === i) { + ;(this.isSettingNTP = !0), + this.currentChance++, + this.timer && clearTimeout(this.timer), + (this.timer = 0) + var r, + s = 'TimeOrigin::setOriginTimetick:', + n = Date.now() + this.core.logger.debug( + `${s} getServerTime start, times ${this.currentChance}` + ) + try { + ;(r = Ve( + yield this.promiseManager.add(this.core.sendCmd(this.cmdName)), + 'content.time' + )), + (this.isSettingNTP = !1) + } catch (e) { + var o = e + return ( + (this.isSettingNTP = !1), + this.logger.warn( + `${s} Calculate Delay time, getServerTime error`, + o + ), + void ( + o.code !== de.V2NIM_ERROR_CODE_CANCELLED && + (clearTimeout(this.timer), + (this.timer = setTimeout( + this.setOriginTimetick.bind(this), + this.failedDelay + ))) + ) + ) + } + if (!r) + return ( + this.core.logger.warn( + `${s} Calculate Delay time incorrect format` + ), + void (this.config.enable = !1) + ) + var a = Date.now() - n + this.doSet(r, a) + } + } + }) + } + doSet(e, t) { + var i = 'TimeOrigin::setOriginTimetick:' + t > this.config.tolerantRTT + ? (this.logger.warn(`${i} denied RTT:${t}`), + clearTimeout(this.timer), + (this.timer = setTimeout( + this.setOriginTimetick.bind(this), + this.failedDelay + ))) + : t > this.config.bestRTT + ? (this.serverOrigin.rtt && t >= this.serverOrigin.rtt + ? this.logger.warn(`${i} ignore RTT:${t}`) + : (this.setServerOrigin(t, e), + this.logger.log(`${i} accept reluctantly RTT:${t}`)), + clearTimeout(this.timer), + (this.timer = setTimeout( + this.setOriginTimetick.bind(this), + this.failedDelay + ))) + : (this.setServerOrigin(t, e), + this.logger.debug(`${i} accept best RTT:${t}`), + (this.currentChance = 0), + clearTimeout(this.timer), + (this.timer = setTimeout( + this.setOriginTimetick.bind(this), + this.successDelay + ))) + } + getNTPTime(e) { + if ((void 0 === e && (e = this.getTimeNode()), this.checkNodeReliable(e))) { + var t = Math.floor(e.time - this.serverOrigin.baseTime) + return this.serverOrigin.timestamp + t + } + return Date.now() + } + checkNodeReliable(e) { + if ( + (void 0 === e && (e = this.getTimeNode()), this.serverOrigin.timestamp) + ) { + if (0 === this.serverOrigin.baseClock) return !0 + var t = e.clock - this.serverOrigin.baseClock, + i = e.time - this.serverOrigin.baseTime + return Math.abs(i - t) < 500 + } + return !1 + } + checkPerformance() { + return ( + 'BROWSER' === Ae.platform && + !('undefined' == typeof performance || !performance.now) + ) + } + static checkPerformance() { + return ( + 'BROWSER' === Ae.platform && + !('undefined' == typeof performance || !performance.now) + ) + } + getTimeNode() { + return { + clock: this.checkPerformance() ? performance.now() : 0, + time: Date.now(), + } + } + static getTimeNode() { + return { + clock: We.checkPerformance() ? performance.now() : 0, + time: Date.now(), + } + } + setServerOrigin(e, t) { + this.serverOrigin = { + timestamp: t + Math.floor(e / 2), + rtt: e, + baseClock: this.checkPerformance() ? performance.now() : 0, + baseTime: Date.now(), + } + } +} +var Je = { + user_id: '', + trace_id: '', + action: 7, + exception_service: 6, + duration: 0, + start_time: 0, + state: 1, + extension: [], +} +class ze { + constructor(e, t) { + ;(this.traceData = Je), + (this.core = e), + (this.traceData = Object.assign({}, Je, t)), + (this.traceData.extension = []) + } + reset() { + ;(this.traceData = Object.assign({}, Je)), (this.traceData.extension = []) + } + start() { + var e, t + this.reset(), + (this.traceData.user_id = this.core.account), + (this.traceData.trace_id = + (null === + (t = + null === (e = this.core.clientSocket) || void 0 === e + ? void 0 + : e.socket) || void 0 === t + ? void 0 + : t.sessionId) || ''), + (this.traceData.start_time = new Date().getTime()) + } + update(e) { + return Te(this, void 0, void 0, function* () { + var { net_type: t, net_connect: i } = yield Ae.net.getNetworkStatus() + this.traceData.extension.push( + Object.assign( + { + code: 0, + foreground: !0, + foreg_backg_switch: !1, + net_type: t, + net_connect: i, + }, + e + ) + ) + }) + } + end(e) { + var t = this.traceData.extension[0], + i = this.traceData.extension[1] + if (t && 0 === t.operation_type && i && 1 === i.operation_type) { + var r = t.net_type !== i.net_type || t.net_connect !== i.net_connect + if (e || !r) + return ( + (this.traceData.duration = + new Date().getTime() - this.traceData.start_time), + this.core.reporter.report('exceptions', this.traceData), + void this.reset() + ) + this.reset() + } else this.reset() + } +} +var Xe = { + user_id: '', + trace_id: '', + net_connect: !0, + net_type: 0, + duration: 0, + start_time: 0, + history: [], + succeed: !1, +} +class Qe { + constructor(e) { + ;(this.traceData = Xe), (this.core = e), this.reset() + } + reset() { + ;(this.traceData = Object.assign({}, Xe)), (this.traceData.history = []) + } + start(e) { + this.reset(), + (this.traceData.user_id = e), + (this.traceData.start_time = Date.now()) + } + updateBegin(e) { + this.traceData.history.push( + Object.assign( + { head: '', body: '', start_time: Date.now(), httpdns: !1, index: 0 }, + e + ) + ) + } + updateComplete(e) { + this.traceData.history.forEach((t) => { + t.target === e.target && + (Object.assign(t, e), (t.duration = Date.now() - t.start_time)) + }) + } + end(e) { + return Te(this, void 0, void 0, function* () { + if ( + ((this.traceData.succeed = e), + (this.traceData.history = this.traceData.history.filter( + (e) => void 0 !== e.code + )), + 0 !== this.traceData.history.length) + ) { + this.traceData.duration = Date.now() - this.traceData.start_time + var { net_type: t, net_connect: i } = yield Ae.net.getNetworkStatus() + ;(this.traceData.net_type = t), + (this.traceData.net_connect = i), + this.core.reporter.report('nim_sdk_lbs_records', this.traceData), + this.reset() + } else this.reset() + }) + } +} +function Ze(e) { + var t, + i, + r = !0 + return ( + 'boolean' == + typeof (null === (t = null == e ? void 0 : e.reporterConfig) || void 0 === t + ? void 0 + : t.enableCompass) + ? (r = e.reporterConfig.enableCompass) + : 'boolean' == + typeof (null === (i = null == e ? void 0 : e.reporterConfig) || + void 0 === i + ? void 0 + : i.isDataReportEnable) && + (r = e.reporterConfig.isDataReportEnable), + r + ) +} +var et = { + user_id: '', + trace_id: '', + action: 0, + state: 0, + duration: 0, + start_time: 0, + offset: 0, + full_size: 0, + transferred_size: 0, + operation_type: 0, + remote_addr: '', + }, + it = 'ReporterHook::setMonitorForResources:' +class rt { + constructor(e, t) { + ;(this.traceData = et), + (this.core = e), + (this.traceData = Object.assign({}, et, t)) + } + reset() { + this.traceData = Object.assign({}, et) + } + start() { + var e, t + this.reset(), + (this.traceData.user_id = this.core.account), + (this.traceData.trace_id = + (null === + (t = + null === (e = this.core.clientSocket) || void 0 === e + ? void 0 + : e.socket) || void 0 === t + ? void 0 + : t.sessionId) || ''), + (this.traceData.start_time = + 'timeOrigin' in this.core + ? this.core.timeOrigin.getNTPTime() + : Date.now()) + } + update(e) { + return Te(this, void 0, void 0, function* () { + this.traceData.user_id && + (this.core.logger.log(`${it} upload update`, e), + Object.assign(this.traceData, e)) + }) + } + end(e) { + this.traceData.user_id && + (this.core.logger.log(`${it} upload end cause of ${e}`), + (this.traceData.state = e), + (this.traceData.duration = + ('timeOrigin' in this.core + ? this.core.timeOrigin.getNTPTime() + : Date.now()) - this.traceData.start_time), + this.core.reporter.report('nim_sdk_resources', this.traceData), + (this.traceData = et)) + } +} +var st = {}, + nt = {}, + ot = {}, + at = { + apiVersion: 'v1', + debugLevel: 'off', + needReconnect: !0, + reconnectionAttempts: Number.MAX_SAFE_INTEGER, + lbsUrls: ['https://lbs.netease.im/lbs/webconf.jsp'], + linkUrl: 'weblink.netease.im:443', + abtestUrl: je, + isAbtestEnable: !0, + } +class ct extends ne { + constructor(e, t = {}) { + if ( + (super(), + (this.instanceName = 'NIM'), + (this.pluginMap = {}), + (this.eventBus = new ne()), + (this.options = {}), + (this.V2NIMConversationIdUtil = {}), + (this.V2NIMMessageCreator = {}), + (this.V2NIMMessageAttachmentCreator = {}), + (this.V2NIMClientAntispamUtil = {}), + (this.DataStructureConverter = {}), + (this.V2NIMMessageConverter = {}), + (this.V2NIMMessageLogUtil = {}), + (this.V2NIMMessageExtendUtil = {}), + (this.V2NIMStorageUtil = {}), + (this.V2NIMNotificationService = {}), + (this.V2NIMStorageService = {}), + (this.auth = {}), + (this.V1NIMLoginService = {}), + (this.V2NIMLoginService = {}), + (this.clientSocket = {}), + (this.V2NIMSyncService = {}), + (this.V2NIMLocalConversationService = {}), + (this.V2NIMConversationService = {}), + (this.V2NIMConversationGroupService = {}), + (this.V2NIMMessageService = {}), + (this.V2NIMTeamService = {}), + (this.V2NIMUserService = {}), + (this.V2NIMFriendService = {}), + (this.V2NIMSettingService = {}), + (this.V2NIMAIService = {}), + (this.V2NIMSignallingService = {}), + (this.V2NIMSubscriptionService = {}), + (this.V2NIMPassthroughService = {}), + (this.YSFService = {}), + (this.offlinePush = {}), + (this.sync = {}), + (this.msg = {}), + (this.msgLog = {}), + (this.session = {}), + (this.cloudSession = {}), + (this.misc = {}), + (this.user = {}), + (this.friend = {}), + (this.systemMessage = {}), + (this.team = {}), + (this.event = {}), + (this.msgExtend = {}), + (this.cloudStorage = {}), + (this.passThrough = {}), + (this.superTeam = {}), + (this.plugin = {}), + (this.signaling = {}), + (this.qchatChannel = {}), + (this.qchatMedia = {}), + (this.qchatMsg = {}), + (this.qchatRole = {}), + (this.qchatServer = {}), + (this.pluginMap = ot), + (this.logger = new ke(e.debugLevel, t.loggerConfig)), + t.privateConf) + ) { + var { + authConfig: i, + cloudStorageConfig: r, + reporterConfig: s, + } = this.getConfigFromPrivate(t.privateConf) + Object.assign(e, i), + this.setInitOptions(e), + (this.otherOptions = Object.assign(Object.assign({}, t), { + cloudStorageConfig: Object.assign( + Object.assign({ storageKeyPrefix: 'NIM' }, t.cloudStorageConfig), + r + ), + reporterConfig: Object.assign(Object.assign({}, t.reporterConfig), s), + V1NIMLoginServiceConfig: Object.assign( + Object.assign(Object.assign({}, e), t.V1NIMLoginServiceConfig), + i + ), + V2NIMLoginServiceConfig: Object.assign( + Object.assign({}, t.V2NIMLoginServiceConfig), + i + ), + })) + } else + this.setInitOptions(e), + (this.otherOptions = Object.assign(Object.assign({}, t), { + V1NIMLoginServiceConfig: Object.assign( + Object.assign({}, e), + t.V1NIMLoginServiceConfig + ), + cloudStorageConfig: Object.assign( + { storageKeyPrefix: 'NIM' }, + t.cloudStorageConfig + ), + })) + ;(this.timerManager = new _e()), + (this.timeOrigin = new We(this)), + (this.adapters = new Ge(this)), + (this.abtest = new qe( + this, + Object.assign( + Object.assign( + { + isAbtestEnable: this.options.isAbtestEnable, + abtestUrl: this.options.abtestUrl, + }, + this.otherOptions.abtestConfig + ), + { abtestProjectKey: 'imElite_sdk_abtest_web' } + ) + )) + var n = Ae.getSystemInfo(), + o = (function (e, t) { + var i, + r, + s = + null === (i = null == t ? void 0 : t.reporterConfig) || void 0 === i + ? void 0 + : i.compassDataEndpoint, + n = + null === (r = null == t ? void 0 : t.reporterConfig) || void 0 === r + ? void 0 + : r.reportConfigUrl + if (s) return s + if (n) { + var o = n.match(/^https:\/\/([^/]+)\/*/) + if (Array.isArray(o) && o.length >= 1) return `https://${o[1]}` + e.error(`Invalid reportConfigUrl: ${n}`) + } + return De() + ? 'https://statistic.live.126.net' + : 'https://statistic.live.126.net,https://statistic-overseas.yunxinfw.com' + })(this.logger, this.otherOptions) + ;(this.reporter = new oe( + Object.assign(Object.assign({}, o ? { compassDataEndpoint: o } : {}), { + isDataReportEnable: Ze(this.otherOptions), + common: { + app_key: e.appkey, + dev_id: '', + platform: 'Web', + sdk_ver: '10.9.30', + env: 'online', + os_name: n.os, + os_ver: n.osVer, + lib_env: n.libEnv, + host_env: n.hostEnv, + host_env_ver: n.hostEnvVer, + manufactor: n.manufactor, + model: n.model, + v2: 'v1' !== this.options.apiVersion, + }, + request: Ae.request, + logger: this.logger, + autoStart: !0, + }) + )), + (this.reporterHookLinkKeep = new ze(this)), + (this.reporterHookCloudStorage = new rt(this)), + (this.reporterHookLBS = new Qe(this)), + this.getServiceKeys(Object.keys(st)).forEach((e) => { + if (!this[e] || !this[e].name) { + var t = st[e] + this[e] = new t(this) + } + }), + Object.keys(st).forEach((e) => { + this.callSetOptions(e) + }), + Object.keys(nt).forEach((e) => { + var t = nt[e] + void 0 !== t && (this[e] = new t(this)) + }), + (ct.instance = this), + this.logger.log( + `NIM init, version:10.9.30, sdk version:100930, appkey:${e.appkey}` + ) + } + getServiceKeys(e) { + var t = e.findIndex((e) => 'V1NIMLoginService' === e) + if (t > -1) { + var i = e[t] + e.splice(t, 1), 'v1' === this.options.apiVersion && e.unshift(i) + } + var r = e.findIndex((e) => 'V2NIMLoginService' === e) + if (r > -1) { + var s = e[r] + e.splice(r, 1), 'v2' === this.options.apiVersion && e.unshift(s) + } + var n = e.findIndex((e) => 'sync' === e) + if (n > -1) { + var o = e[n] + e.splice(n, 1), 'v1' === this.options.apiVersion && e.push(o) + } + var a = e.findIndex((e) => 'V2NIMSyncService' === e) + if (a > -1) { + var c = e[a] + e.splice(a, 1), 'v2' === this.options.apiVersion && e.push(c) + } + return e + } + static getInstance(e, t) { + if (!ct.instance) { + if (e) return new ct(e, t) + throw new Error('Instance not exist, please input options') + } + if (e) { + if ( + ct.instance.options.account === e.account && + ct.instance.options.appkey === e.appkey + ) + return ct.instance.setOptions(e), ct.instance + throw new Error('Unexpected login') + } + return ct.instance + } + setInitOptions(e) { + ye( + { + appkey: { type: 'string' }, + apiVersion: { type: 'enum', values: ['v1', 'v2'], required: !1 }, + binaryWebsocket: { type: 'boolean', required: !1 }, + needReconnect: { type: 'boolean', required: !1 }, + reconnectionAttempts: { type: 'number', required: !1 }, + customClientType: { type: 'number', min: 1, required: !1 }, + authType: { type: 'number', min: 0, max: 2, required: !1 }, + lbsUrls: { type: 'array', itemType: 'string', min: 1, required: !1 }, + linkUrl: { type: 'string', allowEmpty: !1, required: !1 }, + }, + e + ), + (this.options = Object.assign(Object.assign({}, at), e)) + } + getConfigFromPrivate(e) { + var t + return e + ? { + authConfig: JSON.parse( + JSON.stringify({ + appkey: e.appkey || void 0, + lbsUrls: e.weblbsUrl ? [e.weblbsUrl] : void 0, + linkUrl: e.link_web || void 0, + linkSSL: null !== (t = e.websdkSsl) && void 0 !== t ? t : void 0, + }) + ), + cloudStorageConfig: JSON.parse( + JSON.stringify({ + chunkUploadHost: e.nos_uploader || void 0, + commonUploadHost: e.nos_uploader || void 0, + commonUploadHostBackupList: e.nos_uploader + ? [e.nos_uploader] + : void 0, + chunkUploadHostBackupList: e.nos_uploader + ? [e.nos_uploader] + : void 0, + uploadReplaceFormat: e.nos_downloader_v2 + ? `${e.nosSsl ? 'https://' : 'http://'}${e.nos_downloader_v2}` + : void 0, + downloadUrl: + void 0 !== e.nos_accelerate ? e.nos_accelerate : void 0, + downloadHostList: + '' === e.nos_accelerate_host + ? [] + : 'string' == typeof e.nos_accelerate_host + ? [e.nos_accelerate_host] + : Array.isArray(e.nos_accelerate_host) + ? e.nos_accelerate_host + : void 0, + }) + ), + reporterConfig: JSON.parse( + JSON.stringify({ + enableCompass: + 'boolean' == typeof e.enableCompass ? e.enableCompass : void 0, + compassDataEndpoint: e.compassDataEndpoint || void 0, + }) + ), + } + : { authConfig: {}, cloudStorageConfig: {}, reporterConfig: {} } + } + connect(e = {}) { + return this.V1NIMLoginService.login(e) + } + setOptions(e) { + if ('object' == typeof e && null !== e) { + if ( + (Object.prototype.hasOwnProperty.call(e, 'account') && + e.account !== this.options.account) || + (Object.prototype.hasOwnProperty.call(e, 'appkey') && + e.appkey !== this.options.appkey) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: + 'NIM::setOptions account and appkey is not allowed to reset', + }, + }) + if ( + Object.prototype.hasOwnProperty.call(e, 'apiVersion') && + e.apiVersion !== this.options.apiVersion + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: 'NIM::setOptions apiVersion is not allowed to reset', + }, + }) + if ( + Object.prototype.hasOwnProperty.call(e, 'binaryWebsocket') && + e.binaryWebsocket !== this.options.binaryWebsocket + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: 'NIM::setOptions binaryWebsocket is not allowed to reset', + }, + }) + ye( + { + token: { type: 'string', required: !1 }, + needReconnect: { type: 'boolean', required: !1 }, + reconnectionAttempts: { type: 'number', required: !1 }, + customClientType: { type: 'number', min: 1, required: !1 }, + authType: { type: 'number', min: 0, max: 2, required: !1 }, + lbsUrls: { type: 'array', itemType: 'string', min: 1, required: !1 }, + linkUrl: { type: 'string', allowEmpty: !1, required: !1 }, + }, + e + ), + this.logger.log('NIM::setOptions options is', e), + (this.options = Object.assign(Object.assign({}, this.options), e)), + this.V1NIMLoginService.setOptions && + this.V1NIMLoginService.setOptions(this.options) + } + } + getOptions() { + return this.options + } + disconnect() { + return this.V1NIMLoginService.logout() + } + _disconnect() { + return 'v1' === this.options.apiVersion + ? this.V1NIMLoginService.logout() + : 'v2' === this.options.apiVersion + ? 0 === Ve(this.V2NIMLoginService, 'lifeCycle.connectStatus') && + 0 === Ve(this.V2NIMLoginService, 'lifeCycle.loginStatus') + ? Promise.resolve() + : this.V2NIMLoginService.logout() + : Promise.resolve() + } + destroy() { + return ( + (ct.instance = void 0), + this._disconnect().then(() => { + ;(this.status = 'destroyed'), + this.removeAllListeners(), + this.eventBus.removeAllListeners(), + this.logger.destroy(), + this.reporter.destroy(), + this.timerManager.destroy(), + this._clearModuleData('destroy'), + this._removeAllModuleListeners(), + (this.connect = Ue), + (this.disconnect = Ue), + (this._disconnect = Ue), + (this.destroy = Ue) + }) + ) + } + _clearModuleData(e = 'logout') { + Object.values(this).forEach((t) => { + t && 'function' == typeof t.reset && t.reset(e) + }) + } + _removeAllModuleListeners() { + Object.values(this).forEach((e) => { + e && 'function' == typeof e.removeAllListeners && e.removeAllListeners() + }) + } + kick(e) { + return this.V1NIMLoginService.kick(e) + } + sendCmd(e, t, i) { + return this.clientSocket.sendCmd(e, t, i) + } + emit(e, ...t) { + try { + var i = Date.now(), + r = super.emit(e, ...t), + s = Date.now() - i + return ( + s >= 10 && + this.logger.warn(`Core::emit event: ${e} process takes: ${s}ms`), + r + ) + } catch (t) { + return ( + this.logger.error(`Core::emit event: ${e}. Error: ${t}`), + setTimeout(() => { + throw ( + (this.logger.error( + `Core::emit throw error in setTimeout. event: ${e}. Error: ${t}` + ), + t) + ) + }, 0), + !1 + ) + } + } + get account() { + return this.auth.account + } + get status() { + return this.V1NIMLoginService.status + } + set status(e) { + this.V1NIMLoginService.status = e + } + get config() { + return { timeout: 8e3, deviceId: this.auth.deviceId } + } + _registerDep(e, t) { + ;(this[t] && this[t].name) || + ((this[t] = new e(this)), this.callSetOptions(t)) + } + callSetOptions(e) { + var t = `${e}Config`, + i = `${e}Options`, + r = this.otherOptions[t] || this.otherOptions[i] || {}, + s = Ve(this, `${e}.setOptions`) + 'function' == typeof s && + ('cloudStorage' === e && + (r = this.otherOptions[t] || this.otherOptions.serverConfig || {}), + s.call(this[e], r)) + } + static registerService(e, t) { + st[t] = e + } + static registerPrivateService(e, t) { + nt[t] = e + } + static registerPlugin(e, t) { + ot[t] = e + } +} +;(ct.sdkVersion = 100930), (ct.sdkVersionFormat = '10.9.30') +var dt = {}, + lt = {} +function pt(e, t, i, r) { + var s = dt[e] + if (!s) return i.error('createCmd:: can not find cmd config: ', e), null + var n = { SER: t, SID: s.sid, CID: s.cid, Q: [] } + return ( + s.params && + r && + s.params.forEach(function (e) { + var t = r[e.name] + if (null != t) { + var i = e.type, + { reflectMapper: s, select: o } = e + switch (e.type) { + case 'PropertyArray': + ;(i = 'ArrayMable'), + (t = t.map((e) => ({ t: 'Property', v: s ? mt(e, s, o) : e }))) + break + case 'Property': + t = s ? mt(t, s, o) : t + break + case 'Bool': + t = t ? 'true' : 'false' + } + n.Q.push({ t: i, v: t }) + } + }), + { + packet: n, + hasPacketResponse: + 'boolean' != typeof s.hasPacketResponse || s.hasPacketResponse, + hasPacketTimer: 'boolean' != typeof s.hasPacketTimer || s.hasPacketTimer, + } + ) +} +function ht(e, t) { + var i + try { + i = JSON.parse(e) + } catch (i) { + return void t.error(`Parse command error:"${e}"`) + } + var r = i.sid + '_' + i.cid, + s = i.r + if (['4_1', '4_2', '4_10', '4_11'].includes(r)) { + var n = i.r[1].headerPacket + ;(r = `${n.sid}_${n.cid}`), + (i.sid = n.sid), + (i.cid = n.cid), + (s = i.r[1].body) + } + var o = lt[r], + a = [] + if (o && o.length > 0) { + for (var c of o) a.push(ut(i, c.config, c.cmd, s, t)) + return a + } + t.error('parseCmd:: mapper not exist', r, i.code) +} +function ut(e, t, i, r, s) { + var n, + o = { + cmd: i, + raw: e, + error: null, + service: null == t ? void 0 : t.service, + content: {}, + __receiveTimeNode: We.getTimeNode(), + } + ;(18 === t.sid || (t.sid >= 26 && t.sid < 100)) && + (e.code = (function (e) { + if ('number' != typeof e || e != e) + throw new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'Read code failed', rawData: `${e}` }, + }) + if (e < 0 || (e >= 0 && e < 1e3) || (e >= 2e4 && e <= 20099)) return e + var t = (65535 & e) >> 9 + return 1e5 + 1e3 * (t -= t <= 38 ? 1 : 2) + (511 & e) + })(e.code)) + var a = (function (e, t) { + var i = le[e], + r = ve[e] + return null === r + ? null + : new he({ + code: e, + desc: i || r || e, + detail: { cmd: t, timetag: Date.now() }, + }) + })(e.code, i) + if (((o.error = a), o.error)) { + if ( + ((o.error.detail.cmd = i), + !(null === (n = null == t ? void 0 : t.ignoreErrCodes) || void 0 === n + ? void 0 + : n.includes(e.code))) + ) + return o + s.warn('parseCmd:: ignore error ', o.error), (o.error.detail.ignore = !0) + } + return ( + t.response && + t.response.forEach((e, t) => { + var i = r[t], + s = e.type, + n = e.name, + a = e.reflectMapper + if (void 0 !== i) + switch (s) { + case 'Property': + o.content[n] = a ? gt(i, a) : i + break + case 'PropertyArray': + o.content[n] = i.map((e) => (a ? gt(e, a) : e)) + break + case 'Int': + case 'Long': + case 'Byte': + o.content[n] = +i + break + case 'Bool': + o.content[n] = 'true' === i || !0 === i || 1 === i + break + default: + o.content[n] = i + } + }), + o + ) +} +function mt(e, t, i) { + var r = {} + for (var s in ((e = (function (e, t) { + var i = {} + for (var r in t) { + var s = t[r], + n = 'number' == typeof s ? r : s.access ? s.access : r, + o = n.split('.'), + a = e + for (var c of o) { + if (void 0 === a[c] || null === a[c]) { + a = void 0 + break + } + a = a[c] + } + void 0 !== a && (i[n] = a) + } + return i + })(e, t)), + t)) { + var n = t[s], + o = 'number' == typeof n ? s : n.access ? n.access : s + if (!i || i.includes(s)) + if (o in e) { + if ('number' == typeof n) r[n] = e[o] + else if ('object' == typeof n) + if (n.converter) { + var a = n.converter(e[o], e) + void 0 !== a && (r[n.id] = a) + } else r[n.id] = e[o] + } else + 'object' == typeof n && + n.def && + ('function' == typeof n.def + ? (r[n.id] = n.def(e)) + : (r[n.id] = n.def)) + } + return r +} +function gt(e, t) { + var i = {} + for (var r in e) { + var s = t[r] + if ('string' == typeof s) i[s] = e[r] + else if ('object' == typeof s && 'prop' in s) { + var n = s.access ? s.access : s.prop + if (s.converter) { + var o = s.converter(e[r], e) + void 0 !== o && (i[n] = o) + } else + s.type && 'number' === s.type + ? (i[n] = +e[r]) + : s.type && 'boolean' === s.type + ? (i[n] = !('0' === e[r] || !e[r])) + : (i[n] = e[r]) + } + } + for (var a in t) { + var c = t[a] + if (c && void 0 !== c.def) { + var d = c.access ? c.access : c.prop + d in i || + ('function' == typeof c.def ? (i[d] = c.def(e)) : (i[d] = c.def)) + } + } + return ( + (i = (function (e) { + var t = {}, + i = function (i) { + var r = i.split('.') + r.reduce(function (t, s, n) { + return ( + t[s] || + (t[s] = isNaN(Number(r[n + 1])) + ? r.length - 1 == n + ? e[i] + : {} + : []) + ) + }, t) + } + for (var r in e) i(r) + return t + })(i)), + i + ) +} +function vt(e) { + for (var t in (Object.assign(dt, e.cmdConfig), e.cmdMap)) { + var i = e.cmdMap[t], + r = e.cmdConfig[i] + if (r) + if (Array.isArray(lt[t])) { + var s = !1 + for (var n of lt[t]) + if (n.cmd === i && n.config.service === r.service) { + s = !0 + break + } + s || lt[t].push({ config: r, cmd: i }) + } else lt[t] = [{ config: r, cmd: i }] + } +} +function ft(e) { + var t = {} + for (var i in e) { + var r = e[i] + 'number' == typeof r + ? (t[r] = i) + : 'object' == typeof r && + (t[r.id] = { + prop: i, + type: r.retType, + access: r.retAccess ? r.retAccess : r.access ? r.access : i, + def: r.retDef, + converter: r.retConverter, + }) + } + return t +} +function yt(e) { + return e ? 1 : 0 +} +function It(e) { + return 1 === parseInt(e) +} +function Mt(e) { + if (e && 'object' == typeof e) + try { + return JSON.stringify(e) + } catch (e) { + return + } +} +function _t(e) { + if (e && 'string' == typeof e) + try { + return JSON.parse(e) + } catch (e) { + return + } +} +function Et(e, t) { + if (!Se(t)) return {} + var i = JSON.parse(JSON.stringify(t)), + r = Tt(e, i) + return JSON.parse(JSON.stringify(Object.assign(Object.assign({}, i), r))) +} +function Tt(e, t) { + if (!Se(t)) return {} + var i = {} + return ( + Object.keys(e).forEach((r) => { + var s = e[r].type + if ('string' != typeof s) { + var n = Tt(e[r], t) + Object.keys(n).length > 0 && (i[r] = n) + } else { + var o = e[r], + a = o.rawKey || r, + c = St[s](t, a, o) + void 0 !== c && ((t[a] = void 0), (i[r] = c)) + } + }), + i + ) +} +var St = { + number: function (e, t) { + if (void 0 !== e[t]) return +e[t] + }, + string: function (e, t) { + if (void 0 !== e[t]) return e[t] + }, + boolean: function (e, t) { + return +e[t] > 0 || (0 != +e[t] && void 0) + }, + enum: function (e, t, i) { + return i.values[e[t]] + }, + object: function (e, t) { + if (void 0 !== e[t]) + try { + return JSON.parse(e[t]) + } catch (e) { + return {} + } + }, +} +function Ct(e) { + return Et( + { + type: { type: 'number' }, + port: { type: 'number' }, + customClientType: { type: 'number' }, + timestamp: { type: 'number' }, + loginType: { type: 'number' }, + }, + e + ) +} +var Nt = { + '26_3': 'v2Login', + '26_5': 'v2Logout', + '26_8': 'v2KickOffline', + '26_9': 'v2BeKicked', + '26_10': 'v2LoginClientChange', + '36_1': 'v2GetChatroomLinkAddress', + }, + At = { + '1_2': 'heartbeat', + '2_7': 'nimLoginClientChange', + '24_8': 'qchatLoginClientChange', + }, + Rt = { + webLoginReqTag: { + clientType: 3, + os: 4, + sdkVersion: 6, + appLogin: 8, + protocolVersion: 9, + pushTokenName: 10, + pushToken: 11, + clientId: 13, + appkey: 18, + account: 19, + browser: 24, + clientSession: 26, + deviceInfo: 32, + isReactNative: 112, + customTag: 38, + customClientType: 39, + sdkHumanVersion: 40, + hostEnv: 41, + userAgent: 42, + libEnv: 44, + authType: 115, + thirdPartyExtension: 116, + env: 119, + isRoutable: 120, + token: 1e3, + }, + mixAuthRepTag: { + clientId: 1, + consid: 2, + clientIP: 3, + port: 4, + type: 5, + customClientType: 6, + timestamp: 7, + customTag: 8, + os: 9, + pushType: 10, + hasTokenPreviously: 11, + loginType: 12, + }, + nimAuthRepTag: { + type: 3, + os: 4, + mac: 5, + clientId: 13, + account: 19, + deviceInfo: 32, + customTag: 38, + customClientType: 39, + consid: 102, + clientIP: 103, + port: 104, + timestamp: 109, + pushType: 110, + hasTokenPreviously: 111, + }, + qchatAuthRepTag: { + clientId: 8, + consid: 102, + clientIP: 103, + port: 104, + type: 6, + customClientType: 13, + timestamp: 105, + os: 30, + pushType: 100, + hasTokenPreviously: 101, + }, + }, + Ot = { + v2Login: { + sid: 26, + cid: 3, + service: 'auth', + params: [ + { type: 'Property', name: 'tag', reflectMapper: Rt.webLoginReqTag }, + ], + response: [ + { type: 'Property', name: 'data', reflectMapper: ft(Rt.mixAuthRepTag) }, + { + type: 'PropertyArray', + name: 'loginClients', + reflectMapper: ft(Rt.mixAuthRepTag), + }, + ], + }, + v2Logout: { sid: 26, cid: 5, service: 'auth' }, + v2KickOffline: { + sid: 26, + cid: 8, + service: 'auth', + params: [{ type: 'StrArray', name: 'clientIds' }], + response: [{ type: 'StrArray', name: 'clientIds' }], + }, + v2BeKicked: { + sid: 26, + cid: 9, + service: 'auth', + response: [ + { type: 'Int', name: 'clientType' }, + { type: 'Int', name: 'reason' }, + { type: 'String', name: 'reasonDesc' }, + { type: 'Int', name: 'customClientType' }, + ], + }, + v2LoginClientChange: { + sid: 26, + cid: 10, + service: 'auth', + response: [ + { type: 'Byte', name: 'state' }, + { + type: 'PropertyArray', + name: 'datas', + reflectMapper: ft(Rt.mixAuthRepTag), + }, + ], + }, + v2GetChatroomLinkAddress: { + sid: 36, + cid: 1, + service: 'auth', + params: [ + { type: 'Long', name: 'roomId' }, + { type: 'Bool', name: 'miniProgram' }, + ], + response: [{ type: 'StrArray', name: 'linkAddress' }], + }, + }, + bt = { + heartbeat: { sid: 1, cid: 2, service: 'auth' }, + nimLoginClientChange: { + sid: 2, + cid: 7, + service: 'auth', + response: [ + { type: 'Byte', name: 'state' }, + { + type: 'PropertyArray', + name: 'datas', + reflectMapper: ft(Rt.nimAuthRepTag), + }, + ], + }, + qchatLoginClientChange: { + sid: 24, + cid: 8, + service: 'auth', + response: [ + { type: 'Byte', name: 'state' }, + { + type: 'Property', + name: 'data', + reflectMapper: ft(Rt.qchatAuthRepTag), + }, + ], + }, + }, + kt = Vt +function Vt(e) { + ;(e = e || {}), + (this.ms = e.min || 100), + (this.max = e.max || 1e4), + (this.factor = e.factor || 2), + (this.jitter = e.jitter > 0 && e.jitter <= 1 ? e.jitter : 0), + (this.attempts = 0) +} +;(Vt.prototype.duration = function () { + var e = this.ms * Math.pow(this.factor, this.attempts++) + if (this.jitter) { + var t = Math.random(), + i = Math.floor(t * this.jitter * e) + e = 1 & Math.floor(10 * t) ? e + i : e - i + } + return 0 | Math.min(e, this.max) +}), + (Vt.prototype.reset = function () { + this.attempts = 0 + }), + (Vt.prototype.setMin = function (e) { + this.ms = e + }), + (Vt.prototype.setMax = function (e) { + this.max = e + }), + (Vt.prototype.setJitter = function (e) { + this.jitter = e + }) +var Pt = function (e) { + var t + if (void 0 !== e) return ((t = Ut(e)).sign = 1), t + }, + Lt = function (e) { + return '[object Array]' === Object.prototype.toString.call(e) + }, + Dt = function (e) { + return [ + 'number' == typeof e, + 'string' == typeof e && e.length > 0, + Lt(e) && e.length > 0, + e instanceof Ut, + ].some(function (e) { + return !0 === e + }) + }, + wt = 'Invalid Number' +function Ut(e) { + var t + if (!(this instanceof Ut)) return new Ut(e) + if (((this.number = []), (this.sign = 1), (this.rest = 0), Dt(e))) { + if (Lt(e)) { + for ( + ((e.length && '-' === e[0]) || '+' === e[0]) && + ((this.sign = '+' === e[0] ? 1 : -1), e.shift(0)), + t = e.length - 1; + t >= 0; + t-- + ) + if (!this.addDigit(e[t])) return + } else + for ( + ('-' !== (e = e.toString()).charAt(0) && '+' !== e.charAt(0)) || + ((this.sign = '+' === e.charAt(0) ? 1 : -1), (e = e.substring(1))), + t = e.length - 1; + t >= 0; + t-- + ) + if (!this.addDigit(parseInt(e.charAt(t), 10))) return + } else this.number = wt +} +;(Ut.prototype.addDigit = function (e) { + return (function (e) { + return /^\d$/.test(e) + })(e) + ? (this.number.push(e), this) + : ((this.number = wt), !1) +}), + (Ut.prototype._compare = function (e) { + var t, i + if (!Dt(e)) return null + if (((t = Ut(e)), this.sign !== t.sign)) return this.sign + if (this.number.length > t.number.length) return this.sign + if (this.number.length < t.number.length) return -1 * this.sign + for (i = this.number.length - 1; i >= 0; i--) { + if (this.number[i] > t.number[i]) return this.sign + if (this.number[i] < t.number[i]) return -1 * this.sign + } + return 0 + }), + (Ut.prototype.gt = function (e) { + return this._compare(e) > 0 + }), + (Ut.prototype.gte = function (e) { + return this._compare(e) >= 0 + }), + (Ut.prototype.equals = function (e) { + return 0 === this._compare(e) + }), + (Ut.prototype.lte = function (e) { + return this._compare(e) <= 0 + }), + (Ut.prototype.lt = function (e) { + return this._compare(e) < 0 + }), + (Ut.prototype.subtract = function (e) { + var t + return void 0 === e + ? this + : ((t = Ut(e)), + this.sign !== t.sign + ? ((this.number = Ut._add(this, t)), this) + : ((this.sign = this.lt(t) ? -1 : 1), + (this.number = Pt(this).lt(Pt(t)) + ? Ut._subtract(t, this) + : Ut._subtract(this, t)), + this)) + }), + (Ut._add = function (e, t) { + var i, + r = 0, + s = Math.max(e.number.length, t.number.length) + for (i = 0; i < s || r > 0; i++) + (e.number[i] = (r += (e.number[i] || 0) + (t.number[i] || 0)) % 10), + (r = Math.floor(r / 10)) + return e.number + }), + (Ut._subtract = function (e, t) { + var i, + r = 0, + s = e.number.length + for (i = 0; i < s; i++) + (e.number[i] -= (t.number[i] || 0) + r), + (e.number[i] += 10 * (r = e.number[i] < 0 ? 1 : 0)) + for (i = 0, s = e.number.length - 1; 0 === e.number[s - i] && s - i > 0; ) + i++ + return i > 0 && e.number.splice(-i), e.number + }), + (Ut.prototype.multiply = function (e) { + if (void 0 === e) return this + var t, + i, + r = Ut(e), + s = 0, + n = [] + if (this.isZero() || r.isZero()) return Ut(0) + for (this.sign *= r.sign, t = 0; t < this.number.length; t++) + for (s = 0, i = 0; i < r.number.length || s > 0; i++) + (n[t + i] = + (s += (n[t + i] || 0) + this.number[t] * (r.number[i] || 0)) % 10), + (s = Math.floor(s / 10)) + return (this.number = n), this + }), + (Ut.prototype.divide = function (e) { + if (void 0 === e) return this + var t, + i, + r = Ut(e), + s = [], + n = Ut(0) + if (r.isZero()) + return (this.number = 'Invalid Number - Division By Zero'), this + if (this.isZero()) return (this.rest = Ut(0)), this + if ( + ((this.sign *= r.sign), + (r.sign = 1), + 1 === r.number.length && 1 === r.number[0]) + ) + return (this.rest = Ut(0)), this + for (t = this.number.length - 1; t >= 0; t--) + for (n.multiply(10), n.number[0] = this.number[t], s[t] = 0; r.lte(n); ) + s[t]++, n.subtract(r) + for (t = 0, i = s.length - 1; 0 === s[i - t] && i - t > 0; ) t++ + return t > 0 && s.splice(-t), (this.rest = n), (this.number = s), this + }), + (Ut.prototype.mod = function (e) { + return this.divide(e).rest + }), + (Ut.prototype.isZero = function () { + var e + for (e = 0; e < this.number.length; e++) if (0 !== this.number[e]) return !1 + return !0 + }), + (Ut.prototype.toString = function () { + var e, + t = '' + if ('string' == typeof this.number) return this.number + for (e = this.number.length - 1; e >= 0; e--) t += this.number[e] + return this.sign > 0 ? t : '-' + t + }) +var xt, + Ft = Math.pow(2, 32) +function Bt(e) { + for ( + var t = new Uint8Array(5), i = new DataView(t.buffer), r = 0; + 4294967168 & e; + + ) + i.setUint8(r++, (127 & e) | 128), (e >>>= 7) + return i.setUint8(r++, 127 & e), t.slice(0, r) +} +class $t { + constructor(e) { + ;(this.offset = 0), + (this.buffer = new Uint8Array(e)), + (this.view = new DataView(e)) + } + checkBufferBoundaryAccess() { + return this.offset >= this.buffer.byteLength + } + length() { + var e + return ( + (null === (e = this.view) || void 0 === e ? void 0 : e.byteLength) || 0 + ) + } + getBuffer() { + return this.view.buffer + } + getOffset() { + return this.offset + } + popRaw(e) { + try { + var t = this.buffer.slice(this.offset, this.offset + e) + return (this.offset += e), t + } catch (e) { + throw new Error(`UnpackException raw ${e && e.message}`) + } + } + popByte() { + try { + var e = this.view.getUint8(this.offset) + return (this.offset += 1), e + } catch (e) { + throw new Error(`UnpackException byte ${e && e.message}`) + } + } + popVarbin() { + return this.popRaw(this.popVarInt()) + } + popString() { + try { + return (function (e) { + return 'function' == typeof TextDecoder + ? new TextDecoder('utf-8').decode(e) + : (function (e) { + for (var t = '', i = 0; i < e.length; ) { + var r = e[i], + s = 0, + n = 0 + if ( + (r <= 127 + ? ((s = 0), (n = 255 & r)) + : r <= 223 + ? ((s = 1), (n = 31 & r)) + : r <= 239 + ? ((s = 2), (n = 15 & r)) + : r <= 244 && ((s = 3), (n = 7 & r)), + e.length - i - s > 0) + ) + for (var o = 0; o < s; ) + (n = (n << 6) | (63 & (r = e[i + o + 1]))), (o += 1) + else (n = 65533), (s = e.length - i) + ;(t += String.fromCodePoint(n)), (i += s + 1) + } + return t + })(e) + })(this.popVarbin()) + } catch (e) { + throw new Error(`UnpackException string ${e && e.message}`) + } + } + popInt() { + try { + var e = this.view.getUint32(this.offset, !0) + return (this.offset += 4), e + } catch (e) { + throw new Error(`UnpackException int ${e && e.message}`) + } + } + popVarInt() { + var e = 1, + t = 0, + i = 0, + r = 0 + do { + if (((t += (127 & (i = this.popByte())) * e), (e *= 128), (r += 1) > 5)) + throw new Error('Variable length quantity is too long') + } while (128 & i) + return t + } + popLong() { + try { + var e = (function (e, t = !1) { + var i = new DataView(e.buffer), + [r, s] = t ? [4, 0] : [0, 4], + n = i.getUint32(r, t), + o = i.getUint32(s, t) + return n > 0 ? n * Ft + o : o + })(this.buffer.slice(this.offset, this.offset + 8), !0) + return (this.offset += 8), Number(e) + } catch (e) { + throw new Error(`UnpackException long ${e && e.message}`) + } + } + popShort() { + try { + var e = this.view.getUint16(this.offset, !0) + return (this.offset += 2), e + } catch (e) { + throw new Error(`UnpackException short ${e && e.message}`) + } + } + popBoolean() { + return this.popByte() > 0 + } + toString() { + return Array.from(new Uint8Array(this.buffer)).toString() + } + reset() { + ;(this.offset = 0), (this.buffer = null), (this.view = null) + } +} +class Gt { + constructor(e) { + ;(this.packetLength = 0), + (this.serviceId = 0), + (this.commandId = 0), + (this.serialId = 0), + (this.tag = 0), + (this.resCode = 200), + (this.innerHeader = null), + (this.msgId = 0), + (this.bodyArr = []), + (this.unpack = new $t(e)) + } + reset() { + ;(this.innerHeader = null), (this.bodyArr = []), this.unpack.reset() + } + getBodyDetail() { + return this.bodyArr.join('') + } + unmarshalHeader() { + var e = this._unmarshalHeader() + ;(this.packetLength = e.packetLength), + (this.serviceId = e.serviceId), + (this.commandId = e.commandId), + (this.serialId = e.serialId), + (this.tag = e.tag), + (this.resCode = e.resCode), + 4 === e.serviceId && + [1, 2, 10, 11].includes(e.commandId) && + ((this.msgId = this.unmarshalLong()), + (this.innerHeader = this._unmarshalHeader())) + } + _unmarshalHeader() { + var e = this.unpack.popVarInt(), + t = this.unpack.popByte(), + i = this.unpack.popByte(), + r = this.unpack.popShort(), + s = this.unpack.popByte(), + n = 200 + return ( + this.hasRescode(s) && (n = this.unpack.popShort()), + { + packetLength: e, + serviceId: t, + commandId: i, + serialId: r, + tag: s, + resCode: n, + } + ) + } + hasRescode(e) { + return !!((e = e || this.tag) & Gt.RES_CODE) + } + getHeader() { + return { + packetLength: this.packetLength, + sid: this.serviceId, + cid: this.commandId, + ser: this.serialId, + code: this.resCode, + } + } + getInnerHeader() { + return this.innerHeader + ? { sid: this.innerHeader.serviceId, cid: this.innerHeader.commandId } + : null + } + unmarshalProperty() { + var e = this.unpack.popVarInt(), + t = {} + this.bodyArr.push(`\nProperty(${e}) {`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popVarInt() + this.bodyArr.push(`${r}:`) + var s = this.unpack.popString() + this.bodyArr.push(`"${s.length} ${this.unpack.getOffset()}",`), (t[r] = s) + } + return this.bodyArr.push('},'), t + } + unmarshalPropertyArray() { + var e = this.unpack.popVarInt(), + t = [] + this.bodyArr.push(`\nPropertyArray(${e}) [`) + for (var i = 0; i < e; i++) t.push(this.unmarshalProperty()) + return this.bodyArr.push('],'), t + } + unmarshalLong() { + var e = this.unpack.popLong() + return this.bodyArr.push(`\nLong:${e}`), e + } + unmarshalLongArray() { + var e = this.unpack.popVarInt(), + t = [] + this.bodyArr.push(`\nLongArray ${e}:`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popLong() + this.bodyArr.push(`${r},`), t.push(r) + } + return t + } + unmarshalStrArray() { + var e = this.unpack.popVarInt(), + t = [] + this.bodyArr.push(`\nStrArray ${e}:`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popString() + this.bodyArr.push(`${r},`), t.push(r) + } + return t + } + unmarshalStrLongMap() { + var e = this.unpack.popVarInt(), + t = {} + this.bodyArr.push(`\nStrLongMap ${e}:`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popString() + this.bodyArr.push(`${r},`) + var s = this.unpack.popLong() + this.bodyArr.push(`${s};`), (t[r] = s) + } + return t + } + unmarshalStrStrMap() { + var e = this.unpack.popVarInt(), + t = {} + this.bodyArr.push(`\nStrStrMap ${e}:`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popString() + this.bodyArr.push(`${r},`) + var s = this.unpack.popString() + this.bodyArr.push(`${s};`), (t[r] = s) + } + return t + } + unmarshalLongLongMap() { + var e = this.unpack.popVarInt(), + t = {} + this.bodyArr.push(`\nStrLongLongMap ${e}:`) + for (var i = 0; i < e; i++) { + var r = this.unpack.popLong() + this.bodyArr.push(`${r},`) + var s = this.unpack.popLong() + this.bodyArr.push(`${s};`), (t[r] = s) + } + return { m_map: t } + } + unmarshalKVArray() { + var e = this.unpack.popVarInt(), + t = [] + this.bodyArr.push(`\nKVArray ${e}:`) + for (var i = 0; i < e; i++) t.push(this.unmarshalStrStrMap()) + return t + } + unmarshal(e) { + var t = Object.assign(Object.assign({}, this.getHeader()), { r: [] }) + if ( + (this.innerHeader && + ((t.r[0] = this.msgId), + (t.r[1] = { body: [], headerPacket: this.getInnerHeader() })), + ![200, 406, 808, 810, 7101].includes(t.code)) + ) + return JSON.stringify(t) + if (this.packetLength > 0 && this.packetLength > this.unpack.length()) + throw new Error( + `UnpackException packetLength(${ + this.packetLength + }) greater than bufferLength(${this.unpack.length()})` + ) + var i = [] + return ( + e && + e.forEach((e) => { + if (!this.unpack.checkBufferBoundaryAccess()) + switch (e.type) { + case 'PropertyArray': + i.push(this.unmarshalPropertyArray()) + break + case 'Property': + i.push(this.unmarshalProperty()) + break + case 'Byte': + i.push(this.unpack.popByte()) + break + case 'Int': + i.push(this.unpack.popInt()) + break + case 'Bool': + i.push(this.unpack.popBoolean()) + break + case 'Long': + i.push(this.unmarshalLong()) + break + case 'LongArray': + i.push(this.unmarshalLongArray()) + break + case 'String': + i.push(this.unpack.popString()) + break + case 'StrArray': + i.push(this.unmarshalStrArray()) + break + case 'StrStrMap': + i.push(this.unmarshalStrStrMap()) + break + case 'StrLongMap': + i.push(this.unmarshalStrLongMap()) + break + case 'LongLongMap': + i.push(this.unmarshalLongLongMap()) + break + case 'KVArray': + i.push(this.unmarshalKVArray()) + } + }), + this.innerHeader ? (t.r[1].body = i) : (t.r = i), + JSON.stringify(t) + ) + } +} +Gt.RES_CODE = 2 +class jt { + constructor() { + ;(this.offset = 0), + (this.pageSize = 1024), + (this.capacity = 1048576), + (this.buffer = new Uint8Array(this.pageSize)), + (this.view = new DataView(this.buffer.buffer)) + } + reset() { + ;(this.offset = 0), (this.buffer = null), (this.view = null) + } + size() { + return this.offset + } + getBuffer() { + return this.buffer.slice(0, this.offset).buffer + } + ensureCapacity(e) { + var t = this.offset + e + if (t > this.capacity) throw new Error('PackException over limit') + if (t > this.buffer.byteLength) { + var i = Math.ceil(t / this.pageSize) * this.pageSize, + r = new Uint8Array(i) + r.set(this.buffer), + (this.buffer = r), + (this.view = new DataView(this.buffer.buffer)) + } + } + putRaw(e) { + this.ensureCapacity(e.length) + try { + this.buffer.set(e, this.offset), (this.offset += e.length) + } catch (e) { + throw new Error('PackException raw') + } + } + putByte(e) { + this.ensureCapacity(1) + try { + this.view.setUint8(this.offset++, e) + } catch (e) { + throw new Error('PackException byte') + } + } + putString(e) { + try { + var t = (function (e) { + if ('function' == typeof TextEncoder) return new TextEncoder().encode(e) + var t = (function (e) { + for (var t = [], i = e.length, r = 0; r < i; ) { + var s = e.codePointAt(r), + n = 0, + o = 0 + for ( + s <= 127 + ? ((n = 0), (o = 0)) + : s <= 2047 + ? ((n = 6), (o = 192)) + : s <= 65535 + ? ((n = 12), (o = 224)) + : s <= 2097151 && ((n = 18), (o = 240)), + t.push(o | (s >> n)), + n -= 6; + n >= 0; + + ) + t.push(128 | ((s >> n) & 63)), (n -= 6) + r += s >= 65536 ? 2 : 1 + } + return t + })(e) + return new Uint8Array(t) + })(e) + this.putVarbin(t) + } catch (e) { + throw new Error('PackException string') + } + } + putInt(e) { + this.ensureCapacity(4) + try { + this.view.setInt32(this.offset, e, !0), (this.offset += 4) + } catch (e) { + throw new Error('PackException int') + } + } + putVarInt(e) { + var t = Bt(e) + this.putRaw(t) + } + putBoolean(e) { + this.ensureCapacity(1) + try { + this.view.setUint8(this.offset++, e ? 1 : 0) + } catch (e) { + throw new Error('PackException boolean') + } + } + putLong(e) { + this.ensureCapacity(8) + try { + var t = (function (e, t = !1) { + var i = new Uint8Array(8), + r = new DataView(i.buffer), + s = Number(e > Ft - 1 ? e / Ft : 0), + n = Number(4294967295 & e), + [o, a] = t ? [4, 0] : [0, 4] + return r.setUint32(o, s, t), r.setUint32(a, n, t), i + })(e, !0) + this.buffer.set(t, this.offset), (this.offset += 8) + } catch (e) { + throw new Error('PackException long') + } + } + putStringAsLong(e) { + this.ensureCapacity(8) + try { + var t = (function (e, t = !1) { + var i = new Uint8Array(8), + r = new DataView(i.buffer), + s = Ut(e).divide(Ft).number.reverse().join(''), + n = Ut(e).mod(Ft).number.reverse().join(''), + o = Number(s), + a = Number(n), + [c, d] = t ? [4, 0] : [0, 4] + return r.setUint32(c, o, t), r.setUint32(d, a, t), i + })(e, !0) + this.buffer.set(t, this.offset), (this.offset += 8) + } catch (e) { + throw new Error('PackException stringAsLong') + } + } + putShort(e) { + this.ensureCapacity(2) + try { + this.view.setInt16(this.offset, e, !0), (this.offset += 2) + } catch (e) { + throw new Error('PackException short') + } + } + putVarbin(e) { + if (!e) return this.ensureCapacity(1), this.putVarInt(0) + if (e.byteLength > Math.pow(2, 31) - 2) + throw new Error('PackException varbin. too long') + var t = Bt(e.length) + this.ensureCapacity(t.length + e.length) + try { + this.buffer.set(t, this.offset), + (this.offset += t.length), + this.buffer.set(e, this.offset), + (this.offset += e.length) + } catch (e) { + throw new Error('PackException varbin') + } + } +} +function qt(e) { + if ('number' != typeof e) { + if (null == e) return !1 + e = Number(e) + } + if (isNaN(e)) throw new Error('Number type conversion error') + return !0 +} +function Ht(e) { + return null == e +} +class Yt { + constructor(e, t, i) { + ;(this.pack = new jt()), + (this.packetLength = 0), + (this.serviceId = 0), + (this.commandId = 0), + (this.serialId = 0), + (this.tag = 0), + (this.serviceId = e), + (this.commandId = t), + (this.serialId = i) + } + marshalHeader() { + this.pack.putVarInt(this.packetLength), + this.pack.putByte(this.serviceId), + this.pack.putByte(this.commandId), + this.pack.putShort(this.serialId), + this.pack.putByte(this.tag) + } + marshalProperty(e) { + var t = Object.keys(e).filter((e) => !Ht(e)) + this.pack.putVarInt(t.length), + t.forEach((t) => { + this.pack.putVarInt(Number(t)), + Array.isArray(e[t]) || + '[object Object]' === Object.prototype.toString.call(e[t]) + ? this.pack.putString(JSON.stringify(e[t])) + : this.pack.putString(String(e[t])) + }) + } + marshalPropertyArray(e) { + var t = e.length + this.pack.putVarInt(t), + e.forEach((e) => { + this.marshalProperty(null == e ? void 0 : e.v) + }) + } + marshalStrArray(e) { + var t = e.filter((e) => !Ht(e)), + i = t.length + this.pack.putVarInt(i), + t.forEach((e) => { + this.pack.putString(String(e)) + }) + } + marshalLongArray(e) { + var t = e.filter((e) => qt(e)), + i = t.length + this.pack.putVarInt(i), + t.forEach((e) => { + this.putLong(e) + }) + } + marshalStrStrMap(e) { + var t = Object.keys(e).filter((t) => !Ht(e[t]) && !Ht(t)) + this.pack.putVarInt(t.length), + t.forEach((t) => { + this.pack.putString(String(t)), this.pack.putString(String(e[t])) + }) + } + marshalStrLongMap(e) { + var t = Object.keys(e).filter((t) => qt(e[t]) && !Ht(t)) + this.pack.putVarInt(t.length), + t.forEach((t) => { + this.pack.putString(String(t)), this.putLong(e[t]) + }) + } + marshalLongLongMap(e) { + var t = Object.keys(e).filter((t) => { + var i = Number(t) + return qt(i) && qt(e[i]) + }) + this.pack.putVarInt(t.length), + t.forEach((t) => { + var i = Number(t) + this.putLong(i), this.putLong(e[i]) + }) + } + marshalKVArray(e) { + var t = e.length + this.pack.putVarInt(t), + e.forEach((e) => { + this.marshalStrStrMap(e) + }) + } + putLong(e) { + 'string' == typeof e && e.length > 15 + ? this.pack.putStringAsLong(e) + : this.pack.putLong(Number(e)) + } + marshal(e, t) { + return ( + this.marshalHeader(), + t && + t.forEach((t, i) => { + var r, + s = t.type, + n = null === (r = e[i]) || void 0 === r ? void 0 : r.v + if (!Ht(n)) + switch (s) { + case 'PropertyArray': + this.marshalPropertyArray(n) + break + case 'Property': + this.marshalProperty(n) + break + case 'Byte': + if (!qt(n)) return + this.pack.putByte(Number(n)) + break + case 'Int': + if (!qt(n)) return + this.pack.putInt(Number(n)) + break + case 'Bool': + 'false' === n ? (n = !1) : 'true' === n && (n = !0), + this.pack.putBoolean(n) + break + case 'Long': + if (!qt(n)) return + this.putLong(n) + break + case 'LongArray': + this.marshalLongArray(n) + break + case 'String': + this.pack.putString(String(n)) + break + case 'StrArray': + this.marshalStrArray(n) + break + case 'StrStrMap': + this.marshalStrStrMap(n) + break + case 'StrLongMap': + this.marshalStrLongMap(n) + break + case 'LongLongMap': + this.marshalLongLongMap(n) + break + case 'KVArray': + this.marshalKVArray(n) + } + }), + this.pack.getBuffer() + ) + } + reset() { + this.pack.reset() + } +} +class Kt extends ne { + constructor(e, t, i) { + super(), + (this.websocket = null), + (this.socketConnectTimer = 0), + (this.linkSSL = !0), + (this.url = ''), + (this.core = e), + (this.url = t), + (this.linkSSL = i), + (this.status = 'disconnected'), + (this.logger = e.logger), + this.connect() + } + connect() { + 'connecting' !== this.status && 'connected' !== this.status + ? ((this.status = 'connecting'), + this._createWebsocket( + `${this.linkSSL ? 'wss' : 'ws'}://${this.url}/websocket` + )) + : this.logger.warn( + 'imsocket::socket is connecting or connected', + this.status + ) + } + close() { + if (((this.status = 'disconnected'), this.websocket)) { + this.logger.log('imsocket:: close websocket') + try { + this.websocket.close() + } catch (e) { + this.logger.warn('imsocket::attempt to close websocket error', e) + } + this.clean(), this.emit('disconnect') + } + } + clean() { + ;(this.status = 'disconnected'), + clearTimeout(this.socketConnectTimer), + this.websocket && + ((this.socketUrl = void 0), + (this.websocket.onmessage = null), + (this.websocket.onopen = null), + (this.websocket.onerror = null), + (this.websocket.onclose = null), + (this.websocket = null)) + } + onConnect() { + ;(this.status = 'connected'), + this.emit('connect'), + clearTimeout(this.socketConnectTimer) + } + _createWebsocket(e) { + ;(this.socketConnectTimer = setTimeout(() => { + this.logger.error('imsocket::Websocket connect timeout. url: ', e), + this.emit( + 'connectFailed', + new he({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CONNECT_TIMEOUT + : 415, + detail: { + reason: `imsocket::Websocket connect timeout. url: ${e}`, + }, + }) + ) + }, this.core.options.socketConnectTimeout || 8e3)), + (this.socketUrl = e), + (this.websocket = new Ae.WebSocket(e)), + (this.websocket.binaryType = 'arraybuffer'), + (this.websocket.onmessage = this.onMessage.bind(this)), + (this.websocket.onclose = (e) => { + ;(e = e || {}), + this.logger.log( + `imsocket::Websocket onclose done ${e.wasClean}/${e.code}/${e.reason}` + ), + 'connected' === this.status + ? (this.clean(), this.emit('disconnect')) + : (this.clean(), + this.emit( + 'connectFailed', + new he({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CONNECT_FAILED + : 414, + detail: { reason: 'imsocket::Websocket onclose done' }, + }) + )) + }), + (this.websocket.onerror = (e) => { + this.logger.error('imsocket::Websocket onerror', e), + 'connected' === this.status + ? (this.clean(), this.emit('disconnect')) + : (this.clean(), + this.emit( + 'connectFailed', + new he({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CONNECT_FAILED + : 414, + detail: { reason: 'imsocket::Websocket onerror.' }, + }) + )) + }), + (this.websocket.onopen = () => { + this.onConnect() + }) + } + onMessage(e) { + if (e.data) { + var t = new Gt(e.data), + i = { sid: -1, cid: -1, ser: -1, packetLength: -1 }, + r = null + try { + t.unmarshalHeader(), (i = t.getHeader()), (r = t.getInnerHeader()) + } catch (t) { + this.reportBinaryError({ + err: t, + sid: r ? r.sid : null == i ? void 0 : i.sid, + cid: r ? r.cid : null == i ? void 0 : i.cid, + rawBuf: e.data, + type: 'decode', + }) + } + var s = r ? r.sid : i.sid, + n = r ? r.cid : i.cid, + o = `${s}_${n}`, + a = lt[o] + if (a && a.length > 0) { + var c, + d = a[0].config + try { + c = t.unmarshal(d.response) + } catch (r) { + var l = t.getBodyDetail() + this.reportBinaryError({ + err: r, + rawBuf: e.data, + sid: s, + cid: n, + parseDetail: l, + type: 'decode', + }), + t.reset() + var p = Object.assign(Object.assign({}, i), { + sid: s, + cid: n, + code: de.V2NIM_ERROR_CODE_UNPACK_ERROR, + }) + return ( + this.logger.error( + `imsocket::onMessage "${p.sid}_${p.cid}", ser ${p.ser}, packetLength ${p.packetLength} unmarshal error. ${l} \n`, + r + ), + void this.emit('message', JSON.stringify(p)) + ) + } + this.emit('message', c) + } else this.core.logger.warn('imsocket::onMessage cmd not found', o) + t.reset() + } + } + send(e, t, i, r, s) { + var n, + o, + a = new Yt(e, t, i), + c = dt[r], + d = '' + try { + ;(d = JSON.stringify(s)), (o = a.marshal(JSON.parse(d), c.params)) + } catch (r) { + throw ( + (this.reportBinaryError({ + err: r, + sid: e, + cid: t, + rawStr: d, + type: 'encode', + }), + a.reset(), + new he({ + code: de.V2NIM_ERROR_CODE_PACK_ERROR, + detail: { reason: `${e}-${t}, ser ${i} marshal error`, rawError: r }, + })) + ) + } + null === (n = this.websocket) || void 0 === n || n.send(o), a.reset() + } + reportBinaryError(e) { + var t, + i, + r, + { err: s, rawStr: n, sid: o, cid: a, type: c, parseDetail: d } = e, + l = e.rawBuf + if (l) { + try { + r = (function (e) { + if ('function' != typeof btoa) return '' + for ( + var t = '', i = new Uint8Array(e), r = i.byteLength, s = 0; + s < r; + s++ + ) + t += String.fromCharCode(i[s]) + return (i = null), btoa(t) + })(l) + } catch (e) { + ;(r = `reportBinaryError::arrayBufferToBase64 parsing failed, error: ${ + null == e ? void 0 : e.message + }, sid: ${o}, cid: ${a}`), + this.core.logger.error(r) + } + l = null + } + this.core.reporter.reportTraceStart('exceptions', { + user_id: + null === (t = this.core.auth) || void 0 === t ? void 0 : t.account, + trace_id: + null === (i = this.core.clientSocket.socket) || void 0 === i + ? void 0 + : i.sessionId, + start_time: Date.now(), + action: 2, + exception_service: 9, + }) + var p = s + ? (`${s.message};;;` || `${s.code};;;`) + + (d ? `parseDetail: ${d};;;` : '') + + (n ? ` rawStr: ${n}` : '') + + (r ? ` rawBuf: ${r}` : '') + : '' + this.core.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: + 'encode' === c + ? de.V2NIM_ERROR_CODE_PACK_ERROR + : de.V2NIM_ERROR_CODE_UNPACK_ERROR, + description: p, + operation_type: 'encode' === c ? 3 : 4, + target: `${o}-${a}`, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.core.reporter.reportTraceEnd('exceptions', 1) + } +} +!(function (e) { + ;(e[(e.ACTIVE = 1)] = 'ACTIVE'), + (e[(e.KICKED = 2)] = 'KICKED'), + (e[(e.OFFLINE = 3)] = 'OFFLINE') +})(xt || (xt = {})) +class Wt { + constructor(e) { + ;(this.isReconnect = !1), + (this.packetTimeout = 8e3), + (this.linkSSL = !0), + (this.packetSer = 1), + (this.backoff = new kt({ max: 8e3, min: 1600, jitter: 0.01 })), + (this.sendingCmdMap = new Map()), + (this.pingTimer = 0), + (this.hasNetworkListener = !1), + (this.core = e), + (this.auth = e.auth), + (this.logger = e.logger), + (this.reporter = e.reporter), + (this.timerManager = e.timerManager), + (this.eventBus = e.eventBus), + this.setListener() + } + setListener() { + this.core.eventBus.on('V2NIMLoginService/loginLifeCycleLoginSucc', () => { + this.isReconnect = !0 + }) + } + setSessionId(e) { + this.socket && (this.socket.sessionId = e) + } + setLinkSSL(e) { + this.linkSSL = e + } + connect(e, t = !1) { + var i, r + return Te(this, void 0, void 0, function* () { + this.isReconnect = t + var s = this.core.auth.getConnectStatus() + if (1 === s) { + var n = `clientSocket::connect status is ${s}, and would not repeat connect`, + o = new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: { reason: n }, + }) + return this.logger.warn(n), Promise.reject(o) + } + this.auth.lifeCycle.processEvent('connect') + try { + yield this.auth.doLoginStepsManager.add(this.doConnect(e)), + this.logger.log( + `clientSocketV2:: connect success with link url: ${e}, isReconnect: ${t}` + ), + this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'TCP', + target: e, + code: 200, + mixlink: !0, + succeed: !0, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.auth.lifeCycle.processEvent('connectSucc') + } catch (t) { + var a = t + if ( + (this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'TCP', + target: e, + code: a.code || 0, + description: `connectFailed:${a.message}`, + mixlink: !0, + succeed: !1, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + a.code === de.V2NIM_ERROR_CODE_CANCELLED || + a.code === de.V2NIM_ERROR_CODE_TIMEOUT) + ) + throw ( + (null === (i = this.socket) || void 0 === i || i.close(), + null === (r = this.socket) || + void 0 === r || + r.removeAllListeners(), + (this.socket = void 0), + t) + ) + throw ( + (this.logger.warn( + `clientSocketV2::connect failed with link url: ${e}`, + a + ), + this.auth.lifeCycle.processEvent('connectFail', a), + t) + ) + } + }) + } + doConnect(e) { + var t = !1 + return new Promise((i, r) => { + ;(this.socket = new Kt(this.core, e, this.linkSSL)), + this.socket.on('connect', () => { + this.logger.log('clientSocketV2::socket on connect', e), + this.core.reporterHookLinkKeep.start(), + this.core.reporterHookLinkKeep.update({ + code: 0, + description: 'connection begin', + operation_type: 0, + target: e, + }), + (t = !0), + i() + }), + this.socket.on('message', this.onMessage.bind(this)), + this.socket.on('disconnect', (i) => + Te(this, void 0, void 0, function* () { + ;(t = !0), + this.logger.log(`clientSocketV2::socket on disconnect ${e}`, i), + yield this.core.reporterHookLinkKeep.update({ + code: (null == i ? void 0 : i.code) || 0, + description: + (null == i ? void 0 : i.reason) || 'socket on disconnect', + operation_type: 1, + target: e, + }), + this.core.reporterHookLinkKeep.end(!1), + this.doDisconnect(xt.OFFLINE, 'SocketOnDisconnect') + }) + ), + this.socket.on('connectFailed', (i) => { + t + ? this.ping() + : (this.logger.error( + `clientSocketV2::connectFailed:${e}, reason:${i && i.message}` + ), + this.cleanSocket()), + (t = !0), + r(i) + }) + }) + } + cleanSocket() { + this.socket && + ('function' == typeof this.socket.removeAllListeners && + this.socket.removeAllListeners(), + 'function' == typeof this.socket.close && this.socket.close(), + (this.socket = void 0)) + } + resetSocketConfig() { + this.backoff.reset(), this.initOnlineListener() + } + doDisconnect(e, t) { + if ( + (this.logger.log(`clientSocketV2::doDisconnect:type:${e},reason:`, t), + 0 !== this.core.auth.getConnectStatus()) + ) { + var i = { 1: 'close', 2: 'kicked', 3: 'broken' }[e] || '' + this.markAllCmdInvaild( + new he({ + code: de.V2NIM_ERROR_CODE_DISCONNECT, + detail: { + reason: 'Packet timeout due to instance disconnect', + disconnect_reason: i, + }, + }) + ), + this.timerManager.destroy(), + clearTimeout(this.pingTimer), + this.cleanSocket(), + e === xt.ACTIVE || e === xt.KICKED + ? this.destroyOnlineListener() + : e === xt.OFFLINE && + (this.auth.lifeCycle.processEvent( + 'connectionBroken', + new he({ + code: de.V2NIM_ERROR_CODE_DISCONNECT, + detail: { reason: 'connection broken due to internal reasons' }, + }) + ), + this.logger.log( + `clientSocketV2::doDisconnect: pending reconnect ${this.isReconnect}` + ), + this.isReconnect && this.auth.lifeCycle.processEvent('waiting')) + } else this.logger.warn('clientSocketV2::doDisconnect:already disconnected') + } + sendCmd(e, t, i) { + var r = this.core.auth.getLoginStatus(), + s = { cmd: e } + if ( + 1 !== r && + !['v2Login', 'login', 'chatroomLogin', 'v2ChatroomLogin'].includes(e) + ) + return ( + this.logger.warn( + `clientSocketV2::NIM login status is ${r}, so can not sendCmd ${e}` + ), + Promise.reject( + new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: Object.assign( + { reason: 'Can not sendCmd due to no logined' }, + s + ), + }) + ) + ) + var n = 'heartbeat' !== e, + o = n ? this.packetSer++ : 0, + a = pt(e, o, this.logger, t) + if (!a) { + var c = new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: Object.assign(Object.assign({}, s), { + reason: `SendCmd::createCmd error: ${o} ${e}`, + }), + }) + return this.logger.error(c), Promise.reject(c) + } + var { packet: d, hasPacketResponse: l, hasPacketTimer: p } = a, + h = JSON.stringify(d) + n && + (this.logger.getDebugMode() + ? this.logger.debug( + `clientSocketV2::sendCmd: ${d.SID}_${d.CID},${e},ser:${o}`, + h + ) + : this.logger.log( + `clientSocketV2::sendCmd: ${d.SID}_${d.CID},${e},ser:${o}` + )) + var u = new Date().getTime() + return new Promise((r, n) => { + l && + this.sendingCmdMap.set(o, { + cmd: e, + params: t, + callback: [r, n], + timer: p + ? setTimeout( + () => { + var t = new he({ + code: de.V2NIM_ERROR_CODE_PROTOCOL_TIMEOUT, + detail: Object.assign( + { + ser: o, + reason: `Packet Timeout: ser ${o} cmd ${e}`, + timetag: new Date().getTime(), + }, + s + ), + }) + this.markCmdInvalid(o, t, e) + }, + i && i.timeout ? i.timeout : this.packetTimeout + ) + : null, + }) + try { + this.socket.send(d.SID, d.CID, o, e, d.Q), l || r(d) + } catch (t) { + var a = new he({ + code: de.V2NIM_ERROR_CODE_PROTOCOL_SEND_FAILED, + detail: Object.assign( + { + ser: o, + reason: + 'Unable to send packet' + + (t && t.message ? ': ' + t.message : ''), + timetag: new Date().getTime(), + rawError: t, + }, + s + ), + }) + this.markCmdInvalid(o, a, e), n(a) + } + }).catch((e) => + Te(this, void 0, void 0, function* () { + var t = e + return [ + de.V2NIM_ERROR_CODE_DISCONNECT, + de.V2NIM_ERROR_CODE_PROTOCOL_TIMEOUT, + de.V2NIM_ERROR_CODE_PROTOCOL_SEND_FAILED, + ].includes(t.code) + ? (this.reportSendCmdFailed(t, { sid: d.SID, cid: d.CID, ser: o }, u), + Promise.reject(t)) + : Promise.reject(t) + }) + ) + } + reportSendCmdFailed(e, t, i) { + var r + this.reporter.reportTraceStart('exceptions', { + user_id: this.core.auth.getLoginUser(), + trace_id: + null === (r = this.socket) || void 0 === r ? void 0 : r.sessionId, + start_time: i, + action: 2, + exception_service: 6, + }) + var s = Ve(e, 'detail.disconnect_reason') || '', + n = + e.code === de.V2NIM_ERROR_CODE_DISCONNECT + ? JSON.stringify({ disconnect_reason: s }) + : e.detail.reason + this.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: e.code, + description: n, + operation_type: 1, + target: `${t.sid}-${t.cid}`, + context: `${t.ser}`, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.reporter.reportTraceEnd('exceptions', 1) + } + onMessage(e) { + var t = ht(e, this.logger) + if (t && t.length > 0) { + var i = t[0], + r = i.raw.ser + for (var s of (i.error && + (this.logger.error( + 'clientSocketV2::onMessage packet error', + `${i.raw.sid}_${i.raw.cid}, ser:${r},`, + i.error + ), + i.error.code === de.V2NIM_ERROR_CODE_UNPACK_ERROR && + this.core.eventBus.emit('BinaryClientSocket/unpackError')), + 'heartbeat' !== i.cmd && + (this.logger.getDebugMode() + ? this.logger.debug( + `clientSocketV2::recvCmd ${i.raw.sid}_${i.raw.cid},${i.cmd},ser:${r}`, + e + ) + : this.logger.log( + `clientSocketV2::recvCmd ${i.raw.sid}_${i.raw.cid},${i.cmd},ser:${r},code:${i.raw.code}` + )), + t)) + this.packetHandler(s) + } + } + packetHandler(e) { + var t, i, r, s + if (e) { + var n = e.raw.ser, + o = this.sendingCmdMap.get(n) + if (o && o.cmd === e.cmd) { + var { callback: a, timer: c, params: d } = o + if ( + (clearTimeout(c), + (e.params = d), + this.sendingCmdMap.delete(n), + 'heartbeat' === e.cmd) + ) + return void a[0]() + var l = + null === + (i = + null === (t = this.core[e.service]) || void 0 === t + ? void 0 + : t.process) || void 0 === i + ? void 0 + : i.call(t, e) + l && 'function' == typeof l.then + ? l + .then((e) => { + a[0](e) + }) + .catch((e) => { + a[1](e) + }) + : (this.logger.log( + 'clientSocketV2::handlerFn without promise', + e.service, + e.cmd + ), + a[0](e)) + } else { + var p = + null === + (s = + null === (r = this.core[e.service]) || void 0 === r + ? void 0 + : r.process) || void 0 === s + ? void 0 + : s.call(r, e) + p && + 'function' == typeof p.then && + p.catch((e) => { + this.logger.error( + 'clientSocketV2::no obj cache, no process handler', + e + ) + }) + } + } + } + markCmdInvalid(e, t, i) { + var r = this.sendingCmdMap.get(e) + if (r) { + var { callback: s, timer: n } = r + n && clearTimeout(n), + this.sendingCmdMap.delete(e), + this.logger.warn(`clientSocketV2::packet ${e}, ${i} is invalid:`, t), + s[1](t) + } + } + markAllCmdInvaild(e) { + this.logger.log('markAllCmdInvaild', e), + this.sendingCmdMap.forEach((t) => { + var { callback: i, timer: r, cmd: s } = t + this.logger.log(`clientSocketV2::markAllCmdInvaild:cmd ${s}`), + r && clearTimeout(r), + i[1](e) + }), + this.sendingCmdMap.clear() + } + ping() { + var e + return Te(this, void 0, void 0, function* () { + clearTimeout(this.pingTimer) + try { + yield this.sendCmd('heartbeat') + } catch (t) { + if (t.code === de.V2NIM_ERROR_CODE_DISCONNECT) return + if (yield this.testHeartBeat5Timeout()) + return ( + yield this.core.reporterHookLinkKeep.update({ + code: 0, + description: 'Heartbeat-discovered link failure', + operation_type: 1, + target: + null === (e = this.socket) || void 0 === e ? void 0 : e.url, + }), + this.core.reporterHookLinkKeep.end(!0), + void this.doDisconnect(xt.OFFLINE, 'PingError') + ) + } + this.pingTimer = setTimeout(() => { + this.ping() + }, 3e4) + }) + } + testHeartBeat5Timeout() { + return Te(this, void 0, void 0, function* () { + clearTimeout(this.pingTimer) + for (var e = 0; e < 5; e++) + try { + return yield this.sendCmd('heartbeat', {}, { timeout: 3e3 }), !1 + } catch (t) { + this.logger.log(`clientSocketV2::test heartbeat ${e} Timeout`) + } + return !0 + }) + } + initOnlineListener() { + this.hasNetworkListener || + (this.logger.log('clientSocketV2::onlineListener:init'), + (this.hasNetworkListener = !0), + Ae.net.onNetworkStatusChange((e) => { + this.logger.log('clientSocketV2::onlineListener:network change', e) + var t = this.auth.getLoginStatus() + e.isConnected && 1 === t + ? this.ping() + : e.isConnected && 3 === t + ? (this.logger.log( + 'clientSocketV2::onlineListener:online and connectStatus is waiting, do reLogin' + ), + this.auth.reconnect.clearReconnectTimer(), + this.auth.reconnect.doReLogin()) + : e.isConnected || this.doDisconnect(xt.OFFLINE, 'OfflineListener') + })) + } + destroyOnlineListener() { + this.logger.log('clientSocketV2::onlineListener:destroy'), + Ae.net.offNetworkStatusChange(), + (this.hasNetworkListener = !1) + } +} +var Jt, + zt = [ + 'disconnect', + 'connect', + 'heartbeat', + 'message', + 'json', + 'event', + 'ack', + 'error', + 'noop', + ], + Xt = ['transport not supported', 'client not handshaken', 'unauthorized'], + Qt = ['reconnect'] +class Zt extends ne { + constructor(e, t, i) { + super(), + (this.websocket = null), + (this.socketConnectTimer = 0), + (this.url = ''), + (this.linkSSL = !0), + (this.core = e), + (this.url = t), + (this.linkSSL = i), + (this.status = 'disconnected'), + (this.logger = e.logger), + this.connect() + } + connect() { + 'connecting' !== this.status && 'connected' !== this.status + ? ((this.status = 'connecting'), + this.core.adapters + .request( + `${this.linkSSL ? 'https' : 'http'}://${ + this.url + }/socket.io/1/?t=${Date.now()}`, + { + method: 'GET', + dataType: 'text', + timeout: this.core.options.xhrConnectTimeout || 8e3, + }, + { exception_service: 6 } + ) + .then((e) => { + if ('connecting' === this.status) { + var [t, i] = e.data.split(':') + return ( + (this.sessionId = t), + this.logger.log( + `imsocket::XHR success. status ${this.status}, ${ + 'connecting' === this.status + ? 'continue websocket connection' + : 'stop websocket connection' + }` + ), + this._createWebsocket( + `${this.linkSSL ? 'wss' : 'ws'}://${ + this.url + }/socket.io/1/websocket/${t}` + ) + ) + } + }) + .catch((e) => { + if ('connecting' === this.status) { + var t = `imsocket::XHR fail. raw message: "${ + (e = e || {}).message + }", code: "${e.code}"`, + i = e.code + i = + 'v2' === Ve(this.core, 'options.apiVersion') + ? e.code === de.V2NIM_ERROR_CODE_CONNECT_TIMEOUT + ? de.V2NIM_ERROR_CODE_CONNECT_TIMEOUT + : de.V2NIM_ERROR_CODE_CONNECT_FAILED + : 408 === e.code + ? 408 + : 415 + var r = new he({ code: i, detail: { reason: t, rawError: e } }) + this.logger.error(t), + (this.status = 'disconnected'), + this.emit('handshakeFailed', r) + } + })) + : this.logger.warn( + 'imsocket::socket is connecting or connected', + this.status + ) + } + close() { + if (((this.status = 'disconnected'), this.websocket)) { + this.logger.log('imsocket:: close websocket') + try { + this.websocket.send(this.encodePacket({ type: 'disconnect' })) + } catch (e) { + this.logger.warn('imsocket::attempt to send encodePacket error', e) + } + try { + this.websocket.close() + } catch (e) { + this.logger.warn('imsocket::attempt to close websocket error', e) + } + this.clean(), + this.emit('disconnect', { code: 0, reason: 'Active close websocket' }) + } + } + clean() { + ;(this.status = 'disconnected'), + clearTimeout(this.socketConnectTimer), + this.websocket && + ((this.socketUrl = void 0), + (this.websocket.onmessage = null), + (this.websocket.onopen = null), + (this.websocket.onerror = null), + (this.websocket.onclose = null), + (this.websocket = null)) + } + onConnect() { + ;(this.status = 'connected'), + this.emit('connect'), + clearTimeout(this.socketConnectTimer) + } + _createWebsocket(e) { + ;(this.socketConnectTimer = setTimeout(() => { + this.logger.error( + 'imsocket::Websocket connect timeout. url: ', + this.socketUrl + ), + this.emit( + 'handshakeFailed', + new he({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CONNECT_TIMEOUT + : 415, + detail: { + reason: `imsocket::Websocket connect timeout. url: ${this.socketUrl}`, + }, + }) + ) + }, this.core.options.socketConnectTimeout || 8e3)), + (this.socketUrl = e), + (this.websocket = new Ae.WebSocket(e)), + (this.websocket.onmessage = this.onMessage.bind(this)), + (this.websocket.onclose = (e) => { + ;(e = e || {}), + this.logger.log( + `imsocket::Websocket onclose done ${e.wasClean}/${e.code}/${e.reason}` + ), + this.clean(), + this.emit('disconnect', { code: e.code || 0, reason: e.reason }) + }), + (this.websocket.onerror = (e) => { + this.logger.error('imsocket::Websocket onerror', e), + 'logined' === this.core.status && this.core.clientSocket.ping() + }) + } + onMessage(e) { + var t, + i = this.decodePacket(e.data) + if (i) + switch (i.type) { + case 'connect': + this.onConnect() + break + case 'disconnect': + this.close(), + this.emit('disconnect', { + code: 0, + reason: 'MessageEvent type disconnect', + }) + break + case 'message': + case 'json': + this.emit('message', i.data) + break + case 'event': + i.name && this.emit(i.name, i.args) + break + case 'error': + 'unauthorized' === i.reason + ? this.emit('connect_failed', i.reason) + : this.emit('error', i.reason), + this.logger.error( + 'imsocket::Websocket connect failed, onmessage type error. url: ', + this.socketUrl + ), + clearTimeout(this.socketConnectTimer), + this.emit( + 'handshakeFailed', + new he({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CONNECT_FAILED + : 408, + detail: { + reason: `imsocket::Websocket connect failed, onMessage socket error. url: ${this.socketUrl}`, + }, + }) + ) + break + case 'heartbeat': + null === (t = this.websocket) || + void 0 === t || + t.send(this.encodePacket({ type: 'heartbeat' })) + break + default: + this.logger.warn('imsocket::Websocket no handler type', i.type) + } + } + encodePacket(e) { + var t, + i, + { type: r, id: s = '', endpoint: n = '', ack: o } = e, + a = null + if (!r) return '' + switch (r) { + case 'error': + ;(t = e.reason ? Xt.indexOf(e.reason) : ''), + (i = e.advice ? Qt.indexOf(e.advice) : ''), + ('' === t && '' === i) || (a = t + ('' !== i ? '+' + i : '')) + break + case 'message': + '' !== e.data && (a = e.data) + break + case 'event': + ;(t = { name: e.name }), + (t = + e.args && e.args.length + ? { name: e.name, args: e.args } + : { name: e.name }), + (a = JSON.stringify(t)) + break + case 'json': + a = JSON.stringify(e.data) + break + case 'connect': + e.qs && (a = e.qs) + break + case 'ack': + a = + e.ackId + + (e.args && e.args.length ? '+' + JSON.stringify(e.args) : '') + } + var c = [zt.indexOf(r), s + ('data' === o ? '+' : ''), n] + return null != a && c.push(a), c.join(':') + } + decodePacket(e) { + if (e) + if ('�' != e.charAt(0)) { + var t = e.match(/([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/) + if (t) { + var i, + [, r, s, n, o, a] = t, + c = { type: zt[+r], endpoint: o } + switch ((s && ((c.id = s), (c.ack = !n || 'data')), c.type)) { + case 'error': + ;(i = a.split('+')), (c.reason = Xt[+i[0]] || '') + break + case 'message': + c.data = a || '' + break + case 'connect': + c.qs = a || '' + break + case 'event': + try { + var d = JSON.parse(a) + ;(c.name = d.name), (c.args = d.args) + } catch (e) { + this.logger.error('imsocket::parseData::type::event error', e) + } + c.args = c.args || [] + break + case 'json': + try { + c.data = JSON.parse(a) + } catch (e) { + this.logger.error('imsocket::parseData::type::json error', e) + } + break + case 'ack': + if ( + (i = a.match(/^([0-9]+)(\+)?(.*)/)) && + ((c.ackId = i[1]), (c.args = []), i[3]) + ) + try { + c.args = i[3] ? JSON.parse(i[3]) : [] + } catch (e) { + this.logger.error('imsocket::parseData::type::ack error', e) + } + } + return c + } + } else this.logger.error('imsocket::unrecognize dataStr', e.slice(0, 20)) + } + send(e) { + var t, + i = { data: e, type: 'message', endpoint: '' } + null === (t = this.websocket) || + void 0 === t || + t.send(this.encodePacket(i)) + } +} +!(function (e) { + ;(e[(e.ACTIVE = 1)] = 'ACTIVE'), + (e[(e.KICKED = 2)] = 'KICKED'), + (e[(e.OFFLINE = 3)] = 'OFFLINE') +})(Jt || (Jt = {})) +class ei { + constructor(e) { + ;(this.isReconnect = !1), + (this.packetTimeout = 8e3), + (this.linkSSL = !0), + (this.packetSer = 1), + (this.backoff = new kt({ max: 8e3, min: 1600, jitter: 0.01 })), + (this.sendingCmdMap = new Map()), + (this.pingTimer = 0), + (this.hasNetworkListener = !1), + (this.core = e), + (this.auth = e.auth), + (this.logger = e.logger), + (this.reporter = e.reporter), + (this.timerManager = e.timerManager), + (this.eventBus = e.eventBus), + this.setListener() + } + setListener() { + this.core.eventBus.on('V2NIMLoginService/loginLifeCycleLoginSucc', () => { + this.isReconnect = !0 + }) + } + setSessionId(e) { + this.socket && (this.socket.sessionId = e) + } + setLinkSSL(e) { + this.linkSSL = e + } + connect(e, t = !1) { + var i, r + return Te(this, void 0, void 0, function* () { + this.isReconnect = t + var s = this.core.auth.getConnectStatus() + if (1 === s) { + var n = `clientSocket::connect status is ${s}, and would not repeat connect`, + o = new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: { reason: n }, + }) + return this.logger.warn(n), Promise.reject(o) + } + this.auth.lifeCycle.processEvent('connect') + try { + yield this.auth.doLoginStepsManager.add(this.doConnect(e)), + this.logger.log( + `clientSocketV2:: connect success with link url: ${e}, isReconnect: ${t}` + ), + this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'TCP', + target: e, + code: 200, + mixlink: !0, + succeed: !0, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.auth.lifeCycle.processEvent('connectSucc') + } catch (t) { + var a = t + if ( + (this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'TCP', + target: e, + code: a.code || 0, + description: `connectFailed:${a.message}`, + mixlink: !0, + succeed: !1, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + a.code === de.V2NIM_ERROR_CODE_CANCELLED || + a.code === de.V2NIM_ERROR_CODE_TIMEOUT) + ) + throw ( + (null === (i = this.socket) || void 0 === i || i.close(), + null === (r = this.socket) || + void 0 === r || + r.removeAllListeners(), + (this.socket = void 0), + t) + ) + throw ( + (this.logger.warn( + `clientSocketV2::connect failed with link url: ${e}`, + a + ), + this.auth.lifeCycle.processEvent('connectFail', a), + t) + ) + } + }) + } + doConnect(e) { + var t = !1 + return new Promise((i, r) => { + ;(this.socket = new Zt(this.core, e, this.linkSSL)), + this.socket.on('connect', () => { + this.logger.log('clientSocketV2::socket on connect', e), + this.core.reporterHookLinkKeep.start(), + this.core.reporterHookLinkKeep.update({ + code: 0, + description: 'connection begin', + operation_type: 0, + target: e, + }), + (t = !0), + i() + }), + this.socket.on('message', this.onMessage.bind(this)), + this.socket.on('disconnect', (i) => + Te(this, void 0, void 0, function* () { + ;(t = !0), + this.logger.log('clientSocketV2::socket on disconnect', i), + yield this.core.reporterHookLinkKeep.update({ + code: (null == i ? void 0 : i.code) || 0, + description: + (null == i ? void 0 : i.reason) || 'socket on disconnect', + operation_type: 1, + target: e, + }), + this.core.reporterHookLinkKeep.end(!1), + this.doDisconnect(Jt.OFFLINE, 'SocketOnDisconnect') + }) + ), + this.socket.on('handshakeFailed', (e) => { + t + ? this.ping() + : (this.logger.error( + `clientSocketV2::handshake failed: "${e && e.message}"` + ), + this.cleanSocket()), + (t = !0), + r(e) + }) + }) + } + cleanSocket() { + this.socket && + ('function' == typeof this.socket.removeAllListeners && + this.socket.removeAllListeners(), + 'function' == typeof this.socket.close && this.socket.close(), + (this.socket = void 0)) + } + resetSocketConfig() { + this.backoff.reset(), this.initOnlineListener() + } + doDisconnect(e, t) { + if ( + (this.logger.log(`clientSocketV2::doDisconnect:type:${e},reason:`, t), + 0 !== this.core.auth.getConnectStatus()) + ) { + var i = { 1: 'close', 2: 'kicked', 3: 'broken' }[e] || '' + this.markAllCmdInvaild( + new he({ + code: de.V2NIM_ERROR_CODE_DISCONNECT, + detail: { + reason: 'Packet timeout due to instance disconnect', + disconnect_reason: i, + }, + }) + ), + this.timerManager.destroy(), + clearTimeout(this.pingTimer), + this.cleanSocket(), + e === Jt.ACTIVE || e === Jt.KICKED + ? this.destroyOnlineListener() + : e === Jt.OFFLINE && + (this.auth.lifeCycle.processEvent( + 'connectionBroken', + new he({ + code: de.V2NIM_ERROR_CODE_DISCONNECT, + detail: { reason: 'connection broken due to internal reasons' }, + }) + ), + this.logger.log( + `clientSocketV2::doDisconnect: pending reconnect ${this.isReconnect}` + ), + this.isReconnect && this.auth.lifeCycle.processEvent('waiting')) + } else this.logger.warn('clientSocketV2::doDisconnect:already disconnected') + } + sendCmd(e, t, i) { + var r = this.core.auth.getLoginStatus(), + s = { cmd: e } + if ( + 1 !== r && + !['v2Login', 'login', 'chatroomLogin', 'v2ChatroomLogin'].includes(e) + ) + return ( + this.logger.warn( + `clientSocketV2::NIM login status is ${r}, so can not sendCmd ${e}` + ), + Promise.reject( + new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: Object.assign( + { reason: 'Can not sendCmd due to no logined' }, + s + ), + }) + ) + ) + var n = 'heartbeat' !== e, + o = n ? this.packetSer++ : 0, + a = pt(e, o, this.logger, t) + if (!a) { + var c = new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: Object.assign(Object.assign({}, s), { + reason: `SendCmd::createCmd error: ${o} ${e}`, + }), + }) + return this.logger.error(c), Promise.reject(c) + } + var { packet: d, hasPacketResponse: l, hasPacketTimer: p } = a, + h = JSON.stringify(d) + n && + (this.logger.getDebugMode() + ? this.logger.debug( + `clientSocketV2::sendCmd: ${d.SID}_${d.CID},${e},ser:${o}`, + h + ) + : this.logger.log( + `clientSocketV2::sendCmd: ${d.SID}_${d.CID},${e},ser:${o}` + )) + var u = new Date().getTime() + return new Promise((r, n) => { + l && + this.sendingCmdMap.set(o, { + cmd: e, + params: t, + callback: [r, n], + timer: p + ? setTimeout( + () => { + var t = new he({ + code: de.V2NIM_ERROR_CODE_PROTOCOL_TIMEOUT, + detail: Object.assign( + { + ser: o, + reason: `Packet Timeout: ser ${o} cmd ${e}`, + timetag: new Date().getTime(), + }, + s + ), + }) + this.markCmdInvalid(o, t, e) + }, + i && i.timeout ? i.timeout : this.packetTimeout + ) + : null, + }) + try { + this.socket.send(h), l || r(d) + } catch (t) { + var a = new he({ + code: de.V2NIM_ERROR_CODE_PROTOCOL_SEND_FAILED, + detail: Object.assign( + { + ser: o, + reason: + 'Unable to send packet' + + (t && t.message ? ': ' + t.message : ''), + timetag: new Date().getTime(), + rawError: t, + }, + s + ), + }) + this.markCmdInvalid(o, a, e), n(a) + } + }).catch((e) => + Te(this, void 0, void 0, function* () { + var t, + i = e + if ( + ![ + de.V2NIM_ERROR_CODE_DISCONNECT, + de.V2NIM_ERROR_CODE_PROTOCOL_TIMEOUT, + de.V2NIM_ERROR_CODE_PROTOCOL_SEND_FAILED, + ].includes(i.code) + ) + return Promise.reject(i) + this.reporter.reportTraceStart('exceptions', { + user_id: this.core.auth.getLoginUser(), + trace_id: + null === (t = this.socket) || void 0 === t ? void 0 : t.sessionId, + start_time: u, + action: 2, + exception_service: 6, + }) + var r = Ve(i, 'detail.disconnect_reason') || '', + s = + i.code === de.V2NIM_ERROR_CODE_DISCONNECT + ? JSON.stringify({ disconnect_reason: r }) + : i.detail.reason + return ( + this.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: i.code, + description: s, + operation_type: 1, + target: `${d.SID}-${d.CID}`, + context: `${d.SER}`, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.reporter.reportTraceEnd('exceptions', 1), + Promise.reject(i) + ) + }) + ) + } + onMessage(e) { + var t = ht(e, this.logger) + if (t && t.length > 0) { + var i = t[0], + r = i.raw.ser + for (var s of (i.error && + this.logger.error( + 'clientSocketV2::onMessage packet error', + `${i.raw.sid}_${i.raw.cid}, ser:${r},`, + i.error + ), + 'heartbeat' !== i.cmd && + (this.logger.getDebugMode() + ? this.logger.debug( + `clientSocketV2::recvCmd ${i.raw.sid}_${i.raw.cid},${i.cmd},ser:${r}`, + i.content + ) + : this.logger.log( + `clientSocketV2::recvCmd ${i.raw.sid}_${i.raw.cid},${i.cmd},ser:${r};code:${i.raw.code}` + )), + t)) + this.packetHandler(s) + } + } + packetHandler(e) { + var t, i, r, s + if (e) { + var n = e.raw.ser, + o = this.sendingCmdMap.get(n) + if (o && o.cmd === e.cmd) { + var { callback: a, timer: c, params: d } = o + if ( + (clearTimeout(c), + (e.params = d), + this.sendingCmdMap.delete(n), + 'heartbeat' === e.cmd) + ) + return void a[0]() + var l = + null === + (i = + null === (t = this.core[e.service]) || void 0 === t + ? void 0 + : t.process) || void 0 === i + ? void 0 + : i.call(t, e) + l && 'function' == typeof l.then + ? l + .then((e) => { + a[0](e) + }) + .catch((e) => { + a[1](e) + }) + : (this.logger.log( + 'clientSocketV2::handlerFn without promise', + e.service, + e.cmd + ), + a[0](e)) + } else { + var p = + null === + (s = + null === (r = this.core[e.service]) || void 0 === r + ? void 0 + : r.process) || void 0 === s + ? void 0 + : s.call(r, e) + p && + 'function' == typeof p.then && + p.catch((e) => { + this.logger.error( + 'clientSocketV2::no obj cache, no process handler', + e + ) + }) + } + } + } + markCmdInvalid(e, t, i) { + var r = this.sendingCmdMap.get(e) + if (r) { + var { callback: s, timer: n } = r + n && clearTimeout(n), + this.sendingCmdMap.delete(e), + this.logger.warn(`clientSocketV2::packet ${e}, ${i} is invalid:`, t), + s[1](t) + } + } + markAllCmdInvaild(e) { + this.logger.log('markAllCmdInvaild', e), + this.sendingCmdMap.forEach((t) => { + var { callback: i, timer: r, cmd: s } = t + this.logger.log(`clientSocketV2::markAllCmdInvaild:cmd ${s}`), + r && clearTimeout(r), + i[1](e) + }), + this.sendingCmdMap.clear() + } + ping() { + var e + return Te(this, void 0, void 0, function* () { + clearTimeout(this.pingTimer) + try { + yield this.sendCmd('heartbeat') + } catch (t) { + if (t.code === de.V2NIM_ERROR_CODE_DISCONNECT) return + if (yield this.testHeartBeat5Timeout()) + return ( + yield this.core.reporterHookLinkKeep.update({ + code: 0, + description: 'Heartbeat-discovered link failure', + operation_type: 1, + target: + null === (e = this.socket) || void 0 === e ? void 0 : e.url, + }), + this.core.reporterHookLinkKeep.end(!0), + void this.doDisconnect(Jt.OFFLINE, 'PingError') + ) + } + this.pingTimer = setTimeout(() => { + this.ping() + }, 3e4) + }) + } + testHeartBeat5Timeout() { + return Te(this, void 0, void 0, function* () { + clearTimeout(this.pingTimer) + for (var e = 0; e < 5; e++) + try { + return yield this.sendCmd('heartbeat', {}, { timeout: 3e3 }), !1 + } catch (t) { + this.logger.log(`clientSocketV2::test heartbeat ${e} Timeout`) + } + return !0 + }) + } + initOnlineListener() { + this.hasNetworkListener || + (this.logger.log('clientSocketV2::onlineListener:init'), + (this.hasNetworkListener = !0), + Ae.net.onNetworkStatusChange((e) => { + this.logger.log('clientSocketV2::onlineListener:network change', e) + var t = this.auth.getConnectStatus(), + i = this.auth.getLoginStatus() + e.isConnected && 1 === i + ? this.ping() + : e.isConnected && 3 === t + ? (this.logger.log( + 'clientSocketV2::onlineListener:online and connectStatus is waiting, do reLogin' + ), + this.auth.reconnect.clearReconnectTimer(), + this.auth.reconnect.doReLogin()) + : e.isConnected || this.doDisconnect(Jt.OFFLINE, 'OfflineListener') + })) + } + destroyOnlineListener() { + this.logger.log('clientSocketV2::onlineListener:destroy'), + Ae.net.offNetworkStatusChange(), + (this.hasNetworkListener = !1) + } +} +class ti { + constructor(e) { + ;(this.currenRetryCount = 0), + (this.backoff = new kt({ max: 8e3, min: 1600, jitter: 0.01 })), + (this.reconnectTimer = 0), + (this.appVisibility = !0), + (this.core = e), + (this.auth = e.V2NIMLoginService) + } + reset() { + ;(this.currenRetryCount = 0), + this.backoff.reset(), + this.reconnectTimer && clearTimeout(this.reconnectTimer) + } + clearReconnectTimer() { + this.reconnectTimer && clearTimeout(this.reconnectTimer) + } + setAppVisibility(e) { + var t = this.getAppVisibility() + ;(this.appVisibility = e), + !t && + e && + 3 === this.auth.getLoginStatus() && + (this.core.logger.log( + 'reconnect::appVisibility change to visible, try to reconnect' + ), + this.auth.reconnect.clearReconnectTimer(), + this.auth.reconnect.doReLogin()) + } + getAppVisibility() { + return this.appVisibility + } + attempToReLogin() { + var e = this.backoff.duration() + if ('function' == typeof this.reconnectDelayProvider) + try { + var t = this.reconnectDelayProvider(e) + 'number' == typeof t && + t >= 0 && + (e = t >= 1e3 ? t : t + 200 + Math.ceil(300 * Math.random())) + } catch (e) { + this.core.logger.error( + 'reconnect::connectDelayProvider excute failed,', + e + ) + } + return ( + this.currenRetryCount++, + this.core.logger.log( + `reconnect::reconnect timer is about to be set, delay ${e} ms, current retry count is ${this.currenRetryCount}` + ), + this.core.reporter.reportTraceStart('login', { + user_id: this.auth.getLoginUser(), + action: 'auto_login', + binary_websocket: this.auth.binaryWebsocket, + }), + this.clearReconnectTimer(), + (this.reconnectTimer = setTimeout(() => { + this.core.logger.log('reconnect::reconnect timer is now triggered') + var e = this.auth.getConnectStatus() + 3 === e + ? this.doReLogin() + : this.core.logger.warn( + `reconnect::reconnect timer is over because connect status now is ${e}` + ) + }, e)), + !0 + ) + } + doReLogin() { + if (!this.getAppVisibility()) + return ( + this.core.logger.log( + 'reconnect::reLogin skip, cause app is not visible' + ), + void this.auth.lifeCycle.processEvent('waiting') + ) + ;(this.auth.loginOption.forceMode = !1), + (this.auth.originLoginPromise = this.auth.doLogin(!0)) + var e = this.auth.previousLoginManager.add(this.auth.originLoginPromise) + return ( + e + .then(() => { + this.core.reporter.reportTraceEnd('login', !0) + }) + .catch((e) => { + var t = e + if ( + (this.core.logger.warn('reconnect::try login but failed due to', t), + this.core.reporter.reportTraceEnd('login', !1), + this.auth.checkLoginTerminalCode(t && t.code)) + ) + return ( + this.auth.clientSocket.doDisconnect( + xt.ACTIVE, + 'ReloginTerminated' + ), + void this.auth.lifeCycle.processEvent('exited', t) + ) + t && 399 === t.code && this.auth.lbs.reset(), + this.auth.lifeCycle.processEvent('waiting') + }), + e + ) + } + _setReconnectDelayProvider(e) { + this.reconnectDelayProvider = e + } +} +function ii(e) { + e = e || [] + for (var t = [], i = 0; i < e.length; i++) + -1 === t.indexOf(e[i]) && t.push(e[i]) + return t +} +class ri { + constructor(e) { + ;(this.socketLinkUrls = []), + (this.timer = 0), + (this.failedCount = 0), + (this.core = e), + (this.auth = e.V2NIMLoginService) + } + getLbsInfos() { + return Te(this, void 0, void 0, function* () { + if (this.socketLinkUrls.length > 0) { + var e = this.socketLinkUrls.shift() + return ( + this.core.logger.log( + 'V2NIMLoginService::getLbsInfos:use cache link', + e + ), + Promise.resolve(e) + ) + } + this.auth.lifeCycle.processEvent('addressing'), + this.core.reporterHookLBS.start(this.core.account) + var t = ii(this.auth.config.lbsUrls) + try { + var i = yield this.ladderLoad(t) + if (200 !== i.status || !i.data) + throw ( + (this.core.logger.error( + 'V1NIMLoginService::getLbsInfos:error status', + i.status, + i + ), + new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { + reason: `V2NIMLoginService::getLbsInfos failed, status ${i.status}`, + }, + })) + ) + this.success(i) + } catch (e) { + var r = e + if ( + (this.core.logger.error( + `V2NIMLoginService::lbs getLbsInfos error, use default link: ${this.auth.config.linkUrl}. error:`, + e + ), + this.reportForFail(t[0], r.code, r.message), + this.checkTerminator(r.code)) + ) + throw e + this.socketLinkUrls = [this.auth.config.linkUrl] + } + return this.socketLinkUrls.shift() + }) + } + checkTerminator(e) { + return ( + e === de.V2NIM_ERROR_CODE_CANCELLED || e === de.V2NIM_ERROR_CODE_TIMEOUT + ) + } + generateUrl(e) { + var t = (e = this.processLbsUrl(e)).indexOf('?') > -1 ? '&' : '?' + return ( + e + + t + + 'k=' + + this.core.options.appkey + + '&id=' + + this.core.auth.getLoginUser() + + '&sv=180&pv=1&networkType=0&lv=1' + ) + } + processLbsUrl(e) { + return De() ? e.replace('/webconf', '/wxwebconf') : e + } + requstLbs(e) { + return this.auth.doLoginStepsManager.add( + this.core.adapters.request(this.generateUrl(e), { + method: 'GET', + dataType: 'json', + timeout: 8e3, + }) + ) + } + setLadderTimer(e, t, i, r) { + this.timer && clearTimeout(this.timer) + var s = e[t] + this.timer = setTimeout(() => { + s && + (this.setLadderTimer(e, t + 1, i, r), + this.core.logger.log( + `V2NIMLoginService::getLbsInfos ${t}:`, + this.processLbsUrl(s) + ), + this.reportForLbsStart(s, t), + this.requstLbs(s) + .then((e) => { + this.reset(), i(Object.assign(Object.assign({}, e), { url: s })) + }) + .catch((i) => { + var n + if ( + (this.core.logger.warn( + `V2NIMLoginService::getLbsInfos ${t} failed:`, + i + ), + (this.failedCount += 1), + this.reportForFailOnce( + s, + i.code, + (null === (n = i.detail) || void 0 === n ? void 0 : n.reason) || + i.message + ), + this.failedCount >= e.length || this.checkTerminator(i.code)) + ) + return this.reset(), void r(i) + })) + }, 2e3) + } + ladderLoad(e) { + return new Promise((t, i) => { + e.length > 1 && this.setLadderTimer(e, 1, t, i) + var r = e[0] + this.core.logger.log('V2NIMLoginService::getLbsInfos 0:', r), + this.reportForLbsStart(r, 0), + this.requstLbs(r) + .then((e) => { + this.reset(), t(Object.assign(Object.assign({}, e), { url: r })) + }) + .catch((t) => { + var s + ;(this.failedCount += 1), + this.core.logger.warn( + 'V2NIMLoginService::getLbsInfos 0 failed:', + t + ), + this.reportForFailOnce( + r, + t.code, + (null === (s = t.detail) || void 0 === s ? void 0 : s.reason) || + t.message + ), + (this.failedCount >= e.length || this.checkTerminator(t.code)) && + (this.reset(), i(t)) + }) + }) + } + success(e) { + var t, + i, + r = e.data.common, + s = r['mix.link'] || [], + n = r['link.default'] || [] + ;(this.socketLinkUrls = s.concat(n).concat(this.auth.config.linkUrl)), + e.data['nos-chunk'] && + (null === (t = this.core.cloudStorage) || void 0 === t + ? void 0 + : t.setOptions) && + (this.core.logger.log( + 'getLbsInfos success. lbs.nos-chunk', + e.data['nos-chunk'] + ), + this.core.cloudStorage.setOptions({ + chunkUploadHost: e.data['nos-chunk'], + })), + Array.isArray(e.data.nosup) && + e.data.nosup.length > 0 && + (null === (i = this.core.cloudStorage) || void 0 === i + ? void 0 + : i.setOptions) && + (this.core.logger.log('getLbsInfos success. lbs.nosup', e.data.nosup), + this.core.cloudStorage.setOptions({ + commonUploadHostBackupList: e.data.nosup, + commonUploadHost: e.data.nosup[0], + })), + this.core.logger.log( + 'V2NIMLoginService::getLbsInfos success, socket link:', + this.socketLinkUrls.slice(0), + 'chunkUploadHost: ', + e.data['nos-chunk'] + ), + this.reportForLbsSuccess(e.url, e.data) + } + reportForLbsStart(e, t) { + this.core.reporterHookLBS.updateBegin({ target: e, index: t }) + } + reportForLbsSuccess(e, t) { + this.core.reporterHookLBS.updateComplete({ + target: e, + code: 200, + body: JSON.stringify(t), + }), + this.core.reporterHookLBS.end(!0), + this.core.reporter.reportTraceUpdateV2( + 'login', + { operation_type: 'HTTP', target: e, code: 200, succeed: !0 }, + { asyncParams: Ae.net.getNetworkStatus() } + ) + } + reportForFailOnce(e, t, i) { + this.core.reporterHookLBS.updateComplete({ target: e, code: t, body: i }) + } + reportForFail(e, t, i) { + this.core.reporterHookLBS.end(!1), + this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'HTTP', + target: e, + description: i, + code: t, + succeed: !1, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ) + } + reset() { + ;(this.socketLinkUrls = []), + (this.failedCount = 0), + clearTimeout(this.timer) + } +} +class si { + constructor(e) { + ;(this.lastLoginClientKey = '__NIM_LAST_LOGIN_CLIENT__'), + (this.loginClients = []), + (this.loginClientOfThisConnection = {}), + (this.core = e), + (this.auth = e.V2NIMLoginService) + } + verifyAuthentication(e) { + var t, i + return Te(this, void 0, void 0, function* () { + var r = yield this.auth.doLoginStepsManager.add( + this.refreshLoginToken(this.auth.account) + ), + s = yield this.auth.doLoginStepsManager.add( + this.refreshThirdPartyExt(this.auth.account) + ) + this.auth.token = r + var n, + o = Ae.getSystemInfo(), + a = { + appkey: this.core.options.appkey, + account: this.auth.account, + token: r, + authType: this.auth.loginOption.authType, + appLogin: e ? 0 : 1, + clientType: 16, + clientSession: this.auth.clientSession, + clientId: this.auth.deviceId, + sdkVersion: 100930, + userAgent: this.core.options.loginSDKTypeParamCompat + ? 'Native/10.9.30' + : o.userAgent + .replace('{{appkey}}', this.core.options.appkey) + .slice(0, 299), + libEnv: this.core.options.flutterSdkVersion + ? 'FLUTTER' + : this.core.options.loginSDKTypeParamCompat + ? void 0 + : o.libEnv, + hostEnv: this.core.options.flutterSdkVersion + ? 4 + : this.core.options.loginSDKTypeParamCompat + ? 0 + : o.hostEnvEnum, + sdkHumanVersion: this.core.options.flutterSdkVersion || '10.9.30', + os: o.os, + browser: o.browser, + protocolVersion: 1, + customClientType: this.auth.config.customClientType, + customTag: this.auth.config.customTag, + thirdPartyExtension: s, + isRoutable: + !1 === + (null === (t = this.auth.loginOption.routeConfig) || void 0 === t + ? void 0 + : t.routeEnabled) + ? 0 + : 1, + env: + null === (i = this.auth.loginOption.routeConfig) || void 0 === i + ? void 0 + : i.routeEnvironment, + }, + c = o.os.toLowerCase() + 'UNIAPP' !== Ae.platform || + ('ios' !== c && 'android' !== c && 'harmonyos' !== c) + ? 'React Native' === Ae.platform && + (this.core.logger.log( + 'V2NIMLoginService deviceInfo', + this.core.V2NIMLoginService.deviceInfo, + 'os', + c + ), + (a.isReactNative = 1), + (a.clientType = 'ios' === c ? 2 : 1), + (a.deviceInfo = JSON.stringify( + Object.assign( + { IS_SUPPORT_HONOR: !0 }, + this.core.V2NIMLoginService.deviceInfo + ) + ))) + : ((a.isReactNative = 1), + (a.clientType = 'ios' === c ? 2 : 'android' === c ? 1 : 65), + o.pushDeviceInfo && + o.pushDeviceInfo.MANUFACTURER && + (a.deviceInfo = JSON.stringify( + Object.assign({ IS_SUPPORT_HONOR: !0 }, o.pushDeviceInfo) + ))), + this.core.logger.log( + `V2NIMLoginService::do login,accid:${a.account};clientSession:${a.clientSession};appLogin:${a.appLogin}` + ) + try { + n = yield this.auth.doLoginStepsManager.add( + this.auth.clientSocket.sendCmd('v2Login', { tag: a }) + ) + } catch (e) { + var d = e + if ( + (this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'protocol', + target: '26-3', + code: d.code || 0, + succeed: !1, + description: d.message, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + d.code === de.V2NIM_ERROR_CODE_CANCELLED || + d.code === de.V2NIM_ERROR_CODE_TIMEOUT) + ) + throw d + throw (this.processLoginFailed(d), d) + } + var { data: l, loginClients: p } = n.content + return ( + this.changeLoginClient(1, p), + this.core.reporter.reportTraceUpdateV2( + 'login', + { + operation_type: 'protocol', + target: '26-3', + code: 200, + succeed: !0, + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + (this.loginClientOfThisConnection = Ct(l)), + this.core.clientSocket.setSessionId(l.consid), + Ae.localStorage.setItem( + this.lastLoginClientKey, + JSON.stringify( + Object.assign( + { account: this.auth.account }, + this.loginClientOfThisConnection + ) + ) + ), + this.loginClientOfThisConnection + ) + }) + } + refreshLoginToken(e) { + return Te(this, void 0, void 0, function* () { + if (0 === this.auth.loginOption.authType) return this.auth.token + if ('function' != typeof this.auth.loginOption.tokenProvider) + return this.auth.token + try { + var t = yield this.auth.loginOption.tokenProvider(e) + if ('string' == typeof t) return t + throw ( + (this.core.logger.error( + 'V2NIMLoginService::excute tokenProvider complete but got Unexpected value:', + t + ), + new he({ + code: de.V2NIM_ERROR_CODE_CALLBACK_FAILED, + detail: { + reason: 'Excute tokenProvider complete but got Unexpected value', + rawData: t, + }, + })) + ) + } catch (e) { + var i = e, + r = i + throw ( + (i.code !== de.V2NIM_ERROR_CODE_CALLBACK_FAILED && + (this.core.logger.error( + 'V2NIMLoginService::excute tokenProvider error:', + i + ), + (r = new he({ + code: de.V2NIM_ERROR_CODE_CALLBACK_FAILED, + desc: 'Excute tokenProvider error', + detail: { rawError: e }, + }))), + this.processLoginFailed(i), + r) + ) + } + }) + } + refreshThirdPartyExt(e) { + return Te(this, void 0, void 0, function* () { + if ('function' != typeof this.auth.loginOption.loginExtensionProvider) + return '' + try { + var t = yield this.auth.loginOption.loginExtensionProvider(e) + if ('string' == typeof t) return t + throw ( + (this.core.logger.error( + 'V2NIMLoginService::excute loginExtensionProvider complete but got Unexpected value:', + t + ), + new he({ + code: de.V2NIM_ERROR_CODE_CALLBACK_FAILED, + detail: { + reason: + 'Excute loginExtensionProvider complete but got Unexpected value', + rawData: t, + }, + })) + ) + } catch (e) { + var i = e, + r = i + if ( + (i.code !== de.V2NIM_ERROR_CODE_CALLBACK_FAILED && + (this.core.logger.error( + 'V2NIMLoginService::excute loginExtensionProvider error:', + i + ), + (r = new he({ + code: de.V2NIM_ERROR_CODE_CALLBACK_FAILED, + detail: { + reason: 'Excute loginExtensionProvider error', + rawError: e, + }, + }))), + 2 === this.auth.loginOption.authType) + ) + throw (this.processLoginFailed(i), r) + return '' + } + }) + } + processLoginFailed(e) { + this.auth.clientSocket.doDisconnect(xt.ACTIVE, e), + this.checkLoginTerminalCode(e.code) && + (this.auth.authenticator.reset(), + this.auth.authenticator.clearLastLoginClient()), + this.auth.lifeCycle.processEvent('loginFail', e) + } + changeLoginClient(e, t) { + var i = t.map((e) => Ct(e)) + if (1 === e) + (this.loginClients = i), + this.auth.emit('onLoginClientChanged', e, this.loginClients) + else if (2 === e) { + var r = i.filter((e) => { + var t = this.loginClients.filter((t) => t.clientId === e.clientId) + return this.loginClients.push(e), 0 === t.length + }) + r.length > 0 && this.auth.emit('onLoginClientChanged', e, r) + } else if (3 === e) { + var s = i.filter( + (e) => ( + (function (e, t) { + t = t || (() => !0) + for (var i = [], r = (e = e || []).length, s = 0, n = 0; n < r; n++) + t(e[n - s]) && (i.push(e.splice(n - s, 1)[0]), (s += 1)) + })( + this.loginClients, + (t) => t.clientId === e.clientId && t.consid === e.consid + ), + 0 === + this.loginClients.filter((t) => t.clientId === e.clientId).length + ) + ) + s.length > 0 && this.auth.emit('onLoginClientChanged', e, s) + } + } + checkAutoLogin(e) { + if (e) return !1 + var t = Ae.localStorage.getItem(this.lastLoginClientKey) + if (!t) return !1 + var i = '', + r = '' + try { + var s = JSON.parse(t) + ;(i = Ve(s, 'clientId')), (r = Ve(s, 'account')) + } catch (e) { + return !1 + } + return i === this.auth.deviceId && r === this.auth.account + } + checkLoginTerminalCode(e) { + return [ + de.V2NIM_ERROR_CODE_CANCELLED, + de.V2NIM_ERROR_CODE_TIMEOUT, + de.V2NIM_ERROR_CODE_HANDSHAKE, + 302, + 317, + de.V2NIM_ERROR_CODE_FORBIDDEN, + de.V2NIM_ERROR_CODE_NOT_FOUND, + de.V2NIM_ERROR_CODE_PARAMETER_ERROR, + de.V2NIM_ERROR_CODE_MULTI_LOGIN_FORBIDDEN, + 422, + de.V2NIM_ERROR_CODE_IM_DISABLED, + de.V2NIM_ERROR_CODE_APPKEY_NOT_EXIST, + de.V2NIM_ERROR_CODE_BUNDLEID_CHECK_FAILED, + de.V2NIM_ERROR_CODE_APPKEY_BLOCKED, + de.V2NIM_ERROR_CODE_INVALID_TOKEN, + de.V2NIM_ERROR_CODE_ROBOT_NOT_ALLOWED, + de.V2NIM_ERROR_CODE_ACCOUNT_NOT_EXIST, + de.V2NIM_ERROR_CODE_ACCOUNT_BANNED, + de.V2NIM_ERROR_CODE_USER_PROFILE_NOT_EXIST, + ].includes(e) + } + reset() { + ;(this.loginClients = []), (this.loginClientOfThisConnection = {}) + } + clearLastLoginClient() { + Ae.localStorage.removeItem(this.lastLoginClientKey) + } +} +class ni extends ne { + constructor(e, t) { + super(), (this.name = e), (this.logger = t.logger), (this.core = t) + } + checkV2() { + var e = this.core.options.apiVersion + if ('v2' === e) return !0 + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: `The version "${e}" of client is not supported.` }, + }) + } + checkLogin() { + if (0 === this.core.V2NIMLoginService.getLoginStatus()) + throw new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: { reason: 'Client logout.' }, + }) + } + emit(e, ...t) { + this.logger.debug( + `${this.name}::emit event: '${e.toString()}',`, + void 0 !== t[0] ? t[0] : '', + void 0 !== t[1] ? t[1] : '', + void 0 !== t[2] ? t[2] : '' + ) + try { + return super.emit(e, ...t) + } catch (t) { + return ( + setTimeout(() => { + throw ( + (this.logger.error( + `${ + this.name + }::emit throw error in setTimeout. event: ${e.toString()}. Error`, + t + ), + t) + ) + }, 0), + !1 + ) + } + } + process(e) { + var t = this[e.cmd + 'Handler'], + i = this.handler && this.handler[e.cmd + 'Handler'] + if ('function' == typeof t || 'function' == typeof i) { + if (e.error) + return ( + this.logger.error(`${e.cmd}::recvError`, e.error), + Promise.reject(e.error) + ) + try { + var r = t ? t.call(this, e) : i.call(this.handler, e) + return Promise.resolve(r) + } catch (e) { + return Promise.reject(e) + } + } + var s = Ve(e, 'error.detail.ignore') + return e.error && !s ? Promise.reject(e.error) : Promise.resolve(e) + } +} +class oi { + constructor(e) { + ;(this.name = 'V2NIMLoginLifeCycle'), + (this.loginStatus = 0), + (this.connectStatus = 0), + (this.core = e), + (this.auth = e.V2NIMLoginService), + (this.logger = e.logger) + } + processEvent(e, t, i) { + var r = this.getConnectStatus() + switch (e) { + case 'addressing': + this.logger.log(`${this.name}::addressing`), + this.setLoginStatus(2), + this.setConnectStatus(2) + break + case 'connect': + this.logger.log(`${this.name}::connecting`), + this.setLoginStatus(2), + this.setConnectStatus(2) + break + case 'connectSucc': + this.logger.log(`${this.name}::connect success`), + this.setLoginStatus(2), + this.setConnectStatus(1) + break + case 'connectFail': + this.logger.log(`${this.name}::connect fail`, t), + this.setLoginStatus(3), + this.setConnectStatus(0, t) + break + case 'connectionBroken': + this.logger.log(`${this.name}::connectionBroken:`, t), + this.setLoginStatus(3), + this.setConnectStatus(0, t), + this.core.eventBus.emit( + 'V2NIMLoginService/loginLifeCycleDisconnected', + t + ) + break + case 'loginSucc': + this.logger.log( + `${this.name}::login success, verify authentication success` + ), + this.setLoginStatus(1), + this.core.eventBus.emit( + 'V2NIMLoginService/loginLifeCycleLoginSucc', + i + ) + break + case 'loginFail': + if ( + (this.logger.log( + `${this.name}::login fail due to verify authentication failed:`, + t + ), + !t) + ) + return + this.setLoginStatus( + this.auth.authenticator.checkLoginTerminalCode(t.code) ? 0 : 3 + ), + this.setConnectStatus(0, t), + this.auth.emit('onLoginFailed', t) + break + case 'logout': + this.logger.log(`${this.name}::logout`), + this.setLoginStatus(0), + this.setConnectStatus(0), + this.core.eventBus.emit('V2NIMLoginService/loginLifeCycleLogout') + break + case 'kicked': + this.logger.log(`${this.name}::kicked`, i), + this.setLoginStatus(0), + this.setConnectStatus(0, t), + this.core.eventBus.emit('V2NIMLoginService/loginLifeCycleKicked') + break + case 'exited': + this.logger.log(`${this.name}::exited`, t), + this.setLoginStatus(0), + this.setConnectStatus(0, t) + break + case 'waiting': + this.logger.log(`${this.name}::waiting to reconnect`), + this.setLoginStatus(3), + this.setConnectStatus(3), + 2 !== r && this.auth.reconnect.attempToReLogin() + } + } + getConnectStatus() { + return this.connectStatus + } + getLoginStatus() { + return this.loginStatus + } + setLoginStatus(e) { + e !== this.loginStatus && + ((this.loginStatus = e), this.auth.emit('onLoginStatus', e)) + } + setConnectStatus(e, t) { + if (e !== this.connectStatus) { + var i = this.connectStatus + ;(this.connectStatus = e), + this.auth.emit('onConnectStatus', e), + this.delegateConnectEvent(i, e, t) + } + } + delegateConnectEvent(e, t, i) { + 1 === e && 0 === t && i && this.auth.emit('onDisconnected', i), + 2 === e && 0 === t && i && this.auth.emit('onConnectFailed', i) + } +} +class ai { + constructor(e) { + ;(this.core = e), (this.auth = e.V2NIMLoginService), (this.datas = []) + } + switchDataSync(e) { + return Te(this, void 0, void 0, function* () { + var { type: t, state: i, error: r, subType: s } = e, + n = this.datas.filter((e) => e.type === t && e.subType === s) + n.length > 0 + ? ((n[0].state = i), (n[0].error = r)) + : this.datas.push({ type: t, state: i, subType: s }) + var o = this.datas.every((e) => 3 === e.state) + 1 === t && + (2 === i && 'mainSync' === s + ? (this.core.eventBus.emit('V2NIMLoginService/syncing'), + this.auth.emit('onDataSync', t, i)) + : 3 === i && + o && + (this.core.eventBus.emit('V2NIMLoginService/syncDone', r), + this.auth.emit('onDataSync', t, i, r))) + }) + } + checkSyncing() { + return this.datas.some((e) => 'mainSync' === e.subType && 2 === e.state) + } + reset() { + this.datas = [] + } +} +var ci = { + '6_3': 'notifylog', + '6_4': 'uploadLog', + '6_23': 'getServerTime', + '6_31': 'notifyDetect', + '6_32': 'uploadDetect', + '6_37': 'wsDetect', + }, + di = { + type: 1, + params: 2, + result: 3, + t1: 100, + t2: 101, + t3: 102, + t4: 103, + t5: 104, + t6: 105, + }, + li = { + k1: 1, + k2: 2, + k3: 3, + k4: 4, + k5: 5, + k6: 6, + k7: 7, + k8: 8, + k9: 9, + k10: 10, + }, + pi = { + notifylog: { sid: 6, cid: 3, service: 'misc' }, + uploadLog: { + sid: 6, + cid: 4, + service: 'misc', + hasPacketResponse: !1, + params: [ + { type: 'String', name: 'url' }, + { + type: 'Property', + name: 'data', + reflectMapper: { type: 1, content: 2 }, + }, + ], + }, + getServerTime: { + sid: 6, + cid: 23, + service: 'misc', + response: [{ type: 'Long', name: 'time' }], + }, + notifyDetect: { + sid: 6, + cid: 31, + service: 'misc', + response: [{ type: 'Property', name: 'data', reflectMapper: ft(di) }], + }, + uploadDetect: { + sid: 6, + cid: 32, + service: 'misc', + hasPacketResponse: !1, + params: [{ type: 'Property', name: 'data', reflectMapper: di }], + }, + wsDetect: { + sid: 6, + cid: 37, + service: 'misc', + params: [{ type: 'Property', name: 'tag', reflectMapper: li }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(li) }], + }, + }, + hi = { + type: { type: 'number' }, + t1: { type: 'number' }, + t2: { type: 'number' }, + t3: { type: 'number' }, + t4: { type: 'number' }, + t5: { type: 'number' }, + t6: { type: 'number' }, + } +class ui extends class { + constructor(e, t) { + ;(this.name = e), + (this.core = t), + (this.name = e), + (this.logger = t.logger), + (this.core = t) + } + process(e) { + var t = this[e.cmd + 'Handler'] + if ('function' == typeof t) return t.call(this, e) + var i = Ve(e, 'error.detail.ignore') + return e.error && !i ? Promise.reject(e.error) : Promise.resolve(e) + } +} { + constructor(e) { + super('misc', e), + (this.logLock = !1), + (this.core = e), + vt({ cmdMap: ci, cmdConfig: pi }), + this.setListener() + } + setListener() { + this.core.eventBus.on( + 'BinaryClientSocket/unpackError', + this.wsDetect.bind(this) + ), + this.core.eventBus.on('V2NIMLoginService/loginLifeCycleLoginSucc', () => { + this.core.timeOrigin.setOriginTimetick() + }), + this.core.eventBus.on('logined', () => { + this.core.timeOrigin.setOriginTimetick() + }) + } + getServerTime() { + return Te(this, void 0, void 0, function* () { + var e = yield this.core.clientSocket.sendCmd('getServerTime') + return parseInt(e.content.time) + }) + } + wsDetect(e) { + return Te(this, void 0, void 0, function* () { + var t = Object.assign({ k1: 'val1', k2: 'val2' }, e), + i = null + try { + i = (yield this.core.clientSocket.sendCmd('wsDetect', { tag: t })) + .content.data + } catch (e) { + var r = e + return void (r.code === de.V2NIM_ERROR_CODE_UNPACK_ERROR + ? (this.logger.warn('misc::wsDetect:998'), + this.wsDetectUnreliable(), + this.reportBinarySocketDetectResult('packet 998')) + : this.logger.warn(`misc::wsDetect:failed ${r.code}`)) + } + i && JSON.stringify(i) !== JSON.stringify(t) + ? (this.logger.warn('misc::wsDetect:content unreliable'), + this.wsDetectUnreliable(), + this.reportBinarySocketDetectResult('content unreliable')) + : this.logger.log('misc::wsDetect:success') + }) + } + wsDetectUnreliable() { + this.core.clientSocket.doDisconnect(3, 'WSDetectUnreliable') + } + reportBinarySocketDetectResult(e) { + var t + this.core.reporter.reportTraceStart('exceptions', { + user_id: this.core.account, + trace_id: + null === (t = this.core.clientSocket.socket) || void 0 === t + ? void 0 + : t.sessionId, + start_time: Date.now(), + action: 2, + exception_service: 9, + }), + this.core.reporter.reportTraceUpdateV2('exceptions', { + code: 998, + description: `wsDetect::reconnect cause: ${e}`, + operation_type: '5', + target: '6-37', + }), + this.core.reporter.reportTraceEnd('exceptions', 1) + } + notifyDetectHandler(e) { + return Te(this, void 0, void 0, function* () { + var t = (function (e) { + return Et(hi, e) + })(e.content.data) + ;(t.t3 = e.__receiveTimeNode.time), (t.t4 = Date.now()) + try { + yield this.core.clientSocket.sendCmd('uploadDetect', { data: t }) + } catch (e) { + this.core.logger.warn('misc::notifyDetectHandler:upload failed', e) + } + }) + } + notifylogHandler() { + return Te(this, void 0, void 0, function* () { + var e = void 0 + if (this.logLock) this.core.logger.warn('misc::notifylogHandler:locked') + else { + this.logLock = !0 + try { + e = yield this.core.logger.extractLogs() + } catch (e) { + return void (this.logLock = !1) + } + if (e) { + var t = '' + try { + t = (yield this.core.cloudStorage.uploadFile( + 'string' == typeof e + ? { type: 'file', filePath: e } + : { type: 'file', file: e } + )).url + } catch (e) { + return void (this.logLock = !1) + } + if (t) { + t += + (t.indexOf('?') > 0 ? '&' : '?') + + 'download=' + + new Date().getTime() + + '_web.log' + try { + yield this.core.clientSocket.sendCmd('uploadLog', { url: t }) + } catch (e) { + return void (this.logLock = !1) + } + try { + yield this.logger.afterUpload() + } catch (e) {} + this.logLock = !1 + } else this.logLock = !1 + } else this.logLock = !1 + } + }) + } +} +function mi(e, t) { + e = e || {} + var i = {} + return ( + (t = t || []).forEach((t) => { + void 0 !== e[t] && (i[t] = e[t]) + }), + i + ) +} +var gi = { + retryCount: { type: 'number', min: 0, required: !1 }, + forceMode: { type: 'boolean', required: !1 }, + authType: { type: 'enum', values: [0, 1, 2], required: !1 }, + syncLevel: { type: 'enum', values: [1, 0], required: !1 }, + routeConfig: { + type: 'object', + required: !1, + rules: { + routeEnabled: { type: 'boolean', required: !1 }, + routeEnvironment: { type: 'string', required: !1 }, + }, + }, + }, + vi = ['https://lbs.netease.im/lbs/webconf.jsp'], + fi = { + retryCount: 3, + timeout: 6e4, + forceMode: !1, + authType: 0, + syncLevel: 0, + }, + yi = { '27_1': 'v2NIMSync', '27_10': 'v2QChatSync' }, + Ii = { + v2NIMSync: { + sid: 27, + cid: 1, + service: 'V2NIMSyncService', + hasPacketTimer: !1, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + myInfo: 1, + offlineMsgs: 2, + teams: 3, + roamingMsgs: 7, + relations: 9, + friends: 11, + friendUsers: 13, + msgReceipts: 14, + myTeamMembers: 15, + donnop: 16, + recallMsg: 17, + sessionAck: 18, + broadcastMsgs: 20, + avSignal: 21, + superTeams: 22, + mySuperTeamMembers: 23, + superTeamRoamingMsgs: 24, + deleteSuperTeamMsg: 25, + superTeamSessionAck: 26, + deleteSelfMsgs: 27, + stickTopSessions: 28, + sessionHistoryMsgsDelete: 29, + p2pTeamModifyMessage: 30, + superTeamModifyMessage: 31, + filterMsgs: 100, + }, + }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2QChatSync: { + sid: 27, + cid: 10, + service: 'V2NIMSyncService', + hasPacketTimer: !1, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { systemNotification: 1, pushConfig: 2 }, + }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + }, + Mi = { debug(...e) {}, log(...e) {}, warn(...e) {}, error(...e) {} } +function _i(e) { + Mi = e +} +function Ei() { + return Mi +} +function Ti() { + return ( + !(!navigator || !navigator.userAgent) && + [ + /Android/i, + /webOS/i, + /iPhone/i, + /iPad/i, + /iPod/i, + /BlackBerry/i, + /Windows Phone/i, + ].some((e) => navigator.userAgent.match(e)) + ) +} +function Si() { + return ( + !(!navigator || !navigator.userAgent) && + 'object' == typeof navigator && + 'string' == typeof navigator.userAgent && + navigator.userAgent.indexOf('Electron') >= 0 + ) +} +function Ci() { + return navigator && navigator.userAgent +} +var Ni = { + clear() { + uni.clearStorageSync() + }, + getItem: (e) => uni.getStorageSync(e), + setItem: (e, t) => uni.setStorageSync(e, t), + removeItem: (e) => uni.removeStorageSync(e), +} +class Ai { + constructor(e = 'nim_logs') { + ;(this.dirPath = ''), + (this.filePath = ''), + (this.copyFilePath = ''), + (this.enable = !1), + (this.maxCapacity = 26214400), + (this.remainCapacity = 8388608), + (this.count = 0), + (this.maxCount = 100), + (this.lastErrorMsg = void 0) + var t = uni.getSystemInfoSync(), + i = 'mp-weixin' === t.uniPlatform || 'mp-alipay' === t.uniPlatform + if (((this.enable = i), i)) { + var r = this.getAPIEnv() + r && + ((this.dirPath = `${r.env.USER_DATA_PATH}/__nim`), + (this.filePath = `${this.dirPath}/${e}.log`), + (this.copyFilePath = `${this.dirPath}/${e}_copy.log`)) + } + } + getAPIEnv() { + if ( + !( + ('undefined' != typeof tt && tt.getSystemInfoSync) || + ('undefined' != typeof swan && swan.getSystemInfoSync) + ) + ) + return 'undefined' != typeof my && my.getSystemInfoSync + ? my + : 'undefined' != typeof wx && wx.getAppBaseInfo + ? wx + : void 0 + } + makeDir() { + if (this.enable) { + var e = this.getAPIEnv() + if (e) { + var t = Ei(), + i = e.getFileSystemManager() + try { + var r = i.accessSync(this.dirPath) + t.log('logStorage::access dir:', r), + ('object' == typeof r && null !== r + ? r.error || r.errno || r.errCode || r.errNo + : 0) > 200 && i.mkdirSync(this.dirPath, !0) + } catch (e) { + i.mkdirSync(this.dirPath, !0) + } + try { + var s = i.accessSync(this.filePath) + t.log('logStorage::access file:', s), + ('object' == typeof s && null !== s + ? s.error || s.errno || s.errCode || s.errNo + : 0) > 200 && i.writeFileSync(this.filePath, '===', 'utf8') + } catch (e) { + i.writeFileSync(this.filePath, '===', 'utf8') + } + } + } + } + open() { + return Te(this, void 0, void 0, function* () { + if (this.enable) { + var e = Ei() + try { + this.makeDir(), + e.log(`logStorage::open log file success:${this.filePath}`) + } catch (t) { + e.warn(`logStorage::open log file failed:${this.filePath}`, t) + } + yield this.checkCapacity(this.remainCapacity) + } + }) + } + checkCapacity(e) { + return Te(this, void 0, void 0, function* () { + if (this.enable) { + var t = this.getAPIEnv() + if (t) { + var i = Ei(), + r = t.getFileSystemManager(), + s = this.getSize() + if (s > this.maxCapacity) { + i.log(`logStorage::checksize:exceed,${s} byte`) + var n = '' + try { + n = yield this.readLogs(s - e) + } catch (e) { + return void i.log('logStorage::checkCapacity:read failed', e) + } + i.log(`logStorage::checksize:read success ${s - e} byte`) + try { + r.unlinkSync(this.filePath) + } catch (e) { + return void i.log('logStorage::checkCapacity:unlink failed', e) + } + try { + r.writeFileSync(this.filePath, n, 'utf8') + } catch (e) { + return void i.log('logStorage::checkCapacity:write failed', e) + } + } else i.log(`logStorage::checkCapacity:not exceeding,${s} byte`) + } + } + }) + } + getSize() { + var e + if (!this.enable) return 0 + var t = this.getAPIEnv() + if (!t) return 0 + var i, + r = Ei(), + s = t.getFileSystemManager() + try { + i = s.statSync(this.filePath, !1) + } catch (e) { + return r.warn('logStorage::stat failed', e), 0 + } + return i.size || (null === (e = i.stats) || void 0 === e ? void 0 : e.size) + } + readLogs(e = 0) { + if (!this.enable) return Promise.resolve('') + var t = this.getAPIEnv() + if (!t) return Promise.resolve('') + var i = Ei(), + r = t.getFileSystemManager() + return new Promise((t, s) => { + r.readFile({ + filePath: this.filePath, + encoding: 'utf8', + position: e, + success: (e) => { + var r = e.data + 'string' == typeof r + ? (i.warn(`logStorage::readLogs success ${r.length}`), t(r)) + : (i.warn('logStorage::readLogs empty'), + s(new Error('logStorage::readLogs empty'))) + }, + fail: (e) => { + var t = e.errMsg || e.errorMessage || e.message + i.warn(`logStorage::readLogs failed ${t}`) + var r = { code: e.errCode || 0, message: t } + s(r) + }, + }) + }) + } + close() {} + addLogs(e) { + if (!this.enable) return Promise.resolve() + var t = this.getAPIEnv() + if (!t) return Promise.resolve() + var i = Ei(), + r = e + .map((e) => e.text) + .concat('') + .join('\n') + try { + t.getFileSystemManager().appendFileSync(this.filePath, r, 'utf8') + } catch (e) { + var s = e.errMsg || e.errorMessage || e.message + this.lastErrorMsg !== s && i.warn('logStorage::append failed', e), + (this.lastErrorMsg = s) + } + return ( + (this.count += 1), + this.count > this.maxCount && + ((this.count = 0), this.checkCapacity(this.remainCapacity)), + Promise.resolve() + ) + } + extractLogs() { + return Te(this, void 0, void 0, function* () { + if (this.enable) { + var e = this.getAPIEnv() + if (e) { + var t = Ei(), + i = e.getFileSystemManager() + if (this.getSize() > 0) { + try { + i.copyFileSync(this.filePath, this.copyFilePath) + } catch (e) { + return void t.warn('logStorage::copyFileSync failed', e) + } + return this.copyFilePath + } + t.warn('logStorage::extractLogs empty') + } + } + }) + } + afterUpload() { + return Te(this, void 0, void 0, function* () { + if (this.enable) { + var e = this.getAPIEnv() + if (e) { + var t = Ei(), + i = e.getFileSystemManager() + try { + i.unlinkSync(this.copyFilePath) + } catch (e) { + return void t.log('logStorage::delete copyFilePath failed', e) + } + } + } + }) + } +} +var Ri = { + wifi: 2, + '2g': 3, + '3g': 4, + '4g': 5, + '5g': 6, + ethernet: 1, + unknown: 0, + none: 0, + notreachable: 0, + wwan: 0, + }, + Oi = { + __onNetworkStatusChangeFn: null, + getNetworkStatus() { + var e = uni.getSystemInfoSync() || {} + return 'app' === e.uniPlatform && 'harmonyos' === e.osName + ? Promise.resolve({ net_type: 0, net_connect: !0 }) + : new Promise((e, t) => { + uni.getNetworkType({ + success: function (t) { + var i + ;(i = + 'boolean' == typeof t.networkAvailable + ? t.networkAvailable + : 'none' !== t.networkType.toLowerCase()), + e({ + net_type: Ri[t.networkType.toLowerCase()], + net_connect: i, + }) + }, + fail: function () { + t(new Error('getNetworkType failed')) + }, + }) + }) + }, + onNetworkStatusChange(e) { + this.offNetworkStatusChange(), + uni.onNetworkStatusChange && + ((this.__onNetworkStatusChangeFn = function (t) { + var i = t.networkType.toLowerCase() + e({ + isConnected: t.isConnected || 'none' !== i, + networkType: Ri[i], + }) + }), + uni.onNetworkStatusChange(this.__onNetworkStatusChangeFn)) + }, + offNetworkStatusChange() { + uni.offNetworkStatusChange && + (this.__onNetworkStatusChangeFn && + uni.offNetworkStatusChange(this.__onNetworkStatusChangeFn), + (this.__onNetworkStatusChangeFn = null)) + }, + } +function bi(e, t) { + return ( + t && (t.data = t.data || (null == t ? void 0 : t.params) || {}), + new Promise((i, r) => { + uni.request( + Object.assign(Object.assign({ method: 'GET', url: e }, t), { + success: function (t) { + 'number' == typeof (t = t || {}).statusCode && + t.statusCode.toString().startsWith('2') + ? ((t = { + data: t.data, + status: t.statusCode, + errMsg: t.errMsg, + header: t.header, + }), + i(t)) + : r({ + code: t.statusCode || 0, + message: t.data || `uniApp request fail. url: ${e}`, + }) + }, + fail: function (t) { + var i = `uniApp request fail. url: ${e}` + r( + t + ? { code: t.errCode || 0, message: t.errMsg || i } + : { code: 0, message: i } + ) + }, + }) + ) + }) + ) +} +var ki = function () { + var e = uni.getSystemInfoSync() || {} + if ( + 'mp-weixin' === e.uniPlatform && + 'undefined' != typeof wx && + wx.getAppBaseInfo + ) { + var t = wx.getAppBaseInfo() + return `NIM/Web/UNIAPP(${e.uniRuntimeVersion})/WeChatMiniApp(${t.SDKVersion})/V10.9.30/{{appkey}}` + } + if ('undefined' != typeof tt && tt.getSystemInfoSync) { + var i = tt.getSystemInfoSync() + return `NIM/Web/UNIAPP(${e.uniRuntimeVersion})/TiktokMiniApp(${i.SDKVersion})/V10.9.30/{{appkey}}` + } + if ('undefined' != typeof swan && swan.getSystemInfoSync) { + var r = swan.getSystemInfoSync() + return `NIM/Web/UNIAPP(${e.uniRuntimeVersion})/BaiduMiniApp(${r.SDKVersion})/V10.9.30/{{appkey}}` + } + if ('undefined' != typeof my && my.getSystemInfoSync) { + var s = my.getSystemInfoSync() + return `NIM/Web/UNIAPP(${e.uniRuntimeVersion})/AliMiniApp(${s.SDKVersion})/V10.9.30/{{appkey}}` + } + if (navigator && navigator.userAgent) return navigator.userAgent + if (e.ua) return e.ua + var n = uni.getSystemInfoSync() + return `NIM/Web/UNIAPP(${n.uniRuntimeVersion})/${n.osName}(${n.osVersion})/V10.9.30/{{appkey}}` + }, + Vi = function () { + var e = uni.getSystemInfoSync() || {} + if ( + 'mp-weixin' === e.uniPlatform && + 'undefined' != typeof wx && + wx.getAppBaseInfo + ) { + var t = wx.getAppBaseInfo() + return `${e.uniRuntimeVersion}/${t.version}` + } + if ('undefined' != typeof tt && tt.getSystemInfoSync) { + var i = tt.getSystemInfoSync() + return `${e.uniRuntimeVersion}/${i.version}` + } + if ('undefined' != typeof swan && swan.getSystemInfoSync) { + var r = swan.getSystemInfoSync() + return `${e.uniRuntimeVersion}/${r.version}` + } + if ('undefined' != typeof my && my.getSystemInfoSync) { + var s = my.getSystemInfoSync() + return `${e.uniRuntimeVersion}/${s.version}` + } + return `${e.uniRuntimeVersion}` + }, + Pi = function () { + var e = uni.getSystemInfoSync() || {} + if ( + 'mp-weixin' === e.uniPlatform && + 'undefined' != typeof wx && + wx.getAppBaseInfo + ) { + var t = wx.getAppBaseInfo() + return `${e.uniRuntimeVersion}/${t.SDKVersion}` + } + if ('undefined' != typeof tt && tt.getSystemInfoSync) { + var i = tt.getSystemInfoSync() + return `${e.uniRuntimeVersion}/${i.SDKVersion}` + } + if ('undefined' != typeof swan && swan.getSystemInfoSync) { + var r = swan.getSystemInfoSync() + return `${e.uniRuntimeVersion}/${r.SDKVersion}` + } + return 'undefined' != typeof my && my.getSystemInfoSync + ? (my.getSystemInfoSync(), `${e.uniRuntimeVersion}/${my.SDKVersion}`) + : `${e.uniRuntimeVersion}` + } +function Li() { + var e = (function () { + var e = uni.getSystemInfoSync() || {} + return 'mp-weixin' === e.uniPlatform + ? [6, 'WeiXin'] + : 'app' === e.uniPlatform + ? [101, 'H5'] + : 'undefined' != typeof tt && tt.getSystemInfoSync + ? [104, 'Tiktok'] + : 'undefined' != typeof swan && swan.getSystemInfoSync + ? [103, 'Baidu'] + : 'undefined' != typeof my && my.getSystemInfoSync + ? [102, 'Ali'] + : [ + Si() ? 5 : Ti() ? 101 : Ci() ? 100 : 0, + Si() ? 'Electron' : Ti() ? 'H5' : Ci() ? 'BROWSER' : 'Unset', + ] + })(), + t = uni.getSystemInfoSync() || {} + return { + os: t.osName || 'UNIAPP_UNKNOW', + osVer: t.osVersion, + browser: t.browserName || '', + browserVer: t.browserVersion || '', + libEnv: 'UNIAPP', + hostEnv: e[1], + hostEnvEnum: e[0], + hostEnvVer: Vi(), + userAgent: ki(), + model: Pi(), + manufactor: e[1], + pushDeviceInfo: { + PRODUCT: t.model, + DEVICE: t.model, + MANUFACTURER: t.brand, + }, + } +} +function Di(e) { + var t = Ei(), + i = e.headers || {} + return ( + e.md5 && (i['Content-MD5'] = e.md5), + new Promise((r, s) => { + var n = uni.uploadFile( + Object.assign( + Object.assign( + { url: `${e.commonUploadHost}/${e.nosToken.bucket}` }, + Object.keys(i).length > 0 ? { header: i } : {} + ), + { + formData: { + Object: decodeURIComponent(e.nosToken.objectName), + 'x-nos-token': e.nosToken.token, + 'x-nos-entity-type': 'json', + }, + name: 'file', + fileType: e.type, + filePath: e.filePath, + success(t) { + if (200 == t.statusCode) + try { + var i + try { + i = JSON.parse(t.data) + } catch (e) { + i = {} + } + ;(i.name = e.filePath), + (i.ext = + i.name.lastIndexOf('.') > -1 + ? i.name + .slice(i.name.lastIndexOf('.') + 1) + .toLowerCase() + : ''), + r(i) + } catch (e) { + s(new Error(`Upload Error parse result error: ${t.data}`)) + } + else s(new Error(`Upload error ${t.statusCode}: ${t.errMsg}`)) + }, + fail(e) { + 'uploadFile:fail abort' === e.errMsg && + (e.code = de.V2NIM_ERROR_CODE_CANCELLED), + (e.message = e.errMsg), + s(e) + }, + } + ) + ) + try { + e.onUploadStart && e.onUploadStart(n) + } catch (e) { + t.error( + 'Adapter uploadFile: options.onUploadStart error', + e && e.message + ), + n.abort(), + s(e) + } + e.onUploadProgress && + n.onProgressUpdate(function (t) { + e.onUploadProgress && + e.onUploadProgress({ + total: t.totalBytesExpectedToSend, + loaded: t.totalBytesSent, + percentage: parseFloat( + (t.totalBytesSent / t.totalBytesExpectedToSend).toFixed(2) + ), + percentageText: t.progress + '%', + }) + }) + }) + ) +} +function wi(e) { + return null +} +class Ui { + constructor(e, t = '') { + if ( + ((this.CONNECTING = 0), + (this.OPEN = 1), + (this.CLOSING = 2), + (this.CLOSED = 3), + (this.binaryType = ''), + (this.onclose = function (e) { + Ei().log('Adapter uniapp: sockets on close ', e) + }), + (this.onerror = function (e) { + Ei().error('Adapter uniapp: sockets error ', e) + }), + (this.onmessage = function (e) {}), + (this.onopen = function () {}), + !e) + ) + throw new Error("Failed to construct 'socket': url required") + ;(this.url = e.replace(/:443(\/|$)/, '$1')), + (this.protocol = t), + (this.readyState = this.CONNECTING) + var i = this.protocol ? { protocols: this.protocol } : {} + ;(this.socketTask = uni.connectSocket( + Object.assign(Object.assign({ url: this.url }, i), { + multiple: !0, + fail: (e) => { + this.errorHandler(e) + }, + }) + )), + this.socketTask.onOpen((e) => { + Ei().log('Adapter uniapp:: onOpen. event: ', e), + (this.readyState = this.OPEN), + this.binaryType + ? this.onopen() + : this.onmessage && this.onmessage({ type: 'open', header: e }) + }), + this.socketTask.onError((e) => { + Ei().log('Adapter uniapp:: onError. event: ', e), this.errorHandler(e) + }), + this.socketTask.onClose((e) => { + ;(this.readyState = this.CLOSED), + 'function' == typeof this.onclose && + (this.onclose && this.onclose(e), + Ei().log('Adapter uniapp:: onClose. event: ', e)), + (this.socketTask = null) + }), + this.socketTask.onMessage((e) => { + var t + ;(t = + 'string' == typeof e.data || e.data instanceof ArrayBuffer + ? e.data + : e.data.isBuffer && 'string' == typeof e.data.data + ? (function (e) { + for ( + var t = (function (e) { + var t = String(e).replace(/[=]+$/, '') + if (t.length % 4 == 1) + throw new Error( + "'atob' failed: The string to be decoded is not correctly encoded." + ) + for ( + var i, r = '', s = 0, n = 0, o = 0; + (i = t.charAt(o++)); + ~i && ((n = s % 4 ? 64 * n + i : i), s++ % 4) + ? (r += String.fromCharCode( + 255 & (n >> ((-2 * s) & 6)) + )) + : 0 + ) + i = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.indexOf( + i + ) + return r + })(e), + i = t.length, + r = new Uint8Array(i), + s = 0; + s < i; + s++ + ) + r[s] = t.charCodeAt(s) + return r.buffer + })(e.data.data) + : e.data.data), + this.onmessage && this.onmessage({ data: t }) + }) + } + close() { + Ei().log('Adapter uniapp:: close uni socket actively'), + this.socketTask.close({ + code: 1e3, + reason: 'user force close websocket', + complete: () => { + this.socketTask = null + }, + }) + } + send(e) { + if (this.readyState !== this.OPEN) + throw new Error( + `Adapter uniapp:: socket sendMsg when readyState=${this.readyState}` + ) + if (!('string' == typeof e || e instanceof ArrayBuffer)) + throw new TypeError( + 'Adapter uniapp:: socket sendMsg only String/ArrayBuffer supported' + ) + this.socketTask.send({ data: e }) + } + errorHandler(e) { + Ei().error('Adapter uniapp:: errorHandler. event: ', e), + (this.readyState = this.CLOSED), + this.onerror && this.onerror({ type: 'error', message: e && e.errMsg }), + e.errMsg && + '[object Array]' === Object.prototype.toString.call(e.errMsg) && + (e.errMsg.indexOf('断裂管道') > 0 || + e.errMsg.indexOf('broken pipe') > 0) && + this.onclose && + this.onclose(e) + } +} +r(function (e, t) { + e.exports = (function () { + class e extends Error { + constructor(e, t, i, r) { + super(i), + (this.source = e), + (this.code = t), + (this.desc = i), + (this.detail = r || {}) + } + } + return function (t, i = { dataType: 'json', method: 'GET', timeout: 5e3 }) { + var r = + 'text' === i.dataType + ? 'text/plain; charset=UTF-8' + : 'application/json; charset=UTF-8', + s = + 'GET' === i.method + ? (function (e) { + if (e) { + var t = '' + return ( + Object.keys(e).forEach(function (i, r) { + ;(t += 0 === r ? '?' : '&'), (t += `${i}=${e[i]}`) + }), + t + ) + } + return '' + })(i.params) + : '' + return new Promise(function (n, o) { + if (window.XMLHttpRequest) { + var a, + c = new XMLHttpRequest() + if ( + ((c.onreadystatechange = function () { + if (4 === c.readyState) + if (200 === c.status) { + try { + a = JSON.parse(c.response || '{}') + } catch (e) { + a = c.response + } + n({ status: c.status, data: a }) + } else + setTimeout(() => { + o( + new e( + 1, + c.status, + `readyState: ${c.readyState}; statusText: ${c.statusText}` + ) + ) + }, 0) + }), + c.open(i.method, `${t}${s}`), + (c.timeout = i.timeout || 5e3), + c.setRequestHeader('Content-Type', r), + i.headers) + ) + for (var d in i.headers) c.setRequestHeader(d, i.headers[d]) + ;(c.ontimeout = function (t) { + o(new e(1, 408, t && t.message ? t.message : 'request timeout')) + }), + c.send(JSON.stringify(i.data)) + } else o(new e(2, 10400, 'request no suppout')) + }) + } + })() +}), + r(function (e, t) { + self, + (e.exports = (function () { + var e = { + d: function (t, i) { + for (var r in i) + e.o(i, r) && + !e.o(t, r) && + Object.defineProperty(t, r, { enumerable: !0, get: i[r] }) + }, + o: function (e, t) { + return Object.prototype.hasOwnProperty.call(e, t) + }, + }, + t = {} + e.d(t, { + default: function () { + return I + }, + }) + var i = function e(t) { + for (var i in ((function (e, t) { + if (!(e instanceof t)) + throw new TypeError('Cannot call a class as a function') + })(this, e), + (this.directUploadAddr = 'https://wanproxy-web.127.net'), + (this.retryCount = 4), + (this.trunkSize = 4194304), + (this.trunkUploadTimeout = 5e4), + (this.getOffsetTimeout = 1e4), + (this.version = '1.0'), + (this.enableCache = !0), + (this.logger = console), + (this.onError = function (e) {}), + (this.onProgress = function (e) {}), + (this.onUploadProgress = function (e) {}), + (this.onComplete = function (e) {}), + t)) + this[i] = t[i] + } + function r(e, t) { + var i = + ('undefined' != typeof Symbol && e[Symbol.iterator]) || + e['@@iterator'] + if (!i) { + if ( + Array.isArray(e) || + (i = (function (e, t) { + if (e) { + if ('string' == typeof e) return s(e, t) + var i = Object.prototype.toString.call(e).slice(8, -1) + return ( + 'Object' === i && e.constructor && (i = e.constructor.name), + 'Map' === i || 'Set' === i + ? Array.from(e) + : 'Arguments' === i || + /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i) + ? s(e, t) + : void 0 + ) + } + })(e)) || + (t && e && 'number' == typeof e.length) + ) { + i && (e = i) + var r = 0, + n = function () {} + return { + s: n, + n: function () { + return r >= e.length + ? { done: !0 } + : { done: !1, value: e[r++] } + }, + e: function (e) { + throw e + }, + f: n, + } + } + throw new TypeError( + 'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.' + ) + } + var o, + a = !0, + c = !1 + return { + s: function () { + i = i.call(e) + }, + n: function () { + var e = i.next() + return (a = e.done), e + }, + e: function (e) { + ;(c = !0), (o = e) + }, + f: function () { + try { + a || null == i.return || i.return() + } finally { + if (c) throw o + } + }, + } + } + function s(e, t) { + ;(null == t || t > e.length) && (t = e.length) + for (var i = 0, r = new Array(t); i < t; i++) r[i] = e[i] + return r + } + var n = { + privateObj: {}, + setItem: function (e, t) { + n.privateObj[e] = t + }, + getItem: function (e) { + return n.privateObj[e] + }, + removeItem: function (e) { + delete n.privateObj[e] + }, + getKeys: function () { + return Object.keys(n.privateObj) + }, + }, + o = { + getFileKey: function (e) { + var t = e.size.toString(), + i = e.lastModified.toString() + return ( + '_NosUploader_' + + e.name + + t.slice(t.length - 5) + + i.slice(i.length - 5) + ) + }, + getFileInfo: function (e) { + var t = n.getItem(e) + if (!t) return null + try { + return JSON.parse(t) + } catch (e) { + return null + } + }, + initFile: function (e, t, i) { + o.clearExpiredInfo() + var r = this.getFileKey(t), + s = { + ctx: void 0 !== e.ctx ? e.ctx : '', + bucket: e.bucketName, + obj: e.objectName, + token: e.token, + modifyAt: Date.now(), + end: !1, + } + return ( + e.payload && (s.payload = e.payload), + i && n.setItem(r, JSON.stringify(s)), + r + ) + }, + setUploadContext: function (e, t, i) { + var r = this.getFileInfo(e) + r && ((r.ctx = t), i && n.setItem(e, JSON.stringify(r))) + }, + setComplete: function (e, t) { + var i = this.getFileInfo(e) + i && + ((i.modifyAt = Date.now()), + (i.end = !0), + t && n.setItem(e, JSON.stringify(i))) + }, + getUploadContext: function (e) { + var t = this.getFileInfo(e) + return t ? t.ctx : '' + }, + removeFileInfo: function (e) { + 0 === e.indexOf('_NosUploader_') && n.removeItem(e) + }, + clearExpiredInfo: function () { + var e, + t = + 'function' == typeof n.getKeys ? n.getKeys() : Object.keys(n), + i = Date.now(), + s = [], + a = r(t) + try { + for (a.s(); !(e = a.n()).done; ) { + var c = e.value + if (0 === c.indexOf('_NosUploader_')) { + var d = o.getFileInfo(c) + null === d || i - d.modifyAt > I.expireTime + ? n.removeItem(c) + : s.push({ fileInfo: d, key: c }) + } + } + } catch (e) { + a.e(e) + } finally { + a.f() + } + if (s.length > I.maxFileCache) { + var l, + p = r( + s + .sort(function (e, t) { + return t.fileInfo.modifyAt - e.fileInfo.modifyAt + }) + .slice(I.maxFileCache) + ) + try { + for (p.s(); !(l = p.n()).done; ) { + var h = l.value + 0 === h.key.indexOf('_NosUploader_') && n.removeItem(h.key) + } + } catch (e) { + p.e(e) + } finally { + p.f() + } + } + }, + }, + a = o + function c(e) { + return (c = + 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator + ? function (e) { + return typeof e + } + : function (e) { + return e && + 'function' == typeof Symbol && + e.constructor === Symbol && + e !== Symbol.prototype + ? 'symbol' + : typeof e + })(e) + } + function d(e) { + var t = 'function' == typeof Map ? new Map() : void 0 + return (d = function (e) { + if ( + null === e || + ((i = e), + -1 === Function.toString.call(i).indexOf('[native code]')) + ) + return e + var i + if ('function' != typeof e) + throw new TypeError( + 'Super expression must either be null or a function' + ) + if (void 0 !== t) { + if (t.has(e)) return t.get(e) + t.set(e, r) + } + function r() { + return l(e, arguments, u(this).constructor) + } + return ( + (r.prototype = Object.create(e.prototype, { + constructor: { + value: r, + enumerable: !1, + writable: !0, + configurable: !0, + }, + })), + h(r, e) + ) + })(e) + } + function l(e, t, i) { + return (l = p() + ? Reflect.construct + : function (e, t, i) { + var r = [null] + r.push.apply(r, t) + var s = new (Function.bind.apply(e, r))() + return i && h(s, i.prototype), s + }).apply(null, arguments) + } + function p() { + if ('undefined' == typeof Reflect || !Reflect.construct) return !1 + if (Reflect.construct.sham) return !1 + if ('function' == typeof Proxy) return !0 + try { + return ( + Boolean.prototype.valueOf.call( + Reflect.construct(Boolean, [], function () {}) + ), + !0 + ) + } catch (e) { + return !1 + } + } + function h(e, t) { + return (h = + Object.setPrototypeOf || + function (e, t) { + return (e.__proto__ = t), e + })(e, t) + } + function u(e) { + return (u = Object.setPrototypeOf + ? Object.getPrototypeOf + : function (e) { + return e.__proto__ || Object.getPrototypeOf(e) + })(e) + } + var m = (function (e) { + !(function (e, t) { + if ('function' != typeof t && null !== t) + throw new TypeError( + 'Super expression must either be null or a function' + ) + ;(e.prototype = Object.create(t && t.prototype, { + constructor: { value: e, writable: !0, configurable: !0 }, + })), + t && h(e, t) + })(s, e) + var t, + i, + r = + ((t = s), + (i = p()), + function () { + var e, + r = u(t) + if (i) { + var s = u(this).constructor + e = Reflect.construct(r, arguments, s) + } else e = r.apply(this, arguments) + return (function (e, t) { + return !t || ('object' !== c(t) && 'function' != typeof t) + ? (function (e) { + if (void 0 === e) + throw new ReferenceError( + "this hasn't been initialised - super() hasn't been called" + ) + return e + })(e) + : t + })(this, e) + }) + function s(e, t) { + var i + return ( + (function (e, t) { + if (!(e instanceof t)) + throw new TypeError('Cannot call a class as a function') + })(this, s), + ((i = r.call(this, 'NosUploadError:' + e)).errCode = t), + (i.errMsg = e), + i + ) + } + return s + })(d(Error)), + g = function e(t, i, r) { + if ('uploading' === t.uploadState) { + var s = t.config, + n = t.param, + o = a.getUploadContext(t.fileKey) + if (!o) return r(0) + var c = new XMLHttpRequest(), + d = + s.directUploadAddr + + '/'.concat(n.bucketName) + + '/'.concat(encodeURIComponent(n.objectName)) + + '?uploadContext' + + '&context='.concat(o) + + '&version='.concat(s.version) + ;(c.onreadystatechange = function () { + var n + if ('abort' !== t.uploadState && 4 === c.readyState) { + var o + try { + o = JSON.parse(c.responseText) + } catch (e) { + o = { + errMsg: + 'JsonParseError in getOffset. xhr.status = ' + + c.status + + '. xhr.responseText: ' + + c.responseText, + errCode: 500, + } + } + 200 === c.status + ? o.errCode + ? t.config.onError(new m(o.errMsg, o.errCode)) + : r(o.offset) + : c.status.toString().match(/^5/) + ? e(t, i - 1, r) + : i > 0 + ? ('function' == + typeof (null === (n = s.logger) || void 0 === n + ? void 0 + : n.error) && + s.logger.error( + 'getOffset(' + .concat(d, ') error. retry after 3 seconds. ') + .concat(new Date().toTimeString()) + ), + setTimeout(function () { + e(t, i - 1, r) + }, 3500)) + : c.status + ? (a.removeFileInfo(t.fileKey), + s.onError( + new m( + 'getOffset(' + .concat(d, ') error: ') + .concat(c.status, ' ') + .concat(c.statusText) + ) + )) + : s.onError( + new m('getOffset('.concat(d, ') error. no Error Code')) + ) + } + }), + c.open('get', d), + c.setRequestHeader('x-nos-token', n.token), + (c.timeout = s.getOffsetTimeout), + c.send() + } + }, + v = function e(t, i, r, s) { + if ('uploading' === t.uploadState) { + var n = t.param, + o = t.config, + c = File.prototype.slice, + d = void 0 !== n.ctx ? n.ctx : '', + l = i + o.trunkSize >= t.file.size, + p = l ? t.file.size : i + o.trunkSize, + h = new XMLHttpRequest(), + u = + o.directUploadAddr + + '/'.concat(n.bucketName) + + '/'.concat(encodeURIComponent(n.objectName)) + if ( + ((h.upload.onprogress = function (e) { + if ('abort' !== t.uploadState) { + var r = 0 + e.lengthComputable + ? ((r = (i + e.loaded) / t.file.size), + o.onProgress(r), + o.onUploadProgress({ + loaded: e.loaded, + total: t.file.size, + percentage: r, + percentageText: (100 * r).toFixed(2) + '%', + })) + : o.onError( + new m( + 'browser does not support query upload progress' + ) + ) + } + }), + (h.onreadystatechange = function () { + var n, c + if ('abort' !== t.uploadState && 4 === h.readyState) { + var d + try { + d = JSON.parse(h.responseText) + } catch (e) { + 'function' == + typeof (null === (n = o.logger) || void 0 === n + ? void 0 + : n.error) && + o.logger.error( + 'JsonParseError in uploadTrunk. xhr.status = ' + + h.status + + '. xhr.responseText: ' + + h.responseText, + e + ), + (d = { + errMsg: + 'JsonParseError in uploadTrunk. xhr.status = ' + + h.status + + '. xhr.responseText: ' + + h.responseText, + }) + } + 200 === h.status + ? (t.setContext(d.context), + l + ? (s(), t.setComplete()) + : e(t, d.offset, o.retryCount, s)) + : h.status.toString().match(/^5/) + ? r > 0 + ? e(t, i, r - 1, s) + : (a.removeFileInfo(t.fileKey), + o.onError(new m(d.errMsg, d.errCode))) + : r > 0 + ? ('function' == + typeof (null === (c = o.logger) || void 0 === c + ? void 0 + : c.error) && + o.logger.error( + 'uploadTrunk(' + .concat(u, ') error. retry after 3 seconds. ') + .concat(new Date().toTimeString()) + ), + setTimeout(function () { + e(t, i, r - 1, s) + }, 3500)) + : h.status + ? (a.removeFileInfo(t.fileKey), + o.onError( + new m( + 'uploadTrunk(' + .concat(u, ') error: ') + .concat(h.status, ' ') + .concat(h.statusText) + ) + )) + : o.onError( + new m( + 'uploadTrunk('.concat( + u, + ') error. no Error Code. Please check your network' + ) + ) + ) + } + }), + h.open( + 'post', + u + + '?offset='.concat(i) + + '&complete='.concat(l) + + '&context='.concat(d) + + '&version='.concat(o.version) + ), + h.setRequestHeader('x-nos-token', n.token), + n.md5 && h.setRequestHeader('content-md5', n.md5), + t.file.type && h.setRequestHeader('content-type', t.file.type), + (h.timeout = o.trunkUploadTimeout), + 'undefined' != typeof FileReader) + ) { + var g = new FileReader() + g.addEventListener('load', function (e) { + var t + ;(null === (t = null == e ? void 0 : e.target) || void 0 === t + ? void 0 + : t.result) instanceof ArrayBuffer && + e.target.result.byteLength > 0 + ? h.send(e.target.result) + : o.onError(new m('Read ArrayBuffer failed', 194003)) + }), + g.addEventListener('error', function (e) { + var t = e.target.error + o.onError( + new m( + 'Read ArrayBuffer error. '.concat(t.toString()), + 194003 + ) + ) + }), + g.readAsArrayBuffer(c.call(t.file, i, p)) + } else h.send(c.call(t.file, i, p)) + } + }, + f = (function () { + function e(t, i, r) { + !(function (e, t) { + if (!(e instanceof t)) + throw new TypeError('Cannot call a class as a function') + })(this, e), + (this.uploadState = 'paused'), + (this.config = r), + (this.file = t), + (this.param = i), + (this.fileKey = a.initFile(i, t, this.config.enableCache)), + this.resume() + } + var t + return ( + (t = [ + { + key: 'resume', + value: function () { + var e = this + if ('uploading' !== this.uploadState) { + this.setUploadState('uploading') + var t = this.config + g(this, t.retryCount, function (i) { + v(e, i, t.retryCount, function () { + e.setUploadState('ended'), + 'function' == typeof t.onComplete && + t.onComplete(e.param) + }) + }) + } + }, + }, + { + key: 'pause', + value: function () { + this.setUploadState('paused') + }, + }, + { + key: 'abort', + value: function () { + 'ended' !== this.uploadState && + 'abort' !== this.uploadState && + (this.setUploadState('abort'), + this.config.onError(new m('Upload Aborted', 10499))) + }, + }, + { + key: 'setUploadState', + value: function (e) { + e !== this.uploadState && (this.uploadState = e) + }, + }, + { + key: 'setContext', + value: function (e) { + a.setUploadContext( + this.fileKey, + e, + this.config.enableCache + ), + (this.param.ctx = e) + }, + }, + { + key: 'setComplete', + value: function () { + a.setComplete(this.fileKey, this.config.enableCache), + this.setUploadState('ended') + }, + }, + ]) && + (function (e, t) { + for (var i = 0; i < t.length; i++) { + var r = t[i] + ;(r.enumerable = r.enumerable || !1), + (r.configurable = !0), + 'value' in r && (r.writable = !0), + Object.defineProperty(e, r.key, r) + } + })(e.prototype, t), + e + ) + })(), + y = { + maxFileCache: 1 / 0, + expireTime: 864e5, + getFileUploadInformation: function (e) { + var t = a.getFileKey(e), + i = a.getFileInfo(t) + return null === i + ? null + : Date.now() - i.modifyAt > y.expireTime + ? (a.removeFileInfo(t), null) + : { + uploadInfo: Object.assign( + { + bucketName: i.bucket, + objectName: i.obj, + token: i.token, + ctx: i.ctx, + }, + i.payload ? { payload: i.payload } : {} + ), + complete: i.end, + } + }, + setMaxFileCache: function (e) { + y.maxFileCache = e + }, + setExpireTime: function (e) { + y.expireTime = e + }, + printCaches: function () { + if ('undefined' != typeof localStorage) + for ( + var e = 0, t = Object.keys(localStorage); + e < t.length; + e++ + ) { + var i = t[e], + r = a.getFileInfo(i) + r && + console.log( + r, + 'modifiedAt', + new Date(r.modifyAt).toTimeString() + ) + } + }, + createConfig: function (e) { + return new i(e) + }, + createTask: function (e, t, i) { + return new f(e, t, i) + }, + }, + I = y + return t.default + })()) + }), + r(function (e, t) { + ;(function () { + var r = ({ function: !0, object: !0 }[typeof window] && window) || this, + s = t, + n = e && !e.nodeType && e, + o = s && n && 'object' == typeof i && i + !o || (o.global !== o && o.window !== o && o.self !== o) || (r = o) + var a = Math.pow(2, 53) - 1, + c = /\bOpera/, + d = Object.prototype, + l = d.hasOwnProperty, + p = d.toString + function h(e) { + return (e = String(e)).charAt(0).toUpperCase() + e.slice(1) + } + function u(e) { + return (e = y(e)), /^(?:webOS|i(?:OS|P))/.test(e) ? e : h(e) + } + function m(e, t) { + for (var i in e) l.call(e, i) && t(e[i], i, e) + } + function g(e) { + return null == e ? h(e) : p.call(e).slice(8, -1) + } + function v(e) { + return String(e).replace(/([ -])(?!$)/g, '$1?') + } + function f(e, t) { + var i = null + return ( + (function (e, t) { + var i = -1, + r = e ? e.length : 0 + if ('number' == typeof r && r > -1 && r <= a) + for (; ++i < r; ) t(e[i], i) + else m(e, t) + })(e, function (r, s) { + i = t(i, r, s, e) + }), + i + ) + } + function y(e) { + return String(e).replace(/^ +| +$/g, '') + } + var I = (function e(t) { + var i = r, + s = t && 'object' == typeof t && 'String' != g(t) + s && ((i = t), (t = null)) + var n = i.navigator || {}, + o = n.userAgent || '' + t || (t = o) + var a, + d, + l = s + ? !!n.likeChrome + : /\bChrome\b/.test(t) && !/internal|\n/i.test(p.toString()), + h = 'Object', + I = s ? h : 'ScriptBridgingProxyObject', + M = s ? h : 'Environment', + _ = s && i.java ? 'JavaPackage' : g(i.java), + E = s ? h : 'RuntimeObject', + T = /\bJava/.test(_) && i.java, + S = T && g(i.environment) == M, + C = T ? 'a' : 'α', + N = T ? 'b' : 'β', + A = i.document || {}, + R = i.operamini || i.opera, + O = c.test((O = s && R ? R['[[Class]]'] : g(R))) ? O : (R = null), + b = t, + k = [], + V = null, + P = t == o, + L = P && R && 'function' == typeof R.version && R.version(), + D = f( + [ + { label: 'EdgeHTML', pattern: 'Edge' }, + 'Trident', + { label: 'WebKit', pattern: 'AppleWebKit' }, + 'iCab', + 'Presto', + 'NetFront', + 'Tasman', + 'KHTML', + 'Gecko', + ], + function (e, i) { + return ( + e || + (RegExp('\\b' + (i.pattern || v(i)) + '\\b', 'i').exec(t) && + (i.label || i)) + ) + } + ), + w = f( + [ + 'Adobe AIR', + 'Arora', + 'Avant Browser', + 'Breach', + 'Camino', + 'Electron', + 'Epiphany', + 'Fennec', + 'Flock', + 'Galeon', + 'GreenBrowser', + 'iCab', + 'Iceweasel', + 'K-Meleon', + 'Konqueror', + 'Lunascape', + 'Maxthon', + { label: 'Microsoft Edge', pattern: '(?:Edge|Edg|EdgA|EdgiOS)' }, + 'Midori', + 'Nook Browser', + 'PaleMoon', + 'PhantomJS', + 'Raven', + 'Rekonq', + 'RockMelt', + { label: 'Samsung Internet', pattern: 'SamsungBrowser' }, + 'SeaMonkey', + { label: 'Silk', pattern: '(?:Cloud9|Silk-Accelerated)' }, + 'Sleipnir', + 'SlimBrowser', + { label: 'SRWare Iron', pattern: 'Iron' }, + 'Sunrise', + 'Swiftfox', + 'Vivaldi', + 'Waterfox', + 'WebPositive', + { label: 'Yandex Browser', pattern: 'YaBrowser' }, + { label: 'UC Browser', pattern: 'UCBrowser' }, + 'Opera Mini', + { label: 'Opera Mini', pattern: 'OPiOS' }, + 'Opera', + { label: 'Opera', pattern: 'OPR' }, + 'Chromium', + 'Chrome', + { label: 'Chrome', pattern: '(?:HeadlessChrome)' }, + { label: 'Chrome Mobile', pattern: '(?:CriOS|CrMo)' }, + { label: 'Firefox', pattern: '(?:Firefox|Minefield)' }, + { label: 'Firefox for iOS', pattern: 'FxiOS' }, + { label: 'IE', pattern: 'IEMobile' }, + { label: 'IE', pattern: 'MSIE' }, + 'Safari', + ], + function (e, i) { + return ( + e || + (RegExp('\\b' + (i.pattern || v(i)) + '\\b', 'i').exec(t) && + (i.label || i)) + ) + } + ), + U = B([ + { label: 'BlackBerry', pattern: 'BB10' }, + 'BlackBerry', + { label: 'Galaxy S', pattern: 'GT-I9000' }, + { label: 'Galaxy S2', pattern: 'GT-I9100' }, + { label: 'Galaxy S3', pattern: 'GT-I9300' }, + { label: 'Galaxy S4', pattern: 'GT-I9500' }, + { label: 'Galaxy S5', pattern: 'SM-G900' }, + { label: 'Galaxy S6', pattern: 'SM-G920' }, + { label: 'Galaxy S6 Edge', pattern: 'SM-G925' }, + { label: 'Galaxy S7', pattern: 'SM-G930' }, + { label: 'Galaxy S7 Edge', pattern: 'SM-G935' }, + 'Google TV', + 'Lumia', + 'iPad', + 'iPod', + 'iPhone', + 'Kindle', + { label: 'Kindle Fire', pattern: '(?:Cloud9|Silk-Accelerated)' }, + 'Nexus', + 'Nook', + 'PlayBook', + 'PlayStation Vita', + 'PlayStation', + 'TouchPad', + 'Transformer', + { label: 'Wii U', pattern: 'WiiU' }, + 'Wii', + 'Xbox One', + { label: 'Xbox 360', pattern: 'Xbox' }, + 'Xoom', + ]), + x = f( + { + Apple: { iPad: 1, iPhone: 1, iPod: 1 }, + Alcatel: {}, + Archos: {}, + Amazon: { Kindle: 1, 'Kindle Fire': 1 }, + Asus: { Transformer: 1 }, + 'Barnes & Noble': { Nook: 1 }, + BlackBerry: { PlayBook: 1 }, + Google: { 'Google TV': 1, Nexus: 1 }, + HP: { TouchPad: 1 }, + HTC: {}, + Huawei: {}, + Lenovo: {}, + LG: {}, + Microsoft: { Xbox: 1, 'Xbox One': 1 }, + Motorola: { Xoom: 1 }, + Nintendo: { 'Wii U': 1, Wii: 1 }, + Nokia: { Lumia: 1 }, + Oppo: {}, + Samsung: { + 'Galaxy S': 1, + 'Galaxy S2': 1, + 'Galaxy S3': 1, + 'Galaxy S4': 1, + }, + Sony: { PlayStation: 1, 'PlayStation Vita': 1 }, + Xiaomi: { Mi: 1, Redmi: 1 }, + }, + function (e, i, r) { + return ( + e || + ((i[U] || + i[/^[a-z]+(?: +[a-z]+\b)*/i.exec(U)] || + RegExp('\\b' + v(r) + '(?:\\b|\\w*\\d)', 'i').exec(t)) && + r) + ) + } + ), + F = f( + [ + 'Windows Phone', + 'KaiOS', + 'Android', + 'CentOS', + { label: 'Chrome OS', pattern: 'CrOS' }, + 'Debian', + { label: 'DragonFly BSD', pattern: 'DragonFly' }, + 'Fedora', + 'FreeBSD', + 'Gentoo', + 'Haiku', + 'Kubuntu', + 'Linux Mint', + 'OpenBSD', + 'Red Hat', + 'SuSE', + 'Ubuntu', + 'Xubuntu', + 'Cygwin', + 'Symbian OS', + 'hpwOS', + 'webOS ', + 'webOS', + 'Tablet OS', + 'Tizen', + 'Linux', + 'Mac OS X', + 'Macintosh', + 'Mac', + 'Windows 98;', + 'Windows ', + ], + function (e, i) { + var r = i.pattern || v(i) + return ( + !e && + (e = RegExp('\\b' + r + '(?:/[\\d.]+|[ \\w.]*)', 'i').exec( + t + )) && + (e = (function (e, t, i) { + var r = { + '10.0': '10', + 6.4: '10 Technical Preview', + 6.3: '8.1', + 6.2: '8', + 6.1: 'Server 2008 R2 / 7', + '6.0': 'Server 2008 / Vista', + 5.2: 'Server 2003 / XP 64-bit', + 5.1: 'XP', + 5.01: '2000 SP1', + '5.0': '2000', + '4.0': 'NT', + '4.90': 'ME', + } + return ( + t && + i && + /^Win/i.test(e) && + !/^Windows Phone /i.test(e) && + (r = r[/[\d.]+$/.exec(e)]) && + (e = 'Windows ' + r), + (e = String(e)), + t && i && (e = e.replace(RegExp(t, 'i'), i)), + u( + e + .replace(/ ce$/i, ' CE') + .replace(/\bhpw/i, 'web') + .replace(/\bMacintosh\b/, 'Mac OS') + .replace(/_PowerPC\b/i, ' OS') + .replace(/\b(OS X) [^ \d]+/i, '$1') + .replace(/\bMac (OS X)\b/, '$1') + .replace(/\/(\d)/, ' $1') + .replace(/_/g, '.') + .replace(/(?: BePC|[ .]*fc[ \d.]+)$/i, '') + .replace(/\bx86\.64\b/gi, 'x86_64') + .replace(/\b(Windows Phone) OS\b/, '$1') + .replace(/\b(Chrome OS \w+) [\d.]+\b/, '$1') + .split(' on ')[0] + ) + ) + })(e, r, i.label || i)), + e + ) + } + ) + function B(e) { + return f(e, function (e, i) { + var r = i.pattern || v(i) + return ( + !e && + (e = + RegExp('\\b' + r + ' *\\d+[.\\w_]*', 'i').exec(t) || + RegExp('\\b' + r + ' *\\w+-[\\w]*', 'i').exec(t) || + RegExp( + '\\b' + r + '(?:; *(?:[a-z]+[_-])?[a-z]+\\d+|[^ ();-]*)', + 'i' + ).exec(t)) && + ((e = String( + i.label && !RegExp(r, 'i').test(i.label) ? i.label : e + ).split('/'))[1] && + !/[\d.]+/.test(e[0]) && + (e[0] += ' ' + e[1]), + (i = i.label || i), + (e = u( + e[0] + .replace(RegExp(r, 'i'), i) + .replace(RegExp('; *(?:' + i + '[_-])?', 'i'), ' ') + .replace(RegExp('(' + i + ')[-_.]?(\\w)', 'i'), '$1 $2') + ))), + e + ) + }) + } + function $(e) { + return f(e, function (e, i) { + return ( + e || + (RegExp( + i + '(?:-[\\d.]+/|(?: for [\\w-]+)?[ /-])([\\d.]+[^ ();/_-]*)', + 'i' + ).exec(t) || 0)[1] || + null + ) + }) + } + if ( + (D && (D = [D]), + /\bAndroid\b/.test(F) && + !U && + (a = /\bAndroid[^;]*;(.*?)(?:Build|\) AppleWebKit)\b/i.exec(t)) && + (U = y(a[1]).replace(/^[a-z]{2}-[a-z]{2};\s*/i, '') || null), + x && !U + ? (U = B([x])) + : x && + U && + (U = U.replace( + RegExp('^(' + v(x) + ')[-_.\\s]', 'i'), + x + ' ' + ).replace(RegExp('^(' + v(x) + ')[-_.]?(\\w)', 'i'), x + ' $2')), + (a = /\bGoogle TV\b/.exec(U)) && (U = a[0]), + /\bSimulator\b/i.test(t) && (U = (U ? U + ' ' : '') + 'Simulator'), + 'Opera Mini' == w && + /\bOPiOS\b/.test(t) && + k.push('running in Turbo/Uncompressed mode'), + 'IE' == w && /\blike iPhone OS\b/.test(t) + ? ((x = (a = e(t.replace(/like iPhone OS/, ''))).manufacturer), + (U = a.product)) + : /^iP/.test(U) + ? (w || (w = 'Safari'), + (F = + 'iOS' + + ((a = / OS ([\d_]+)/i.exec(t)) + ? ' ' + a[1].replace(/_/g, '.') + : ''))) + : 'Konqueror' == w && /^Linux\b/i.test(F) + ? (F = 'Kubuntu') + : (x && + 'Google' != x && + ((/Chrome/.test(w) && !/\bMobile Safari\b/i.test(t)) || + /\bVita\b/.test(U))) || + (/\bAndroid\b/.test(F) && + /^Chrome/.test(w) && + /\bVersion\//i.test(t)) + ? ((w = 'Android Browser'), + (F = /\bAndroid\b/.test(F) ? F : 'Android')) + : 'Silk' == w + ? (/\bMobi/i.test(t) || + ((F = 'Android'), k.unshift('desktop mode')), + /Accelerated *= *true/i.test(t) && k.unshift('accelerated')) + : 'UC Browser' == w && /\bUCWEB\b/.test(t) + ? k.push('speed mode') + : 'PaleMoon' == w && (a = /\bFirefox\/([\d.]+)\b/.exec(t)) + ? k.push('identifying as Firefox ' + a[1]) + : 'Firefox' == w && (a = /\b(Mobile|Tablet|TV)\b/i.exec(t)) + ? (F || (F = 'Firefox OS'), U || (U = a[1])) + : !w || + (a = + !/\bMinefield\b/i.test(t) && /\b(?:Firefox|Safari)\b/.exec(w)) + ? (w && + !U && + /[\/,]|^[^(]+?\)/.test(t.slice(t.indexOf(a + '/') + 8)) && + (w = null), + (a = U || x || F) && + (U || + x || + /\b(?:Android|Symbian OS|Tablet OS|webOS)\b/.test(F)) && + (w = + /[a-z]+(?: Hat)?/i.exec(/\bAndroid\b/.test(F) ? F : a) + + ' Browser')) + : 'Electron' == w && + (a = (/\bChrome\/([\d.]+)\b/.exec(t) || 0)[1]) && + k.push('Chromium ' + a), + L || + (L = $([ + '(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\d.]+$)|UCBrowser|YaBrowser)', + 'Version', + v(w), + '(?:Firefox|Minefield|NetFront)', + ])), + (a = + ('iCab' == D && parseFloat(L) > 3 + ? 'WebKit' + : /\bOpera\b/.test(w) && + (/\bOPR\b/.test(t) ? 'Blink' : 'Presto')) || + (/\b(?:Midori|Nook|Safari)\b/i.test(t) && + !/^(?:Trident|EdgeHTML)$/.test(D) && + 'WebKit') || + (!D && + /\bMSIE\b/i.test(t) && + ('Mac OS' == F ? 'Tasman' : 'Trident')) || + ('WebKit' == D && + /\bPlayStation\b(?! Vita\b)/i.test(w) && + 'NetFront')) && (D = [a]), + 'IE' == w && (a = (/; *(?:XBLWP|ZuneWP)(\d+)/i.exec(t) || 0)[1]) + ? ((w += ' Mobile'), + (F = 'Windows Phone ' + (/\+$/.test(a) ? a : a + '.x')), + k.unshift('desktop mode')) + : /\bWPDesktop\b/i.test(t) + ? ((w = 'IE Mobile'), + (F = 'Windows Phone 8.x'), + k.unshift('desktop mode'), + L || (L = (/\brv:([\d.]+)/.exec(t) || 0)[1])) + : 'IE' != w && + 'Trident' == D && + (a = /\brv:([\d.]+)/.exec(t)) && + (w && k.push('identifying as ' + w + (L ? ' ' + L : '')), + (w = 'IE'), + (L = a[1])), + P) + ) { + if ( + (function (e, t) { + var i = null != e ? typeof e[t] : 'number' + return !( + /^(?:boolean|number|string|undefined)$/.test(i) || + ('object' == i && !e[t]) + ) + })(i, 'global') + ) + if ( + (T && + ((b = (a = T.lang.System).getProperty('os.arch')), + (F = + F || + a.getProperty('os.name') + + ' ' + + a.getProperty('os.version'))), + S) + ) { + try { + ;(L = i.require('ringo/engine').version.join('.')), + (w = 'RingoJS') + } catch (t) { + ;(a = i.system) && + a.global.system == i.system && + ((w = 'Narwhal'), F || (F = a[0].os || null)) + } + w || (w = 'Rhino') + } else + 'object' == typeof i.process && + !i.process.browser && + (a = i.process) && + ('object' == typeof a.versions && + ('string' == typeof a.versions.electron + ? (k.push('Node ' + a.versions.node), + (w = 'Electron'), + (L = a.versions.electron)) + : 'string' == typeof a.versions.nw && + (k.push('Chromium ' + L, 'Node ' + a.versions.node), + (w = 'NW.js'), + (L = a.versions.nw))), + w || + ((w = 'Node.js'), + (b = a.arch), + (F = a.platform), + (L = (L = /[\d.]+/.exec(a.version)) ? L[0] : null))) + else + g((a = i.runtime)) == I + ? ((w = 'Adobe AIR'), (F = a.flash.system.Capabilities.os)) + : g((a = i.phantom)) == E + ? ((w = 'PhantomJS'), + (L = + (a = a.version || null) && + a.major + '.' + a.minor + '.' + a.patch)) + : 'number' == typeof A.documentMode && + (a = /\bTrident\/(\d+)/i.exec(t)) + ? ((L = [L, A.documentMode]), + (a = +a[1] + 4) != L[1] && + (k.push('IE ' + L[1] + ' mode'), + D && (D[1] = ''), + (L[1] = a)), + (L = 'IE' == w ? String(L[1].toFixed(1)) : L[0])) + : 'number' == typeof A.documentMode && + /^(?:Chrome|Firefox)\b/.test(w) && + (k.push('masking as ' + w + ' ' + L), + (w = 'IE'), + (L = '11.0'), + (D = ['Trident']), + (F = 'Windows')) + F = F && u(F) + } + if ( + (L && + (a = + /(?:[ab]|dp|pre|[ab]\d+pre)(?:\d+\+?)?$/i.exec(L) || + /(?:alpha|beta)(?: ?\d)?/i.exec( + t + ';' + (P && n.appMinorVersion) + ) || + (/\bMinefield\b/i.test(t) && 'a')) && + ((V = /b/i.test(a) ? 'beta' : 'alpha'), + (L = + L.replace(RegExp(a + '\\+?$'), '') + + ('beta' == V ? N : C) + + (/\d+\+?/.exec(a) || ''))), + 'Fennec' == w || + ('Firefox' == w && /\b(?:Android|Firefox OS|KaiOS)\b/.test(F))) + ) + w = 'Firefox Mobile' + else if ('Maxthon' == w && L) L = L.replace(/\.[\d.]+/, '.x') + else if (/\bXbox\b/i.test(U)) + 'Xbox 360' == U && (F = null), + 'Xbox 360' == U && + /\bIEMobile\b/.test(t) && + k.unshift('mobile mode') + else if ( + (!/^(?:Chrome|IE|Opera)$/.test(w) && + (!w || U || /Browser|Mobi/.test(w))) || + ('Windows CE' != F && !/Mobi/i.test(t)) + ) + if ('IE' == w && P) + try { + null === i.external && k.unshift('platform preview') + } catch (t) { + k.unshift('embedded') + } + else + (/\bBlackBerry\b/.test(U) || /\bBB10\b/.test(t)) && + (a = + (RegExp(U.replace(/ +/g, ' *') + '/([.\\d]+)', 'i').exec(t) || + 0)[1] || L) + ? ((F = + ((a = [a, /BB10/.test(t)])[1] + ? ((U = null), (x = 'BlackBerry')) + : 'Device Software') + + ' ' + + a[0]), + (L = null)) + : this != m && + 'Wii' != U && + ((P && R) || + (/Opera/.test(w) && /\b(?:MSIE|Firefox)\b/i.test(t)) || + ('Firefox' == w && /\bOS X (?:\d+\.){2,}/.test(F)) || + ('IE' == w && + ((F && !/^Win/.test(F) && L > 5.5) || + (/\bWindows XP\b/.test(F) && L > 8) || + (8 == L && !/\bTrident\b/.test(t))))) && + !c.test((a = e.call(m, t.replace(c, '') + ';'))) && + a.name && + ((a = 'ing as ' + a.name + ((a = a.version) ? ' ' + a : '')), + c.test(w) + ? (/\bIE\b/.test(a) && 'Mac OS' == F && (F = null), + (a = 'identify' + a)) + : ((a = 'mask' + a), + (w = O + ? u(O.replace(/([a-z])([A-Z])/g, '$1 $2')) + : 'Opera'), + /\bIE\b/.test(a) && (F = null), + P || (L = null)), + (D = ['Presto']), + k.push(a)) + else w += ' Mobile' + ;(a = (/\bAppleWebKit\/([\d.]+\+?)/i.exec(t) || 0)[1]) && + ((a = [parseFloat(a.replace(/\.(\d)$/, '.0$1')), a]), + 'Safari' == w && '+' == a[1].slice(-1) + ? ((w = 'WebKit Nightly'), (V = 'alpha'), (L = a[1].slice(0, -1))) + : (L != a[1] && + L != (a[2] = (/\bSafari\/([\d.]+\+?)/i.exec(t) || 0)[1])) || + (L = null), + (a[1] = (/\b(?:Headless)?Chrome\/([\d.]+)/i.exec(t) || 0)[1]), + 537.36 == a[0] && + 537.36 == a[2] && + parseFloat(a[1]) >= 28 && + 'WebKit' == D && + (D = ['Blink']), + P && (l || a[1]) + ? (D && (D[1] = 'like Chrome'), + (a = + a[1] || + ((a = a[0]) < 530 + ? 1 + : a < 532 + ? 2 + : a < 532.05 + ? 3 + : a < 533 + ? 4 + : a < 534.03 + ? 5 + : a < 534.07 + ? 6 + : a < 534.1 + ? 7 + : a < 534.13 + ? 8 + : a < 534.16 + ? 9 + : a < 534.24 + ? 10 + : a < 534.3 + ? 11 + : a < 535.01 + ? 12 + : a < 535.02 + ? '13+' + : a < 535.07 + ? 15 + : a < 535.11 + ? 16 + : a < 535.19 + ? 17 + : a < 536.05 + ? 18 + : a < 536.1 + ? 19 + : a < 537.01 + ? 20 + : a < 537.11 + ? '21+' + : a < 537.13 + ? 23 + : a < 537.18 + ? 24 + : a < 537.24 + ? 25 + : a < 537.36 + ? 26 + : 'Blink' != D + ? '27' + : '28'))) + : (D && (D[1] = 'like Safari'), + (a = + (a = a[0]) < 400 + ? 1 + : a < 500 + ? 2 + : a < 526 + ? 3 + : a < 533 + ? 4 + : a < 534 + ? '4+' + : a < 535 + ? 5 + : a < 537 + ? 6 + : a < 538 + ? 7 + : a < 601 + ? 8 + : a < 602 + ? 9 + : a < 604 + ? 10 + : a < 606 + ? 11 + : a < 608 + ? 12 + : '12')), + D && + (D[1] += + ' ' + + (a += 'number' == typeof a ? '.x' : /[.+]/.test(a) ? '' : '+')), + 'Safari' == w && (!L || parseInt(L) > 45) + ? (L = a) + : 'Chrome' == w && + /\bHeadlessChrome/i.test(t) && + k.unshift('headless')), + 'Opera' == w && (a = /\bzbov|zvav$/.exec(F)) + ? ((w += ' '), + k.unshift('desktop mode'), + 'zvav' == a ? ((w += 'Mini'), (L = null)) : (w += 'Mobile'), + (F = F.replace(RegExp(' *' + a + '$'), ''))) + : 'Safari' == w && /\bChrome\b/.exec(D && D[1]) + ? (k.unshift('desktop mode'), + (w = 'Chrome Mobile'), + (L = null), + /\bOS X\b/.test(F) + ? ((x = 'Apple'), (F = 'iOS 4.3+')) + : (F = null)) + : /\bSRWare Iron\b/.test(w) && !L && (L = $('Chrome')), + L && + 0 == L.indexOf((a = /[\d.]+$/.exec(F))) && + t.indexOf('/' + a + '-') > -1 && + (F = y(F.replace(a, ''))), + F && + -1 != F.indexOf(w) && + !RegExp(w + ' OS').test(F) && + (F = F.replace(RegExp(' *' + v(w) + ' *'), '')), + D && + !/\b(?:Avant|Nook)\b/.test(w) && + (/Browser|Lunascape|Maxthon/.test(w) || + ('Safari' != w && /^iOS/.test(F) && /\bSafari\b/.test(D[1])) || + (/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test( + w + ) && + D[1])) && + (a = D[D.length - 1]) && + k.push(a), + k.length && (k = ['(' + k.join('; ') + ')']), + x && U && U.indexOf(x) < 0 && k.push('on ' + x), + U && k.push((/^on /.test(k[k.length - 1]) ? '' : 'on ') + U), + F && + ((a = / ([\d.+]+)$/.exec(F)), + (d = a && '/' == F.charAt(F.length - a[0].length - 1)), + (F = { + architecture: 32, + family: a && !d ? F.replace(a[0], '') : F, + version: a ? a[1] : null, + toString: function () { + var e = this.version + return ( + this.family + + (e && !d ? ' ' + e : '') + + (64 == this.architecture ? ' 64-bit' : '') + ) + }, + })), + (a = /\b(?:AMD|IA|Win|WOW|x86_|x)64\b/i.exec(b)) && + !/\bi686\b/i.test(b) + ? (F && + ((F.architecture = 64), + (F.family = F.family.replace(RegExp(' *' + a), ''))), + w && + (/\bWOW64\b/i.test(t) || + (P && + /\w(?:86|32)$/.test(n.cpuClass || n.platform) && + !/\bWin64; x64\b/i.test(t))) && + k.unshift('32-bit')) + : F && + /^OS X/.test(F.family) && + 'Chrome' == w && + parseFloat(L) >= 39 && + (F.architecture = 64), + t || (t = null) + var G = {} + return ( + (G.description = t), + (G.layout = D && D[0]), + (G.manufacturer = x), + (G.name = w), + (G.prerelease = V), + (G.product = U), + (G.ua = t), + (G.version = w && L), + (G.os = F || { + architecture: null, + family: null, + version: null, + toString: function () { + return 'null' + }, + }), + (G.parse = e), + (G.toString = function () { + return this.description || '' + }), + G.version && k.unshift(L), + G.name && k.unshift(w), + F && + w && + (F != String(F).split(' ')[0] || (F != w.split(' ')[0] && !U)) && + k.push(U ? '(' + F + ')' : 'on ' + F), + k.length && (G.description = k.join(' ')), + G + ) + })() + s && n + ? m(I, function (e, t) { + s[t] = e + }) + : (r.platform = I) + }).call(i) + }) +class xi { + constructor(e) { + ;(this.name = 'V2NIMConversationIdUtil'), (this.core = e) + } + conversationId(e, t) { + return `${this.core.account}|${e}|${t}` + } + p2pConversationId(e) { + return `${this.core.account}|1|${e}` + } + teamConversationId(e) { + return `${this.core.account}|2|${e}` + } + superTeamConversationId(e) { + return `${this.core.account}|3|${e}` + } + messageConversationId(e) { + return 1 === e.conversationType + ? e.senderId === this.core.account + ? this.p2pConversationId(e.receiverId) + : this.p2pConversationId(e.senderId) + : 2 === e.conversationType + ? this.teamConversationId(e.receiverId) + : this.superTeamConversationId(e.receiverId) + } + parseConversationType(e) { + try { + if (e && e.startsWith(`${this.core.account}|`)) { + var t = e.replace(`${this.core.account}|`, '') + return Number(t[0]) + } + return ( + this.core.logger.warn( + `conversationId is not start with ${this.core.account}` + ), + 0 + ) + } catch (e) { + return 0 + } + } + parseConversationTargetId(e) { + try { + return e && e.startsWith(`${this.core.account}|`) + ? e.replace(`${this.core.account}|`, '').slice(2) + : (this.core.logger.warn( + `conversationId is not start with ${this.core.account}` + ), + '') + } catch (e) { + return '' + } + } + convertToV1ConversationId(e) { + var t = this.parseConversationType(e) + return `${ + 1 === t ? 'p2p' : 2 === t ? 'team' : 'superTeam' + }|${this.parseConversationTargetId(e)}` + } +} +class Fi { + constructor() { + ;(this.messages = new Map()), (this.capacity = 1e4) + } + reset() { + this.messages.clear() + } + getMessageById(e) { + if (e) return this.messages.get(e) + } + getMessagesByConversationId(e) { + var t = [] + return ( + this.messages.forEach((i) => { + i.conversationId === e && t.push(i) + }), + t + ) + } + getLastMessageOfConversation(e) { + var t = this.getMessagesByConversationId(e) + if (0 !== t.length) + return t.reduce((e, t) => (t.createTime > e.createTime ? t : e), t[0]) + } + upsertMessages(e) { + e.forEach((e) => { + this.setLRU(e.messageClientId, e) + }) + } + setLRU(e, t) { + if (this.messages.has(e)) this.messages.delete(e) + else if (this.messages.size >= this.capacity) { + var i = this.messages.keys().next().value + i && this.messages.delete(i) + } + this.messages.set(e, t) + } + deleteMessage(e) { + this.messages.delete(e) + } + deleteMessages(e, t) { + this.messages.forEach((i) => { + e === i.conversationId && + (!t || (t && i.createTime < t)) && + this.messages.delete(i.messageClientId) + }) + } +} +var Bi = { + accountId: { type: 'string', allowEmpty: !1 }, + content: { + type: 'object', + required: !1, + rules: { + msg: { type: 'string', allowEmpty: !1 }, + type: { type: 'number', allowEmpty: !1 }, + }, + }, + messages: { + type: 'array', + required: !1, + rules: { + msg: { type: 'string', allowEmpty: !1 }, + type: { type: 'number' }, + role: { type: 'enum', values: ['assistant', 'user', 'system'] }, + }, + }, + promptVariables: { type: 'jsonstr', required: !1 }, + modelConfigParams: { + type: 'object', + required: !1, + rules: { + prompt: { type: 'string', required: !1 }, + maxTokens: { type: 'number', required: !1 }, + topP: { type: 'number', required: !1 }, + temperature: { type: 'number', required: !1 }, + }, + }, + aiStream: { type: 'boolean', required: !1 }, + }, + $i = Object.assign({ requestId: { type: 'string', allowEmpty: !1 } }, Bi), + Gi = { + requestId: { type: 'string', allowEmpty: !1 }, + accountId: { type: 'string', allowEmpty: !1 }, + }, + ji = [1, 3, 2, 0], + qi = [2, 7, 12, 100, 6, 1, -1, 4, 5, 11, 0, 10, 3], + Hi = { + routeEnabled: { type: 'boolean', required: !1 }, + routeEnvironment: { type: 'string', required: !1 }, + }, + Yi = { + pushEnabled: { type: 'boolean', required: !1 }, + pushNickEnabled: { type: 'boolean', required: !1 }, + pushContent: { type: 'string', required: !1 }, + pushPayload: { type: 'string', required: !1 }, + forcePush: { type: 'boolean', required: !1 }, + forceContent: { type: 'string', required: !1 }, + forcePushAccountIds: { type: 'array', required: !1, itemType: 'string' }, + }, + Ki = { + antispamEnabled: { type: 'boolean', required: !1 }, + antispamBusinessId: { type: 'string', required: !1 }, + antispamCustomMessage: { type: 'string', required: !1 }, + antispamCheating: { type: 'string', required: !1 }, + antispamExtension: { type: 'string', required: !1 }, + }, + Wi = { + messageConfig: { + type: 'object', + required: !1, + rules: { + readReceiptEnabled: { type: 'boolean', required: !1 }, + lastMessageUpdateEnabled: { type: 'boolean', required: !1 }, + historyEnabled: { type: 'boolean', required: !1 }, + roamingEnabled: { type: 'boolean', required: !1 }, + onlineSyncEnabled: { type: 'boolean', required: !1 }, + offlineEnabled: { type: 'boolean', required: !1 }, + unreadEnabled: { type: 'boolean', required: !1 }, + }, + }, + routeConfig: { type: 'object', required: !1, rules: Hi }, + pushConfig: { type: 'object', required: !1, rules: Yi }, + antiSpamConfig: { type: 'object', required: !1, rules: Ki }, + robotConfig: { + type: 'object', + required: !1, + rules: { + accountId: { type: 'string', required: !1 }, + topic: { type: 'string', required: !1 }, + function: { type: 'string', required: !1 }, + customContent: { type: 'string', required: !1 }, + }, + }, + aiConfig: { type: 'object', required: !1, rules: Bi }, + targetConfig: { + type: 'object', + required: !1, + rules: { + receiverIds: { type: 'array', itemType: 'string' }, + inclusive: { type: 'boolean' }, + newMemberVisible: { type: 'boolean', required: !1 }, + }, + }, + clientAntispamEnabled: { type: 'boolean', required: !1 }, + clientAntispamReplace: { type: 'string', required: !1 }, + }, + Ji = { + message: { + type: 'object', + rules: { + text: { type: 'string', required: !1 }, + messageType: { type: 'enum', values: qi }, + messageClientId: { type: 'string', allowEmpty: !1 }, + }, + }, + params: { type: 'object', rules: Wi, required: !1 }, + replyMessage: { + type: 'object', + rules: { + conversationType: { type: 'enum', values: [1, 3, 2, 0] }, + receiverId: { type: 'string', allowEmpty: !1 }, + senderId: { type: 'string', allowEmpty: !1 }, + messageClientId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + }, + }, + zi = { + conversationId: { type: 'string', allowEmpty: !1 }, + message: { + type: 'object', + rules: { + text: { type: 'string', required: !1 }, + messageType: { type: 'enum', values: qi }, + messageClientId: { type: 'string', allowEmpty: !1 }, + attachment: { + type: 'object', + required: !1, + rules: { file: { type: 'file', required: !1 } }, + }, + }, + }, + params: { type: 'object', required: !1, rules: Wi }, + }, + Xi = { + message: { + type: 'object', + rules: { + messageClientId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: ji }, + createTime: { type: 'number' }, + }, + }, + params: { + type: 'object', + rules: { + postscript: { type: 'string', required: !1 }, + serverExtension: { type: 'string', required: !1 }, + pushContent: { type: 'string', required: !1 }, + pushPayload: { type: 'string', required: !1 }, + env: { type: 'string', required: !1 }, + }, + required: !1, + }, + }, + Qi = { + conversationId: { type: 'string', allowEmpty: !1 }, + messageTypes: { type: 'array', required: !1, itemType: 'enum', values: qi }, + beginTime: { type: 'number', required: !1 }, + endTime: { type: 'number', required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + direction: { type: 'enum', values: [1, 0], required: !1 }, + anchorMessage: { + type: 'object', + required: !1, + rules: { + messageServerId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + }, + }, + Zi = { + conversationType: { type: 'enum', values: ji }, + receiverId: { type: 'string', allowEmpty: !1 }, + senderId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + messageClientId: { type: 'string', allowEmpty: !1 }, + }, + er = { messageRefers: { type: 'array', required: !0, rules: Zi } }, + tr = { + conversationId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: ji }, + receiverId: { type: 'string', allowEmpty: !1 }, + senderId: { type: 'string', allowEmpty: !1 }, + messageClientId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + ir = { messages: { type: 'array', rules: tr } }, + rr = { + conversationId: { type: 'string', allowEmpty: !1 }, + serverExtension: { type: 'string', required: !1 }, + onlineSync: { type: 'boolean', required: !1 }, + deleteRoam: { type: 'boolean', required: !1 }, + clearMode: { type: 'enum', values: [0, 1, 2], required: !1 }, + }, + sr = { serverExtension: { type: 'string', required: !1 } }, + nr = { + messageClientId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: [1] }, + receiverId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + or = { + messages: { + type: 'array', + rules: { + messageClientId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: [2] }, + receiverId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + min: 1, + }, + }, + ar = { + voiceUrl: { type: 'string', required: !1, allowEmpty: !1 }, + file: { type: 'file', required: !1 }, + voicePath: { type: 'string', required: !1, allowEmpty: !1 }, + mimeType: { type: 'string', required: !1, allowEmpty: !1 }, + sampleRate: { type: 'string', required: !1, allowEmpty: !1 }, + duration: { type: 'number', required: !0, min: 0 }, + sceneName: { type: 'string', required: !1 }, + }, + cr = { + message: { + type: 'object', + rules: { + conversationType: { type: 'enum', values: ji }, + receiverId: { type: 'string', allowEmpty: !1 }, + senderId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + messageClientId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + }, + index: { type: 'number', min: 1 }, + serverExtension: { type: 'string', required: !1 }, + pushConfig: { + type: 'object', + required: !1, + rules: { + pushEnabled: { type: 'boolean', required: !1 }, + needBadge: { type: 'boolean', required: !1 }, + title: { type: 'string', required: !1, allowEmpty: !1 }, + content: { type: 'string', required: !1, allowEmpty: !1 }, + pushPayload: { type: 'string', required: !1, allowEmpty: !1 }, + }, + }, + }, + dr = { + messages: { + type: 'array', + rules: { + conversationType: { type: 'enum', values: [1, 3, 2, 0] }, + receiverId: { type: 'string', allowEmpty: !1 }, + senderId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + messageClientId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + }, + }, + lr = { + params: { + type: 'object', + rules: { + collectionType: { type: 'number', min: 1 }, + collectionData: { type: 'string', allowEmpty: !1 }, + serverExtension: { type: 'string', required: !1 }, + uniqueId: { type: 'string', required: !1 }, + }, + }, + }, + pr = { + collections: { + type: 'array', + min: 1, + rules: { + collectionId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + }, + }, + }, + hr = { + serverExtension: { type: 'string', required: !1 }, + collection: { + type: 'object', + rules: { + collectionId: { type: 'string', allowEmpty: !1 }, + collectionType: { type: 'number' }, + createTime: { type: 'number' }, + }, + }, + }, + ur = { + beginTime: { type: 'number', required: !1 }, + endTime: { type: 'number', required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + direction: { type: 'enum', required: !1, values: [1, 0] }, + collectionType: { type: 'number', required: !1 }, + anchorCollection: { + type: 'object', + required: !1, + rules: { + collectionId: { type: 'string', allowEmpty: !1, required: !1 }, + createTime: { type: 'number', required: !1 }, + }, + }, + }, + mr = { + keyword: { type: 'string', allowEmpty: !1 }, + beginTime: { type: 'number', required: !1 }, + endTime: { type: 'number', required: !1 }, + sortOrder: { type: 'enum', values: [1, 0], required: !1 }, + conversationLimit: { type: 'number', min: 0, required: !1 }, + messageLimit: { type: 'number', min: 1, required: !1 }, + p2pAccountIds: { type: 'array', required: !1, itemType: 'string' }, + teamIds: { type: 'array', required: !1, itemType: 'string' }, + senderAccountIds: { type: 'array', required: !1, itemType: 'string' }, + messageTypes: { type: 'array', required: !1, itemType: 'enum', values: qi }, + messageSubtypes: { type: 'array', required: !1, itemType: 'number' }, + }, + gr = { + conversationId: { type: 'string', required: !1, allowEmpty: !1 }, + keywordList: { type: 'array', required: !1, itemType: 'string' }, + keywordMatchType: { type: 'enum', values: [1, 0], required: !1 }, + senderAccountIds: { type: 'array', required: !1, itemType: 'string' }, + messageTypes: { type: 'array', required: !1, itemType: 'enum', values: qi }, + messageSubtypes: { type: 'array', required: !1, itemType: 'number' }, + searchStartTime: { type: 'number', required: !1 }, + searchTimePeriod: { type: 'number', required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + direction: { type: 'enum', values: [0, 1], required: !1 }, + pageToken: { type: 'string', required: !1 }, + }, + vr = { + message: { + type: 'object', + rules: { + receiverId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: [2] }, + }, + }, + }, + fr = { + messages: { + type: 'array', + rules: { + receiverId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + conversationType: { type: 'enum', values: [2] }, + }, + min: 1, + }, + }, + yr = { + sceneName: { type: 'string', required: !1 }, + name: { type: 'string', required: !1 }, + }, + Ir = Object.assign(Object.assign({}, yr), { + duration: { type: 'number', required: !1 }, + }), + Mr = Object.assign(Object.assign({}, Ir), { + width: { type: 'number', required: !1 }, + height: { type: 'number', required: !1 }, + }), + _r = Object.assign(Object.assign({}, yr), { + width: { type: 'number', required: !1 }, + height: { type: 'number', required: !1 }, + }), + Er = { + messageRefer: { type: 'object', required: !0, rules: Zi }, + beginTime: { type: 'number', required: !1 }, + endTime: { type: 'number', required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + direction: { type: 'enum', values: [1, 0], required: !1 }, + excludeMessageServerId: { type: 'string', required: !1, allowEmpty: !1 }, + }, + Tr = { + senderId: { type: 'string', allowEmpty: !1 }, + receiverId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + messageClientId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + }, + Sr = { + subType: { type: 'number', min: 0, required: !1 }, + text: { type: 'string', required: !1 }, + attachment: { type: 'object', required: !1 }, + serverExtension: { type: 'string', required: !1 }, + routeConfig: { type: 'object', required: !1, rules: Hi }, + pushConfig: { type: 'object', required: !1, rules: Yi }, + antiSpamConfig: { type: 'object', required: !1, rules: Ki }, + clientAntispamEnabled: { type: 'boolean', required: !1 }, + clientAntispamReplace: { type: 'string', required: !1 }, + }, + Cr = { + messageClientId: { type: 'string', allowEmpty: !1 }, + messageServerId: { type: 'string', allowEmpty: !1 }, + createTime: { type: 'number' }, + aiConfig: { type: 'object', rules: Bi }, + }, + Nr = { + operationType: { type: 'enum', values: [0, 1, 2] }, + updateContent: { type: 'string', allowEmpty: !0, required: !1 }, + }, + Ar = { operationType: { type: 'enum', values: [2, 1], required: !0 } } +class Rr { + constructor(e, t) { + ;(this.p2pMessageReceipts = {}), (this.core = e), (this.service = t) + } + reset() { + this.p2pMessageReceipts = {} + } + sendP2PMessageReceipt(e) { + return Te(this, void 0, void 0, function* () { + if ((ye(nr, e, '', !0), e.senderId === this.core.account)) + throw new me({ + detail: { + reason: `sendP2PMessageReceipt. sender: ${e.senderId} is not allowed to send msg receipt`, + }, + }) + yield this.core.sendCmd('v2SendP2PMessageReceipt', { + tag: { + receiverId: e.senderId, + messageClientId: e.messageClientId, + createTime: e.createTime, + }, + }) + }) + } + isPeerRead(e) { + if (1 !== e.conversationType) return !1 + if (e.senderId !== this.core.account) return !1 + if (e.senderId === this.core.account && e.receiverId === this.core.account) + return !0 + var t = this.core.V2NIMConversationIdUtil.messageConversationId(e), + i = this.p2pMessageReceipts[t] || 0 + return e.createTime <= i + } + getP2PMessageReceipt(e) { + return Te(this, void 0, void 0, function* () { + if ( + (Me(this.core.account, e), + 1 !== this.core.V2NIMConversationIdUtil.parseConversationType(e)) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getP2PMessageReceipt: conversationId is not p2p conversationId', + }, + }) + return { conversationId: e, timestamp: this.p2pMessageReceipts[e] || 0 } + }) + } + getTeamMessageReceipts(e) { + return Te(this, void 0, void 0, function* () { + if ( + (ye(fr, { messages: e }, '', !0), + e.some((e) => e.senderId !== this.core.account)) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getTeamMessageReceipts: exist messages senderId is not current user', + }, + }) + if (e.some((t) => t.receiverId !== e[0].receiverId)) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: + 'getTeamMessageReceipts: exist messages receiverId is not same', + }, + }) + return (yield this.core.sendCmd('v2GetTeamMessageReceipts', { + tag: e, + })).content.data.map((e) => + Object.assign(Object.assign({}, e), { + conversationId: this.core.V2NIMConversationIdUtil.teamConversationId( + e.receiverId + ), + }) + ) + }) + } + getTeamMessageReceiptDetail(e) { + return Te(this, void 0, void 0, function* () { + if ((ye(vr, { message: e }, '', !0), e.senderId !== this.core.account)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: `getTeamMessageReceiptDetail::senderId ${e.senderId} incorrect`, + }, + }) + var t = yield this.core.sendCmd('v2GetTeamMessageReceiptDetail', { + tag: e, + }) + return { + readReceipt: { + conversationId: this.core.V2NIMConversationIdUtil.teamConversationId( + e.receiverId + ), + messageClientId: e.messageClientId, + messageServerId: e.messageServerId, + readCount: t.content.readAccountList.length, + unreadCount: t.content.unreadAccountList.length, + }, + readAccountList: t.content.readAccountList, + unreadAccountList: t.content.unreadAccountList, + } + }) + } + sendTeamMessageReceipts(e) { + return Te(this, void 0, void 0, function* () { + if (e.some((t) => t.conversationId !== e[0].conversationId)) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'getTeamMessageReceipts: conversationId not same' }, + }) + if ( + (ye(or, { messages: e }, '', !0), + e.some((e) => e.senderId === this.core.account)) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getTeamMessageReceipts: exist messages senderId is not current user', + }, + }) + yield this.core.sendCmd('v2SendTeamMessageReceipts', { tag: e }) + }) + } + syncP2PMessagReceiptsHandler(e) { + var t = e.content.data.map((e) => { + var t = this.core.V2NIMConversationIdUtil.p2pConversationId(e.senderId), + i = e.createTime + return ( + (this.p2pMessageReceipts[t] = i), { conversationId: t, timestamp: i } + ) + }) + this.service.emit('onReceiveP2PMessageReadReceipts', t) + } + onP2PMessageReceiptsHandler(e) { + var t = this.core.V2NIMConversationIdUtil.p2pConversationId( + e.content.data.senderId + ), + i = e.content.data.createTime + ;(this.p2pMessageReceipts[t] = i), + this.service.emit('onReceiveP2PMessageReadReceipts', [ + { conversationId: t, timestamp: i }, + ]) + } + onTeamMessageReceiptsHandler(e) { + var t = e.content.data.map((e) => ({ + conversationId: this.core.V2NIMConversationIdUtil.teamConversationId( + e.receiverId + ), + messageServerId: e.messageServerId, + messageClientId: e.messageClientId, + readCount: e.readCount, + unreadCount: e.unreadCount, + latestReadAccount: e.latestReadAccount, + })) + this.service.emit('onReceiveTeamMessageReadReceipts', t) + } +} +var Or = { + '31_1': 'v2TeamCreate', + '32_1': 'v2SuperTeamCreate', + '31_5': 'v2TeamInviteMembers', + '32_5': 'v2SuperTeamInviteMembers', + '31_6': 'v2TeamKickMembers', + '32_6': 'v2SuperTeamKickMembers', + '31_8': 'v2TeamLeave', + '32_7': 'v2SuperTeamLeave', + '31_7': 'v2TeamUpdateInfo', + '32_8': 'v2SuperTeamUpdateInfo', + '31_9': 'v2TeamGetInfo', + '32_9': 'v2SuperTeamGetInfo', + '31_12': 'v2TeamDismiss', + '32_4': 'v2SuperTeamDismiss', + '31_13': 'v2TeamApplyToJoin', + '32_20': 'v2SuperTeamApplyToJoin', + '31_14': 'v2TeamAcceptJoinApplication', + '32_21': 'v2SuperTeamAcceptJoinApplication', + '31_15': 'v2TeamRejectJoinApplication', + '32_22': 'v2SuperTeamRejectJoinApplication', + '31_16': 'v2TeamAddManagers', + '32_26': 'v2SuperTeamAddManagers', + '31_17': 'v2TeamRemoveManagers', + '32_27': 'v2SuperTeamRemoveManagers', + '31_18': 'v2TeamTransferOwner', + '32_31': 'v2SuperTeamTransferOwner', + '31_19': 'v2TeamUpdateSelfMemberInfo', + '32_10': 'v2SuperTeamUpdateSelfMemberInfo', + '31_20': 'v2TeamUpdateMember', + '32_30': 'v2SuperTeamUpdateMember', + '31_21': 'v2TeamAcceptInvitation', + '32_23': 'v2SuperTeamAcceptInvitation', + '31_22': 'v2TeamRejectInvite', + '32_24': 'v2SuperTeamRejectInvite', + '31_33': 'v2TeamGetMemberInvitor', + '32_35': 'v2SuperTeamGetMemberInvitor', + '31_25': 'v2TeamMemberSetChatBannedStatus', + '32_29': 'v2SuperTeamMemberSetChatBannedStatus', + '31_32': 'v2TeamSetChatBannedMode', + '32_28': 'v2SuperTeamSetChatBannedMode', + '31_34': 'v2TeamGetByIds', + '32_36': 'v2SuperTeamGetByIds', + '31_35': 'v2TeamMemberGetListByIds', + '32_37': 'v2SuperTeamMemberGetListByIds', + '31_36': 'v2TeamMemberGetList', + '8_101': 'v2TeamCreateMultiSync', + '8_109': 'v2TeamSync', + '8_119': 'v2TeamMemberUpdateMultiSync', + '8_126': 'v2TeamMembersOfSelfInSync', + '21_101': 'v2SuperTeamCreateMultiSync', + '21_109': 'v2SuperTeamSync', + '21_110': 'v2SuperTeamMemberUpdateMultiSync', + '21_111': 'v2SuperTeamMembersOfSelfInSync', + }, + br = { antispamBusinessId: 1 }, + kr = 'V2NIMTeamService', + Vr = { + teamId: 1, + name: 3, + teamType: { id: 4, retConverter: (e) => (0 == +e ? 1 : +e) }, + ownerAccountId: 5, + memberLimit: { id: 6, retType: 'number' }, + isValidTeam: { + id: 8, + retConverter: (e, t) => 1 == +e && (void 0 === t[13] || 1 == +t[13]), + }, + memberCount: { id: 9, retType: 'number' }, + memberUpdateTime: { id: 10, retType: 'number' }, + createTime: { id: 11, retType: 'number' }, + updateTime: { id: 12, retType: 'number' }, + intro: 14, + announcement: 15, + joinMode: { id: 16, retType: 'number' }, + serverExtension: 18, + customerExtension: 19, + avatar: 20, + agreeMode: { id: 21, retType: 'number' }, + inviteMode: { id: 22, retType: 'number' }, + updateInfoMode: { id: 23, retType: 'number' }, + updateExtensionMode: { id: 24, retType: 'number' }, + chatBannedMode: { id: 101, retType: 'number' }, + }, + Pr = { + teamId: 1, + accountId: 3, + memberRole: { id: 4, retType: 'number' }, + teamNick: 5, + bits: { id: 7, retType: 'number' }, + inTeam: { id: 9, retType: 'boolean' }, + joinTime: { id: 10, retType: 'number' }, + updateTime: { id: 11, retType: 'number' }, + serverExtension: 12, + chatBanned: { id: 13, retType: 'boolean' }, + invitorAccountId: 14, + followAccountIds: { + id: 16, + retConverter: (e) => { + try { + return JSON.parse(e) + } catch (e) { + return [] + } + }, + }, + }, + Lr = { + teamId: 1, + accountId: 3, + memberRole: { id: 4, retType: 'number' }, + teamNick: 5, + bits: { id: 7, retType: 'number' }, + inTeam: { id: 9, retType: 'boolean' }, + updateTime: { id: 11, retType: 'number' }, + serverExtension: 12, + chatBanned: { id: 13, retType: 'boolean' }, + invitorAccountId: 14, + joinTime: { id: 15, retType: 'number' }, + followAccountIds: { + id: 17, + retConverter: (e) => { + try { + return JSON.parse(e) + } catch (e) { + return [] + } + }, + }, + }, + Dr = { + accountIds: { id: 1, converter: (e) => JSON.stringify(e) }, + operation: 2, + }, + wr = { + v2TeamCreate: { + sid: 31, + cid: 1, + service: kr, + params: [ + { type: 'Property', name: 'team', reflectMapper: Vr }, + { type: 'StrArray', name: 'inviteeAccountIds' }, + { type: 'String', name: 'postscript' }, + { type: 'Property', name: 'antispamConfig', reflectMapper: br }, + ], + response: [ + { type: 'Property', name: 'team', reflectMapper: ft(Vr) }, + { type: 'StrArray', name: 'failedList' }, + ], + }, + v2SuperTeamCreate: { + sid: 32, + cid: 1, + service: kr, + params: [ + { type: 'Property', name: 'team', reflectMapper: Vr }, + { type: 'StrArray', name: 'inviteeAccountIds' }, + { type: 'String', name: 'postscript' }, + { type: 'Property', name: 'antispamConfig', reflectMapper: br }, + ], + response: [ + { type: 'Property', name: 'team', reflectMapper: ft(Vr) }, + { type: 'StrArray', name: 'failedList' }, + ], + }, + v2TeamInviteMembers: { + sid: 31, + cid: 5, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + { type: 'String', name: 'ps' }, + { type: 'String', name: 'attach' }, + ], + response: [ + { type: 'Long', name: 'time' }, + { type: 'StrArray', name: 'abortedAccidList' }, + ], + }, + v2SuperTeamInviteMembers: { + sid: 32, + cid: 5, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + { type: 'String', name: 'ps' }, + { type: 'String', name: 'attach' }, + ], + response: [ + { type: 'StrArray', name: 'abortedAccidList' }, + { type: 'Long', name: 'time' }, + ], + }, + v2TeamUpdateInfo: { + sid: 31, + cid: 7, + service: kr, + params: [ + { type: 'Property', name: 'team', reflectMapper: Vr }, + { type: 'Property', name: 'antispamConfig', reflectMapper: br }, + ], + response: [ + { type: 'Long', name: 'teamId' }, + { type: 'Long', name: 'timestamp' }, + ], + }, + v2SuperTeamUpdateInfo: { + sid: 32, + cid: 8, + service: kr, + params: [ + { type: 'Property', name: 'team', reflectMapper: Vr }, + { type: 'Property', name: 'antispamConfig', reflectMapper: br }, + ], + response: [{ type: 'Long', name: 'timestamp' }], + }, + v2TeamLeave: { + sid: 31, + cid: 8, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + }, + v2SuperTeamLeave: { + sid: 32, + cid: 7, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + }, + v2TeamGetInfo: { + sid: 31, + cid: 9, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + response: [{ type: 'Property', name: 'team', reflectMapper: ft(Vr) }], + }, + v2SuperTeamGetInfo: { + sid: 32, + cid: 9, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + response: [{ type: 'Property', name: 'team', reflectMapper: ft(Vr) }], + }, + v2TeamGetByIds: { + sid: 31, + cid: 34, + service: kr, + params: [{ type: 'LongArray', name: 'teamIds' }], + response: [ + { type: 'PropertyArray', name: 'teams', reflectMapper: ft(Vr) }, + { type: 'LongArray', name: 'tids' }, + ], + }, + v2SuperTeamGetByIds: { + sid: 32, + cid: 36, + service: kr, + params: [{ type: 'LongArray', name: 'teamIds' }], + response: [ + { type: 'PropertyArray', name: 'teams', reflectMapper: ft(Vr) }, + { type: 'LongArray', name: 'tids' }, + ], + }, + v2TeamDismiss: { + sid: 31, + cid: 12, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + }, + v2SuperTeamDismiss: { + sid: 32, + cid: 4, + service: kr, + params: [{ type: 'Long', name: 'teamId' }], + }, + v2TeamAcceptInvitation: { + sid: 31, + cid: 21, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + ], + response: [{ type: 'Property', name: 'team', reflectMapper: ft(Vr) }], + }, + v2SuperTeamAcceptInvitation: { + sid: 32, + cid: 23, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + ], + response: [{ type: 'Property', name: 'team', reflectMapper: ft(Vr) }], + }, + v2TeamRejectInvite: { + sid: 31, + cid: 22, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + { type: 'String', name: 'ps' }, + ], + }, + v2SuperTeamRejectInvite: { + sid: 32, + cid: 24, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + { type: 'String', name: 'ps' }, + ], + }, + v2TeamKickMembers: { + sid: 31, + cid: 6, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2SuperTeamKickMembers: { + sid: 32, + cid: 6, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2TeamApplyToJoin: { + sid: 31, + cid: 13, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'ps' }, + ], + response: [ + { type: 'Property', name: 'team', reflectMapper: ft(Vr) }, + { type: 'Int', name: 'isInTeam' }, + ], + }, + v2SuperTeamApplyToJoin: { + sid: 32, + cid: 20, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'ps' }, + ], + response: [ + { type: 'Property', name: 'team', reflectMapper: ft(Vr) }, + { type: 'Int', name: 'isInTeam' }, + ], + }, + v2TeamAcceptJoinApplication: { + sid: 31, + cid: 14, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + ], + }, + v2SuperTeamAcceptJoinApplication: { + sid: 32, + cid: 21, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + ], + }, + v2TeamRejectJoinApplication: { + sid: 31, + cid: 15, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + { type: 'String', name: 'ps' }, + ], + }, + v2SuperTeamRejectJoinApplication: { + sid: 32, + cid: 22, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'from' }, + { type: 'String', name: 'ps' }, + ], + }, + v2TeamAddManagers: { + sid: 31, + cid: 16, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2SuperTeamAddManagers: { + sid: 32, + cid: 26, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2TeamRemoveManagers: { + sid: 31, + cid: 17, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2SuperTeamRemoveManagers: { + sid: 32, + cid: 27, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + }, + v2TeamTransferOwner: { + sid: 31, + cid: 18, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'account' }, + { type: 'Bool', name: 'leave' }, + ], + }, + v2SuperTeamTransferOwner: { + sid: 32, + cid: 31, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'account' }, + { type: 'Bool', name: 'leave' }, + ], + }, + v2TeamUpdateSelfMemberInfo: { + sid: 31, + cid: 19, + service: kr, + params: [ + { type: 'Property', name: 'teamMember', reflectMapper: Pr }, + { type: 'Property', name: 'specialFollowUpdate', reflectMapper: Dr }, + { type: 'Property', name: 'antispam', reflectMapper: br }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Pr) }], + }, + v2SuperTeamUpdateSelfMemberInfo: { + sid: 32, + cid: 10, + service: kr, + params: [ + { type: 'Property', name: 'teamMember', reflectMapper: Lr }, + { type: 'Property', name: 'specialFollowUpdate', reflectMapper: Dr }, + { type: 'Property', name: 'antispam', reflectMapper: br }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Lr) }], + }, + v2TeamUpdateMember: { + sid: 31, + cid: 20, + service: kr, + params: [ + { type: 'Property', name: 'teamMember', reflectMapper: Pr }, + { type: 'Property', name: 'antispam', reflectMapper: br }, + ], + }, + v2SuperTeamUpdateMember: { + sid: 32, + cid: 30, + service: kr, + params: [ + { type: 'Property', name: 'teamMember', reflectMapper: Lr }, + { type: 'Property', name: 'antispam', reflectMapper: br }, + ], + }, + v2TeamGetMemberInvitor: { + sid: 31, + cid: 33, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + response: [{ type: 'StrStrMap', name: 'accountsMap' }], + }, + v2SuperTeamGetMemberInvitor: { + sid: 32, + cid: 35, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accounts' }, + ], + response: [{ type: 'StrStrMap', name: 'accountsMap' }], + }, + v2TeamMemberSetChatBannedStatus: { + sid: 31, + cid: 25, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'String', name: 'accountId' }, + { type: 'Int', name: 'chatBanned' }, + ], + }, + v2SuperTeamMemberSetChatBannedStatus: { + sid: 32, + cid: 29, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'StrArray', name: 'accountId' }, + { type: 'Int', name: 'chatBanned' }, + ], + }, + v2TeamSetChatBannedMode: { + sid: 31, + cid: 32, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'Int', name: 'chatBannedMode' }, + ], + }, + v2SuperTeamSetChatBannedMode: { + sid: 32, + cid: 28, + service: kr, + params: [ + { type: 'Long', name: 'teamId' }, + { type: 'Int', name: 'chatBannedMode' }, + ], + }, + v2TeamMemberGetListByIds: { + sid: 31, + cid: 35, + service: kr, + params: [{ type: 'StrArray', name: 'tag' }], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Pr) }, + ], + }, + v2SuperTeamMemberGetListByIds: { + sid: 32, + cid: 37, + service: kr, + params: [{ type: 'StrArray', name: 'tag' }], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Lr) }, + ], + }, + v2TeamMemberGetList: { + sid: 31, + cid: 36, + service: kr, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + teamId: 1, + teamType: 2, + roleQueryType: 3, + onlyChatBanned: { id: 4, converter: (e) => +e }, + nextToken: 5, + limit: 6, + direction: 7, + }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Pr) }, + { + type: 'Property', + name: 'pageInfo', + reflectMapper: { 1: 'hasMore', 2: 'nextToken' }, + }, + ], + }, + v2TeamSync: { + sid: 8, + cid: 109, + service: kr, + response: [ + { type: 'Long', name: 'timetag' }, + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Vr) }, + ], + }, + v2TeamCreateMultiSync: { + sid: 8, + cid: 101, + service: kr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Vr) }], + }, + v2TeamMemberUpdateMultiSync: { + sid: 8, + cid: 119, + service: kr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Pr) }], + }, + v2TeamMembersOfSelfInSync: { + sid: 8, + cid: 126, + service: kr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Pr) }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2SuperTeamSync: { + sid: 21, + cid: 109, + service: kr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Vr) }, + { type: 'Bool', name: 'isAll' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2SuperTeamCreateMultiSync: { + sid: 21, + cid: 101, + service: kr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Vr) }], + }, + v2SuperTeamMemberUpdateMultiSync: { + sid: 21, + cid: 110, + service: kr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Lr) }], + }, + v2SuperTeamMembersOfSelfInSync: { + sid: 21, + cid: 111, + service: kr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Lr) }, + { type: 'Long', name: 'timetag' }, + ], + }, + } +function Ur(e, t) { + if (!e) return {} + var i = e + return ( + i.tinfo && + ((i.tinfo = (function (e) { + return gt(e, ft(Vr)) + })(i.tinfo)), + (i.tinfo.teamType = t)), + i.uinfos, + void 0 !== i.mute && (i.mute = parseInt(i.mute)), + i + ) +} +function xr(e, t, i = {}) { + return Object.assign( + { + teamId: e, + teamType: t, + name: '', + ownerAccountId: '', + memberLimit: 0, + memberCount: 0, + createTime: 0, + updateTime: 0, + intro: '', + announcement: '', + avatar: '', + joinMode: 0, + agreeMode: 0, + inviteMode: 0, + updateInfoMode: 0, + updateExtensionMode: 0, + chatBannedMode: 0, + isValidTeam: !0, + }, + i + ) +} +function Fr(e, t, i, r = {}) { + return Object.assign( + { + teamId: e, + teamType: t, + accountId: i, + joinTime: 0, + inTeam: !0, + memberRole: 0, + chatBanned: !1, + }, + r + ) +} +function Br(e, t = 1) { + return e.map((e) => + (function (e, t = 1) { + return ( + (e.teamType = t), + (e.chatBanned = void 0 !== e.chatBanned && e.chatBanned), + e + ) + })(e, t) + ) +} +function $r(e, t) { + var i, + r = Object.assign(Object.assign({}, t), { + conversationId: e.V2NIMConversationIdUtil.messageConversationId(t), + isSelf: t.senderId === e.account, + sendingState: 1, + messageStatus: { + errorCode: + (null === (i = null == t ? void 0 : t.messageStatus) || void 0 === i + ? void 0 + : i.errorCode) || 200, + }, + }) + if ( + (r.threadReply && + (r.threadReply = Object.assign(Object.assign({}, r.threadReply), { + conversationType: r.conversationType, + conversationId: r.conversationId, + })), + r.threadRoot && + (r.threadRoot = Object.assign(Object.assign({}, r.threadRoot), { + conversationType: r.conversationType, + conversationId: r.conversationId, + })), + r.isInBlackList && + ((r.sendingState = 2), + (r.messageStatus.errorCode = de.V2NIM_ERROR_CODE_ACCOUNT_IN_BLOCK_LIST), + delete r.isInBlackList), + r.streamConfig) + ) { + var s = Ve(r.streamConfig, 'isStream') + if (!1 === s) delete r.streamConfig + else if (!0 === s && void 0 === r.streamConfig.status) + delete r.streamConfig, + t.aiConfig && + ((t.aiConfig.aiStream = !0), (t.aiConfig.aiStreamStatus = 0)) + else if ('number' == typeof r.streamConfig.status) + return ( + (r.streamConfig = { status: r.streamConfig.status }), + (function (e) { + if ( + (e.streamConfig && + e.aiConfig && + ((e.aiConfig.aiStream = !0), + (e.aiConfig.aiStreamStatus = e.streamConfig.status)), + e.attachment && e.streamConfig) + ) { + var t = e.attachment + ;(e.streamConfig.lastChunk = { + content: t.msg, + messageTime: e.createTime, + chunkTime: t.timestamp, + type: t.type, + index: t.index, + }), + e.aiConfig && + (e.aiConfig.aiStreamLastChunk = e.streamConfig.lastChunk), + delete e.attachment + } + return e + })(r) + ) + } + return Gr(r, e) +} +function Gr(e, t) { + return 5 === e.messageType + ? (function (e, t) { + var i, + r, + s, + n, + o, + a = t.attachment || {} + if (t.attachment && 'type' in t.attachment) return t + var c = void 0 + if (null === (i = a.data) || void 0 === i ? void 0 : i.tinfo) { + var { id: d, data: l } = a, + p = d > 400 ? 2 : 1, + { tinfo: h } = Ur(Object.assign({}, l), p) + ;(c = {}), (c = Ee(h, ['teamId'])) + } + var u = Object.assign( + Object.assign( + Object.assign( + Object.assign( + { raw: a.raw, type: Kr(e, a.id) }, + c ? { updatedTeamInfo: c } : {} + ), + { + targetIds: + (null === (r = a.data) || void 0 === r ? void 0 : r.ids) || + ((null === (s = a.data) || void 0 === s ? void 0 : s.id) + ? [a.data.id] + : []), + } + ), + 'string' == + typeof (null === (n = a.data) || void 0 === n ? void 0 : n.attach) + ? { serverExtension: a.data.attach } + : {} + ), + 'number' == + typeof (null === (o = a.data) || void 0 === o ? void 0 : o.mute) + ? { chatBanned: 0 !== a.data.mute } + : {} + ) + return Object.assign(Object.assign({}, t), { attachment: u }) + })(t, e) + : 100 === e.messageType + ? (function (e, t) { + var i, r, s + if ( + 'string' == + typeof (null === (i = t.attachment) || void 0 === i + ? void 0 + : i.raw) && + (null === + (s = + null === (r = e.V2NIMMessageService) || void 0 === r + ? void 0 + : r.customAttachmentParsers) || void 0 === s + ? void 0 + : s.length) > 0 + ) { + var n = t.subType || 0, + o = e.V2NIMMessageService.customAttachmentParsers, + a = t.attachment.raw + o.some((i) => { + try { + var r = i(n, a) + if (Se(r)) return (r.raw = a), (t.attachment = r), !0 + } catch (t) { + return ( + e.logger.warn( + `customAttachmentParser: subType ${n}, raw: ${a}. parse error with ${t}` + ), + !1 + ) + } + return !1 + }) + } + return t + })(t, e) + : e +} +function jr(e, t) { + return Object.assign(Object.assign({}, t), { + conversationId: e.V2NIMConversationIdUtil.messageConversationId(t), + }) +} +function qr(e, t) { + var { createTime: i, senderId: r, receiverId: s, conversationType: n } = t + return { + conversationType: n, + conversationId: e.V2NIMConversationIdUtil.messageConversationId({ + conversationType: n, + senderId: r, + receiverId: s, + }), + senderId: t.senderId, + receiverId: t.receiverId, + messageServerId: t.messageServerId, + createTime: i, + messageClientId: t.messageClientId, + } +} +function Hr(e, t) { + var i = { 7: 1, 8: 2, 12: 3, 13: 1, 14: 2 }[t.sysMsgType] + return { + postscript: t.postscript, + revokeType: { 7: 1, 8: 2, 12: 3, 13: 4, 14: 5 }[t.sysMsgType] || 0, + revokeAccountId: t.opeAccount || t.senderId, + callbackExtension: t.callbackExtension, + serverExtension: t.attach || '', + messageRefer: { + conversationType: i, + conversationId: e.V2NIMConversationIdUtil.messageConversationId( + Object.assign(Object.assign({}, t), { + conversationType: i, + senderId: t.senderId, + receiverId: t.receiverId, + }) + ), + senderId: t.senderId, + receiverId: t.receiverId, + messageServerId: t.messageServerId, + createTime: t.deleteMsgCreatetime, + messageClientId: t.messageClientId, + }, + } +} +function Yr(e, t) { + return { + conversationId: + 1 === t.conversationType + ? e.V2NIMConversationIdUtil.p2pConversationId(t.receiverId) + : 2 === t.conversationType + ? e.V2NIMConversationIdUtil.teamConversationId(t.teamId) + : e.V2NIMConversationIdUtil.superTeamConversationId(t.teamId), + deleteTime: t.deleteTime, + serverExtension: t.serverExtension, + } +} +function Kr(e, t) { + var i = { + 0: 0, + 401: 401, + 1: 1, + 402: 402, + 2: 2, + 403: 403, + 3: 3, + 404: 404, + 4: 4, + 405: 405, + 5: 5, + 410: 410, + 6: 6, + 406: 406, + 7: 7, + 407: 407, + 8: 8, + 408: 408, + 9: 9, + 411: 411, + 10: 10, + 409: 409, + } + return ( + void 0 === i[t] && + e.logger.warn(`[V2NIMMessageService] undefined notification type: ${t}`), + 'number' == typeof i[t] ? i[t] : -1 + ) +} +function Wr(e, t) { + var i = [], + r = {} + for (var s in (t.forEach((e) => { + var t = e.conversationId + r[t] || (r[t] = { conversationId: t, messages: [], count: 0 }), + r[t].messages.push(e), + r[t].count++ + }), + r)) { + var n = r[s] + i.push(n) + } + return i +} +function Jr(e, t) { + if (!t) return '' + switch (e) { + case 100: + return t.raw || '' + case 1: + case 3: + case 2: + case 6: + return (function (e) { + var t = e, + { + width: i, + height: r, + duration: s, + path: n, + file: o, + raw: a, + ctx: c, + payload: d, + bucketName: l, + objectName: p, + token: h, + ext: u, + } = t, + m = Ee(t, [ + 'width', + 'height', + 'duration', + 'path', + 'file', + 'raw', + 'ctx', + 'payload', + 'bucketName', + 'objectName', + 'token', + 'ext', + ]), + g = 'string' == typeof u && '.' === u[0] ? u.slice(1) : u + return JSON.stringify( + Object.assign( + Object.assign( + Object.assign( + Object.assign( + Object.assign({}, m), + void 0 === u ? {} : { ext: g } + ), + void 0 === i ? {} : { w: i } + ), + void 0 === r ? {} : { h: r } + ), + void 0 === s ? {} : { dur: s } + ) + ) + })(t) + case 4: + return (function (e) { + return JSON.stringify({ + lat: e.latitude, + lng: e.longitude, + title: e.address, + }) + })(t) + case 12: + return (function (e) { + var t = Ee(e, ['raw']) + try { + return JSON.stringify( + Object.assign(Object.assign({}, t), { + durations: e.durations.map((e) => ({ + accid: e.accountId, + duration: e.duration, + })), + }) + ) + } catch (t) { + return JSON.stringify(e) + } + })(t) + default: + return t.raw || JSON.stringify(t) + } +} +class zr { + constructor(e) { + this.core = e + } + doSendFile(e, t) { + return Te(this, void 0, void 0, function* () { + var i = e.attachment + try { + var [r, s] = yield this.core.V2NIMStorageService._uploadFile( + { + taskId: e.messageClientId, + uploadParams: { + fileObj: + (null == i ? void 0 : i.file) || + (null == i ? void 0 : i.path), + sceneName: null == i ? void 0 : i.sceneName, + }, + }, + t, + { fileType: e.messageType } + ), + n = Object.assign(Object.assign({}, i), { uploadState: 1 }) + void 0 !== s.w && (n.width = n.width || s.w), + void 0 !== s.h && (n.height = n.height || s.h), + void 0 !== s.dur && (n.duration = n.duration || s.dur), + (n.ext = n.ext && -1 === n.ext.indexOf('.') ? `.${n.ext}` : n.ext) + var o = ['w', 'h', 'dur', 'ext', 'name'] + for (var a in s) o.includes(a) || (n[a] = s[a]) + var { raw: c, file: d, path: l } = n, + p = Ee(n, ['raw', 'file', 'path']) + ;(e.attachment = JSON.parse(JSON.stringify(p))), + e.attachment && (e.attachment.raw = Jr(e.messageType, e.attachment)) + } catch (t) { + throw (e.attachment && (e.attachment.uploadState = 2), t) + } + }) + } + cancelMessageAttachmentUpload(e) { + return Te(this, void 0, void 0, function* () { + if ( + (ye({ messageClientId: { type: 'string', allowEmpty: !1 } }, e, '', !0), + ![2, 6, 1, 3].includes(e.messageType)) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: `cancelMessageAttachmentUpload: messageType ${e.messageType} incorrect`, + }, + }) + if (2 === e.sendingState || 1 === e.sendingState) + throw new he({ + code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST, + detail: { + reason: + 'cancelMessageAttachmentUpload: message is already failed or succeeded', + }, + }) + yield this.core.V2NIMStorageService._cancelUploadFile(e.messageClientId) + }) + } +} +var Xr = 'V2NIMMessageService', + Qr = { + '30_1': 'v2SendP2pMessage', + '31_2': 'v2SendTeamMessage', + '30_31': 'v2MessageP2pModify', + '31_37': 'v2MessageTeamModify', + '32_38': 'v2MessageSuperTeamModify', + '7_33': 'v2MessageOnModified', + '4_27': 'v2MessageSyncModified', + '4_28': 'v2MessageSuperTeamSyncModified', + '4_5': 'v2BatchMarkRead', + '4_12': 'syncP2PMessagReceipts', + '30_11': 'v2SendP2PMessageReceipt', + '31_28': 'v2SendTeamMessageReceipts', + '32_2': 'v2SendSuperTeamMessage', + '7_12': 'onP2PMessageReceipts', + '8_31': 'onTeamMessageReceipts', + '31_29': 'v2GetTeamMessageReceipts', + '31_30': 'v2GetTeamMessageReceiptDetail', + '7_2': 'onMsg', + '8_3': 'onMsg', + '7_101': 'onMsg', + '8_102': 'onMsg', + '21_3': 'onMsg', + '21_102': 'onMsg', + '4_4': 'syncOfflineMsgs', + '4_9': 'syncRoamingMsgs', + '4_17': 'syncRoamingMsgs', + '30_13': 'v2RevokeMessage', + '32_17': 'v2RevokeSuperTeamMessage', + '7_14': 'onRevokeMessage', + '7_15': 'syncRevokeMessage', + '21_18': 'onRevokeMessage', + '21_117': 'onRevokeMessage', + '30_23': 'v2DeleteMessage', + '30_24': 'v2DeleteMessages', + '4_21': 'syncOnDeleteMessages', + '7_123': 'onDeleteMessage', + '7_124': 'onDeleteMessages', + '29_17': 'v2DownloadLocalAntiSpamVocabs', + }, + Zr = { + conversationType: { id: 0, converter: os, retConverter: as }, + receiverId: 1, + senderId: 2, + fromClientType: 4, + fromDeviceId: 5, + fromNick: 6, + createTime: { id: 7, retType: 'number' }, + messageType: { id: 8, retType: 'number' }, + text: 9, + attachment: { + id: 10, + converter: (e, t) => Jr(t.messageType, e), + retConverter: (e, t) => + (function (e, t) { + var i + try { + switch (((i = JSON.parse(e)), t)) { + case 100: + return { raw: e } + case 4: + return (function (e, t) { + return { + latitude: t.lat, + longitude: t.lng, + address: t.title, + raw: e, + } + })(e, i) + case 2: + case 3: + case 1: + case 6: + return (function (e, t) { + var { w: i, h: r, dur: s, ext: n } = t, + o = Ee(t, ['w', 'h', 'dur', 'ext']), + a = 'string' == typeof n && '.' !== n[0] ? `.${n}` : n + return Object.assign( + Object.assign( + Object.assign( + Object.assign( + Object.assign( + Object.assign({}, o), + void 0 === n ? {} : { ext: a } + ), + void 0 === i ? {} : { width: i } + ), + void 0 === r ? {} : { height: r } + ), + void 0 === s ? {} : { duration: s } + ), + { raw: e } + ) + })(e, i) + case 12: + return (function (e, t) { + return Object.assign(Object.assign({}, t), { + durations: t.durations.map((e) => ({ + accountId: e.accid, + duration: e.duration, + })), + raw: e, + }) + })(e, i) + default: + return 'object' == typeof i && i + ? Object.assign(Object.assign({}, i), { raw: e }) + : { raw: e } + } + } catch (t) { + return 'object' == typeof i && i + ? Object.assign(Object.assign({}, i), { raw: e }) + : { raw: e } + } + })(e, Number(t[8])), + }, + messageClientId: 11, + messageServerId: 12, + resend: { id: 13, converter: yt, retType: 'boolean' }, + userUpdateTime: { id: 14, retType: 'number' }, + serverExtension: 15, + pushPayload: { id: 16, access: 'pushConfig.pushPayload' }, + pushContent: { id: 17, access: 'pushConfig.pushContent' }, + forcePushAccountIds: { + id: 18, + access: 'pushConfig.forcePushAccountIds', + def: (e) => { + if (e['pushConfig.forcePush']) return '#%@all@%#' + }, + converter: (e, t) => { + if (t['pushConfig.forcePush']) + return e ? JSON.stringify(e) : '#%@all@%#' + }, + retConverter(e) { + if ('#%@all@%#' !== e && e) + try { + return JSON.parse(e) + } catch (e) { + return [] + } + }, + }, + forcePushContent: { id: 19, access: 'pushConfig.forcePushContent' }, + forcePush: { + id: 20, + access: 'pushConfig.forcePush', + converter: yt, + retType: 'boolean', + }, + antispamCustomMessageEnabled: { + id: 21, + def: (e) => (Ve(e, 'antispamConfig.antispamCustomMessage') ? 1 : void 0), + retConverter: () => {}, + }, + antispamCustomMessage: { + id: 22, + access: 'antispamConfig.antispamCustomMessage', + }, + antispamBusinessId: { id: 23, access: 'antispamConfig.antispamBusinessId' }, + clientAntispamHit: { + id: 24, + access: 'clientAntispamHit', + converter: yt, + retType: 'boolean', + }, + antispamEnabled: { + id: 25, + access: 'antispamConfig.antispamEnabled', + converter: yt, + retType: 'boolean', + }, + needAck: { + id: 26, + access: 'messageConfig.readReceiptEnabled', + converter: yt, + retType: 'boolean', + }, + lastMessageUpdateEnabled: { + id: 28, + access: 'messageConfig.lastMessageUpdateEnabled', + converter: yt, + retType: 'boolean', + }, + threadReplySenderId: { id: 29, access: 'threadReply.senderId' }, + threadReplyReceiverId: { id: 30, access: 'threadReply.receiverId' }, + threadReplyTime: { + id: 31, + access: 'threadReply.createTime', + retType: 'number', + }, + threadReplyServerId: { id: 32, access: 'threadReply.messageServerId' }, + threadReplyClientId: { id: 33, access: 'threadReply.messageClientId' }, + threadRootSenderId: { id: 34, access: 'threadRoot.senderId' }, + threadRootReceiverId: { id: 35, access: 'threadRoot.receiverId' }, + threadRootTime: { + id: 36, + access: 'threadRoot.createTime', + retType: 'number', + }, + threadRootServerId: { id: 37, access: 'threadRoot.messageServerId' }, + threadRootClientId: { id: 38, access: 'threadRoot.messageClientId' }, + isDeleted: { id: 39, converter: yt, retType: 'boolean' }, + callbackExtension: 40, + subType: { id: 41, retType: 'number' }, + antispamCheating: { id: 42, access: 'antispamConfig.antispamCheating' }, + routeEnvironment: { id: 43, access: 'routeConfig.routeEnvironment' }, + antispamExtension: { id: 44, access: 'antispamConfig.antispamExtension' }, + antispamResult: 45, + __clientExt: { id: 46, converter: Mt, retConverter: _t }, + robotFunction: { id: 47, access: 'robotConfig.function' }, + robotTopic: { id: 48, access: 'robotConfig.topic' }, + robotCustomContent: { id: 49, access: 'robotConfig.customContent' }, + robotAccount: { id: 50, access: 'robotConfig.accountId' }, + _conversationOnlineSyncNotify: { id: 51 }, + _conversationOnlineSyncData: { id: 52 }, + aiAgentMsgDirection: { + id: 55, + access: 'aiConfig.aiStatus', + retAccess: 'aiConfig.aiStatus', + retType: 'number', + }, + aiAgentAccount: { + id: 56, + access: 'aiConfig.accountId', + retAccess: 'aiConfig.accountId', + }, + aiAgentContent: { + id: 57, + access: 'aiConfig.content', + converter: Mt, + retConverter: xe, + }, + aiAgentMessages: { + id: 58, + access: 'aiConfig.messages', + converter: Mt, + retConverter: xe, + }, + aiAgentPromptVariables: { + id: 59, + access: 'aiConfig.promptVariables', + retConverter: xe, + }, + aiAgentModelConfigParams: { + id: 60, + access: 'aiConfig.modelConfigParams', + converter: Mt, + retConverter: xe, + }, + errorCode: { + id: 61, + access: 'messageStatus.errorCode', + converter: xe, + retType: 'number', + }, + modifyTime: { id: 62, retType: 'number' }, + modifyAccountId: 63, + aiStream: { + id: 65, + access: 'aiConfig.aiStream', + retAccess: 'streamConfig.isStream', + converter: yt, + retConverter: It, + }, + aiRAGs: { + id: 66, + access: 'aiConfig.aiRAGs', + retConverter: function (e) { + try { + var t = JSON.parse(e) + return t && t.length > 0 + ? t.map((e) => ((e.description = e.desc), delete e.desc, e)) + : [] + } catch (e) { + return [] + } + }, + }, + aiStreamStatus: { + id: 67, + access: 'streamConfig.status', + retType: 'number', + }, + historyEnabled: { + id: 100, + access: 'messageConfig.historyEnabled', + converter: yt, + retType: 'boolean', + }, + roamingEnabled: { + id: 101, + access: 'messageConfig.roamingEnabled', + converter: yt, + retType: 'boolean', + }, + onlineSyncEnabled: { + id: 102, + access: 'messageConfig.onlineSyncEnabled', + converter: yt, + retType: 'boolean', + }, + routeEnabled: { + id: 105, + access: 'routeConfig.routeEnabled', + converter: yt, + retType: 'boolean', + }, + isInBlackList: { + id: 106, + access: 'isInBlackList', + converter: yt, + retType: 'boolean', + }, + pushEnable: { + id: 107, + access: 'pushConfig.pushEnabled', + converter: yt, + retType: 'boolean', + }, + offlineEnabled: { + id: 108, + access: 'messageConfig.offlineEnabled', + converter: yt, + retType: 'boolean', + }, + unreadEnabled: { + id: 109, + access: 'messageConfig.unreadEnabled', + converter: yt, + retType: 'boolean', + }, + pushNickEnabled: { + id: 110, + access: 'pushConfig.pushNickEnabled', + converter: yt, + retType: 'boolean', + }, + msgAckSnapshot: { id: 112, retType: 'number' }, + receiverIds: { + id: 154, + access: 'targetConfig.receiverIds', + converter: Mt, + retConverter: () => {}, + }, + inclusive: { + id: 155, + access: 'targetConfig.inclusive', + converter: (e) => (e ? 1 : 2), + retConverter: () => {}, + }, + newMemberVisible: { + id: 156, + access: 'targetConfig.newMemberVisible', + converter: (e) => (e ? 1 : 2), + retConverter: () => {}, + }, + }, + es = ft(Zr), + ts = { + conversationType: { + id: 1, + access: 'messageRefer.conversationType', + retType: 'number', + }, + senderId: { id: 2, access: 'messageRefer.senderId' }, + receiverId: { id: 3, access: 'messageRefer.receiverId' }, + messageServerId: { id: 4, access: 'messageRefer.messageServerId' }, + messageClientId: { id: 5, access: 'messageRefer.messageClientId' }, + createTime: { id: 6, access: 'messageRefer.createTime', retType: 'number' }, + deleteTime: { id: 7, retType: 'number' }, + serverExtension: 8, + } +ft(ts) +var is = { version: 1, md5: 2, nosurl: 3, thesaurus: 4 }, + rs = { + createTime: { id: 0, retType: 'number' }, + sysMsgType: 1, + receiverId: 2, + senderId: 3, + postscript: 4, + attach: 5, + pushContent: 8, + pushPayload: 9, + messageClientId: 10, + messageServerId: 11, + deleteMsgCreatetime: { id: 14, retType: 'number' }, + opeAccount: 16, + env: 21, + callbackExtension: 22, + }, + ss = { + receiverId: 0, + messageServerId: 1, + readCount: { id: 100, retType: 'number' }, + unreadCount: { id: 101, retType: 'number' }, + messageClientId: 102, + latestReadAccount: 103, + }, + ns = { + v2BatchMarkRead: { + sid: 4, + cid: 5, + service: Xr, + hasPacketResponse: !1, + params: [ + { type: 'Byte', name: 'sid' }, + { type: 'Byte', name: 'cid' }, + { type: 'LongArray', name: 'ids' }, + ], + }, + v2SendP2pMessage: { + sid: 30, + cid: 1, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + onMsg: { + sid: 7, + cid: 2, + service: Xr, + response: [{ type: 'Property', name: 'msg', reflectMapper: ft(Zr) }], + }, + syncOfflineMsgs: { + sid: 4, + cid: 4, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Zr) }, + ], + }, + syncRoamingMsgs: { + sid: 4, + cid: 9, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Zr) }, + ], + }, + v2SendP2PMessageReceipt: { + sid: 30, + cid: 11, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2RevokeMessage: { + sid: 30, + cid: 13, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: rs }], + }, + v2DeleteMessage: { + sid: 30, + cid: 23, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: ts }], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2DeleteMessages: { + sid: 30, + cid: 24, + service: Xr, + params: [{ type: 'PropertyArray', name: 'tag', reflectMapper: ts }], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2SendTeamMessage: { + sid: 31, + cid: 2, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2SendTeamMessageReceipts: { + sid: 31, + cid: 28, + service: Xr, + params: [{ type: 'PropertyArray', name: 'tag', reflectMapper: ss }], + response: [{ type: 'PropertyArray', name: 'tag', reflectMapper: ft(ss) }], + }, + v2SendSuperTeamMessage: { + sid: 32, + cid: 2, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2RevokeSuperTeamMessage: { + sid: 32, + cid: 17, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: rs }], + }, + syncP2PMessagReceipts: { + sid: 4, + cid: 12, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Zr) }, + ], + }, + onP2PMessageReceipts: { + sid: 7, + cid: 12, + service: Xr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2GetTeamMessageReceipts: { + sid: 31, + cid: 29, + service: Xr, + params: [{ type: 'PropertyArray', name: 'tag', reflectMapper: ss }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(ss) }, + ], + }, + v2GetTeamMessageReceiptDetail: { + sid: 31, + cid: 30, + service: Xr, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: ss, + select: ['receiverId', 'messageServerId'], + }, + ], + response: [ + { type: 'Property', name: 'data', reflectMapper: ft(ss) }, + { type: 'StrArray', name: 'readAccountList' }, + { type: 'StrArray', name: 'unreadAccountList' }, + ], + }, + onTeamMessageReceipts: { + sid: 8, + cid: 31, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(ss) }, + ], + }, + onRevokeMessage: { + sid: 7, + cid: 14, + service: Xr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(rs) }], + }, + syncRevokeMessage: { + sid: 7, + cid: 15, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(rs) }, + ], + }, + syncOnDeleteMessages: { + sid: 4, + cid: 21, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ts) }, + ], + }, + onDeleteMessage: { + sid: 7, + cid: 123, + service: Xr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(ts) }], + }, + onDeleteMessages: { + sid: 7, + cid: 124, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(ts) }, + ], + }, + v2DownloadLocalAntiSpamVocabs: { + sid: 29, + cid: 17, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: is }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(is) }], + }, + v2MessageP2pModify: { + sid: 30, + cid: 31, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2MessageTeamModify: { + sid: 31, + cid: 37, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2MessageSuperTeamModify: { + sid: 32, + cid: 38, + service: Xr, + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2MessageOnModified: { + sid: 7, + cid: 33, + service: Xr, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + v2MessageSyncModified: { + sid: 4, + cid: 27, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Zr) }, + { type: 'Long', name: 'time' }, + ], + }, + v2MessageSuperTeamSyncModified: { + sid: 4, + cid: 28, + service: Xr, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Zr) }, + { type: 'Long', name: 'time' }, + ], + }, + } +function os(e) { + return 1 === e ? 0 : 2 === e ? 1 : 3 === e ? 5 : void 0 +} +function as(e) { + var t = parseInt(e) + return 0 === t ? 1 : 1 === t ? 2 : 5 === t ? 3 : 0 +} +var cs = 'V2NIMNotificationService', + ds = { + '30_7': 'v2SendCustomNotification', + '32_16': 'v2SendCustomNotificationWithSuperTeam', + '7_3': 'onSysNotification', + '21_19': 'onSysNotification', + '4_6': 'v2SyncOfflineSysNotifications', + '4_18': 'v2SyncOfflineSysNotifications', + '7_14': 'v2NotificationRevoke', + '21_18': 'v2NotificationRevoke', + '21_117': 'v2NotificationRevoke', + '4_19': 'v2NotificationSyncRevoke', + '7_15': 'v2NotificationSyncRevoke', + '4_16': 'syncBroadcastMsg', + '7_17': 'onBroadcastMsg', + }, + ls = { + timestamp: { id: 0, retType: 'number' }, + type: { id: 1, retType: 'number' }, + receiverId: 2, + senderId: 3, + postscript: 4, + content: 5, + idServer: 6, + offlineEnabled: { + id: 7, + converter: yt, + retConverter: function (e, t) { + return '0' !== t[6] && !!parseInt(e) + }, + access: 'notificationConfig.offlineEnabled', + }, + pushContent: { id: 8, access: 'pushConfig.pushContent' }, + pushPayload: { id: 9, access: 'pushConfig.pushPayload' }, + deletedIdClient: 10, + deletedIdServer: 11, + antispamEnabled: { + id: 12, + converter: yt, + retType: 'boolean', + access: 'antispamConfig.antispamEnabled', + }, + antispamCustomNotification: { + id: 13, + access: 'antispamConfig.antispamCustomNotification', + }, + deletedMsgCreateTime: 14, + deletedMsgFromNick: 15, + opeAccount: 16, + forcePushAccountIds: { + id: 18, + access: 'pushConfig.forcePushAccountIds', + def: (e) => { + if (101 === e.type && e['pushConfig.forcePush']) return '#%@all@%#' + }, + converter: (e, t) => { + if (t['pushConfig.forcePush']) + return e ? JSON.stringify(e) : '#%@all@%#' + }, + retConverter(e) { + if ('#%@all@%#' !== e && e) + try { + return JSON.parse(e) + } catch (e) { + return [] + } + }, + }, + forcePushContent: { id: 19, access: 'pushConfig.forcePushContent' }, + forcePush: { + id: 20, + converter: yt, + retType: 'boolean', + access: 'pushConfig.forcePush', + }, + routeEnvironment: { id: 21, access: 'routeConfig.routeEnvironment' }, + callbackExt: 22, + clientNotificationId: { + id: 23, + access: 'notificationConfig.clientNotificationId', + }, + conversationOnlineSyncNotify: 24, + conversationOnlineSyncData: 25, + routeEnabled: { + id: 105, + converter: yt, + retType: 'boolean', + access: 'routeConfig.routeEnabled', + }, + pushEnabled: { + id: 107, + converter: yt, + retType: 'boolean', + access: 'pushConfig.pushEnabled', + }, + unreadEnabled: { + id: 109, + converter: yt, + retType: 'boolean', + access: 'notificationConfig.unreadEnabled', + }, + pushNickEnabled: { + id: 110, + converter: yt, + retType: 'boolean', + access: 'pushConfig.pushNickEnabled', + }, + }, + ps = { + id: 1, + senderId: 2, + timestamp: { id: 4, retType: 'number' }, + content: 5, + }, + hs = { + v2SendCustomNotification: { + sid: 30, + cid: 7, + service: cs, + params: [{ type: 'Property', name: 'tag', reflectMapper: ls }], + }, + v2SendCustomNotificationWithSuperTeam: { + sid: 32, + cid: 16, + service: cs, + params: [{ type: 'Property', name: 'tag', reflectMapper: ls }], + }, + onSysNotification: { + sid: 7, + cid: 3, + service: cs, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(ls) }], + }, + syncBroadcastMsg: { + sid: 4, + cid: 16, + service: cs, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ps) }, + ], + }, + onBroadcastMsg: { + sid: 7, + cid: 17, + service: cs, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(ps) }], + }, + v2SyncOfflineSysNotifications: { + sid: 4, + cid: 9, + service: cs, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ls) }, + ], + }, + v2NotificationRevoke: { + sid: 7, + cid: 14, + service: cs, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(ls) }], + }, + v2NotificationSyncRevoke: { + sid: 7, + cid: 15, + service: cs, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ls) }, + { type: 'Long', name: 'timetag' }, + { type: 'Byte', name: 'type' }, + ], + }, + }, + us = { + '4_5': 'ysfBatchMarkRead', + '101_1': 'ysfSendMessage', + '101_2': 'ysfOnMsg', + '4_100': 'ysfSyncOfflineMsgs', + '101_3': 'ysfOnSysNotification', + '101_7': 'ysfSendCustomNotification', + '4_101': 'ysfSyncSysNotification', + }, + ms = { + ysfBatchMarkRead: { + sid: 4, + cid: 5, + service: 'YSFService', + hasPacketResponse: !1, + params: [ + { type: 'Byte', name: 'sid' }, + { type: 'Byte', name: 'cid' }, + { type: 'LongArray', name: 'ids' }, + ], + }, + ysfSendMessage: { + sid: 101, + cid: 1, + service: 'YSFService', + params: [{ type: 'Property', name: 'tag', reflectMapper: Zr }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + ysfOnMsg: { + sid: 101, + cid: 2, + service: 'YSFService', + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Zr) }], + }, + ysfSyncOfflineMsgs: { + sid: 4, + cid: 100, + service: 'YSFService', + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Zr) }, + ], + }, + ysfOnSysNotification: { + sid: 101, + cid: 3, + service: 'YSFService', + response: [{ type: 'Property', name: 'data', reflectMapper: ft(ls) }], + }, + ysfSendCustomNotification: { + sid: 101, + cid: 7, + service: 'YSFService', + params: [{ type: 'Property', name: 'tag', reflectMapper: ls }], + }, + ysfSyncSysNotification: { + sid: 4, + cid: 101, + service: 'YSFService', + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ls) }, + ], + }, + }, + gs = { + content: { type: 'string', allowEmpty: !1 }, + params: { + type: 'object', + required: !1, + rules: { + notificationConfig: { + type: 'object', + required: !1, + rules: { + offlineEnabled: { type: 'boolean', required: !1 }, + unreadEnabled: { type: 'boolean', required: !1 }, + }, + }, + pushConfig: { + type: 'object', + required: !1, + rules: { + pushEnabled: { type: 'boolean', required: !1 }, + pushNickEnabled: { type: 'boolean', required: !1 }, + pushContent: { type: 'string', required: !1 }, + pushPayload: { type: 'string', required: !1 }, + forcePush: { type: 'boolean', required: !1 }, + forcePushContent: { type: 'string', required: !1 }, + forcePushAccountIds: { + type: 'array', + required: !1, + itemType: 'string', + }, + }, + }, + antispamConfig: { + type: 'object', + required: !1, + rules: { + antispamEnabled: { type: 'boolean', required: !1 }, + antispamCustomNotification: { type: 'string', required: !1 }, + }, + }, + routeConfig: { + type: 'object', + required: !1, + rules: { + routeEnabled: { type: 'boolean', required: !1 }, + routeEnvironment: { type: 'string', required: !1 }, + }, + }, + }, + }, + } +class vs { + constructor(e) { + this.core = e + } + generateNotificationTag(e, t, i = {}) { + var r = this.core.V2NIMConversationIdUtil.parseConversationType(e), + s = this.core.V2NIMConversationIdUtil.parseConversationTargetId(e), + n = Date.now() + return Object.assign(Object.assign({}, i), { + notificationConfig: Object.assign( + { unreadEnabled: !0, offlineEnabled: !0 }, + null == i ? void 0 : i.notificationConfig + ), + pushConfig: Object.assign( + { pushEnabled: !0, pushNickEnabled: !0 }, + null == i ? void 0 : i.pushConfig + ), + antispamConfig: Object.assign( + { antispamEnabled: !0 }, + null == i ? void 0 : i.antispamConfig + ), + routeConfig: Object.assign( + { routeEnabled: !0 }, + null == i ? void 0 : i.routeConfig + ), + timestamp: n, + type: { 1: 100, 2: 101, 3: 103 }[r], + receiverId: s, + content: t, + }) + } +} +function fs(e) { + var t = 'object' == typeof e ? e : void 0, + i = 'string' == typeof e ? e : void 0 + if (!t && !i) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'getFileOrPath::incorrect file and path' }, + }) + if ('string' == typeof i) + if (0 === i.indexOf('nim-external')) { + var r = document.getElementById(i) + if (!(r && r.files && r.files[0])) + throw new he({ + code: de.V2NIM_ERROR_CODE_FILE_NOT_FOUND, + detail: { reason: `getFileOrPath::file not exist: ${i}` }, + }) + t = r.files[0] + } else if ('BROWSER' === Ae.platform) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: `getFileOrPath::incorrect path: ${i}` }, + }) + if ('object' == typeof t && void 0 === t.size) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'getFileOrPath::file no size' }, + }) + return { file: t, path: i } +} +var ys = { + attachment: { + type: 'object', + rules: { url: { type: 'string', allowEmpty: !1 } }, + }, + thumbSize: { + type: 'object', + rules: { + width: { type: 'number', required: !1, min: 0 }, + height: { type: 'number', required: !1, min: 0 }, + }, + }, +} +class Is extends ni { + constructor(e) { + super('V2NIMStorageUtil', e), (this.core = e) + } + imageThumbUrl(e, t) { + return e + `?imageView&thumbnail=${t}z${t}` + } + videoCoverUrl(e, t) { + return e + `?vframe&offset=${t}` + } + getImageThumbUrl(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2() + var i = e + ye(ys, { attachment: i, thumbSize: t }, '', !0), + (t.width = t.width || 0), + (t.height = t.height || 0), + 0 === t.width && 0 === t.height && (t.width = 150) + var r = i.url + try { + r = yield this.core.V2NIMStorageService.shortUrlToLong(i.url) + } catch (e) { + this.core.logger.warn('shortUrlToLong error:', e) + } + return { url: this.core.cloudStorage.getThumbUrl(r, t) } + }) + } + getVideoCoverUrl(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2() + var i = e + ye(ys, { attachment: i, thumbSize: t }, '', !0), + (t.width = t.width || 0), + (t.height = t.height || 0), + 0 === t.width && 0 === t.height && (t.width = 150) + var r = i.url + try { + r = yield this.core.V2NIMStorageService.shortUrlToLong(i.url) + } catch (e) { + this.core.logger.warn('shortUrlToLong error:', e) + } + return { url: this.core.cloudStorage.getVideoCoverUrl(r, t) } + }) + } +} +var Ms, + _s, + Es = { + file: { md5: '$(Etag)', size: '$(ObjectSize)' }, + image: { + md5: '$(Etag)', + size: '$(ObjectSize)', + w: '$(ImageInfo.Width)', + h: '$(ImageInfo.Height)', + orientation: '$(ImageInfo.Orientation)', + }, + audio: { + md5: '$(Etag)', + size: '$(ObjectSize)', + dur: '$(AVinfo.Audio.Duration)', + }, + video: { + md5: '$(Etag)', + size: '$(ObjectSize)', + dur: '$(AVinfo.Video.Duration)', + w: '$(AVinfo.Video.Width)', + h: '$(AVinfo.Video.Height)', + }, + }, + Ts = { + accessKeyId: '', + secretAccessKey: '', + sessionToken: '', + region: '', + maxRetries: 0, + bucket: '', + objectName: '', + token: '', + shortUrl: '', + } +function Ss(e = 'file') { + var t = Es[e] || {} + return JSON.stringify(t).replace(/"/gi, '\\"') +} +!(function (e) { + ;(e[(e.nos = 1)] = 'nos'), (e[(e.s3 = 2)] = 's3') +})(Ms || (Ms = {})), + (function (e) { + ;(e[(e.dontNeed = -1)] = 'dontNeed'), + (e[(e.time = 2)] = 'time'), + (e[(e.urls = 3)] = 'urls') + })(_s || (_s = {})) +var Cs = { + chunkUploadHost: 'https://wannos-web.127.net', + chunkUploadHostBackupList: [ + 'https://fileup.chatnos.com', + 'https://oss.chatnos.com', + ], + commonUploadHost: 'https://fileup.chatnos.com', + commonUploadHostBackupList: ['https://oss.chatnos.com'], + chunkMaxSize: 4194304e4, + commonMaxSize: 104857600, + uploadReplaceFormat: 'https://{host}/{object}', + cdn: { + defaultCdnDomain: 'nim-nosdn.netease.im', + cdnDomain: '', + bucket: '', + objectNamePrefix: '', + }, + downloadUrl: 'https://{bucket}-nosdn.netease.im/{object}', + downloadHostList: ['nos.netease.com'], + nosCdnEnable: !0, + isNeedToGetUploadPolicyFromServer: !0, +} +function Ns(e, t) { + ;(e = e || {}), (t = t || (() => !0)) + var i = {} + for (var r in e) t(e[r]) && (i[r] = e[r]) + return i +} +class As { + constructor(e, t) { + ;(this.nosCdnHostTimer = 0), + (this.nosErrorCount = 0), + (this.core = e), + (this.cloudStorage = t) + } + get config() { + return this.cloudStorage.config + } + reset() { + this.nosErrorCount = 0 + } + getNosAccessToken(e) { + return Te(this, void 0, void 0, function* () { + var t = Ve( + yield this.core.sendCmd('getNosAccessToken', { tag: e }), + 'content.nosAccessTokenTag.token' + ), + i = e.url + return { + token: t, + url: -1 !== i.indexOf('?') ? i + '&token=' + t : i + '?token=' + t, + } + }) + } + deleteNosAccessToken(e) { + return Te(this, void 0, void 0, function* () { + yield this.core.sendCmd('deleteNosAccessToken', { tag: e }) + }) + } + nosUpload(e, t) { + var i, r, s, n, o, a, c, d + return Te(this, void 0, void 0, function* () { + var l = Ve(this.core, 'config.cdn.bucket'), + p = { tag: e.nosScenes || l || 'nim' } + e.nosSurvivalTime && (p.expireSec = e.nosSurvivalTime) + var h, + u = this.core.adapters.getFileUploadInformation(e) + if (!t && !u) + try { + h = yield this.core.sendCmd('getNosToken', { + responseBody: Ss(e.type), + nosToken: p, + }) + } catch (e) { + if ( + (this.core.logger.error('uploadFile:: getNosToken error', e), + e instanceof he) + ) + throw e + throw new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'getNosToken error', + rawError: e, + curProvider: 1, + }, + }) + } + var m = this.config.uploadReplaceFormat + .replace( + '{host}', + this.config.cdn.cdnDomain || this.config.cdn.defaultCdnDomain + ) + .replace( + '{object}', + u + ? null === (i = u.uploadInfo) || void 0 === i + ? void 0 + : i.objectName + : t + ? null == t + ? void 0 + : t.objectName + : h.content.nosToken.objectName + ), + g = '' + t && t.shortUrl && (g = t.shortUrl), + (null === + (n = + null === + (s = + null === (r = null == u ? void 0 : u.uploadInfo) || void 0 === r + ? void 0 + : r.payload) || void 0 === s + ? void 0 + : s.mixStoreToken) || void 0 === n + ? void 0 + : n.shortUrl) && (g = u.uploadInfo.payload.mixStoreToken.shortUrl) + var v, + f = g || m + try { + var y = u + ? { + token: + null === (o = null == u ? void 0 : u.uploadInfo) || void 0 === o + ? void 0 + : o.token, + bucket: + null === (a = null == u ? void 0 : u.uploadInfo) || void 0 === a + ? void 0 + : a.bucketName, + objectName: + null === (c = null == u ? void 0 : u.uploadInfo) || void 0 === c + ? void 0 + : c.objectName, + } + : t || h.content.nosToken + this.core.logger.log('uploadFile:: uploadFile params', { + nosToken: y, + chunkUploadHost: this.config.chunkUploadHost, + chunkUploadHostBackupList: this.config.chunkUploadHostBackupList, + commonUploadHost: this.config.commonUploadHost, + commonUploadHostBackupList: this.config.commonUploadHostBackupList, + platform: Ae.platform, + }) + var I = + 'BROWSER' === Ae.platform + ? this.config.chunkUploadHost + : `${this.config.commonUploadHost}/${y && y.bucket}` + this.core.reporterHookCloudStorage.update({ + remote_addr: I, + operation_type: t ? 2 : 0, + }), + (v = yield this.core.adapters.uploadFile( + Object.assign( + Object.assign(Object.assign({}, e), { + nosToken: y, + chunkUploadHost: this.config.chunkUploadHost, + chunkUploadHostBackupList: + this.config.chunkUploadHostBackupList, + commonUploadHost: this.config.commonUploadHost, + commonUploadHostBackupList: + this.config.commonUploadHostBackupList, + maxSize: e.maxSize || this.config.chunkMaxSize, + }), + t ? { payload: { mixStoreToken: t } } : {} + ) + )) + } catch (i) { + this.core.logger.error('uploadFile::nos uploadFile error:', i) + var M = 'v2' === Ve(this.core, 'options.apiVersion') + if (i.code === de.V2NIM_ERROR_CODE_CANCELLED || 10499 === i.errCode) + throw new ge({ + code: M ? de.V2NIM_ERROR_CODE_CANCELLED : 400, + detail: { + reason: Ve(i, 'message') || 'Request abort', + rawError: i, + curProvider: 1, + }, + }) + if (M && i.errCode === de.V2NIM_ERROR_CODE_FILE_OPEN_FAILED) + throw new he({ + code: de.V2NIM_ERROR_CODE_FILE_OPEN_FAILED, + detail: { + reason: Ve(i, 'message') || 'Read file failed', + rawError: i, + curProvider: 1, + }, + }) + var { net_connect: _ } = yield Ae.net.getNetworkStatus() + if (!1 === _) + throw new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { reason: 'No network', rawError: i, curProvider: 1 }, + }) + if (t) { + if (this.nosErrorCount <= 0) { + try { + this.cloudStorage.mixStorage._addCircuitTimer() + } catch (t) { + throw new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'All upload attempts failed', + rawError: t, + curProvider: this.cloudStorage.mixStorage.curProvider, + mixStorePolicy: this.cloudStorage.mixStorage.mixStorePolicy, + file: e.file || e.filePath, + }, + }) + } + return ( + (this.nosErrorCount = Ve( + this.cloudStorage, + 'mixStorePolicy.nosPolicy.uploadConfig.retryPolicy.retry' + )), + this.cloudStorage._uploadFile(e) + ) + } + return this.nosErrorCount--, this.nosUpload(e, t) + } + throw new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'NOS attempts failed', + rawError: i, + curProvider: 1, + }, + }) + } + var E = null == v ? void 0 : v.type, + T = E && E.indexOf('/') > -1 ? E.slice(0, E.indexOf('/')) : '' + T || (T = e.type || '') + var S, + C = { image: 'imageInfo', video: 'vinfo', audio: 'vinfo' } + if (!C[T]) return Object.assign({ url: f }, v) + try { + S = yield this.core.adapters.request( + `${m}?${C[T]}`, + { method: 'GET', dataType: 'json', timeout: 5e3 }, + { exception_service: 3 } + ) + } catch (e) { + return ( + this.core.logger.error('uploadFile:: fetch file info error', e), + Object.assign({ url: f }, v) + ) + } + if (S) { + var { data: N } = S, + A = + 'imageInfo' === C[T] + ? N + : null === (d = null == N ? void 0 : N.GetVideoInfo) || + void 0 === d + ? void 0 + : d.VideoInfo + return Ns( + { + url: f, + name: v.name, + size: v.size, + ext: v.ext, + w: null == A ? void 0 : A.Width, + h: null == A ? void 0 : A.Height, + orientation: null == A ? void 0 : A.Orientation, + dur: null == A ? void 0 : A.Duration, + audioCodec: null == A ? void 0 : A.AudioCodec, + videoCodec: null == A ? void 0 : A.VideoCodec, + container: null == A ? void 0 : A.Container, + }, + function (e) { + return void 0 !== e + } + ) + } + return Object.assign({ url: f }, v) + }) + } + _getNosCdnHost() { + var e + return Te(this, void 0, void 0, function* () { + var t + try { + t = yield this.core.sendCmd('getNosCdnHost') + } catch (e) { + return void this.core.logger.error('getNosCdnHost::error', e) + } + if (t) { + var i = + null === (e = null == t ? void 0 : t.content) || void 0 === e + ? void 0 + : e.nosConfigTag, + r = parseInt(null == i ? void 0 : i.expire) + 0 !== r && i.cdnDomain + ? -1 === r + ? ((this.config.cdn.bucket = i.bucket), + (this.config.cdn.cdnDomain = i.cdnDomain), + (this.config.cdn.objectNamePrefix = i.objectNamePrefix)) + : ((this.config.cdn.bucket = i.bucket), + (this.config.cdn.cdnDomain = i.cdnDomain), + (this.config.cdn.objectNamePrefix = i.objectNamePrefix), + (this.nosCdnHostTimer = this.core.timerManager.addTimer(() => { + this._getNosCdnHost() + }, 1e3 * r))) + : ((this.config.cdn.bucket = ''), + (this.config.cdn.cdnDomain = ''), + (this.config.cdn.objectNamePrefix = '')) + } + }) + } +} +var Rs = { + '6_2': 'getNosToken', + '6_22': 'getOriginUrl', + '6_24': 'getNosAccessToken', + '6_25': 'deleteNosAccessToken', + '6_26': 'getNosCdnHost', + '6_27': 'getGrayscaleConfig', + '6_28': 'getMixStorePolicy', + '6_29': 'getMixStoreToken', + '6_30': 'getFileAuthToken', + }, + Os = { + nosToken: { + objectName: 1, + token: 2, + bucket: 3, + expireTime: 4, + expireSec: 7, + tag: 8, + shortUrl: 9, + }, + mixStoreTokenReqTag: { + provider: 0, + tokenCount: 1, + nosSurvivalTime: 2, + tag: 3, + returnBody: 4, + policyVersion: 5, + }, + nosConfigTag: { bucket: 1, cdnDomain: 2, expire: 3, objectNamePrefix: 4 }, + grayConfigTag: { config: 0, ttl: 1 }, + mixStorePolicyTag: { + providers: 0, + ttl: 1, + mixEnable: 2, + nosPolicy: 3, + s3Policy: 4, + policyVersion: 5, + }, + mixStoreTokenResTag: { + provider: 0, + accessKeyId: 1, + secretAccessKey: 2, + sessionToken: 3, + token: 4, + expireTime: 5, + bucket: 6, + objectName: 7, + fileExpireSec: 8, + tag: 9, + shortUrl: 10, + region: 11, + }, + nosSafeUrlTag: { safeUrl: 0, originUrl: 1 }, + mixStoreAuthTokenReqTag: { type: 1, urls: 2 }, + mixStoreAuthTokenResTag: { type: 1, tokens: 2, token: 3, ttl: 4 }, + nosAccessTokenTag: { token: 0, url: 1, userAgent: 2, ext: 3 }, + }, + bs = { + getNosToken: { + sid: 6, + cid: 2, + service: 'cloudStorage', + params: [ + { type: 'String', name: 'responseBody' }, + { + type: 'Property', + name: 'nosToken', + entity: 'nosToken', + reflectMapper: Os.nosToken, + }, + ], + response: [ + { type: 'Property', name: 'nosToken', reflectMapper: ft(Os.nosToken) }, + ], + }, + getOriginUrl: { + sid: 6, + cid: 22, + service: 'cloudStorage', + params: [ + { + type: 'Property', + name: 'nosSafeUrlTag', + reflectMapper: Os.nosSafeUrlTag, + }, + ], + response: [ + { + type: 'Property', + name: 'nosSafeUrlTag', + reflectMapper: ft(Os.nosSafeUrlTag), + }, + ], + }, + getNosCdnHost: { + sid: 6, + cid: 26, + service: 'cloudStorage', + response: [ + { + type: 'Property', + name: 'nosConfigTag', + reflectMapper: ft(Os.nosConfigTag), + }, + ], + }, + getGrayscaleConfig: { + sid: 6, + cid: 27, + service: 'cloudStorage', + params: [{ type: 'Property', name: 'config' }], + response: [ + { + type: 'Property', + name: 'grayConfigTag', + reflectMapper: ft(Os.grayConfigTag), + }, + ], + }, + getMixStorePolicy: { + sid: 6, + cid: 28, + service: 'cloudStorage', + params: [{ type: 'LongArray', name: 'supportType' }], + response: [ + { + type: 'Property', + name: 'mixStorePolicyTag', + reflectMapper: ft(Os.mixStorePolicyTag), + }, + ], + }, + getMixStoreToken: { + sid: 6, + cid: 29, + service: 'cloudStorage', + params: [ + { + type: 'Property', + name: 'mixStoreTokenReqTag', + reflectMapper: Os.mixStoreTokenReqTag, + }, + ], + response: [ + { + type: 'Property', + name: 'mixStoreTokenResTag', + reflectMapper: ft(Os.mixStoreTokenResTag), + }, + ], + }, + getFileAuthToken: { + sid: 6, + cid: 30, + service: 'cloudStorage', + params: [ + { + type: 'Property', + name: 'mixStoreAuthTokenReqTag', + reflectMapper: Os.mixStoreAuthTokenReqTag, + }, + ], + response: [ + { + type: 'Property', + name: 'mixStoreAuthTokenResTag', + reflectMapper: ft(Os.mixStoreAuthTokenResTag), + }, + ], + }, + getNosAccessToken: { + sid: 6, + cid: 24, + service: 'cloudStorage', + params: [ + { type: 'Property', name: 'tag', reflectMapper: Os.nosAccessTokenTag }, + ], + response: [ + { + type: 'Property', + name: 'tag', + reflectMapper: ft(Os.nosAccessTokenTag), + }, + ], + }, + deleteNosAccessToken: { + sid: 6, + cid: 25, + service: 'cloudStorage', + params: [ + { type: 'Property', name: 'tag', reflectMapper: Os.nosAccessTokenTag }, + ], + }, + } +class ks { + constructor(e, t) { + ;(this.GRAYKEY = 'AllGrayscaleConfig'), + (this.MIXSTOREKEY = 'AllMixStorePolicy'), + (this.grayConfig = { mixStoreEnable: !1, timeStamp: 0, ttl: 0 }), + (this.mixStorePolicy = { + providers: [], + timeStamp: 0, + ttl: 0, + s3Policy: null, + nosPolicy: null, + policyVersion: void 0, + }), + (this.curProvider = 1), + (this.mixStoreErrorCount = 10), + (this.circuitTimer = 0), + (this.core = e), + (this.cloudStorage = t), + (this.logger = e.logger) + } + reset() { + ;(this.grayConfig = null), + (this.mixStorePolicy = { + providers: [], + timeStamp: 0, + ttl: 0, + s3Policy: null, + nosPolicy: null, + policyVersion: void 0, + }), + (this.curProvider = 1), + (this.mixStoreErrorCount = 10) + } + getGrayscaleConfig(e, t) { + var i + return Te(this, void 0, void 0, function* () { + if (Ae.localStorage) + try { + Ae.localStorage.getItem && + Ae.localStorage.getItem(this.GRAYKEY) && + (this.grayConfig = JSON.parse( + Ae.localStorage.getItem(this.GRAYKEY) + )[e]) + } catch (e) { + Ae.localStorage.getItem(this.GRAYKEY) && + this.core.logger.error( + 'uploadFile:: JSON.parse grayscaleConfig error ', + e + ) + } + if ( + !this.grayConfig || + this.grayConfig.timeStamp + 1e3 * this.grayConfig.ttl < t + ) { + var r = yield this.core.sendCmd('getGrayscaleConfig', { config: {} }) + if (r.content && r.content.grayConfigTag) { + this.logger.log('uploadFile::getAppGrayConfigRequest success ') + try { + ;(this.grayConfig = JSON.parse(r.content.grayConfigTag.config)), + (this.grayConfig.ttl = JSON.parse(r.content.grayConfigTag.ttl)) + } catch (e) { + this.logger.error('getGrayscaleConfig error', e) + } + if (!this.grayConfig) return + var s = Ae.localStorage.getItem(this.GRAYKEY) + ? JSON.parse(Ae.localStorage.getItem(this.GRAYKEY)) + : {} + ;(this.grayConfig.timeStamp = new Date().getTime()), + (s[e] = this.grayConfig), + Ae.localStorage.setItem(this.GRAYKEY, JSON.stringify(s)) + } else this.logger.log('uploadFile:: result grayConfig:', r.content) + } + ;(null === (i = this.grayConfig) || void 0 === i + ? void 0 + : i.mixStoreEnable) && (yield this._getMixStorePolicy(e)) + }) + } + _getMixStorePolicy(e) { + return Te(this, void 0, void 0, function* () { + var t = new Date().getTime() + if (Ae.localStorage) + try { + if ( + ((this.mixStorePolicy = JSON.parse( + Ae.localStorage.getItem(this.MIXSTOREKEY) + )[e]), + (this.curProvider = parseInt(this.mixStorePolicy.providers[0])), + this.mixStorePolicy.timeStamp && + this.mixStorePolicy.timeStamp + 1e3 * this.mixStorePolicy.ttl > t) + ) { + var i = + this.mixStorePolicy.timeStamp + 1e3 * this.mixStorePolicy.ttl - t + this.core.timerManager.addTimer( + this._getMixStorePolicy.bind(this, e), + i + ) + } + } catch (t) { + Ae.localStorage.getItem(this.MIXSTOREKEY) && + JSON.parse(Ae.localStorage.getItem(this.MIXSTOREKEY))[e] && + this.core.logger.error( + 'uploadFile:: JSON.parse mixStorePolicy error ', + t + ) + } + if ( + !this.mixStorePolicy || + this.mixStorePolicy.timeStamp + 1e3 * this.mixStorePolicy.ttl <= t + ) + try { + var r = (yield this.core.sendCmd('getMixStorePolicy', { + supportType: this.cloudStorage.aws.s3 ? [1, 2] : [1], + })).content.mixStorePolicyTag + ;(this.mixStorePolicy = { + providers: [], + timeStamp: 0, + ttl: 0, + s3Policy: null, + nosPolicy: null, + policyVersion: void 0, + }), + (this.mixStorePolicy.policyVersion = r.policyVersion), + (this.mixStorePolicy.ttl = Number(r.ttl)), + (this.mixStorePolicy.providers = r.providers.split(',')), + this.circuitTimer && + this.core.timerManager.deleteTimer(this.circuitTimer), + (this.curProvider = parseInt(this.mixStorePolicy.providers[0])), + (this.mixStorePolicy.nosPolicy = r.nosPolicy + ? JSON.parse(r.nosPolicy) + : null), + (this.mixStorePolicy.s3Policy = r.s3Policy + ? JSON.parse(r.s3Policy) + : null), + null === this.mixStorePolicy.s3Policy + ? (this.mixStorePolicy.providers = ['1']) + : null === this.mixStorePolicy.nosPolicy + ? (this.mixStorePolicy.providers = ['2']) + : (this.mixStorePolicy.providers = + this.mixStorePolicy.s3Policy.priority < + this.mixStorePolicy.nosPolicy.priority + ? ['2', '1'] + : ['1', '2']), + this.core.timerManager.addTimer( + this._getMixStorePolicy.bind(this, e), + 1e3 * this.mixStorePolicy.ttl + ) + var s = Ae.localStorage.getItem(this.MIXSTOREKEY) + ? JSON.parse(Ae.localStorage.getItem(this.MIXSTOREKEY)) + : {} + ;(this.mixStorePolicy.timeStamp = new Date().getTime()), + (s[e] = this.mixStorePolicy), + Ae.localStorage.setItem(this.MIXSTOREKEY, JSON.stringify(s)) + } catch (t) { + if ( + (this.logger.error('getMixStorePolicy error', t), + 0 === this.mixStoreErrorCount) + ) + throw new Error('getMixStorePolicy all count error') + this._getMixStorePolicy(e), this.mixStoreErrorCount-- + } + this.mixStorePolicy.nosPolicy && + (this.cloudStorage.nos.nosErrorCount = + this.mixStorePolicy.nosPolicy.uploadConfig.retryPolicy.retry) + }) + } + _addCircuitTimer() { + var e = this.mixStorePolicy.providers, + t = e[(e.indexOf(String(this.curProvider)) + 1) % e.length] + if (!t) throw new Error('uploadFile nextProvider error') + if (t === e[0]) throw new Error('uploadFile all policy fail') + if ( + (this.logger.log( + `uploadFile:: upload policy will change,now policy:${this.curProvider} nextProvider:${t}` + ), + (this.curProvider = parseInt(t)), + this.mixStorePolicy.nosPolicy && this.mixStorePolicy.s3Policy) + ) { + var i = + this.mixStorePolicy[1 === this.curProvider ? 'nosPolicy' : 's3Policy'] + .uploadConfig.retryPolicy.circuit + if (!i || 0 === i) throw new Error('uploadFile circuit error') + this.circuitTimer = this.core.timerManager.addTimer(() => { + this.logger.log( + `uploadFile:: upload policy will change,now policy:${ + this.curProvider + } nextProvider:${parseInt(this.mixStorePolicy.providers[0])}` + ), + (this.curProvider = parseInt(this.mixStorePolicy.providers[0])), + this.core.timerManager.deleteTimer(this.circuitTimer) + }, 1e3 * i) + } + throw new Error('uploadFile will not retry again') + } + getFileAuthToken(e) { + return Te(this, void 0, void 0, function* () { + return (yield this.core.sendCmd('getFileAuthToken', { + mixStoreAuthTokenReqTag: e, + })).content.mixStoreAuthTokenResTag + }) + } +} +var Vs = -1 +class Ps { + constructor(e, t) { + ;(this.s3 = null), + (this.core = e), + (this.cloudStorage = t), + (this.logger = e.logger) + } + get mixStorePolicy() { + return this.cloudStorage.mixStorage.mixStorePolicy + } + s3Upload(e, t) { + return Te(this, void 0, void 0, function* () { + var i + if (((Vs += 1), e.file)) i = e.file + else if ('string' == typeof e.fileInput) { + this.logger.warn('fileInput will abandon,Please use file or filepath') + var r = document.getElementById(e.fileInput) + if (!(r && r.files && r.files[0])) + throw new Error('Can not get file from fileInput') + i = r.files[0] + } else { + if (!(e.fileInput && e.fileInput.files && e.fileInput.files[0])) + throw new Error(`Can not get file from fileInput ${e.fileInput}`) + i = e.fileInput.files[0] + } + if (!this.mixStorePolicy.s3Policy) throw new Error('dont get s3 policy') + var s = { + accessKeyId: t.accessKeyId, + secretAccessKey: t.secretAccessKey, + sessionToken: t.sessionToken, + region: t.region, + maxRetries: + this.mixStorePolicy.s3Policy.uploadConfig.retryPolicy.retry, + }, + n = this.s3, + o = decodeURIComponent(t.bucket), + a = decodeURIComponent(t.objectName), + c = i, + d = `https://${o}.s3.amazonaws.com/${a}`, + l = {}, + p = this.mixStorePolicy.s3Policy + if ( + p && + p.uploadConfig && + Array.isArray(p.uploadConfig.uploadUrl) && + p.uploadConfig.uploadUrl.length > 0 + ) { + var h = p.uploadConfig.uploadUrl.length + ;(Vs %= h), + (l.endpoint = p.uploadConfig.uploadUrl[Vs]), + (l.s3ForcePathStyle = !0), + (d = `${l.endpoint}/${o}/${a}`) + } + this.core.reporterHookCloudStorage.update({ + remote_addr: d, + operation_type: 1, + }) + var u = new n(l) + u.config.update(s) + var m = { + Bucket: o, + Key: a, + Body: c, + Metadata: { token: t.token }, + ContentType: c.type || 'application/octet-stream', + } + this.core.logger.log('uploadFile:: s3 upload params:', m) + var g = u.upload(m) + return ( + g.on('httpUploadProgress', (t) => { + var i = parseFloat((t.loaded / t.total).toFixed(2)) + e.onUploadProgress && + e.onUploadProgress({ + total: t.total, + loaded: t.loaded, + percentage: i, + percentageText: Math.round(100 * i) + '%', + }) + }), + new Promise((i, r) => { + var s = new Date().getTime() + g.send((n, d) => + Te(this, void 0, void 0, function* () { + var l, p, h + if (n && 'RequestAbortedError' === n.code) + this.logger.error( + 'uploadFile:', + 'api::s3:upload file abort.', + n + ), + r( + new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_CANCELLED + : 400, + detail: { + reason: 'S3RequestAbortedError', + rawError: n, + curProvider: 2, + }, + }) + ) + else { + if (!n) { + var u = this.mixStorePolicy.s3Policy.cdnSchema + u = (u = u.replace( + '{cdnDomain}', + this.mixStorePolicy.s3Policy.dlcdn + )).replace('{objectName}', d.Key) + var m = { + size: c.size, + name: c.name, + url: t.shortUrl ? t.shortUrl : u, + ext: c.name.split('.')[1] || 'unknown', + }, + g = e.type || '', + v = { image: 'imageInfo' } + return i( + v[g] + ? yield this.getS3FileInfo({ + url: u, + infoSuffix: v[g], + s3Result: m, + }) + : m + ) + } + this.logger.error( + 'uploadFile:', + 'api::s3:upload file failed.', + n + ), + this.core.reporter.reportTraceStart('exceptions', { + user_id: + this.core.options.account || + (null === + (p = + null === (l = this.core) || void 0 === l + ? void 0 + : l.auth) || void 0 === p + ? void 0 + : p.account), + trace_id: + null === (h = this.core.clientSocket.socket) || + void 0 === h + ? void 0 + : h.sessionId, + start_time: s, + action: 1, + exception_service: 4, + }), + this.core.reporter.reportTraceUpdateV2( + 'exceptions', + { + code: + 'number' == typeof n.status + ? n.status + : 'number' == typeof n.code + ? n.code + : 0, + description: n.message || `${n.code}`, + operation_type: 1, + target: JSON.stringify({ bucket: o, object: a }), + }, + { asyncParams: Ae.net.getNetworkStatus() } + ), + this.core.reporter.reportTraceEnd('exceptions', 1) + var { net_connect: f } = yield Ae.net.getNetworkStatus() + if (!1 === f) + return r( + new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'No network', + rawError: n, + curProvider: this.cloudStorage.mixStorage.curProvider, + }, + }) + ) + try { + this.cloudStorage.mixStorage._addCircuitTimer() + } catch (t) { + return r( + new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'All upload attempts failed', + rawError: t, + curProvider: this.cloudStorage.mixStorage.curProvider, + mixStorePolicy: this.mixStorePolicy, + file: e.file || e.filePath, + }, + }) + ) + } + i(this.cloudStorage._uploadFile(e)) + } + }) + ), + e.onUploadStart && e.onUploadStart(g) + }) + ) + }) + } + getS3FileInfo(e) { + var t + return Te(this, void 0, void 0, function* () { + var i, + { url: r, infoSuffix: s, s3Result: n } = e + try { + i = yield this.core.adapters.request( + `${r}?${s}`, + { method: 'GET', dataType: 'text', timeout: 5e3 }, + { exception_service: 3 } + ) + } catch (e) { + return ( + this.core.logger.error('uploadFile:: fetch file info error', e), n + ) + } + if (i) { + var { data: o } = i, + a = + 'imageInfo' === s + ? o + : null === (t = null == o ? void 0 : o.GetVideoInfo) || + void 0 === t + ? void 0 + : t.VideoInfo + return Ns( + Object.assign(Object.assign({}, n), { + w: null == a ? void 0 : a.Width, + h: null == a ? void 0 : a.Height, + orientation: null == a ? void 0 : a.Orientation, + dur: null == a ? void 0 : a.Duration, + audioCodec: null == a ? void 0 : a.AudioCodec, + videoCodec: null == a ? void 0 : a.VideoCodec, + container: null == a ? void 0 : a.Container, + }), + function (e) { + return void 0 !== e + } + ) + } + return ( + this.core.logger.error( + 'uploadFile:: fetch s3 file info no result', + `${r}?${s}` + ), + n + ) + }) + } +} +class Ls { + constructor(e, t = {}) { + ;(this.config = {}), + (this.uploadTaskMap = {}), + (this.name = 'cloudStorage'), + (this.logger = e.logger), + (this.core = e), + (this.nos = new As(e, this)), + (this.mixStorage = new ks(e, this)), + (this.aws = new Ps(e, this)), + vt({ cmdMap: Rs, cmdConfig: bs }), + this.setOptions(t), + this.setListeners() + } + setOptions(e = {}) { + var t = e.storageKeyPrefix || 'NIMClient' + ;(this.mixStorage.GRAYKEY = t + '-AllGrayscaleConfig'), + (this.mixStorage.MIXSTOREKEY = t + '-AllMixStorePolicy') + var { s3: i } = e, + r = Ee(e, ['s3']), + s = Object.assign({}, Cs, this.config) + if (r && Object.prototype.hasOwnProperty.call(r, 'cdn')) { + var n = Object.assign(Object.assign({}, s.cdn), r.cdn) + ;(this.config = Object.assign({}, s, r)), (this.config.cdn = n) + } else this.config = Object.assign({}, s, r) + i && (this.aws.s3 = i) + } + setListeners() { + this.core.eventBus.on('kicked', this._clearUnCompleteTask.bind(this)), + this.core.eventBus.on('disconnect', this._clearUnCompleteTask.bind(this)), + this.core.eventBus.on( + 'V2NIMLoginService/loginLifeCycleLogout', + this._clearUnCompleteTask.bind(this) + ), + this.core.eventBus.on( + 'V2NIMLoginService/loginLifeCycleKicked', + this._clearUnCompleteTask.bind(this) + ) + } + _clearUnCompleteTask() { + Object.keys(this.uploadTaskMap).forEach((e) => { + var t = this.uploadTaskMap[e] + t && t.abort && t.abort() + }), + (this.uploadTaskMap = {}) + } + init(e = Date.now()) { + return Te(this, void 0, void 0, function* () { + this.mixStorage.reset(), + this.nos.reset(), + this.config.isNeedToGetUploadPolicyFromServer && + (yield this.mixStorage.getGrayscaleConfig( + this.core.options.appkey, + e + )), + yield this.nos._getNosCdnHost() + }) + } + processCallback(e, t) { + var i = e.onUploadProgress, + r = e.onUploadDone, + s = e.onUploadStart + return { + onUploadStart: + 'function' == typeof s + ? (e) => { + this.uploadTaskMap[t] = e + try { + s(e) + } catch (e) { + this.logger.error( + 'CloudStorage::uploadFile:options.onUploadStart execute error', + e + ) + } + } + : (e) => { + this.uploadTaskMap[t] = e + }, + onUploadProgress: + 'function' == typeof i + ? (e) => { + this.core.reporterHookCloudStorage.update({ + transferred_size: e.loaded, + full_size: e.total, + }) + try { + i(e) + } catch (e) { + this.logger.error( + 'CloudStorage::uploadFile:options.onUploadProgress execute error', + e + ) + } + } + : (e) => { + this.core.reporterHookCloudStorage.update({ + transferred_size: e.loaded, + full_size: e.total, + }) + }, + onUploadDone: + 'function' == typeof r + ? (e) => { + this.core.reporterHookCloudStorage.end(0) + try { + r(e) + } catch (e) { + this.logger.error( + 'CloudStorage::uploadFile:options.onUploadDone execute error', + e + ) + } + } + : () => { + this.core.reporterHookCloudStorage.end(0) + }, + taskKey: t, + } + } + uploadFile(e) { + return Te(this, void 0, void 0, function* () { + if ( + (ye( + { + maxSize: { type: 'number', required: !1 }, + type: { type: 'enum', values: ['file', 'image', 'audio', 'video'] }, + }, + e + ), + !e.fileInput && !e.file && !e.filePath) + ) + throw new Error('uploadFile needs target file object or a filePath') + if (e.type && 'file' !== e.type) { + var t = Ve(e, 'file.type') + if (t && 'string' == typeof t && -1 === t.indexOf(e.type)) + throw new Error(`The meta type "${t}" does not match "${e.type}"`) + } + if ((this.core.reporterHookCloudStorage.start(), e.file)) + this.core.reporterHookCloudStorage.update({ full_size: e.file.size }) + else if ('string' == typeof e.fileInput) { + var i = document.getElementById(e.fileInput) + i && + i.files && + i.files[0] && + this.core.reporterHookCloudStorage.update({ + full_size: i.files[0].size, + }) + } else + e.fileInput && + e.fileInput.files && + e.fileInput.files[0] && + this.core.reporterHookCloudStorage.update({ + full_size: e.fileInput.files[0].size, + }) + var r = Le(), + { + onUploadStart: s, + onUploadProgress: n, + onUploadDone: o, + } = this.processCallback(e, r) + ;(e.onUploadStart = s), (e.onUploadProgress = n), (e.onUploadDone = o) + var a = null + try { + ;(a = yield this._uploadFile(e)), + e.md5 && (a.md5 = e.md5), + delete this.uploadTaskMap[r] + } catch (e) { + throw ( + (delete this.uploadTaskMap[r], + this.core.reporterHookCloudStorage.end( + (e && e.code) === de.V2NIM_ERROR_CODE_CANCELLED ? 3 : 1 + ), + e) + ) + } + return ( + a && + ((a.size = void 0 === a.size ? void 0 : Number(a.size)), + (a.w = void 0 === a.w ? void 0 : Number(a.w)), + (a.h = void 0 === a.h ? void 0 : Number(a.h)), + (a.dur = void 0 === a.dur ? void 0 : Number(a.dur))), + (a.url = decodeURIComponent(a.url)), + e.onUploadDone({ + size: a.size, + name: a.name, + url: a.url, + ext: a.name.split('.')[1] || 'unknown', + }), + a + ) + }) + } + _uploadFile(e) { + var t, i + return Te(this, void 0, void 0, function* () { + if ( + !Ve(this.mixStorage, 'grayConfig.mixStoreEnable') || + !Ve(this.mixStorage, 'mixStorePolicy.providers.length') + ) + return ( + this.logger.log('uploadFile:: uploadFile begin, use old nos'), + this.nos.nosUpload(e) + ) + this.logger.log( + `uploadFile::_uploadFile, grayConfig enable:${Ve( + this.mixStorage, + 'grayConfig.mixStoreEnable' + )} curProvider:${Ve(this.mixStorage, 'curProvider')}` + ) + var r = this.core.adapters.getFileUploadInformation(e), + s = !0 + r + ? !1 === r.complete && 2 === this.mixStorage.curProvider && (s = !1) + : (s = !1), + this.aws.s3 || (this.mixStorage.curProvider = 1) + var n = Ts + if (!s) + try { + n = (yield this.core.sendCmd('getMixStoreToken', { + mixStoreTokenReqTag: { + provider: this.mixStorage.curProvider, + tokenCount: 1, + tag: 'qchat', + nosSurvivalTime: e.nosSurvivalTime, + returnBody: Ss(e.type), + policyVersion: this.mixStorage.mixStorePolicy.policyVersion, + }, + })).content.mixStoreTokenResTag + } catch (e) { + if ( + (this.core.logger.error('uploadFile:: getMixStoreToken error', e), + e instanceof he) + ) + throw e + throw new ge({ + code: + 'v2' === Ve(this.core, 'options.apiVersion') + ? de.V2NIM_ERROR_CODE_FILE_UPLOAD_FAILED + : 400, + detail: { + reason: 'getMixStoreToken error', + rawError: e, + curProvider: this.mixStorage.curProvider, + mixStorePolicy: this.mixStorage.mixStorePolicy, + }, + }) + } + return s + ? this.nos.nosUpload( + e, + null === + (i = + null === (t = null == r ? void 0 : r.uploadInfo) || void 0 === t + ? void 0 + : t.payload) || void 0 === i + ? void 0 + : i.mixStoreToken + ) + : 2 === this.mixStorage.curProvider + ? this.aws.s3Upload(e, n) + : this.nos.nosUpload(e, n) + }) + } + getThumbUrl(e, t) { + var i, r, s, n, o + if (!new RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/).test(e)) + return this.logger.error('illegal file url:' + e), e + var [a, c, d, l, p, h, u, m] = + /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/.exec( + e + ) + if ( + null === (i = this.grayConfig) || void 0 === i ? void 0 : i.mixStoreEnable + ) { + var g = this._getUrlType(e) + if ( + 2 === g && + this.mixStorePolicy.s3Policy && + Ve(this.mixStorePolicy, 's3Policy.thumbPolicy.imagethumb') + ) + return ( + null === + (s = + null === (r = this.mixStorePolicy.s3Policy) || void 0 === r + ? void 0 + : r.thumbPolicy) || void 0 === s + ? void 0 + : s.imagethumb + ) + .replace('{cdnDomain}', this.mixStorePolicy.s3Policy.dlcdn) + .replace('{objectName}', h) + .replace('{x}', t.width.toString()) + .replace('{y}', t.height.toString()) + if ( + 1 === g && + this.mixStorePolicy.nosPolicy && + Ve(this.mixStorePolicy, 'nosPolicy.thumbPolicy.imagethumb') + ) + return ( + null === + (o = + null === (n = this.mixStorePolicy.nosPolicy) || void 0 === n + ? void 0 + : n.thumbPolicy) || void 0 === o + ? void 0 + : o.imagethumb + ) + .replace('{cdnDomain}', this.mixStorePolicy.nosPolicy.dlcdn) + .replace('{objectName}', h) + .replace('{x}', t.width.toString()) + .replace('{y}', t.height.toString()) + } + return e.includes('?') + ? e + `&imageView&thumbnail=${t.width}x${t.height}` + : e + `?imageView&thumbnail=${t.width}x${t.height}` + } + getVideoCoverUrl(e, t) { + var i, r, s, n, o + if (!new RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/).test(e)) + return this.logger.error('illegal file url:' + e), e + var [a, c, d, l, p, h, u, m] = + /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/.exec( + e + ) + if ( + null === (i = this.grayConfig) || void 0 === i ? void 0 : i.mixStoreEnable + ) { + var g = this._getUrlType(e) + if ( + 2 === g && + this.mixStorePolicy.s3Policy && + Ve(this.mixStorePolicy, 's3Policy.thumbPolicy.vframe') + ) + return ( + null === + (s = + null === (r = this.mixStorePolicy.s3Policy) || void 0 === r + ? void 0 + : r.thumbPolicy) || void 0 === s + ? void 0 + : s.vframe + ) + .replace('{cdnDomain}', this.mixStorePolicy.s3Policy.dlcdn) + .replace('{objectName}', h) + .replace('{x}', t.width.toString()) + .replace('{y}', t.height.toString()) + .replace('{offset}', '0') + .replace('{type}', 'png') + if ( + 1 === g && + this.mixStorePolicy.nosPolicy && + Ve(this.mixStorePolicy, 'nosPolicy.thumbPolicy.vframe') + ) + return ( + null === + (o = + null === (n = this.mixStorePolicy.nosPolicy) || void 0 === n + ? void 0 + : n.thumbPolicy) || void 0 === o + ? void 0 + : o.vframe + ) + .replace('{cdnDomain}', this.mixStorePolicy.nosPolicy.dlcdn) + .replace('{objectName}', h) + .replace('{x}', t.width.toString()) + .replace('{y}', t.height.toString()) + .replace('{offset}', '0') + .replace('{type}', 'png') + } + return e.includes('?') + ? e + `&vframe&offset=0&resize=${t.width}x${t.height}&type=png` + : e + `?vframe&offset=0&resize=${t.width}x${t.height}&type=png` + } + getPrivateUrl(e) { + var t + if (!new RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/).test(e)) + return this.logger.error('illegal file url:' + e), '' + var [i, r, s, n, o, a, c, d] = + /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/.exec( + e + ) + if ( + null === (t = this.grayConfig) || void 0 === t ? void 0 : t.mixStoreEnable + ) { + var l = this._getUrlType(e) + return ( + 2 === l && + this.mixStorePolicy.s3Policy && + (e = this.mixStorePolicy.s3Policy.cdnSchema + .replace('{cdnDomain}', this.mixStorePolicy.s3Policy.dlcdn) + .replace('{objectName}', a)), + 1 === l && + this.mixStorePolicy.nosPolicy && + (e = this.mixStorePolicy.nosPolicy.cdnSchema + .replace('{cdnDomain}', this.mixStorePolicy.nosPolicy.dlcdn) + .replace('{objectName}', a)), + e + ) + } + var { downloadUrl: p, downloadHostList: h, nosCdnEnable: u } = this.config, + m = this.config.cdn.cdnDomain, + g = this.config.cdn.objectNamePrefix + ? decodeURIComponent(this.config.cdn.objectNamePrefix) + : '', + v = decodeURIComponent(a), + f = v.indexOf(g) + if (m && f > -1 && u) return `${r}${m}/${v.slice(f)}` + if (h.includes(n) && a.includes('/')) { + var y = a.indexOf('/'), + I = a.substring(0, y), + M = a.substring(y + 1) + return p.replace('{bucket}', I).replace('{object}', M) + } + var _ = h.filter((e) => 'string' == typeof n && n.includes(e))[0], + E = _ ? n.replace(_, '').replace(/\W/g, '') : null + return E ? p.replace('{bucket}', E).replace('{object}', a) : e + } + getOriginUrl(e) { + return Te(this, void 0, void 0, function* () { + return 'string' == typeof e && e.includes('_im_url=1') + ? (yield this.core.sendCmd('getOriginUrl', { + nosSafeUrlTag: { safeUrl: e }, + })).content.nosSafeUrlTag.originUrl + : e + }) + } + getFileToken(e) { + return Te(this, void 0, void 0, function* () { + ye( + { + type: { type: 'number', min: 2, max: 3 }, + urls: { type: 'array', required: !1, itemType: 'string' }, + }, + e + ) + var t = this.mixStorePolicy.nosPolicy + ? this.mixStorePolicy.nosPolicy.authPolicy.policyType + : null, + i = this.mixStorePolicy.s3Policy + ? this.mixStorePolicy.s3Policy.authPolicy.policyType + : null + if (t === String(-1) && i === String(-1)) + throw ( + (this.logger.error("don't need token"), new Error("don't need token")) + ) + if (2 === e.type) { + if ((t && t.indexOf(String(2)) >= 0) || (i && i.indexOf(String(2)) > 0)) + return this.mixStorage.getFileAuthToken(e) + throw ( + (this.logger.error("don't support time token "), + new Error("don't support type time token ")) + ) + } + if (!e.urls || !e.urls.length) + throw ( + (this.logger.error('urls is required when urls token'), + new Error('urls is required when urls token')) + ) + var r = [], + s = [] + if ( + (e.urls.forEach((e) => { + var t = this._getUrlType(e) + 1 === t && s.push(e), 2 === t && r.push(e) + }), + (!i || (0 !== r.length && i.indexOf(String(3)) < 0)) && + (this.logger.warn("s3 url don't support url token"), (r = [])), + (!t || (0 !== s.length && t.indexOf(String(3)) < 0)) && + (this.logger.warn("nos url don't support url token"), (s = [])), + 0 === r.length && 0 === s.length) + ) + throw ( + (this.logger.error('not support urls'), new Error('not support urls')) + ) + if (0 === r.length || 0 === s.length) + return ( + (e.urls = JSON.stringify(e.urls)), this.mixStorage.getFileAuthToken(e) + ) + }) + } + _getUrlType(e) { + return this.mixStorePolicy.nosPolicy && + this.mixStorePolicy.nosPolicy.dlcdns.some((t) => e.indexOf(t) >= 0) + ? 1 + : this.mixStorePolicy.s3Policy && + this.mixStorePolicy.s3Policy.dlcdns.some((t) => e.indexOf(t) >= 0) + ? 2 + : null + } + getNosAccessToken(e) { + return ( + ye({ url: { type: 'string', allowEmpty: !1 } }, e), + this.nos.getNosAccessToken(e) + ) + } + deleteNosAccessToken(e) { + return ( + ye({ token: { type: 'string', allowEmpty: !1 } }, e), + this.nos.deleteNosAccessToken(e) + ) + } + get grayConfig() { + return this.mixStorage.grayConfig + } + get mixStorePolicy() { + return this.mixStorage.mixStorePolicy + } + process(e) { + var t = Ve(e, 'error.detail.ignore') + return e.error && !t ? Promise.reject(e.error) : Promise.resolve(e) + } +} +class Ds extends ni { + constructor(e) { + super('V2NIMStorageService', e), + (this.sceneMap = { + nim_default_profile_icon: { + sceneName: 'nim_default_profile_icon', + expireTime: 0, + }, + nim_default_im: { sceneName: 'nim_default_im', expireTime: 0 }, + nim_system_nos_scene: { + sceneName: 'nim_system_nos_scene', + expireTime: 0, + }, + nim_security: { sceneName: 'nim_security', expireTime: 0 }, + }), + (this.uploadingMessageInfo = {}), + (this.core = e), + this.core._registerDep(Ls, 'cloudStorage'), + this.core._registerDep(Is, 'V2NIMStorageUtil') + } + addCustomStorageScene(e, t) { + return ( + this.checkV2(), + ye( + { + sceneName: { type: 'string', allowEmpty: !1 }, + expireTime: { type: 'number', min: 0 }, + }, + { sceneName: e, expireTime: t }, + '', + !0 + ), + (this.sceneMap[e] = { sceneName: e, expireTime: t }), + { sceneName: e, expireTime: t } + ) + } + getStorageSceneList() { + return this.checkV2(), Object.values(this.sceneMap) + } + getStorageScene(e) { + return (e && this.sceneMap[e]) || this.sceneMap.nim_default_im + } + hasStorageScene(e) { + return void 0 !== this.sceneMap[e] + } + createUploadFileTask(e) { + if ( + (this.checkV2(), + 'string' == typeof e.fileObj && 0 === e.fileObj.indexOf('nim-external')) + ) { + var t = document.getElementById(e.fileObj) + t && t.files && t.files[0] && (e.fileObj = t.files[0]) + } + return { taskId: Le(), uploadParams: e } + } + uploadFile(e, t) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye({ taskId: { type: 'string', allowEmpty: !1 } }, e, 'fileTask', !0), + (yield this._uploadFile(e, t))[0] + ) + }) + } + uploadFileWithMetaInfo(e, t) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye({ taskId: { type: 'string', allowEmpty: !1 } }, e, 'fileTask', !0), + (function (e) { + var { + url: t, + name: i, + size: r, + ext: s, + md5: n, + h: o, + w: a, + orientation: c, + dur: d, + audioCodec: l, + videoCodec: p, + container: h, + } = e + return JSON.parse( + JSON.stringify({ + url: t, + name: i, + size: r, + ext: s, + md5: n, + height: o, + width: a, + orientation: c, + duration: d, + audioCodec: l, + videoCodec: p, + container: h, + }) + ) + })((yield this._uploadFile(e, t))[1]) + ) + }) + } + _uploadFile(e, t, i) { + var r + return Te(this, void 0, void 0, function* () { + if (!this.core.cloudStorage || !this.core.cloudStorage.uploadFile) + throw new Error('Service "cloudStorage" does not exist') + var { uploadParams: s, taskId: n } = e, + { file: o, path: a } = fs(s.fileObj), + { fileType: c } = i || {} + if (this.uploadingMessageInfo[n]) + throw new he({ + code: de.V2NIM_ERROR_CODE_RESOURCE_ALREADY_EXIST, + detail: { reason: 'V2NIMStorageService.uploadFile: repeat upload' }, + }) + try { + var d = {} + o + ? (d.file = o) + : a && + (0 === (null == a ? void 0 : a.indexOf('nim-external')) + ? (d.fileInput = a) + : (d.filePath = a)) + var l = this.getStorageScene(s.sceneName) + if ( + ((d.nosScenes = l.sceneName), + (d.nosSurvivalTime = l.expireTime), + (d.type = + 1 === c ? 'image' : 2 === c ? 'audio' : 3 === c ? 'video' : 'file'), + d.file && this.core.pluginMap['browser-md5-file']) + ) { + var p = yield this.getFileMd5( + this.core.pluginMap['browser-md5-file'], + n, + d.file + ) + d.md5 = p + } + ;(d.onUploadProgress = (e) => { + 'function' == typeof t && t(Math.round(100 * e.percentage)) + }), + (d.onUploadStart = (e) => { + var t + if ( + null === (t = this.uploadingMessageInfo[n]) || void 0 === t + ? void 0 + : t.abort + ) + return e.abort(), void delete this.uploadingMessageInfo[n] + this.uploadingMessageInfo[n] = { abort: !1, task: e } + }), + (this.uploadingMessageInfo[n] = { abort: !1 }) + var h = yield this.core.cloudStorage.uploadFile(d) + if ( + null === (r = this.uploadingMessageInfo[n]) || void 0 === r + ? void 0 + : r.abort + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_CANCELLED, + detail: { reason: 'upload file aborted' }, + }) + return delete this.uploadingMessageInfo[n], [h.url, h] + } catch (e) { + throw ( + (delete this.uploadingMessageInfo[n], + this.core.logger.error('sendFile:: upload File error or abort.', e), + e) + ) + } + }) + } + cancelUploadFile(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), yield this._cancelUploadFile(e.taskId) + }) + } + _cancelUploadFile(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2() + var t = this.uploadingMessageInfo[e] + if (null == t ? void 0 : t.task) + try { + this.logger.log( + 'V2NIMStorageService.cancelUploadFile: uploadInfo task exist' + ), + yield t.task.abort(), + delete this.uploadingMessageInfo[e] + } catch (t) { + delete this.uploadingMessageInfo[e], + this.core.logger.error( + 'cancelMessageAttachmentUpload::abort error.', + t + ) + } + else { + if (!t) + throw new he({ + code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST, + detail: { + reason: + 'V2NIMStorageService.cancelUploadFile: uploadInfo not exist', + }, + }) + this.logger.log( + 'V2NIMStorageService.cancelUploadFile: uploadInfo task not exist' + ), + (t.abort = !0) + } + }) + } + getFileMd5(e, t, i) { + return Te(this, void 0, void 0, function* () { + return new Promise((r, s) => { + var n, + o = new e() + ;( + null === (n = this.uploadingMessageInfo[t]) || void 0 === n + ? void 0 + : n.abort + ) + ? s( + new he({ + code: de.V2NIM_ERROR_CODE_CANCELLED, + detail: { reason: 'upload file aborted' }, + }) + ) + : (this.uploadingMessageInfo[t] = { abort: !1, task: o }) + try { + o.md5(i, (e, t) => { + 'aborted' === e + ? s( + new he({ + code: de.V2NIM_ERROR_CODE_CANCELLED, + detail: { reason: e }, + }) + ) + : e + ? s( + new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { + reason: 'md5 calculate error in callback', + rawError: e, + }, + }) + ) + : r(t) + }) + } catch (e) { + s( + new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'md5 calculate error', rawError: e }, + }) + ) + } + }) + }) + } + shortUrlToLong(e) { + return Te(this, void 0, void 0, function* () { + return this.checkV2(), this.core.cloudStorage.getOriginUrl(e) + }) + } + getImageThumbUrl(e, t) { + return Te(this, void 0, void 0, function* () { + return this.core.V2NIMStorageUtil.getImageThumbUrl(e, t) + }) + } + getVideoCoverUrl(e, t) { + return Te(this, void 0, void 0, function* () { + return this.core.V2NIMStorageUtil.getVideoCoverUrl(e, t) + }) + } +} +class ws extends ni { + constructor(e) { + super('V2NIMMessageCreator', e), + (this.name = 'V2NIMMessageCreator'), + (this.defaultNosSceneName = 'nim_default_im'), + (this.core = e) + } + createMessage(e, t) { + return Object.assign( + Object.assign( + Object.assign( + { + messageClientId: Le(), + messageType: e, + createTime: this.core.timeOrigin.getNTPTime(), + sendingState: 0, + messageStatus: { errorCode: 200 }, + isSelf: !0, + }, + t + ), + t.attachment + ? { + attachment: Object.assign(Object.assign({}, t.attachment), { + raw: Jr(e, t.attachment), + }), + } + : {} + ), + { + senderId: '', + receiverId: '', + conversationType: 0, + conversationId: '', + messageServerId: '', + messageConfig: Object.assign( + { + unreadEnabled: !0, + roamingEnabled: !0, + readReceiptEnabled: !1, + lastMessageUpdateEnabled: !0, + historyEnabled: !0, + onlineSyncEnabled: !0, + offlineEnabled: !0, + }, + t.messageConfig + ), + pushConfig: Object.assign( + { pushEnabled: !0, pushNickEnabled: !0, forcePush: !1 }, + t.pushConfig + ), + routeConfig: Object.assign({ routeEnabled: !0 }, t.routeConfig), + antispamConfig: Object.assign( + { antispamEnabled: !0 }, + t.antispamConfig + ), + } + ) + } + createTextMessage(e) { + return ( + this.checkV2(), + ye({ text: { type: 'string', allowEmpty: !1 } }, { text: e }, '', !0), + this.createMessage(0, { text: e }) + ) + } + createImageMessage(e, t, i, r, s) { + this.checkV2(), + ye(_r, { name: t, sceneName: i, width: r, height: s }, '', !0) + var n = this.createGenericFileMessageAttachment( + e, + t, + i, + void 0, + r, + s, + 'jpeg' + ) + return this.createMessage(1, { attachment: n, attachmentUploadState: 0 }) + } + createAudioMessage(e, t, i, r) { + this.checkV2(), ye(Ir, { name: t, sceneName: i, duration: r }, '', !0) + var s = this.createGenericFileMessageAttachment( + e, + t, + i, + r, + void 0, + void 0, + 'aac' + ) + return this.createMessage(2, { attachment: s, attachmentUploadState: 0 }) + } + createVideoMessage(e, t, i, r, s, n) { + this.checkV2(), + ye( + Mr, + { name: t, sceneName: i, duration: r, width: s, height: n }, + '', + !0 + ) + var o = this.createGenericFileMessageAttachment(e, t, i, r, s, n, 'mp4') + return this.createMessage(3, { attachment: o, attachmentUploadState: 0 }) + } + createFileMessage(e, t, i) { + this.checkV2(), ye(yr, { name: t, sceneName: i }, '', !0) + var r = this.createGenericFileMessageAttachment( + e, + t, + i, + void 0, + void 0, + void 0, + 'txt' + ) + return this.createMessage(6, { attachment: r, attachmentUploadState: 0 }) + } + createGenericFileMessageAttachment(e, t, i, r, s, n, o) { + if ( + ((i = i || this.defaultNosSceneName), + !this.core.V2NIMStorageService.hasStorageScene) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2NIMStorageService not exist' }, + }) + if (!this.core.V2NIMStorageService.hasStorageScene(i)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'sceneName: ' + i + ' has not been added' }, + }) + var { file: a, path: c } = fs(e), + d = Object.assign( + Object.assign( + Object.assign( + { + name: t, + uploadState: 0, + sceneName: i || this.defaultNosSceneName, + }, + r ? { duration: r } : {} + ), + s ? { width: s } : {} + ), + n ? { height: n } : {} + ) + if (a) { + var l = a.name.lastIndexOf('.'), + p = -1 === l ? a.name : a.name.substring(0, l) + ;(d.name = d.name || p), + (d.size = a.size), + (d.ext = `.${Fe(a.name) || Fe(t || '') || o}`) + } else if (c) { + var h = c.lastIndexOf('/'), + u = c.lastIndexOf('.'), + m = -1 === u ? c.substring(h + 1) : c.substring(h + 1, u) + ;(d.name = d.name || m), (d.ext = `.${Fe(c) || Fe(t || '') || o}`) + } + return ( + (d = JSON.parse(JSON.stringify(d))), + c ? (d.path = c) : a && (d.file = a), + d + ) + } + createLocationMessage(e, t, i) { + return ( + this.checkV2(), + ye( + { + latitude: { type: 'number', allowEmpty: !1 }, + longitude: { type: 'number', allowEmpty: !1 }, + address: { type: 'string', allowEmpty: !1 }, + }, + { latitude: e, longitude: t, address: i }, + '', + !0 + ), + this.createMessage(4, { + attachment: { latitude: e, longitude: t, address: i }, + }) + ) + } + createCustomMessage(e, t) { + return ( + this.checkV2(), + ye({ text: { type: 'string' } }, { text: e }, '', !0), + ye({ rawAttachment: { type: 'string' } }, { rawAttachment: t }, '', !0), + this.createMessage(100, { text: e, attachment: { raw: t } }) + ) + } + createCustomMessageWithAttachment(e, t) { + return ( + this.checkV2(), + ye({ raw: { type: 'string' } }, e, 'attachment', !0), + ye( + { subType: { type: 'number', min: 0, required: !1 } }, + { subType: t }, + '', + !0 + ), + this.createMessage( + 100, + t ? { attachment: e, subType: t } : { attachment: e } + ) + ) + } + createCallMessage(e, t, i, r, s) { + return ( + this.checkV2(), + ye({ type: { type: 'number', allowEmpty: !1 } }, { type: e }, '', !0), + ye( + { channelId: { type: 'string', allowEmpty: !1 } }, + { channelId: t }, + '', + !0 + ), + ye({ status: { type: 'number', allowEmpty: !1 } }, { status: i }, '', !0), + ye( + { durations: { type: 'array', allowEmpty: !1 } }, + { durations: r }, + '', + !0 + ), + this.createMessage(12, { + text: s || '', + attachment: { type: e, channelId: t, durations: r, status: i }, + }) + ) + } + createForwardMessage(e) { + if ((this.checkV2(), !e || [11, 5, 7, 10].includes(e.messageType))) + return null + var t = { messageClientId: Le(), messageType: e.messageType } + return ( + e.text && (t.text = e.text), + e.attachment && (t.attachment = e.attachment), + e.attachment && + 'uploadState' in e.attachment && + (t.attachmentUploadState = e.attachment.uploadState), + this.createMessage(e.messageType, t) + ) + } + createTipsMessage(e) { + return ( + this.checkV2(), + ye({ text: { type: 'string', allowEmpty: !1 } }, { text: e }, '', !0), + this.createMessage(10, { text: e }) + ) + } +} +class Us { + constructor() { + this.name = 'V2NIMMessageAttachmentCreator' + } + createLocationMessageAttachment(e, t, i) { + return { + latitude: 'number' == typeof e ? e : 0, + longitude: 'number' == typeof t ? t : 0, + address: 'string' == typeof i ? i : '', + } + } + createCustomMessageAttachment(e) { + return { raw: 'string' == typeof e ? e : '' } + } +} +class xs { + constructor(e) { + ;(this.config = { enable: !1 }), + (this.name = 'V2NIMClientAntispamUtil'), + (this.core = e) + } + setOptions(e) { + this.config = Object.assign(this.config, e) + } + reset(e) { + 'destroy' === e && (this.vocabInfo = void 0) + } + downloadLocalAntiSpamVocabs() { + return Te(this, void 0, void 0, function* () { + if (this.config.enable && !this.vocabInfo) + try { + var e = yield this.core.sendCmd('v2DownloadLocalAntiSpamVocabs', { + tag: { version: 0, md5: '' }, + }) + this.vocabInfo = Object.assign(Object.assign({}, e.content.data), { + thesaurus: JSON.parse(e.content.data.thesaurus).thesaurus, + }) + } catch (e) { + this.core.logger.warn( + 'V2NIMLocalAntispamUtil::downloadLocalAntiSpamVocabs error', + e + ) + } + }) + } + checkTextAntispam(e, t = '**') { + if (!this.config.enable) return { operateType: 0, replacedText: e } + if ( + (ye( + { + text: { type: 'string', required: !0, allowEmpty: !1 }, + replace: { type: 'string' }, + }, + { text: e, replace: t }, + '', + !0 + ), + !this.vocabInfo) + ) + return { operateType: 0, replacedText: e } + for (var i = e, r = 0; r < this.vocabInfo.thesaurus.length; r++) { + var s = this.filterContent(i, this.vocabInfo.thesaurus[r], t) + if (((i = s.replacedText), 2 === s.operateType || 3 === s.operateType)) + return s + } + return { operateType: i === e ? 0 : 1, replacedText: i } + } + filterContent(e, t, i) { + for (var r = 0; r < t.keys.length; r++) { + var s = t.keys[r], + n = s.match || t.match, + o = s.operate || t.operate, + a = void 0 + try { + a = this.matchContent(e, s.key, n, o, i) + } catch (e) {} + if ( + a && + ((e = a.replacedText), 2 === a.operateType || 3 === a.operateType) + ) + return a + } + return { operateType: 1, replacedText: e } + } + matchContent(e, t, i, r, s) { + var n = !1, + o = null + if (1 === i) { + if (e.indexOf(t) >= 0) { + n = !0 + var a = t.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + o = new RegExp(a, 'g') + } + } else 2 === i && (o = new RegExp(t, 'g')).test(e) && (n = !0) + if (n && o) + switch (r) { + case 1: + return { operateType: 1, replacedText: e.replace(o, s) } + case 2: + return { operateType: 2, replacedText: e } + case 3: + return { operateType: 3, replacedText: e } + } + return { operateType: 0, replacedText: e } + } +} +class Fs extends ni { + constructor(e) { + super('YSFService', e), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + this.core._registerDep(ws, 'V2NIMMessageCreator'), + this.core._registerDep(Us, 'V2NIMMessageAttachmentCreator'), + this.core._registerDep(xs, 'V2NIMClientAntispamUtil'), + this.core._registerDep(Ds, 'V2NIMStorageService'), + (this.sendUtil = new Bs(this.core, this)), + (this.fileUtil = new zr(this.core)), + (this.model = new Fi()), + (this.notificationUtil = new vs(this.core)), + vt({ cmdMap: us, cmdConfig: ms }) + } + emit(e, ...t) { + var i, + r = `${this.name}::emit ${e.toString()}` + if ('onSendMessage' === e) { + var s = t[0] + this.logger.log( + `${r}`, + `${s.messageClientId}/${s.messageServerId};createTime:${s.createTime};`, + `sendingState:${s.sendingState};attachmentUploadState:${ + s.attachmentUploadState || 0 + };messageStatus:${ + null === (i = s.messageStatus) || void 0 === i ? void 0 : i.errorCode + }` + ) + } else if ('onReceiveMessages' === e) { + var n = t[0] + this.logger.log( + `${r}`, + n.map( + (e) => + `${e.messageClientId}/${e.messageServerId};createTime:${e.createTime}` + ) + ) + } else if ('onReceiveCustomNotifications' === e) { + var o = t[0] + this.logger.log( + `${r}`, + o.map( + (e) => + `sender:${e.senderId};receiver:${e.receiverId};ctype:${e.conversationType};time:${e.timestamp}` + ) + ) + } else this.logger.log(`${r}`, ...t) + return super.emit(e, ...t) + } + sendMessage(e, t, i = {}, r) { + return Te(this, void 0, void 0, function* () { + ye({ message: { type: 'object' } }, { message: e }, '', !0), + (e.messageClientId = e.messageClientId || Le()), + ye(zi, { conversationId: t, message: e, params: i }, '', !0), + Me(this.core.account, t) + var s = this.core.timeOrigin.getTimeNode(), + { + messageBeforeSend: n, + clientAntispamResult: o, + hiddenParams: a, + } = this.sendUtil.prepareMessage(e, t, i), + c = yield this.sendUtil.doSendMessage({ + apiCallingTimeNode: s, + messageBeforeSend: n, + clientAntispamResult: o, + hiddenParams: a, + progress: r, + }) + return ( + c.message.senderId === c.message.receiverId && + this.markMsgsAck([c.message]), + c + ) + }) + } + sendCustomNotification(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + Me(this.core.account, e), + ye(gs, { content: t, params: i }, '', !0) + var r = this.notificationUtil.generateNotificationTag(e, t, i) + ;(r.type = 100), + yield this.core.sendCmd('ysfSendCustomNotification', { tag: r }) + }) + } + sendMessageFn(e) {} + cancelMessageAttachmentUpload(e) { + return this.fileUtil.cancelMessageAttachmentUpload(e) + } + markMsgsAck(e) { + if (e && e.length > 0) { + var t = e.map((e) => e.messageServerId).filter((e) => e && '0' !== e) + 0 !== t.length && + this.core.sendCmd('ysfBatchMarkRead', { sid: 101, cid: 2, ids: t }) + } + } + markNotificationAck(e) { + if (e && e.length > 0) { + var t = e.map((e) => e.idServer).filter((e) => e && '0' !== e) + 0 !== t.length && + this.core.sendCmd('ysfBatchMarkRead', { sid: 101, cid: 3, ids: t }) + } + } + ysfOnMsgHandler(e) { + var t = $e(e, e.content.data, 'messageServerId'), + i = $r(this.core, t) + delete i.__clientExt, + this.emit('onReceiveMessages', [i]), + this.model.upsertMessages([i]), + this.markMsgsAck([i]) + } + ysfSyncOfflineMsgsHandler(e) { + var t = e.content.datas + ;(t = t.map((e) => $r(this.core, e))), + this.markMsgsAck(t), + this.emit('onReceiveMessages', t), + this.model.upsertMessages(t) + } + ysfOnSysNotificationHandler(e) { + var t = $e(e, e.content.data, 'idServer') + this.markNotificationAck([t]) + var i = this.processSystemNotification(t) + i && this.emit('onReceiveCustomNotifications', [i]) + } + processSystemNotification(e) { + var t = Object.assign(Object.assign({}, e), { conversationType: 1 }) + return delete t.type, t + } + ysfSyncSysNotificationHandler(e) { + this.markNotificationAck(e.content.datas) + var t = e.content.datas + .sort((e, t) => e.timestamp - t.timestamp) + .map((e) => this.processSystemNotification(e)) + .filter((e) => e) + t && this.emit('onReceiveCustomNotifications', t) + } +} +class Bs { + constructor(e, t) { + ;(this.uploadingMessageInfo = {}), (this.core = e), (this.service = t) + } + prepareMessage(e, t, i, r) { + var s = this.checkIfResend(e), + n = this.generateSendMessage({ + message: e, + params: i, + resend: s, + conversationId: t, + replyMessage: r, + }), + o = Object.assign( + {}, + i.targetConfig ? { targetConfig: i.targetConfig } : {} + ), + { clientAntispamResult: a, text: c } = this.checkIfAntispam(i, n) + return ( + (n.text = c), + (n.clientAntispamHit = !!a && 3 === a.operateType), + { messageBeforeSend: n, clientAntispamResult: a, hiddenParams: o } + ) + } + checkIfAntispam(e, t) { + var i, + r = t.text + if ( + e.clientAntispamEnabled && + (0 === t.messageType || 10 === t.messageType) + ) + if ( + 1 === + (i = this.core.V2NIMClientAntispamUtil.checkTextAntispam + ? this.core.V2NIMClientAntispamUtil.checkTextAntispam( + t.text || '', + e.clientAntispamReplace + ) + : { operateType: 0, replacedText: '' }).operateType + ) + r = i.replacedText + else if (2 === i.operateType) + throw ( + (this.service.emit( + 'onSendMessage', + Object.assign(Object.assign({}, t), { + sendingState: 2, + messageStatus: { errorCode: de.V2NIM_ERROR_CODE_CLIENT_ANTISPAM }, + }) + ), + new he({ + code: de.V2NIM_ERROR_CODE_CLIENT_ANTISPAM, + detail: { + reason: 'sendMessage: text intercepted by client antispam', + }, + })) + ) + return { clientAntispamResult: i, text: r } + } + doMsgReceiveReport(e, t) { + if (e.senderId !== this.core.account) { + var i = Ve(e, '__clientExt.statistics.apiCallingTime') || 0, + r = Ve(e, '__clientExt.statistics.sendTime') || 0, + s = Ve(e, '__clientExt.statistics.attachUploadDuration') || 0, + n = this.core.timeOrigin.getNTPTime(), + o = e.createTime, + a = this.core.timeOrigin.checkNodeReliable(t.__receiveTimeNode) + ? this.core.timeOrigin.getNTPTime(t.__receiveTimeNode) + : n + this.core.reporter.report('msgReceive', { + msgId: e.messageServerId, + clientId: e.messageClientId, + serverTime: e.createTime, + receiveTime: a, + fromAccid: 1 === e.conversationType ? e.senderId : '', + toAccid: e.receiverId, + type: os(e.conversationType), + tid: 1 === e.conversationType ? '' : e.receiverId, + apiCallingTime: i, + sendTime: r, + attachUploadDuration: s, + callbackTime: n, + preHandleTime: n, + result: 200, + failReason: '', + rt: n - o, + }) + } + } + checkIfResend(e) { + var t = this.service.model.getMessageById(e.messageClientId), + i = !1 + if (e.messageServerId || 1 === e.sendingState) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'sendMessage: message has already been sent' }, + }) + if (1 === (null == t ? void 0 : t.sendingState)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'sendMessage: message has already been sent' }, + }) + return t && (i = !0), i + } + doSendMessage(e) { + var t + return Te(this, void 0, void 0, function* () { + var i, + r, + { + apiCallingTimeNode: s, + messageBeforeSend: n, + clientAntispamResult: o, + hiddenParams: a, + progress: c, + } = e, + d = {}, + l = this.service instanceof Fs + if (l) i = 'ysfSendMessage' + else if (1 === n.conversationType) i = 'v2SendP2pMessage' + else if (2 === n.conversationType) i = 'v2SendTeamMessage' + else { + if (3 !== n.conversationType) + throw new me({ + detail: { + reason: `conversationType: ${n.conversationType} is not supported`, + }, + }) + i = 'v2SendSuperTeamMessage' + } + if ( + (this.service.sendMessageFn(n), + !l && + this.core.eventBus.emit('forwardSend/V2NIMMessageService/sendMsg', n), + !n.attachment || + !('uploadState' in n.attachment) || + n.attachment.url || + (0 !== n.attachment.uploadState && 2 !== n.attachment.uploadState)) + ) + this.service.emit('onSendMessage', n) + else { + var p = Date.now() + try { + ;(n.attachmentUploadState = 3), + (n.attachment.uploadState = 3), + this.service.emit('onSendMessage', n), + yield this.service.fileUtil.doSendFile(n, c), + (n.attachmentUploadState = 1), + (n.attachment.uploadState = 1), + this.service.emit('onSendMessage', n) + } catch (e) { + throw ( + ((n.attachmentUploadState = 2), + (n.attachment.uploadState = 2), + (n.sendingState = 2), + (n.messageStatus = { + errorCode: e.code || de.V2NIM_ERROR_CODE_UNKNOWN, + }), + this.service.emit('onSendMessage', n), + (d.attachUploadDuration = Date.now() - p), + this.doSendMessageFailed(s, d, n, e), + e) + ) + } + d.attachUploadDuration = Date.now() - p + } + this.core.timeOrigin.checkNodeReliable(s) && + ((d.apiCallingTime = this.core.timeOrigin.getNTPTime(s)), + (d.sendTime = this.core.timeOrigin.getNTPTime()), + (n.__clientExt = { statistics: d })) + try { + r = yield this.core.sendCmd(i, { tag: Object.assign({}, n, a) }) + } catch (e) { + throw ( + (this.doSendMessageFailed(s, d, n, e), + (n.sendingState = 2), + (n.messageStatus = { + errorCode: e.code || de.V2NIM_ERROR_CODE_UNKNOWN, + }), + this.service.emit('onSendMessage', n), + e) + ) + } + var h = Ve(r, 'content.data.errorCode'), + u = Object.assign( + Object.assign( + Object.assign(Object.assign({}, n), r.content.data), + n.aiConfig + ? { + aiConfig: Object.assign( + Object.assign({}, n.aiConfig), + (null === (t = r.content.data) || void 0 === t + ? void 0 + : t.aiConfig) || {} + ), + } + : {} + ), + { + sendingState: 1, + messageStatus: { errorCode: h && 200 !== h ? h : 200 }, + } + ) + this.service.sendMessageFn(u), + !l && + this.core.eventBus.emit('forwardSend/V2NIMMessageService/sendMsg', u), + this.doMsgSendReport(s, d, n) + var m = u.antispamResult + return ( + m && (u.messageStatus.errorCode = de.V2NIM_ERROR_CODE_SERVER_ANTISPAM), + delete u.antispamResult, + this.service.emit('onSendMessage', u), + Object.assign( + Object.assign({ message: u }, m ? { antispamResult: m } : {}), + o ? { clientAntispamResult: o } : {} + ) + ) + }) + } + doSendMessageFailed(e, t, i, r) { + var s = Object.assign(Object.assign({}, i), { sendingState: 2 }) + this.core.eventBus.emit('forwardSend/V2NIMMessageService/sendMsg', s), + this.service.sendMessageFn(s), + this.doMsgSendReport(e, t, i, r) + } + doMsgSendReport(e, t, i, r) { + ;(t.apiCallingTime = this.core.timeOrigin.getNTPTime(e)), + (t.sendTime = this.core.timeOrigin.getNTPTime()) + var s = this.core.timeOrigin.getNTPTime(), + n = Ve(r, 'detail.reason') + this.core.reporter.report('msgSend', { + msgId: i.messageServerId, + clientId: i.messageClientId, + msgTime: i.createTime, + fromAccid: 1 === i.conversationType ? i.senderId : '', + toAccid: i.receiverId, + type: os(i.conversationType), + tid: 1 === i.conversationType ? '' : i.receiverId, + result: r ? r.code : 200, + failReason: n || (null == r ? void 0 : r.message) || '', + rt: s - t.apiCallingTime, + apiCallingTime: t.apiCallingTime, + sendTime: t.sendTime, + attachUploadDuration: t.attachUploadDuration, + apiCallbackTime: s, + }) + } + generateSendMessage(e) { + var t, + i, + { + conversationId: r, + replyMessage: s, + resend: n, + message: o, + params: a, + } = e, + c = {} + if (s) { + var d = s.threadRoot + c = { + threadReply: { + senderId: s.senderId, + receiverId: s.receiverId, + messageServerId: s.messageServerId, + createTime: s.createTime, + messageClientId: s.messageClientId, + conversationType: s.conversationType, + conversationId: s.conversationId, + }, + threadRoot: { + senderId: d ? d.senderId : s.senderId, + receiverId: d ? d.receiverId : s.receiverId, + messageServerId: d ? d.messageServerId : s.messageServerId, + createTime: d ? d.createTime : s.createTime, + messageClientId: d ? d.messageClientId : s.messageClientId, + conversationType: d ? d.conversationType : s.conversationType, + conversationId: d ? d.conversationId : s.conversationId, + }, + } + } + var l = this.core.V2NIMConversationIdUtil.parseConversationType(r), + p = this.core.V2NIMConversationIdUtil.parseConversationTargetId(r) + a.pushConfig && + !0 !== a.pushConfig.forcePush && + (delete a.pushConfig.forcePushContent, + delete a.pushConfig.forcePushAccountIds) + var h = {}, + u = {} + if (a.aiConfig) { + var m = Ve(a, 'aiConfig.content.msg'), + g = Ve(a, 'aiConfig.content.type') || 0 + m + ? (u = { msg: m, type: g }) + : void 0 === m && + 0 === o.messageType && + (u = { msg: o.text || '', type: g }), + ((h = Object.assign( + { aiStreamStatus: 0, aiStream: !1 }, + a.aiConfig + )).aiStatus = 1), + void 0 !== u.msg && (h.content = u) + } + var v = + null === + (i = + null === (t = this.core.V2NIMUserService) || void 0 === t + ? void 0 + : t.model) || void 0 === i + ? void 0 + : i.getUser(this.core.account), + f = (null == v ? void 0 : v.updateTime) || 0 + return Object.assign( + Object.assign( + Object.assign( + Object.assign( + Object.assign( + Object.assign(Object.assign(Object.assign({}, o), c), { + messageConfig: Object.assign( + Object.assign({}, o.messageConfig), + a.messageConfig + ), + routeConfig: Object.assign( + Object.assign({}, o.routeConfig), + a.routeConfig + ), + pushConfig: Object.assign( + Object.assign({}, o.pushConfig), + a.pushConfig + ), + antispamConfig: Object.assign( + Object.assign({}, o.antispamConfig), + a.antispamConfig + ), + robotConfig: Object.assign( + Object.assign({}, o.robotConfig), + a.robotConfig + ), + }), + h && h.accountId ? { aiConfig: h } : {} + ), + o.attachment ? { attachment: Object.assign({}, o.attachment) } : {} + ), + { + resend: n, + senderId: this.core.account, + conversationType: l, + receiverId: p, + conversationId: + this.core.V2NIMConversationIdUtil.messageConversationId({ + conversationType: l, + senderId: this.core.account, + receiverId: p, + }), + } + ), + f ? { userUpdateTime: f } : {} + ), + { sendingState: 3 } + ) + } +} +class $s { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + checkIfModify(e, t) { + if ('0' === e.messageServerId) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'modifyMessage: messageServerId cannot be empty' }, + }) + if (![0, 1, 2, 3, 4, 6, 10, 12, 100].includes(e.messageType)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: `modifyMessage: messageType ${e.messageType} not correct`, + }, + }) + if ([0, 1, 2, 3, 6, 10, 12].includes(e.messageType) && t.attachment) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: `modifyMessage: messageType ${e.messageType} can not modify attachment`, + }, + }) + var i = ['subType', 'text', 'serverExtension', 'attachment'] + if (!i.some((e) => void 0 !== Ve(t, e))) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'modifyMessage: missing modified params' }, + }) + if ( + i.every((i) => + 'attachment' === i + ? e.attachment && t.attachment + ? Jr(e.messageType, e.attachment) === + Jr(e.messageType, t.attachment) + : !t.attachment + : Ve(e, i) === Ve(t, i) + ) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'modifyMessage: no change' }, + }) + } + prepareMessage(e, t) { + var i = this.generateSendMessage(e, t), + { clientAntispamResult: r, text: s } = this.checkIfAntispam(t, i) + return ( + (i.text = s), + (i.clientAntispamHit = !!r && 3 === r.operateType), + { messageBeforeSend: i, clientAntispamResult: r } + ) + } + modifyMessage(e, t) { + return Te(this, void 0, void 0, function* () { + var i + if (1 === e.conversationType) i = 'v2MessageP2pModify' + else if (2 === e.conversationType) i = 'v2MessageTeamModify' + else { + if (3 !== e.conversationType) + throw new me({ + detail: { + reason: `conversationType: ${e.conversationType} is not supported`, + }, + }) + i = 'v2MessageSuperTeamModify' + } + var r = yield this.core.sendCmd(i, { tag: e }) + if (t && 3 === t.operateType) + return { + errorCode: de.V2NIM_ERROR_CODE_CLIENT_ANTISPAM, + clientAntispamResult: t, + } + var s = Object.assign(Object.assign({}, e), r.content.data), + n = s.antispamResult + if (n) + return Object.assign( + { errorCode: de.V2NIM_ERROR_CODE_SERVER_ANTISPAM, antispamResult: n }, + t ? { clientAntispamResult: t } : {} + ) + delete s.antispamResult + var o = $r(this.core, s) + return ( + this.service.model.upsertMessages([o]), + this.core.eventBus.emit('V2NIMMessageService/modifyMsg', o), + this.core.eventBus.emit('forwardSend/V2NIMMessageService/modifyMsg', o), + Object.assign( + Object.assign( + { errorCode: 200, message: o }, + n ? { antispamResult: n } : {} + ), + t ? { clientAntispamResult: t } : {} + ) + ) + }) + } + checkIfAntispam(e, t) { + var i, + r = t.text + if ( + e.clientAntispamEnabled && + (0 === t.messageType || 10 === t.messageType) + ) + if ( + 1 === + (i = this.core.V2NIMClientAntispamUtil.checkTextAntispam + ? this.core.V2NIMClientAntispamUtil.checkTextAntispam( + t.text || '', + e.clientAntispamReplace + ) + : { operateType: 0, replacedText: '' }).operateType + ) + r = i.replacedText + else if (2 === i.operateType) + throw new he({ + code: de.V2NIM_ERROR_CODE_CLIENT_ANTISPAM, + detail: { + reason: 'sendMessage: text intercepted by client antispam', + }, + }) + return { clientAntispamResult: i, text: r } + } + generateSendMessage(e, t) { + var i + return Object.assign( + Object.assign( + { + messageConfig: { + lastMessageUpdateEnabled: + null === (i = e.messageConfig) || void 0 === i + ? void 0 + : i.lastMessageUpdateEnabled, + }, + routeConfig: Object.assign({ routeEnabled: !0 }, t.routeConfig), + pushConfig: Object.assign( + { pushEnabled: !0, pushNickEnabled: !0, forcePush: !1 }, + t.pushConfig + ), + antispamConfig: Object.assign( + { antispamEnabled: !0 }, + t.antispamConfig + ), + }, + t.attachment ? { attachment: t.attachment } : {} + ), + { + conversationType: e.conversationType, + senderId: e.senderId, + receiverId: e.receiverId, + createTime: e.createTime, + messageClientId: e.messageClientId, + messageServerId: e.messageServerId, + messageType: e.messageType, + subType: t.subType, + text: t.text, + serverExtension: t.serverExtension, + } + ) + } +} +class Gs { + constructor(e, t) { + ;(this.emitRevokeMessage = (e) => { + var t = e.map((e) => { + var t = Hr(this.core, e) + return ( + 3 === t.messageRefer.conversationType + ? this.core.eventBus.emit('V2NIMSync/updateTimetag', { + deleteSuperTeamMsg: e.createTime, + }) + : this.core.eventBus.emit('V2NIMSync/updateTimetag', { + recallMsg: e.createTime, + }), + t + ) + }) + t.forEach((e) => { + this.service.model.deleteMessage(e.messageRefer.messageClientId) + }), + this.service.emit('onMessageRevokeNotifications', t), + this.core.eventBus.emit('V2NIMMessageService/revokeMessages', t) + }), + (this.core = e), + (this.service = t), + (this.logger = e.logger) + } + revokeMessage(e, t) { + return Te(this, void 0, void 0, function* () { + if ( + (ye(Xi, { message: e, params: t }, '', !0), + Me(this.core.account, e.conversationId), + 1 === e.conversationType && e.senderId !== this.core.account) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: 'revokeMessage: p2p message senderId is not current user', + }, + }) + if (!e.messageServerId || '0' === e.messageServerId) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'revokeMessage: cannot revoke message with invalid messageServerId: ' + + e.messageServerId, + }, + }) + var i = + 3 === e.conversationType + ? 'v2RevokeSuperTeamMessage' + : 'v2RevokeMessage', + r = Object.assign(Object.assign(Object.assign({}, e), t), { + attach: t && t.serverExtension, + sysMsgType: { 1: 7, 2: 8, 3: 12 }[e.conversationType], + opeAccount: this.core.account, + }) + yield this.core.sendCmd(i, { tag: r }) + var s = [ + JSON.parse( + JSON.stringify({ + postscript: t && t.postscript, + revokeType: { 1: 1, 2: 2, 3: 3 }[e.conversationType], + revokeAccountId: this.core.account, + serverExtension: t && t.serverExtension, + messageRefer: qr(this.core, e), + }) + ), + ] + this.revokeMessagesFn(s), + this.core.eventBus.emit( + 'forwardSend/V2NIMMessageService/revokeMessage', + r + ) + }) + } + deleteMessage(e, t) { + return Te(this, void 0, void 0, function* () { + if ((ye(tr, e, '', !0), 3 === e.sendingState)) + this.service.fileUtil.cancelMessageAttachmentUpload(e) + else if (e.sendingState && 1 !== e.sendingState) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'deleteMessage: cannot delete unsent message' }, + }) + var i = { messageRefer: qr(this.core, e), serverExtension: t }, + r = Date.now() + e.messageServerId && + '0' !== e.messageServerId && + (r = (yield this.core.sendCmd('v2DeleteMessage', { tag: i })).content + .timetag) + var s = [ + { serverExtension: t, messageRefer: qr(this.core, e), deleteTime: r }, + ] + this.core.eventBus.emit( + 'forwardSend/V2NIMMessageService/deleteSelfMsgs', + [Object.assign(Object.assign({}, i), { deleteTime: r })] + ), + this.deleteMessagesFn(s) + }) + } + deleteMessages(e, t) { + return Te(this, void 0, void 0, function* () { + ye(ir, { messages: e }, '', !0) + var i = [], + r = [] + if (0 === e.length) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'deleteMessages: message array length is 0' }, + }) + for (var s = e[0].conversationId, n = 0; n < e.length; n++) { + if (3 === e[n].sendingState) + this.service.fileUtil.cancelMessageAttachmentUpload(e[n]) + else if (e[n].sendingState && 1 !== e[n].sendingState) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: `deleteMessage: sendingState should be succeeded, please check message at index: ${n}`, + }, + }) + if (n >= 1 && e[n].conversationId !== s) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'deleteMessages: only allow to delete messages from same conversation', + }, + }) + e[n].messageServerId && '0' !== e[n].messageServerId + ? i.push(e[n]) + : r.push(e[n]) + } + var o = Date.now(), + a = [...r] + try { + if (i.length > 0) { + var c = yield this.core.sendCmd('v2DeleteMessages', { + tag: i.map((e) => ({ messageRefer: e, serverExtension: t })), + }) + ;(o = c.content.timetag), (a = [...a, ...i]) + } + } catch (e) { + if (0 === r.length) throw e + this.logger.warn( + 'V2NIMMessageService:deleteMessages: delete messages with serverId failed' + ) + } + var d = a.map((e) => ({ + serverExtension: t, + messageRefer: qr(this.core, e), + deleteTime: o, + })) + this.core.eventBus.emit( + 'forwardSend/V2NIMMessageService/deleteSelfMsgs', + a.map((e) => ({ messageRefer: e, serverExtension: t, deleteTime: o })) + ), + this.deleteMessagesFn(d) + }) + } + revokeMessagesFn(e) { + e.forEach((e) => { + this.service.model.deleteMessage(e.messageRefer.messageClientId) + }), + this.service.emit('onMessageRevokeNotifications', e), + this.core.eventBus.emit('V2NIMMessageService/revokeMessages', e) + } + deleteMessagesFn(e) { + e.forEach((e) => { + this.service.model.deleteMessage(e.messageRefer.messageClientId), + this.core.eventBus.emit('V2NIMSync/updateTimetag', { + deleteSelfMsgs: e.deleteTime, + }) + }), + this.service.emit('onMessageDeletedNotifications', e), + this.core.eventBus.emit('V2NIMMessageService/deleteMessages', e) + } +} +class js { + constructor(e, t) { + ;(this.core = e), (this.service = t), (this.logger = e.logger) + } + stopAIStreamMessage(e, t) { + var i + return Te(this, void 0, void 0, function* () { + this.checkAI(), + yield this.core.sendCmd('v2AIStopModelStreamCall', { + tag: { + serverId: e.messageServerId, + clientId: e.messageClientId, + type: e.conversationType, + from: e.senderId, + to: e.receiverId, + aiAccount: + null === (i = e.aiConfig) || void 0 === i ? void 0 : i.accountId, + opeType: t.operationType, + updateContent: t.updateContent, + messageTime: e.createTime, + }, + }), + this.logger.log( + `V2AIUtil::streamMessageStop,clientId:${e.messageClientId}` + ), + this.core.V2NIMAIService.model.completeAiStream(e.messageClientId) + }) + } + regenAIMessage(e, t) { + var i, r, s, n, o, a, c, d + return Te(this, void 0, void 0, function* () { + this.checkAI() + var l = this.core.V2NIMAIService.model.getAiStream(e.messageClientId) + if (l) { + if (!(null == l ? void 0 : l.isComplete)) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { + reason: `msg::regenAIMessage streamCache is not complete, msgId:${e.messageClientId}`, + }, + }) + } else if (-1 === (null === (i = e.streamConfig) || void 0 === i ? void 0 : i.status) || 1 === (null === (r = e.streamConfig) || void 0 === r ? void 0 : r.status)) throw new he({ code: de.V2NIM_ERROR_CODE_MISUSE, detail: { reason: `msg::regenAIMessage message streamConfig.status forbidden ${e.streamConfig.status}` } }) + yield this.core.sendCmd('v2AIRegenMessage', { + tag: { + fromAccount: e.senderId, + to: e.receiverId, + aiAccount: + null === (s = e.aiConfig) || void 0 === s ? void 0 : s.accountId, + serverId: e.messageServerId, + clientId: e.messageClientId, + time: e.createTime, + type: e.conversationType, + opeType: t.operationType, + replyMsgFromAccount: + null === (n = e.threadReply) || void 0 === n ? void 0 : n.senderId, + replyMsgToAccount: + null === (o = e.threadReply) || void 0 === o + ? void 0 + : o.receiverId, + replyMsgTime: + null === (a = e.threadReply) || void 0 === a + ? void 0 + : a.createTime, + replyMsgIdServer: + null === (c = e.threadReply) || void 0 === c + ? void 0 + : c.messageServerId, + replyMsgIdClient: + null === (d = e.threadReply) || void 0 === d + ? void 0 + : d.messageClientId, + }, + }), + 1 === t.operationType && + this.core.V2NIMAIService.model.setAiStream(e.messageClientId, { + isComplete: !1, + queryStatus: 0, + chunks: [], + }) + }) + } + checkAI() { + if (!this.hasAI()) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2NIMAIService is not registered' }, + }) + } + hasAI() { + var e + return !!(null === (e = this.core.V2NIMAIService) || void 0 === e + ? void 0 + : e.name) + } +} +class qs { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = t.model), + (this.receiptUtil = t.receiptUtil), + (this.logger = this.core.logger) + } + setAIStreamPlaceholder(e) { + this.service.aiUtil.hasAI() && + e.forEach((e) => { + var t + 1 === + (null === (t = e.streamConfig) || void 0 === t ? void 0 : t.status) && + this.core.V2NIMAIService.model.setAiStream( + e.messageClientId, + { isComplete: !1, queryStatus: 0, chunks: [], msg: e }, + !0 + ) + }) + } + onMsgHandler(e) { + var t = $e(e, e.content.msg, 'messageServerId'), + { _conversationOnlineSyncNotify: i, _conversationOnlineSyncData: r } = t, + s = Ee(t, [ + '_conversationOnlineSyncNotify', + '_conversationOnlineSyncData', + ]), + n = $r(this.core, s), + o = this.service._filterMessage(n) + this.logger.log( + `v2OnMsgHandler::recvMsg ${n.messageClientId}/${n.messageServerId}/${n.createTime};isHitFilter:${o}` + ), + 3 === n.conversationType + ? this.core.eventBus.emit('V2NIMSync/updateTimetag', { + superTeamRoamingMsgs: n.createTime, + offlineMsgs: n.createTime, + }) + : this.core.eventBus.emit('V2NIMSync/updateTimetag', { + roamingMsgs: n.createTime, + offlineMsgs: n.createTime, + }), + this.service.config.compatibleWithV1 || + (this.service.markMsgsAck([n]), + this.service.sendUtil.doMsgReceiveReport(n, e)), + delete n.__clientExt, + this.setAIStreamPlaceholder([n]), + 5 !== n.messageType && + this.core.V2NIMUserService.checkUserUpdate && + this.core.V2NIMUserService.checkUserUpdate(n, n.userUpdateTime), + 5 === n.messageType && + this.core.eventBus.emit('V2NIMTeamService/notification', t), + o || + (this.service.emit('onReceiveMessages', [n]), + this.model.upsertMessages([n]), + i && + this.core.eventBus.emit( + 'V2NIMConversationService/conversationOnlineSyncNotify', + { content: { info: JSON.parse(i), data: JSON.parse(r) } }, + n + ), + this.core.eventBus.emit('V2NIMMessageService/onMsg', n)) + } + syncOfflineMsgsHandler(e) { + var t = e.content.datas + ;(t = t.map((e) => $r(this.core, e))), + 0 !== (t = this.service._filterMessagesByFn(t)).length && + (!this.service.config.compatibleWithV1 && this.service.markMsgsAck(t), + this.service.emit('onReceiveMessages', t), + this.model.upsertMessages(t), + this.core.eventBus.emit('V2NIMMessageService/offlineMsgs', t)) + } + syncRoamingMsgsHandler(e) { + var t = e.content.datas + ;(t = t.map((e) => $r(this.core, e))), + this.setAIStreamPlaceholder(t), + 0 !== (t = this.service._filterMessagesByFn(t)).length && + (this.service.emit('onReceiveMessages', t), + this.model.upsertMessages(t), + this.core.eventBus.emit('V2NIMMessageService/roamingMsgs', t)) + } + onP2PMessageReceiptsHandler(e) { + this.receiptUtil.onP2PMessageReceiptsHandler(e) + } + onTeamMessageReceiptsHandler(e) { + this.receiptUtil.onTeamMessageReceiptsHandler(e) + } + syncP2PMessagReceiptsHandler(e) { + this.receiptUtil.syncP2PMessagReceiptsHandler(e) + } + syncRevokeMessageHandler(e) { + this.service.deleteUtil.emitRevokeMessage(e.content.datas) + } + onRevokeMessageHandler(e) { + var t = e.content.data + this.service.deleteUtil.emitRevokeMessage([t]) + } + onDeleteMessageHandler(e) { + var t = e.content.data, + i = { + serverExtension: t.serverExtension, + deleteTime: t.deleteTime, + messageRefer: jr(this.core, t.messageRefer), + } + this.service.deleteUtil.deleteMessagesFn([i]) + } + onDeleteMessagesHandler(e) { + var t = e.content.data.map((e) => ({ + serverExtension: e.serverExtension, + deleteTime: e.deleteTime, + messageRefer: jr(this.core, e.messageRefer), + })) + this.service.deleteUtil.deleteMessagesFn(t) + } + syncOnDeleteMessagesHandler(e) { + var t = e.content.datas.map((e) => ({ + serverExtension: e.serverExtension, + deleteTime: e.deleteTime, + messageRefer: jr(this.core, e.messageRefer), + })) + this.service.emit('onMessageDeletedNotifications', t) + } + v2MessageOnModifiedHandler(e) { + var t = $r(this.core, e.content.data) + this.model.upsertMessages([t]), + this.service.aiUtil.hasAI() && + this.core.V2NIMAIService.model.completeAiStream(t.messageClientId), + this.core.eventBus.emit('forwardSend/V2NIMMessageService/modifyMsg', t), + this.core.eventBus.emit('V2NIMMessageService/modifyMsg', t), + this.core.eventBus.emit( + 'V2NIMSync/updateTimetag', + 3 === t.conversationType + ? { superTeamModifyMessage: t.modifyTime } + : { p2pTeamModifyMessage: t.modifyTime } + ), + this.service.emit('onReceiveMessagesModified', [t]) + } + v2MessageSyncModifiedHandler(e) { + var t = e.content.datas + .map((e) => $r(this.core, e)) + .filter((e) => { + var t, + i = + (null === (t = this.model.getMessageById(e.messageClientId)) || + void 0 === t + ? void 0 + : t.modifyTime) || 0 + return (e.modifyTime || 0) > i + }) + t.length > 0 && + (this.model.upsertMessages(t), + t.forEach((e) => { + this.service.aiUtil.hasAI() && + this.core.V2NIMAIService.model.completeAiStream(e.messageClientId), + this.core.eventBus.emit( + 'forwardSend/V2NIMMessageService/modifyMsg', + e + ) + }), + this.service.emit('onReceiveMessagesModified', t)) + } + v2MessageSyncSuperTeamModifiedHandler(e) { + this.v2MessageSyncModifiedHandler(e) + } +} +class Hs { + constructor(e, t) { + ;(this.core = e), (this.service = t), (this.logger = this.core.logger) + } + setListener() { + this.core.eventBus.on( + 'forwardReceive/V2NIMMessageService/sendMsg', + this.service.sendMessageFn.bind(this.service) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMMessageService/revokeMessages', + this.service.deleteUtil.emitRevokeMessage.bind(this.service.deleteUtil) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMMessageService/deleteMessages', + this.service.deleteUtil.deleteMessagesFn.bind(this.service.deleteUtil) + ), + this.core.eventBus.on( + 'V2NIMConversationService/deleteConversation', + (e) => { + e.forEach((e) => this.service.model.deleteMessages(e)) + } + ), + this.core.eventBus.on('V2NIMAIService/receiveMessagesModified', (e) => + this.service.emit('onReceiveMessagesModified', e) + ) + } + beforeEmit(e, ...t) { + var i, + r, + s, + n = `${this.service.name}::emit ${e.toString()}` + if ('onSendMessage' === e) { + var o = t[0] + this.logger.log( + `${n}`, + `${o.messageClientId}/${o.messageServerId}/${o.createTime};`, + `sendingState:${o.sendingState};attachmentUploadState:${ + o.attachmentUploadState || 0 + };messageStatus:${ + null === (i = o.messageStatus) || void 0 === i ? void 0 : i.errorCode + };config.lastMsg:${ + null === (r = o.messageConfig) || void 0 === r + ? void 0 + : r.lastMessageUpdateEnabled + };config.unread:${ + null === (s = o.messageConfig) || void 0 === s + ? void 0 + : s.unreadEnabled + }` + ) + } else if ('onReceiveMessages' === e || 'onReceiveMessagesModified' === e) { + var a = t[0] + this.logger.log( + `${n}`, + a.map((e) => { + var t, i + return `${e.messageClientId}/${e.messageServerId}/${ + e.createTime + };config.lastMsg:${ + null === (t = e.messageConfig) || void 0 === t + ? void 0 + : t.lastMessageUpdateEnabled + };config.unread:${ + null === (i = e.messageConfig) || void 0 === i + ? void 0 + : i.unreadEnabled + }` + }) + ) + } else if ('onMessageRevokeNotifications' === e) { + var c = t[0] + this.logger.log( + `${n}`, + c.map( + (e) => + `msg:${e.messageRefer.messageClientId}/${e.messageRefer.messageServerId};revokeAccountId:${e.revokeAccountId}` + ) + ) + } else if ('onMessageDeletedNotifications' === e) { + var d = t[0] + this.logger.log( + `${n}`, + d.map( + (e) => + `msg:${e.messageRefer.messageClientId}/${e.messageRefer.messageServerId};deleteTime:${e.deleteTime}` + ) + ) + } else this.logger.log(`${n}`, ...t) + } +} +class Ys extends ni { + constructor(e, t = {}) { + super('V2NIMMessageService', e), + (this.customAttachmentParsers = []), + (this.config = { compatibleWithV1: !0 }), + (this.filterFn = void 0), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + this.core._registerDep(ws, 'V2NIMMessageCreator'), + this.core._registerDep(Us, 'V2NIMMessageAttachmentCreator'), + this.core._registerDep(xs, 'V2NIMClientAntispamUtil'), + (this.receiptUtil = new Rr(this.core, this)), + (this.fileUtil = new zr(this.core)), + (this.sendUtil = new Bs(this.core, this)), + (this.modifyUtil = new $s(this.core, this)), + (this.deleteUtil = new Gs(this.core, this)), + (this.aiUtil = new js(this.core, this)), + (this.model = new Fi()), + (this.event = new Hs(this.core, this)), + (this.handler = new qs(this.core, this)), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: Qr, cmdConfig: ns }), + this.setOptions(t), + this.setListener()) + } + setOptions(e) { + var t + ;(null === (t = this.core.msg) || void 0 === t ? void 0 : t.name) + ? (this.config.compatibleWithV1 = !0) + : (this.config.compatibleWithV1 = !1), + (this.config = Object.assign(this.config, e)) + } + setListener() { + this.event.setListener() + } + reset() { + this.model.reset(), this.receiptUtil.reset() + } + emit(e, ...t) { + return this.event.beforeEmit(e, ...t), super.emit(e, ...t) + } + checkExtendUtil() { + var e + if ( + !(null === (e = this.core.V2NIMMessageExtendUtil) || void 0 === e + ? void 0 + : e.name) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2NIMMessageLogUtil is not registered' }, + }) + } + checkLogUtil() { + var e + if ( + !(null === (e = this.core.V2NIMMessageLogUtil) || void 0 === e + ? void 0 + : e.name) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2NIMMessageExtendUtil is not registered' }, + }) + } + getMessageList(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), this.checkLogUtil() + var t = yield this.core.V2NIMMessageLogUtil.getMessageList(e) + return ( + (t = this._filterMessageByClearTime(e.conversationId, t)), + this._filterMessagesByFn(t) + ) + }) + } + getMessageListEx(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), this.checkLogUtil() + var t = yield this.core.V2NIMMessageLogUtil.getMessageList(e) + return ( + (t = this._filterMessageByClearTime(e.conversationId, t)), + { + messages: this._filterMessagesByFn(t), + anchorMessage: t.length > 0 ? t[t.length - 1] : null, + } + ) + }) + } + getMessageListByRefers(e) { + return ( + this.checkV2(), + this.checkLogUtil(), + this.core.V2NIMMessageLogUtil.getMessageListByRefers(e) + ) + } + clearHistoryMessage(e) { + return ( + this.checkV2(), + this.checkLogUtil(), + this.core.V2NIMMessageLogUtil.clearHistoryMessage(e) + ) + } + clearRoamingMessage(e) { + return ( + this.checkV2(), + this.checkLogUtil(), + this.core.V2NIMMessageLogUtil.clearRoamingMessage(e) + ) + } + pinMessage(e, t) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.pinMessage(e, t) + ) + } + unpinMessage(e, t) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.unpinMessage(e, t) + ) + } + updatePinMessage(e, t) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.updatePinMessage(e, t) + ) + } + voiceToText(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + 'string' == typeof e.duration && (e.duration = Number(e.duration)), + this.core.V2NIMMessageExtendUtil.voiceToText(e) + ) + } + getPinnedMessageList(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.getPinnedMessageList(e) + ) + } + addQuickComment(e, t, i, r) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.addQuickComment(e, t, i, r) + ) + } + removeQuickComment(e, t, i) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.removeQuickComment(e, t, i) + ) + } + getQuickCommentList(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.getQuickCommentList(e) + ) + } + addCollection(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.addCollection(e) + ) + } + removeCollections(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.removeCollections(e) + ) + } + updateCollectionExtension(e, t) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.updateCollectionExtension(e, t) + ) + } + getCollectionListByOption(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.getCollectionListByOption(e) + ) + } + getCollectionListExByOption(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.getCollectionListExByOption(e) + ) + } + searchCloudMessages(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.searchCloudMessages(e) + ) + } + searchCloudMessagesEx(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.searchCloudMessagesEx(e) + ) + } + getThreadMessageList(e) { + return ( + this.checkV2(), + this.checkExtendUtil(), + this.core.V2NIMMessageExtendUtil.getThreadMessageList(e) + ) + } + registerCustomAttachmentParser(e) { + 'function' == typeof e && + -1 === this.customAttachmentParsers.indexOf(e) && + this.customAttachmentParsers.unshift(e) + } + unregisterCustomAttachmentParser(e) { + var t = this.customAttachmentParsers.indexOf(e) + t > -1 && this.customAttachmentParsers.splice(t, 1) + } + sendP2PMessageReceipt(e) { + return this.checkV2(), this.receiptUtil.sendP2PMessageReceipt(e) + } + isPeerRead(e) { + return this.checkV2(), this.receiptUtil.isPeerRead(e) + } + getP2PMessageReceipt(e) { + return this.checkV2(), this.receiptUtil.getP2PMessageReceipt(e) + } + getTeamMessageReceipts(e) { + return this.checkV2(), this.receiptUtil.getTeamMessageReceipts(e) + } + getTeamMessageReceiptDetail(e) { + return this.checkV2(), this.receiptUtil.getTeamMessageReceiptDetail(e) + } + sendTeamMessageReceipts(e) { + return this.checkV2(), this.receiptUtil.sendTeamMessageReceipts(e) + } + revokeMessage(e, t) { + return Te(this, void 0, void 0, function* () { + return this.checkV2(), this.deleteUtil.revokeMessage(e, t) + }) + } + deleteMessage(e, t) { + return this.checkV2(), this.deleteUtil.deleteMessage(e, t) + } + deleteMessages(e, t) { + return this.checkV2(), this.deleteUtil.deleteMessages(e, t) + } + cancelMessageAttachmentUpload(e) { + return this.checkV2(), this.fileUtil.cancelMessageAttachmentUpload(e) + } + markMsgsAck(e) { + if (e && e.length > 0) { + var t = [], + i = [] + e.forEach((e) => { + ;(e.senderId === this.core.account && e.senderId !== e.receiverId) || + (1 === e.conversationType + ? t.push(e) + : 2 === e.conversationType && i.push(e)) + }), + t.length > 0 && + this.core.sendCmd('v2BatchMarkRead', { + sid: 7, + cid: 2, + ids: t.map((e) => e.messageServerId), + }), + i.length > 0 && + this.core.sendCmd('v2BatchMarkRead', { + sid: 8, + cid: 3, + ids: i.map((e) => e.messageServerId), + }) + } + } + sendMessage(e, t, i = {}, r) { + var s + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye({ message: { type: 'object' } }, { message: e }, '', !0), + (e.messageClientId = e.messageClientId || Le()), + e.conversationId && e.conversationId !== t) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'sendMessage: message.conversationId is not equal to conversationId', + }, + }) + ye(zi, { conversationId: t, message: e, params: i }, '', !0), + Me(this.core.account, t) + var n = this.core.V2NIMConversationIdUtil.parseConversationType(t) + if ((2 === n || 3 === n) && i.robotConfig && !i.robotConfig.accountId) + throw new me({ + detail: { + reason: + 'When conversationType is team or superTeam, account is required in robotInfo account is required', + }, + }) + if ((2 !== n && 3 !== n) || !i.targetConfig) i.targetConfig = void 0 + else { + var o = i.targetConfig.receiverIds + if (3 === n && !1 === i.targetConfig.inclusive) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'setting inclusive to false for super teams is not allowed', + }, + }) + if (0 === (o = o.filter((e) => e && e !== this.core.account)).length) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: 'receiverIds cannot be empty or only contain yourself', + }, + }) + i.targetConfig.receiverIds = o + } + ;(null === (s = i.aiConfig) || void 0 === s ? void 0 : s.aiStream) && + this.aiUtil.checkAI() + var a, + c = this.core.timeOrigin.getTimeNode(), + { + messageBeforeSend: d, + clientAntispamResult: l, + hiddenParams: p, + } = this.sendUtil.prepareMessage(e, t, i) + this.logger.log( + `V2SendMessage start:${d.messageClientId}/${d.createTime};conversation:${t};`, + `NTPTime:${this.core.timeOrigin.getNTPTime(c)}` + ) + try { + a = yield this.sendUtil.doSendMessage({ + apiCallingTimeNode: c, + messageBeforeSend: d, + clientAntispamResult: l, + hiddenParams: p, + progress: r, + }) + } catch (e) { + throw ( + (this.logger.warn( + `V2SendMessage end:${d.messageClientId}.`, + e instanceof he ? `failed:${e.code}` : 'failed' + ), + e) + ) + } + return ( + a.message.senderId === a.message.receiverId && + this.markMsgsAck([a.message]), + this.logger.log( + `V2SendMessage end:${a.message.messageClientId}/${a.message.messageServerId}/${a.message.createTime}` + ), + a + ) + }) + } + replyMessage(e, t, i = {}, r) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye({ message: { type: 'object' } }, { message: e }, '', !0), + (e.messageClientId = e.messageClientId || Le()), + ye(Ji, { message: e, replyMessage: t, params: i }, '', !0), + Me(this.core.account, t.conversationId), + (2 === e.conversationType || 3 === e.conversationType) && + i.robotConfig && + !i.robotConfig.accountId) + ) + throw new me({ + detail: { + reason: + 'When conversationType is team or superTeam, account is required in robotInfo account is required', + }, + }) + var s = this.core.timeOrigin.getTimeNode(), + { + messageBeforeSend: n, + clientAntispamResult: o, + hiddenParams: a, + } = this.sendUtil.prepareMessage(e, t.conversationId, i, t), + c = yield this.sendUtil.doSendMessage({ + apiCallingTimeNode: s, + messageBeforeSend: n, + clientAntispamResult: o, + hiddenParams: a, + progress: r, + }) + return ( + c.message.senderId === c.message.receiverId && + this.markMsgsAck([c.message]), + c + ) + }) + } + modifyMessage(e, t) { + this.checkV2(), + this.checkLogin(), + ye(Tr, e, 'message', !0), + ye(Sr, t, 'params', !0), + this.modifyUtil.checkIfModify(e, t) + var { messageBeforeSend: i, clientAntispamResult: r } = + this.modifyUtil.prepareMessage(e, t) + return this.modifyUtil.modifyMessage(i, r) + } + stopAIStreamMessage(e, t) { + if ( + (this.checkV2(), + this.aiUtil.checkAI(), + ye(Cr, e, 'message', !0), + ye(Nr, t, 'params', !0), + 2 === t.operationType && !t.updateContent) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: 'V2NIMMessage::stopAIStreamMessage updateContent empty', + }, + }) + return this.aiUtil.stopAIStreamMessage(e, t) + } + regenAIMessage(e, t) { + return ( + this.checkV2(), + this.aiUtil.checkAI(), + ye(Cr, e, 'message', !0), + ye(Ar, t, 'params', !0), + this.aiUtil.regenAIMessage(e, t) + ) + } + sendMessageFn(e) { + if (e.msgAckSnapshot) { + var t = e.msgAckSnapshot, + i = { + conversationId: e.conversationId, + messageServerId: e.messageServerId, + messageClientId: e.messageClientId, + readCount: 0, + unreadCount: Number(t), + } + delete e.msgAckSnapshot, + this.emit('onReceiveTeamMessageReadReceipts', [i]) + } + ;(e = Gr(e, this.core)), + this.model.upsertMessages([e]), + this.core.eventBus.emit( + 'V2NIMMessageService/sendMessage', + e, + e.sendingState + ) + } + setMessageFilter(e) { + null != e + ? e && + 'function' == typeof e.shouldIgnore && + (this.filterFn = e.shouldIgnore) + : (this.filterFn = void 0) + } + _filterMessage(e) { + if ('function' == typeof this.filterFn) + try { + return !0 === this.filterFn(e) + } catch (t) { + return ( + this.logger.error( + `V2NIMMessage::triggerMessageFilter ${e.messageClientId} error:`, + t + ), + !1 + ) + } + return !1 + } + _filterMessagesByFn(e) { + return e.filter((e) => !this._filterMessage(e)) + } + _filterMessageByClearTime(e, t) { + var i = Ae.localStorage.getItem(`nim_${this.core.account}_${e}_clearTime`), + r = i ? parseInt(i) : 0 + return r > 0 ? t.filter((e) => e.createTime >= r) : t + } +} +var Ks = { super_team: 3, p2p: 1, team: 2 }, + Ws = { 3: 'super_team', 1: 'p2p', 0: 'p2p', 2: 'team' } +function Js(e, t = '|') { + var i = e.indexOf(t) + if (-1 === i) return { target: '', type: 0 } + var r = e.slice(0, i) + return { target: e.slice(i + 1), type: Ks[r] || 0 } +} +function zs(e, t) { + return `${Ws[e]}|${t}` +} +class Xs { + constructor() { + ;(this.map = new Map()), + (this.capacity = 1e4), + (this.readTimeMap = new Map()), + (this.stickTopMap = new Map()) + } + reset() { + this.map.clear(), this.readTimeMap.clear(), this.stickTopMap.clear() + } + count() { + return this.map.size + } + sort() { + var e = Array.from(this.map.values()) + e.sort((e, t) => t.sortOrder - e.sortOrder), + this.map.clear(), + e.forEach((e) => { + this.map.set(e.conversationId, e) + }) + } + processConversation(e) { + return ( + 'string' == typeof e.lastMessage && delete e.lastMessage, + void 0 === e.localExtension && (e.localExtension = ''), + e + ) + } + getById(e) { + return this.map.get(e) + } + getAll() { + return Array.from(this.map.values()).sort( + (e, t) => t.sortOrder - e.sortOrder + ) + } + getStickTopList() { + return Array.from(this.map.values()) + .filter((e) => e.stickTop) + .sort((e, t) => t.sortOrder - e.sortOrder) + } + getByOption(e, t, i) { + var { conversationTypes: r, onlyUnread: s } = i, + n = [] + this.map.forEach((e) => { + ;(r && r.length > 0 && !r.includes(e.type)) || + (s && !e.unreadCount) || + (i.ignoreMuted && e.mute) || + n.push(e) + }), + (n = n.sort((e, t) => t.sortOrder - e.sortOrder)) + var o = 0 + e > 0 && + ((o = Be(n, 'sortOrder', e)), n[o] && n[o].sortOrder === e && (o += 1)) + var a = n.slice(o).length + return (n = n.slice(o, o + t)).length > 0 + ? { + offset: a > t ? n[n.length - 1].sortOrder : 0, + finished: !(a > t), + conversationList: n, + } + : { offset: 0, finished: !0, conversationList: n } + } + upsert(e) { + var t = e.conversationId, + i = this.map.get(t) + if (!i) { + var r = this.processConversation( + Object.assign( + { + stickTop: this.getStickTop(t), + localExtension: '', + lastMessage: null, + unreadCount: 0, + sortOrder: 0, + createTime: 0, + updateTime: 0, + }, + e + ) + ) + return this.setLRU(t, r), r.unreadCount > 0 + } + var s = e.unreadCount !== i.unreadCount, + n = Object.assign({}, i, e) + return (n = this.processConversation(n)), this.setLRU(t, n), s + } + setLRU(e, t) { + if (this.map.has(e)) this.map.delete(e) + else if (this.map.size >= this.capacity) { + var i = this.map.keys().next().value + i && this.map.delete(i) + } + this.map.set(e, t) + } + bulkUpsert(e) { + var t = !1 + return ( + e.forEach((e) => { + this.upsert(e) && (t = !0) + }), + t + ) + } + deleteById(e) { + var t = this.getById(e) + if (t) return this.map.delete(e), t + } + updateReadTime(e, t) { + this.readTimeMap.set(e, t) + } + getReadTime(e) { + return this.readTimeMap.get(e) || 0 + } + updateStickTop(e, t) { + t ? this.stickTopMap.set(e, !0) : this.stickTopMap.delete(e) + } + getStickTop(e) { + return this.stickTopMap.get(e) || !1 + } +} +var Qs, + Zs = { + '4_14': 'v2LocalConvSyncReadTime', + '4_20': 'v2LocalConvSyncSuperTeamReadTime', + '4_22': 'v2LocalConvSyncMoreRoaming', + '4_23': 'v2LocalConvSyncStickTop', + '4_25': 'v2LocalConvSyncReliableInfo', + '7_16': 'v2LocalConvMarkReadTime', + '7_25': 'v2LocalConvMultiMarkReadTime', + '7_116': 'v2LocalConvMultiSyncReadTime', + '21_25': 'v2LocalConvSuperTeamMarkReadTime', + '21_32': 'v2LocalConvSuperTeamMultiMarkReadTime', + '21_125': 'v2LocalConvSuperTeamMultiSyncReadTime', + '33_12': 'v2LocalConvStickTopAdd', + '33_13': 'v2LocalConvStickTopDelete', + '23_112': 'v2LocalConvStickTopMultiSyncAdd', + '23_113': 'v2LocalConvStickTopMultiSyncDelete', + '23_114': 'v2LocalConvStickTopMultiSyncUpdate', + }, + en = 'V2NIMLocalConversationService', + tn = { + id: 1, + ext: 2, + createTime: { id: 3, retType: 'number' }, + updateTime: { id: 4, retType: 'number' }, + }, + rn = { scene: 1, to: 2, timetag: 3 }, + sn = { + v2LocalConvSyncReadTime: { + sid: 4, + cid: 14, + service: en, + response: [ + { type: 'StrLongMap', name: 'p2p' }, + { type: 'LongLongMap', name: 'team' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2LocalConvSyncSuperTeamReadTime: { + sid: 4, + cid: 20, + service: en, + response: [{ type: 'LongLongMap', name: 'superTeam' }], + }, + v2LocalConvSyncMoreRoaming: { sid: 4, cid: 22, service: en, response: [] }, + v2LocalConvSyncStickTop: { + sid: 4, + cid: 23, + service: en, + response: [ + { type: 'Long', name: 'timetag' }, + { type: 'Bool', name: 'isThereAnyChange' }, + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(tn) }, + ], + }, + v2LocalConvSyncReliableInfo: { sid: 4, cid: 25, service: en, response: [] }, + v2LocalConvMarkReadTime: { + sid: 7, + cid: 16, + service: en, + params: [ + { type: 'Byte', name: 'scene' }, + { type: 'String', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2LocalConvMultiMarkReadTime: { + sid: 7, + cid: 25, + service: en, + ignoreErrCodes: [700], + params: [{ type: 'PropertyArray', name: 'tags', reflectMapper: rn }], + }, + v2LocalConvMultiSyncReadTime: { + sid: 7, + cid: 116, + service: en, + response: [ + { type: 'Byte', name: 'scene' }, + { type: 'String', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2LocalConvSuperTeamMarkReadTime: { + sid: 21, + cid: 25, + service: en, + params: [ + { type: 'Long', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2LocalConvSuperTeamMultiMarkReadTime: { + sid: 21, + cid: 32, + service: en, + ignoreErrCodes: [700], + params: [{ type: 'PropertyArray', name: 'tags', reflectMapper: rn }], + }, + v2LocalConvSuperTeamMultiSyncReadTime: { + sid: 21, + cid: 125, + service: en, + response: [ + { type: 'Long', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2LocalConvStickTopAdd: { + sid: 33, + cid: 12, + service: en, + params: [{ type: 'Property', name: 'tag', reflectMapper: tn }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(tn) }], + }, + v2LocalConvStickTopDelete: { + sid: 33, + cid: 13, + service: en, + params: [{ type: 'Property', name: 'tag', reflectMapper: tn }], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2LocalConvStickTopMultiSyncAdd: { + sid: 23, + cid: 112, + service: en, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(tn) }], + }, + v2LocalConvStickTopMultiSyncDelete: { + sid: 23, + cid: 113, + service: en, + response: [ + { type: 'Long', name: 'timetag' }, + { type: 'Property', name: 'data', reflectMapper: ft(tn) }, + ], + }, + v2LocalConvStickTopMultiSyncUpdate: { + sid: 23, + cid: 114, + service: en, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(tn) }], + }, + } +function nn(e, t) { + ;(e = e || []), (t = t || 1), (t = Math.max(Math.floor(t), 1)) + for (var i = [], r = 0; r < e.length; r += t) i.push(e.slice(r, r + t)) + return i +} +class on { + constructor(e, t) { + ;(this.totalUnreadCount = void 0), + (this.unreadCountByFilter = {}), + (this.core = e), + (this.service = t), + (this.model = t.model), + (this.logger = t.logger) + } + reset() { + ;(this.totalUnreadCount = void 0), (this.unreadCountByFilter = {}) + } + getTotalUnreadCount() { + return this.totalUnreadCount + } + resetTotalAfterSyncDone() { + var e = this.service.model + .getAll() + .reduce((e, t) => e + (t.unreadCount || 0), 0), + t = this.totalUnreadCount + return ( + (void 0 !== t && t === e) || + ((this.totalUnreadCount = e), + this.service.emit('onTotalUnreadCountChanged', e)), + e + ) + } + digestUnreadCountChange() { + this._digest() + } + _digest() { + var e = this.totalUnreadCount, + t = this.service.model + .getAll() + .reduce((e, t) => e + (t.unreadCount || 0), 0) + this.core.logger.log( + `V2NIMConversation::digestUnreadCountChange:oldUnreadCount ${e}, newUnreadCount ${t}` + ), + e !== t && + ((this.totalUnreadCount = t), + this.service.emit('onTotalUnreadCountChanged', t)), + Object.keys(this.unreadCountByFilter).forEach((e) => { + var t = JSON.parse(e), + i = this.getUnreadCountByFilter(t), + r = this.unreadCountByFilter[e] + ;(this.unreadCountByFilter[e] = i), + (t.equals = cn.bind(t)), + r !== i && this.service.emit('onUnreadCountChangedByFilter', t, i) + }) + } + clearUnreadCount(e) { + var t = e.reduce( + (e, t) => ( + this.service.model.upsert({ + conversationId: t.conversationId, + type: t.type, + unreadCount: 0, + }) && e.push(t.conversationId), + e + ), + [] + ) + if (t.length > 0) { + var i = t.map((e) => this.service.model.getById(e)) + this.service.triggerConversationChanged(i), this.digestUnreadCountChange() + } + } + getUnreadCountByIds(e) { + return (e = ii(e)).reduce((e, t) => { + var i = this.service.model.getById(t) + return e + ((i && i.unreadCount) || 0) + }, 0) + } + getUnreadCountByFilter(e) { + var t = this.service.model.count() + return this.service.model + .getByOption(0, t, { + conversationTypes: e.conversationTypes, + ignoreMuted: e.ignoreMuted, + }) + .conversationList.reduce((e, t) => e + (t.unreadCount || 0), 0) + } + isMessageUnread(e, t = 0) { + var i + return ( + e.createTime > t && + e.senderId !== this.core.account && + 200 === e.messageStatus.errorCode && + !1 !== + (null === (i = e.messageConfig) || void 0 === i + ? void 0 + : i.unreadEnabled) + ) + } + isMessageReferUnread(e, t = 0) { + var i = this.core.V2NIMMessageService.model.getMessageById( + e.messageClientId + ) + return i + ? this.isMessageUnread(i, t) + : e.createTime > t && e.senderId !== this.core.account + } + countUnreadByMessageInMemory(e, t = 0) { + var i = 0 + return ( + this.core.V2NIMMessageService.model + .getMessagesByConversationId(e) + .forEach((e) => { + this.isMessageUnread(e, t) && i++ + }), + i + ) + } + addFilter(e) { + var t = an(e) + if (void 0 !== this.unreadCountByFilter[t]) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_ALREADY_EXIST }) + var i = JSON.parse(t), + r = this.getUnreadCountByFilter(i) + ;(this.unreadCountByFilter[t] = r), + this.service.emit('onUnreadCountChangedByFilter', i, r) + } + deleteFilter(e) { + var t = an(e) + if (void 0 === this.unreadCountByFilter[t]) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + delete this.unreadCountByFilter[t] + } + markConversationRead(e) { + return Te(this, void 0, void 0, function* () { + var t = this.model.getById(e), + i = this.core.V2NIMConversationIdUtil.parseConversationTargetId(e), + r = this.core.V2NIMConversationIdUtil.parseConversationType(e), + s = this.model.getReadTime(e) + if (!t) return s || this.core.timeOrigin.getNTPTime() + var n = this.service.compute.computeReadTimeForMark(t) + return s >= n + ? (this.logger.log( + `V2LocalConv::markConversationRead currentReadTime >= readTime ${e},${s},${n}` + ), + s) + : (3 === r + ? yield this.core.sendCmd('v2LocalConvSuperTeamMarkReadTime', { + timetag: n, + to: i, + }) + : yield this.core.sendCmd('v2LocalConvMarkReadTime', { + scene: 1 === r ? 0 : 2 === r ? 1 : 2, + timetag: n, + to: i, + }), + this.model.updateReadTime(e, n), + n) + }) + } + markMultiConversationRead(e) { + return Te(this, void 0, void 0, function* () { + var t = { cmd: 'v2LocalConvSuperTeamMultiMarkReadTime', params: [] }, + i = { cmd: 'v2LocalConvMultiMarkReadTime', params: [] } + e.forEach((e) => { + var r = this.model.getById(e) + if (r) { + var s = + this.core.V2NIMConversationIdUtil.parseConversationTargetId(e), + n = this.core.V2NIMConversationIdUtil.parseConversationType(e), + o = this.model.getReadTime(e), + a = this.service.compute.computeReadTimeForMark(r) + if (!(o >= a)) { + var c = { + conversationId: e, + scene: 1 === n ? 0 : 2 === n ? 1 : 2, + timetag: a, + to: s, + } + 3 === n ? t.params.push(c) : i.params.push(c) + } + } + }) + var r = nn(t.params, 50), + s = nn(i.params, 50) + for (var n of r) { + try { + yield this.core.sendCmd(t.cmd, { tags: n }) + } catch (e) { + this.logger.warn( + 'markMultiConversationRead::error:', + n.map((e) => e.conversationId), + e + ) + } + n.forEach((e) => { + this.model.updateReadTime(e.conversationId, e.timetag) + }) + } + for (var o of s) { + try { + yield this.core.sendCmd(i.cmd, { tags: o }) + } catch (e) { + this.logger.warn( + 'markMultiConversationRead::error:', + o.map((e) => e.conversationId), + e + ) + } + o.forEach((e) => { + this.model.updateReadTime(e.conversationId, e.timetag) + }) + } + }) + } +} +function an(e) { + var { conversationTypes: t } = e + return ( + t && (t = t.sort()), + JSON.stringify({ + conversationGroupId: e.conversationGroupId, + conversationTypes: t, + ignoreMuted: e.ignoreMuted, + }) + ) +} +function cn(e) { + return JSON.stringify(this) === an(e) +} +function dn(e, t, i = 0, r) { + var s, n + t = Gr(t, e) + var { + messageType: o, + subType: a, + text: c, + attachment: d, + serverExtension: l, + } = t, + p = '' + if (t.senderId !== e.account && 5 !== o) { + p = Ve(t, 'fromNick') + var h = + null === + (n = + null === (s = e.V2NIMFriendService) || void 0 === s + ? void 0 + : s.model) || void 0 === n + ? void 0 + : n.getFriend(t.senderId) + h && h.alias && (p = h.alias) + } + return JSON.parse( + JSON.stringify({ + lastMessageState: i, + messageRefer: qr(e, t), + messageType: o, + subType: a, + text: c, + attachment: d, + serverExtension: l, + callbackExtension: t.callbackExtension, + sendingState: r, + senderName: p, + }) + ) +} +function ln(e, t) { + return t && t.length > 0 ? t.map((t) => pn(e, t)) : [] +} +function pn(e, t) { + var i = t + if ('string' == typeof i.lastMessage) + if ('' === i.lastMessage); + else if (1 === i.lastMessageState) { + var r = Hr(e, gt(JSON.parse(i.lastMessage), ft(rs))) + i.lastMessage = (function (e, t) { + var { + messageRefer: i, + revokeAccountId: r, + revokeType: s, + callbackExtension: n, + serverExtension: o, + postscript: a, + } = t, + c = + (function (e, t, i, r) { + var s, n, o, a, c, d, l, p + if (t !== e.account) { + var h = + null === + (n = + null === (s = e.V2NIMFriendService) || void 0 === s + ? void 0 + : s.model) || void 0 === n + ? void 0 + : n.getFriend(t) + if (h && h.alias) return h.alias + if (2 === i) { + var u = + null === + (a = + null === (o = e.V2NIMTeamService) || void 0 === o + ? void 0 + : o.memberModel) || void 0 === a + ? void 0 + : a.getById(r, 1, t) + if (u && u.teamNick) return u.teamNick + } else if (3 === i) { + var m = + null === + (d = + null === (c = e.V2NIMTeamService) || void 0 === c + ? void 0 + : c.memberModel) || void 0 === d + ? void 0 + : d.getById(r, 1, t) + if (m && m.teamNick) return m.teamNick + } + var g = + null === + (p = + null === (l = e.V2NIMUserService) || void 0 === l + ? void 0 + : l.model) || void 0 === p + ? void 0 + : p.getUser(t) + return g && g.name ? g.name : void 0 + } + })( + e, + t.revokeAccountId, + t.messageRefer.conversationType, + t.messageRefer.receiverId + ) || '' + return JSON.parse( + JSON.stringify({ + lastMessageState: 1, + messageRefer: i, + revokeAccountId: r, + revokeType: s, + callbackExtension: n, + serverExtension: o, + text: a || '', + senderName: c, + }) + ) + })(e, r) + } else if (0 === i.lastMessageState) { + var s = gt(JSON.parse(i.lastMessage), ft(Zr)) + i.lastMessage = dn( + e, + s, + i.lastMessageState, + s.senderId === e.account ? 1 : void 0 + ) + } else 2 === i.lastMessageState && delete i.lastMessage + return i +} +function hn(e) { + var { version: t, deleteFlag: i } = e + return { + conversation: Ee(e, ['version', 'deleteFlag']), + version: t, + deleteFlag: i, + } +} +!(function (e) { + ;(e[(e.createConversation = 1)] = 'createConversation'), + (e[(e.deleteConversation = 2)] = 'deleteConversation'), + (e[(e.updateConversation = 3)] = 'updateConversation'), + (e[(e.setConversationTop = 4)] = 'setConversationTop'), + (e[(e.clearConversationUnread = 5)] = 'clearConversationUnread'), + (e[(e.addConversationToGroup = 6)] = 'addConversationToGroup'), + (e[(e.removeConversationFromGroup = 7)] = 'removeConversationFromGroup'), + (e[(e.modifyConversationOnSendMessage = 8)] = + 'modifyConversationOnSendMessage'), + (e[(e.modifyConversationOnDeleteMessage = 9)] = + 'modifyConversationOnDeleteMessage'), + (e[(e.modifyConversationOnRecallMessage = 10)] = + 'modifyConversationOnRecallMessage'), + (e[(e.modifyConversationOnClearMessage = 11)] = + 'modifyConversationOnClearMessage'), + (e[(e.oneClickClearConversationUnread = 12)] = + 'oneClickClearConversationUnread'), + (e[(e.modifyConversationOnUpdateMessage = 13)] = + 'modifyConversationOnUpdateMessage') +})(Qs || (Qs = {})) +class un { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + get hasUserService() { + var e + return !!(null === (e = this.core.V2NIMUserService) || void 0 === e + ? void 0 + : e.name) + } + get hasFriendService() { + var e + return !!(null === (e = this.core.V2NIMFriendService) || void 0 === e + ? void 0 + : e.name) + } + get hasTeamService() { + var e + return !!(null === (e = this.core.V2NIMTeamService) || void 0 === e + ? void 0 + : e.name) + } + get hasMessageService() { + var e + return !!(null === (e = this.core.V2NIMMessageService) || void 0 === e + ? void 0 + : e.name) + } + computeFromExternal(e) { + var t, i, r + if (0 === e.type) return e + var s = this.core.V2NIMConversationIdUtil.parseConversationType( + e.conversationId + ), + n = this.core.V2NIMConversationIdUtil.parseConversationTargetId( + e.conversationId + ), + o = {} + if ( + ((null === (t = this.core.V2NIMSettingService) || void 0 === t + ? void 0 + : t.name) && + (o.mute = this.core.V2NIMSettingService.getConversationMuteStatus( + e.conversationId + )), + 1 === s && this.hasUserService) + ) { + var a, + c = this.core.V2NIMUserService.model.getUser(n), + d = this.hasFriendService + ? this.core.V2NIMFriendService.model.getFriend(n) + : void 0 + e.conversationId === + (null === (i = e.lastMessage) || void 0 === i + ? void 0 + : i.messageRefer.conversationId) && + (a = + null === (r = e.lastMessage) || void 0 === r ? void 0 : r.senderName), + (o.name = + (null == d ? void 0 : d.alias) || + (null == c ? void 0 : c.name) || + a || + n), + (o.avatar = (null == c ? void 0 : c.avatar) || '') + } else if (2 === s && this.hasTeamService) { + var l = this.core.V2NIMTeamService.model.getById(n, 1) + ;(o.name = (null == l ? void 0 : l.name) || n), + (o.avatar = (null == l ? void 0 : l.avatar) || '') + } else if (3 === s && this.hasTeamService) { + var p = this.core.V2NIMTeamService.model.getById(n, 2) + ;(o.name = (null == p ? void 0 : p.name) || n), + (o.avatar = (null == p ? void 0 : p.avatar) || '') + } + return Object.assign(e, o), e + } + computeSortOrder(e, t) { + return t ? (e ? t + 1e15 : t) : e ? 1e15 : 0 + } + computeReadTimeForMark(e) { + var t, + i, + r, + s = e.conversationId, + n = this.service.model.getReadTime(s) + if ( + null === + (i = + null === (t = null == e ? void 0 : e.lastMessage) || void 0 === t + ? void 0 + : t.messageRefer) || void 0 === i + ? void 0 + : i.createTime + ) + r = e.lastMessage.messageRefer.createTime + else { + if (0 === e.unreadCount && n > 0) return n + if (!this.core.timeOrigin.checkNodeReliable()) return n || 0 + r = this.core.timeOrigin.getNTPTime() + } + return r + } + computeConvWithLastMsg(e, t) { + var i, + r = + t || + this.core.V2NIMMessageService.model.getLastMessageOfConversation( + e.conversationId + ) + if ( + r && + !1 !== + (null === (i = r.messageConfig) || void 0 === i + ? void 0 + : i.lastMessageUpdateEnabled) + ) { + var s = dn(this.core, r, 0, r.sendingState) + ;(e.lastMessage = s), + (e.createTime = e.createTime || r.createTime), + (e.updateTime = r.createTime), + (e.sortOrder = this.computeSortOrder(e.stickTop, r.createTime)) + } + return e + } + computeConvWithUnread(e, t) { + var i = this.service.model.getReadTime(e.conversationId), + r = e.unreadCount || 0 + return ( + t + ? t && this.service.unread.isMessageUnread(t) && (r += 1) + : (r = this.service.unread.countUnreadByMessageInMemory( + e.conversationId, + i + )), + (e.unreadCount = r), + e + ) + } + computeConvByMsgsCache(e, t) { + var i, + r, + s = this.service.model.getById(e), + n = this.core.V2NIMConversationIdUtil.parseConversationType(e), + o = this.core.V2NIMMessageService.model.getLastMessageOfConversation(e) + r = + (null == t ? void 0 : t.updateTime) || + (o && o.createTime + ? o.createTime + : s && s.updateTime + ? s.updateTime + : this.core.timeOrigin.getNTPTime()) + var a = this.service.model.getStickTop(e), + c = Object.assign( + Object.assign( + { + conversationId: e, + type: n, + stickTop: a, + localExtension: (null == s ? void 0 : s.localExtension) || '', + lastMessage: null, + unreadCount: 0, + }, + t + ), + { + createTime: (null == s ? void 0 : s.createTime) || r, + updateTime: r, + sortOrder: this.computeSortOrder(a, r), + } + ) + if ( + o && + !1 !== + (null === (i = o.messageConfig) || void 0 === i + ? void 0 + : i.lastMessageUpdateEnabled) + ) { + var d = dn(this.core, o, 0, o.sendingState) + c.lastMessage = d + } + return c + } +} +class mn { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = this.service.model), + (this.logger = this.core.logger) + } + v2LocalConvSyncStickTopHandler(e) { + var { timetag: t, isThereAnyChange: i, datas: r } = e.content + if (i) { + var s = this.model.getAll(), + n = r.map((e) => { + var { target: t, type: i } = Js(e.id), + r = this.core.V2NIMConversationIdUtil.conversationId(i, t) + return this.model.updateStickTop(r, !0), r + }) + s.forEach((e) => { + n.includes(e.conversationId) + ? ((e.stickTop = !0), + (e.updateTime = e.updateTime > t ? e.updateTime : t)) + : (e.stickTop = !1), + this.model.updateStickTop(e.conversationId, e.stickTop) + }), + this.model.bulkUpsert(s) + } + } + v2LocalConvSyncReadTimeHandler(e) { + var t = e.content.p2p || {}, + i = e.content.team.m_map || {} + this.logger.log('v2SyncLocalConvAck::', t, i), + Object.keys(t).forEach((e) => { + var i = this.core.V2NIMConversationIdUtil.p2pConversationId(e), + r = this.model.getReadTime(i) + t[e] > r && + (this.model.updateReadTime(i, t[e]), + this.service.emit('onConversationReadTimeUpdated', i, t[e])) + }), + Object.keys(i).forEach((e) => { + var t = this.core.V2NIMConversationIdUtil.teamConversationId(e), + r = this.model.getReadTime(t) + i[e] > r && + (this.model.updateReadTime(t, i[e]), + this.service.emit('onConversationReadTimeUpdated', t, i[e])) + }) + } + v2LocalConvSyncSuperTeamReadTimeHandler(e) { + var t = e.content.superTeam.m_map + this.logger.log('v2SyncLocalSuperTeamConvAck::', t), + Object.keys(t).forEach((e) => { + var i = this.core.V2NIMConversationIdUtil.superTeamConversationId(e), + r = this.model.getReadTime(i) + t[e] > r && + (this.model.updateReadTime(i, t[e]), + this.service.emit('onConversationReadTimeUpdated', i, t[e])) + }) + } + v2LocalConvMultiSyncReadTimeHandler(e) { + var t = e.content, + i = `${0 === t.scene ? 'p2p' : 1 === t.scene ? 'team' : 'super_team'}-${ + t.to + }`, + { type: r, target: s } = Js(i, '-'), + n = this.core.V2NIMConversationIdUtil.conversationId(r, s), + o = this.model.getById(n), + a = null == o ? void 0 : o.unreadCount, + c = this.model.getReadTime(n) + t.timetag <= c + ? this.logger.warn( + `v2LocalConvMultiSyncReadTimeHandler: ${n} do not need update ack ${t.timetag}/${c}` + ) + : (this.model.updateReadTime(n, t.timetag), + this.service.emit('onConversationReadTimeUpdated', n, t.timetag), + o + ? ((o = this.service.compute.computeConvWithUnread(o)), + this.model.upsert(o), + this.service.unread.digestUnreadCountChange(), + void 0 === a && o.unreadCount > 0 + ? this.service.triggerConversationCreated(o) + : 'number' == typeof a && + o.unreadCount !== a && + this.service.triggerConversationChanged([o])) + : this.logger.log( + `v2LocalConvMultiSyncReadTimeHandler: ${n} not exist` + )) + } + v2LocalConvSuperTeamMultiSyncReadTimeHandler(e) { + this.v2LocalConvMultiSyncReadTimeHandler(e) + } + v2LocalConvStickTopMultiSyncAddHandler(e) { + var { data: t } = e.content, + { target: i, type: r } = Js(t.id), + s = this.core.V2NIMConversationIdUtil.conversationId(r, i) + this.model.updateStickTop(s, !0) + var n = this.model.getById(s) + n && + ((n.stickTop = !0), + (n.updateTime = + n.updateTime > t.updateTime ? n.updateTime : t.updateTime), + (n.sortOrder = this.service.compute.computeSortOrder(!0, t.updateTime)), + this.model.upsert(n), + this.service.triggerConversationChanged([n])) + } + v2LocalConvStickTopMultiSyncDeleteHandler(e) { + var { data: t, timetag: i } = e.content, + { target: r, type: s } = Js(t.id), + n = this.core.V2NIMConversationIdUtil.conversationId(s, r) + this.model.updateStickTop(n, !1) + var o = this.model.getById(n) + o && + ((o.stickTop = !1), + (o.updateTime = o.updateTime > i ? o.updateTime : i), + (o.sortOrder = this.service.compute.computeSortOrder(!1, i)), + this.model.upsert(o), + this.service.triggerConversationChanged([o])) + } +} +class gn { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = this.service.model), + (this.compute = this.service.compute), + (this.logger = this.core.logger) + } + setListener() { + this.core.eventBus.on('V2NIMLoginService/syncing', () => + this.service.emit('onSyncStarted') + ), + this.core.eventBus.on( + 'V2NIMLoginService/syncDone', + this.onSyncDone.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/sendMessage', + this.sendMsg.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/onMsg', + this.recvMsg.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/modifyMsg', + this.modifyMsg.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/deleteMessages', + this.deleteMessages.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/revokeMessages', + this.deleteMessages.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageLogUtil/onClearHistoryNotifications', + this.clearMessages.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/roamingMsgs', + this.generateConv.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/offlineMsgs', + this.generateConv.bind(this) + ), + this.core.eventBus.on( + 'V2NIMSettingService/setMute', + this.setMute.bind(this) + ) + } + beforeEmit(e, ...t) { + var i, + r = `${this.service.name}::emit ${e.toString()}` + if ('onConversationCreated' === e) { + var s = t[0], + n = + null === (i = s.lastMessage) || void 0 === i ? void 0 : i.messageRefer + this.logger.log( + `${r}`, + `id:${s.conversationId};unread:${s.unreadCount};lastMsg:${ + (null == n ? void 0 : n.messageClientId) || '' + }/${(null == n ? void 0 : n.messageServerId) || ''}` + ) + } else if ('onConversationChanged' === e) { + var o = t[0] + this.logger.log( + `${r}`, + o.map((e) => { + var t, + i = + null === (t = e.lastMessage) || void 0 === t + ? void 0 + : t.messageRefer + return `id:${e.conversationId};unread:${e.unreadCount};lastMsg:${ + (null == i ? void 0 : i.messageClientId) || '' + }/${(null == i ? void 0 : i.messageServerId) || ''}` + }) + ) + } else this.logger.log(`${r}`, ...t) + } + onSyncDone(e) { + if (e) this.service.emit('onSyncFailed', e) + else { + var t = this.model.getAll() + ;(t = t.map((e) => { + var t = e.conversationId, + i = this.compute.computeConvByMsgsCache(t) + return ( + (i = this.compute.computeConvWithUnread(i)), + (i = this.compute.computeFromExternal(i)), + this.model.upsert(i), + this.model.getById(t) + ) + })).length > 0 && + (this.service.triggerConversationChanged(t), + this.service.unread.resetTotalAfterSyncDone()), + this.service.emit('onSyncFinished') + } + } + generateConv(e) { + ii(e.map((e) => e.conversationId)).forEach((e) => { + var t = this.compute.computeConvByMsgsCache(e) + this.model.upsert(t) + }) + } + setMute(e, t) { + var i = this.model.getById(e) + i && + i.mute !== t && + ((i.mute = t), + this.model.upsert(i), + this.service.triggerConversationChanged([i])) + } + deleteMessages(e) { + var t = new Set() + e.forEach((e) => { + var i, + r = e.messageRefer.conversationId, + s = this.model.getById(r) + if (s) { + if ( + e.messageRefer.messageClientId === + (null === (i = s.lastMessage) || void 0 === i + ? void 0 + : i.messageRefer.messageClientId) + ) { + t.add(r) + var n = + this.core.V2NIMMessageService.model.getLastMessageOfConversation(r) + s.lastMessage = n ? dn(this.core, n, 0, n.sendingState) : void 0 + } + var o = this.model.getReadTime(r) + if ( + (s.unreadCount > 0 && + this.service.unread.isMessageReferUnread(e.messageRefer, o) && + (t.add(r), s.unreadCount--), + 'deleteTime' in e) + ) + e.deleteTime > s.updateTime && + ((s.updateTime = e.deleteTime), + (s.sortOrder = this.compute.computeSortOrder( + s.stickTop, + s.updateTime + ))) + else { + var a = this.core.timeOrigin.getNTPTime() + ;(s.updateTime = a), + (s.sortOrder = this.compute.computeSortOrder(s.stickTop, a)) + } + this.model.upsert(s) + } + }) + var i = Array.from(t) + !this.core.V2NIMLoginService.dataSync.checkSyncing() && + i.length > 0 && + (this.service.triggerConversationChanged( + i.map((e) => this.model.getById(e)) + ), + this.service.unread.digestUnreadCountChange()) + } + sendMsg(e) { + var t = e.conversationId, + i = this.model.getById(t) + if (i) { + var r = i.lastMessage, + s = this.updateCauseMessage(i, e) + r !== s.lastMessage && this.service.triggerConversationChanged([s]) + } else { + var n = this.createCauseMessage(t, e) + this.service.triggerConversationCreated(n) + } + } + recvMsg(e) { + var t = e.conversationId, + i = this.model.getById(t) + if (i) { + var r = i.lastMessage, + s = i.unreadCount, + n = this.updateCauseMessage(i, e) + n = this.compute.computeConvWithUnread(n, e) + var o = r !== (n = this.compute.computeFromExternal(n)).lastMessage, + a = s !== n.unreadCount + this.model.upsert(n), + (o || a) && this.service.triggerConversationChanged([n]) + } else { + var c = this.createCauseMessage(t, e) + ;(c = this.compute.computeConvWithUnread(c, e)), + (c = this.compute.computeFromExternal(c)), + this.model.upsert(c), + this.service.triggerConversationCreated(c) + } + this.service.unread.digestUnreadCountChange() + } + updateCauseMessage(e, t) { + return ( + (e = this.compute.computeConvWithLastMsg(e, t)), + this.model.upsert(e), + this.model.getById(e.conversationId) + ) + } + createCauseMessage(e, t) { + var i, + r = this.core.V2NIMConversationIdUtil.parseConversationType(e), + s = this.model.getStickTop(e), + n = + !1 === + (null === (i = t.messageConfig) || void 0 === i + ? void 0 + : i.lastMessageUpdateEnabled) + ? void 0 + : dn(this.core, t, 0, t.sendingState), + o = this.core.timeOrigin.getNTPTime(), + a = { + conversationId: e, + type: r, + createTime: n ? t.createTime : o, + updateTime: n ? t.createTime : o, + sortOrder: this.compute.computeSortOrder(s, n ? t.createTime : o), + stickTop: s, + localExtension: '', + lastMessage: n, + unreadCount: 0, + } + return this.model.upsert(a), a + } + clearMessages(e) { + var t = new Set() + e.forEach((e) => { + var { conversationId: i, deleteTime: r } = e, + s = this.model.getById(i) + s && + (s.unreadCount > 0 && ((s.unreadCount = 0), t.add(i)), + s.lastMessage && + s.lastMessage.messageRefer.createTime <= e.deleteTime && + ((s.lastMessage = void 0), t.add(i)), + r > s.updateTime && + ((s.updateTime = r), + (s.sortOrder = this.compute.computeSortOrder( + s.stickTop, + s.updateTime + ))), + this.model.upsert(s)) + }) + var i = Array.from(t) + !this.core.V2NIMLoginService.dataSync.checkSyncing() && + i.length > 0 && + (this.service.triggerConversationChanged( + i.map((e) => this.model.getById(e)) + ), + this.service.unread.digestUnreadCountChange()) + } + modifyMsg(e) { + var t, + i = e.conversationId, + r = e.messageClientId, + s = this.model.getById(i), + n = this.core.V2NIMMessageService.model.getMessageById(r) + if (s || n) + if (s) + e.messageClientId === + (null === (t = s.lastMessage) || void 0 === t + ? void 0 + : t.messageRefer.messageClientId) && + ((s.lastMessage = dn(this.core, e, 0, e.sendingState)), + this.service.triggerConversationChanged([s])) + else { + var o = this.createCauseMessage(i, e) + this.service.triggerConversationCreated(o) + } + } +} +var vn = { + type: 'array', + itemRules: { type: 'enum', values: [1, 2, 3] }, + min: 1, +} +class fn { + constructor() { + ;(this.map = new Map()), (this.readTimeMap = new Map()) + } + set(e) { + e.forEach((e) => { + ;(e = this.processConversation(e)), this.map.set(e.conversationId, e) + }) + } + reset() { + this.map.clear(), this.readTimeMap.clear() + } + count() { + return this.map.size + } + sort() { + var e = Array.from(this.map.values()) + e.sort((e, t) => t.sortOrder - e.sortOrder), + this.map.clear(), + e.forEach((e) => { + this.map.set(e.conversationId, e) + }) + } + processConversation(e) { + return ( + 'string' == typeof e.lastMessage && delete e.lastMessage, + void 0 === e.localExtension && (e.localExtension = ''), + e + ) + } + getById(e) { + return this.map.get(e) + } + getStickTopList() { + return Array.from(this.map.values()) + .filter((e) => e.stickTop) + .sort((e, t) => t.sortOrder - e.sortOrder) + } + getAll() { + return Array.from(this.map.values()).sort( + (e, t) => t.sortOrder - e.sortOrder + ) + } + getByOption(e, t, i) { + var { conversationTypes: r, onlyUnread: s, conversationGroupIds: n } = i, + o = [] + this.map.forEach((e) => { + if ( + (!(r && r.length > 0) || r.includes(e.type)) && + (!s || e.unreadCount) && + (!i.ignoreMuted || !e.mute) + ) { + if (n) { + var t = e.groupIds, + a = (null == t ? void 0 : t.length) || 0 + if (0 === n.length && a > 0) return + if (n.length > 0 && 0 === a) return + if (n.length > 0 && a > 0 && !n.some((e) => t && t.includes(e))) + return + } + o.push(e) + } + }), + (o = o.sort((e, t) => t.sortOrder - e.sortOrder)) + var a = 0 + e > 0 && + ((a = Be(o, 'sortOrder', e)), o[a] && o[a].sortOrder === e && (a += 1)) + var c = o.slice(a).length + return (o = o.slice(a, a + t)).length > 0 + ? { + offset: c > t ? o[o.length - 1].sortOrder : 0, + finished: !(c > t), + conversationList: o, + } + : { offset: 0, finished: !0, conversationList: o } + } + upsert(e) { + var t = e.conversationId, + i = this.map.get(t) + if (!i) + return ( + (e = this.processConversation(Object.assign({}, e))), + this.map.set(t, e), + e.unreadCount > 0 + ) + var r = e.unreadCount !== i.unreadCount, + s = Object.assign({}, i, e) + return (s = this.processConversation(s)), this.map.set(t, s), r + } + bulkUpsert(e) { + var t = !1 + return ( + e.forEach((e) => { + this.upsert(e) && (t = !0) + }), + t + ) + } + deleteById(e) { + var t = this.getById(e) + if (t) return this.map.delete(e), t + } + updateReadTime(e, t) { + this.readTimeMap.set(e, t) + } + getReadTime(e) { + return this.readTimeMap.get(e) || 0 + } +} +function yn(e, t) { + var i = typeof e + if (i !== typeof t) return !1 + if ('object' === i) { + if (Object.prototype.toString.call(e) !== Object.prototype.toString.call(t)) + return !1 + if (Array.isArray(e)) { + if (e.length !== t.length) return !1 + for (var r = 0; r < e.length; r++) if (!yn(e[r], t[r])) return !1 + return !0 + } + if (e instanceof RegExp && t instanceof RegExp) + return e.toString() === t.toString() + if (e instanceof Date && t instanceof Date) + return e.getTime() === t.getTime() + if (null === e && null === t) return !0 + if (Object.keys(e).length !== Object.keys(t).length) return !1 + for (var s in e) if (!yn(e[s], t[s])) return !1 + return !0 + } + return e === t +} +class In { + constructor(e, t) { + ;(this.fieldVersion = {}), + (this.conversationIdsForBackFill = {}), + (this.tempPacket = []), + (this.isSyncing = !1), + (this.nextCursor = 0), + (this.core = e), + (this.service = t) + } + reset() { + ;(this.tempPacket = []), + (this.fieldVersion = {}), + (this.conversationIdsForBackFill = {}), + (this.isSyncing = !1), + (this.nextCursor = 0) + } + doSync() { + return Te(this, void 0, void 0, function* () { + var e + ;(this.isSyncing = !0), + this.service.emit('onSyncStarted'), + this.core.V2NIMLoginService.dataSync.switchDataSync({ + type: 1, + state: 2, + subType: 'conversationSync', + }) + try { + e = yield this.core.sendCmd('v2ConversationSync', { + tag: { cursor: this.nextCursor }, + }) + } catch (e) { + var t = e + if (t.code === de.V2NIM_ERROR_CODE_CANCELLED) return + return ( + (this.isSyncing = !1), + this.service.emit('onSyncFailed', t), + this.core.V2NIMLoginService.dataSync.switchDataSync({ + type: 1, + state: 3, + error: t, + subType: 'conversationSync', + }), + void this.processTempPacket() + ) + } + var i = 0 === parseInt(Ve(e, 'content.info.syncType')), + r = Ve(e, 'content.info.nextCursor') + this.doSyncAndSuccess(i, r) + }) + } + doSyncAndSuccess(e, t) { + e && this.service.model.sort(), + (this.isSyncing = !1), + (this.nextCursor = parseInt(t) || 0), + this.service.unread.resetTotalAfterSyncDone(), + this.service.unread.digestUnreadCountChange(), + this.service.emit('onSyncFinished'), + this.core.V2NIMLoginService.dataSync.switchDataSync({ + type: 1, + state: 3, + subType: 'conversationSync', + }), + this.processTempPacket() + } + setBackFillIds(e) { + return ( + e.forEach((e) => { + if ( + 2 === e.lastMessageState && + this.service.compute.hasMessageService + ) { + this.conversationIdsForBackFill[e.conversationId] = !0 + var t = + this.core.V2NIMMessageService.model.getLastMessageOfConversation( + e.conversationId + ) + e.lastMessage = t + ? dn(this.core, t, e.lastMessageState, t.sendingState) + : '' + } else this.conversationIdsForBackFill[e.conversationId] = !1 + delete e.lastMessageState + }), + e + ) + } + recvConversationFromSyncAction(e) { + var { syncType: t } = Ve(e, 'content.info'), + i = ln(this.core, Ve(e, 'content.datas')) + 0 === (t = parseInt(t)) + ? (i.forEach((e) => { + this.initFieldVersion(e.conversationId, e.version) + }), + (i = this.setBackFillIds(i)), + this.setModel(i)) + : ((i = this.setBackFillIds(i)), + this.recvConversationForCreated(i) < i.length && + this.recvConversationForChanged(i)) + } + recvConversation(e) { + if (this.isSyncing) this.tempPacket.push(e) + else { + var t = ln(this.core, Ve(e, 'content.datas')).filter( + (e) => !!e.conversationId + ), + i = Ve(e, 'content.info'), + r = t.map((e) => `id:${e.conversationId}, ver:${e.version}`).join(';') + if ( + (this.core.logger.getDebugMode() + ? this.core.logger.debug( + `V2NIMConversation::recvConversation: ${r}.`, + i, + t + ) + : this.core.logger.log( + `V2NIMConversation::recvConversation: ${r}.`, + i + ), + 2 === i.type) + ) { + var s = t.map( + (e) => ( + delete this.fieldVersion[e.conversationId], + this.service.model.deleteById(e.conversationId), + e.conversationId + ) + ) + return ( + this.service.emit('onConversationDeleted', s), + void this.service.unread.digestUnreadCountChange() + ) + } + 12 !== i.type + ? (i.type, + (t = this.setBackFillIds(t)), + this.recvConversationForCreated(t) < t.length && + this.recvConversationForChanged(t)) + : this.compareAndClearUnreadInModel(i) + } + } + recvConversationForCreated(e) { + var t = e.filter((e) => !this.fieldVersion[e.conversationId]) + return ( + t.reduce((e, t) => { + if (!this.fieldVersion[t.conversationId]) { + this.initFieldVersion(t.conversationId, t.version), + (e = !!this.updateModel(t) || e) + var i = this.service.model.getById(t.conversationId) + return i && this.service.triggerConversationCreated(i), e + } + return e + }, !1) && this.service.unread.digestUnreadCountChange(), + t.length + ) + } + recvConversationForChanged(e) { + var t = this.bulkCompare(e) + if (0 !== t.length) { + this.bulkUpdateModel(t) + var i = t + .map((e) => this.service.model.getById(e.conversationId)) + .filter((e) => !!e) + this.service.triggerConversationChanged(i) + } + } + processTempPacket() { + this.tempPacket.forEach((e) => { + this.recvConversation(e) + }), + (this.tempPacket = []) + } + bulkCompare(e) { + return e.map((e) => this.compare(e)).filter((e) => !!e) + } + compare(e) { + var { version: t, conversationId: i, deleteFlag: r, type: s } = e, + n = {}, + o = 0 + return ( + [ + 'stickTop', + 'groupIds', + 'serverExtension', + 'localExtension', + 'lastMessage', + 'lastMessageState', + 'unreadCount', + 'sortOrder', + 'createTime', + 'updateTime', + 'lastReadTime', + ].forEach((r) => { + var s = r + if (void 0 !== e[s]) { + var a = this.fieldVersion[i] + ;(a && 'number' == typeof a[s] && a[s] >= t) || + ((this.fieldVersion[i] = this.fieldVersion[i] || {}), + (this.fieldVersion[i][s] = t), + (n[s] = e[s]), + (o += 1)) + } + }), + o + ? Object.assign(Object.assign({}, n), { + conversationId: i, + deleteFlag: r, + version: t, + type: s, + }) + : void 0 + ) + } + bulkUpdateModel(e) { + var t = !1 + e.forEach((e) => { + this.updateModel(e) && (t = !0) + }), + t && this.service.unread.digestUnreadCountChange() + } + initFieldVersion(e, t) { + this.fieldVersion[e] = { + stickTop: t, + groupIds: t, + serverExtension: t, + lastMessage: t, + lastMessageState: t, + unreadCount: t, + sortOrder: t, + createTime: t, + updateTime: t, + lastReadTime: t, + } + } + initConversation(e, t) { + var i = Date.now() + return Object.assign( + { + conversationId: e, + type: this.core.V2NIMConversationIdUtil.parseConversationType(e), + stickTop: !1, + localExtension: '', + serverExtension: '', + unreadCount: 0, + lastReadTime: 0, + createTime: i, + updateTime: i, + sortOrder: i, + }, + t + ) + } + updateModel(e) { + var { deleteFlag: t, conversation: i } = hn(e) + if (t) { + var r = this.service.model.deleteById(i.conversationId) + return !!(r && r.unreadCount > 0) + } + return this.service.model.upsert(i) + } + setModel(e) { + var t = e.filter((e) => !e.deleteFlag).map((e) => hn(e).conversation) + this.service.model.set(t) + } + updateModelWithLastMessage(e, t, i, r) { + var s = this.service.model.getById(e), + n = t ? dn(this.core, t, i, r) : void 0 + if (!yn(null == s ? void 0 : s.lastMessage, n)) + if (s) { + var o = Object.assign(Object.assign({}, s), { + sortOrder: n + ? s.stickTop + ? n.messageRefer.createTime + 1e15 + : n.messageRefer.createTime + : s.sortOrder, + lastMessage: n, + }) + this.service.model.upsert(o), + this.service.triggerConversationChanged([o]) + } else { + this.initFieldVersion(e, -1) + var a = this.initConversation(e, { lastMessage: n }) + this.service.model.upsert(a), this.service.triggerConversationCreated(a) + } + } + updateModelByRevoke(e) { + var t = [] + e.forEach((e) => { + var { postscript: i, messageRefer: r } = e, + s = Ee(e, ['postscript', 'messageRefer']), + n = r.conversationId, + o = this.service.model.getById(n) + o && + o.lastMessage && + o.lastMessage.messageRefer.messageClientId === r.messageClientId && + 1 !== o.lastMessage.lastMessageState && + ((o.lastMessage.lastMessageState = 1), + i && (o.lastMessage.text = i), + Object.assign(o.lastMessage, s), + this.service.model.upsert(o), + t.push(o)) + }), + t.length > 0 && this.service.triggerConversationChanged(t) + } + compareAndUpdateModel(e) { + this.core.logger.log( + 'V2NIMConversation::compareAndUpdateModel', + e.map((e) => e.conversationId) + ) + var t = !1, + i = [] + e.forEach((e) => { + var r = this.compare(e) + if (r) { + var s = this.service.model.getById(e.conversationId) + this.updateModel(r) && (t = !0) + var n = this.service.model.getById(e.conversationId) + n && (s ? i.push(n) : this.service.triggerConversationCreated(n)) + } + }), + i.length > 0 && this.service.triggerConversationChanged(i), + t && this.service.unread.digestUnreadCountChange() + } + compareAndDeleteModel(e) { + this.core.logger.log('V2NIMConversation::compareAndDeleteModel', e) + var t = e.reduce((e, t) => { + delete this.fieldVersion[t] + var i = this.service.model.deleteById(t) + return !!(i && i.unreadCount > 0) || e + }, !1) + this.service.emit('onConversationDeleted', e), + t && this.service.unread.digestUnreadCountChange() + } + compareAndDeleteGroupInModel(e, t) { + this.core.logger.log( + 'V2NIMConversation::compareAndDeleteGroupInModel', + e, + t + ) + var i = [] + Object.keys(this.fieldVersion).forEach((r) => { + var s = this.fieldVersion[r] + if (void 0 === s.groupIds || e > s.groupIds) { + s.groupIds = e + var n = this.service.model.getById(r) + if (n && n.groupIds && n.groupIds.length > 0) { + var o = n.groupIds.filter((e) => e !== t) + if (o.length !== n.groupIds.length) { + var a = Object.assign(Object.assign({}, n), { groupIds: o }) + this.service.model.upsert(a), a && i.push(a) + } + } + } + }), + i.length > 0 && this.service.triggerConversationChanged(i) + } + compareAndClearUnreadInModel(e) { + var { + oneClickClearUnreadType: t, + oneClickClearUnreadVersion: i, + oneClickClearUnreadLastReadTime: r, + oneClickClearUnreadConversationType: s, + oneClickClearUnreadGroupId: n, + } = e + this.core.logger.log( + `V2NIMConversation::compareAndClearUnreadInModel.ver:${i};type:${t};lastReadTime:${r};filter:${ + s || '' + };grounp:${n || ''}` + ) + var o = [], + a = [] + if (1 === t) a = this.service.model.getAll() + else if (s || n) { + var c = this.service.model.count() + a = this.service.model.getByOption(0, c, { + conversationTypes: s, + conversationGroupIds: n ? [n] : void 0, + }).conversationList + } + a.forEach((e) => { + var t = e.conversationId, + s = this.fieldVersion[t] + if (void 0 === s.unreadCount || i > s.unreadCount) { + ;(s.unreadCount = i), (s.lastReadTime = i) + var n = e.unreadCount, + a = Object.assign(Object.assign({}, e), { + lastReadTime: r, + unreadCount: 0, + }) + this.service.model.upsert(a), n > 0 && o.push(a) + } + }), + o.length > 0 && this.service.triggerConversationChanged(o), + this.service.unread.digestUnreadCountChange() + } + backfillLastMsg(e, t) { + var i = (e = ii(e)) + ;(t || + 0 !== (i = e.filter((e) => this.conversationIdsForBackFill[e])).length) && + i.forEach((e) => { + var t = Ve( + this.service.model.getById(e), + 'lastMessage.messageRefer.messageClientId' + ), + i = this.service.compute.hasMessageService + ? this.core.V2NIMMessageService.model.getLastMessageOfConversation( + e + ) + : void 0 + ;(i && i.messageClientId) !== t && + ((this.conversationIdsForBackFill[e] = !1), + i + ? this.updateModelWithLastMessage(e, i, 2, i.sendingState) + : this.updateModelWithLastMessage(e, void 0, 2, 0)) + }) + } +} +var Mn = { + '28_1': 'v2ConversationCreate', + '28_2': 'v2ConversationDelete', + '28_3': 'v2ConversationUpdate', + '28_4': 'v2ConversationSetTop', + '28_5': 'v2ConversationUnreadClear', + '28_6': 'v2ConversationGet', + '28_7': 'v2ConversationGetByIds', + '28_8': 'v2ConversationGetList', + '28_17': 'v2ConversationsDelete', + '28_18': 'v2ConversationsUnreadClear', + '28_19': 'v2ConversationSync', + '28_20': 'v2ConversationNotifySync', + '28_21': 'v2ConversationNotifySyncOnline', + '28_23': 'v2ConversationClearTotalUnread', + '28_24': 'v2ConversationClearTypeUnread', + '28_25': 'v2ConversationClearGroupUnread', + '4_14': 'syncConversationReadTime', + '4_20': 'syncSuperTeamReadTime', + '4_22': 'v2SyncSessionsWithMoreRoaming', + '4_25': 'v2SyncSessionReliableInfo', + '30_16': 'v2MarkConversationReadTime', + '32_25': 'v2MarkSuperTeamReadTime', + '7_116': 'v2MultiDeviceConversationReadTime', + '21_125': 'v2MultiDeviceSuperTeamReadTime', + }, + _n = 'V2NIMConversationService', + En = { + conversationId: 1, + type: { id: 2, retType: 'number' }, + serverExtension: 3, + groupIds: { id: 4, retConverter: (e) => (e ? JSON.parse(e) : void 0) }, + lastMessage: 5, + lastMessageState: { id: 6, retType: 'number' }, + unreadCount: { id: 7, retType: 'number' }, + stickTop: { id: 8, retType: 'boolean' }, + sortOrder: { id: 9, retType: 'number' }, + version: { id: 10, retType: 'number' }, + deleteFlag: { id: 11, retType: 'boolean' }, + createTime: { id: 12, retType: 'number' }, + updateTime: { id: 13, retType: 'number' }, + lastReadTime: { id: 14, retType: 'number' }, + }, + Tn = { + type: { id: 1, retType: 'number' }, + oneClickClearUnreadType: { id: 2, retType: 'number' }, + oneClickClearUnreadConversationType: { id: 3, retConverter: _t }, + oneClickClearUnreadGroupId: { id: 4, retType: 'string' }, + oneClickClearUnreadVersion: { id: 5, retType: 'number' }, + oneClickClearUnreadLastReadTime: { id: 6, retType: 'number' }, + }, + Sn = { + v2ConversationCreate: { + sid: 28, + cid: 1, + service: _n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { conversationId: 1 } }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationDelete: { + sid: 28, + cid: 2, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationId: 1, clearMessage: 2 }, + }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationUpdate: { + sid: 28, + cid: 3, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationId: 1, serverExtension: 2 }, + }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationSetTop: { + sid: 28, + cid: 4, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationId: 1, stickTop: 2 }, + }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationUnreadClear: { + sid: 28, + cid: 5, + service: _n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { conversationId: 1 } }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationGet: { + sid: 28, + cid: 6, + service: _n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { conversationId: 1 } }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(En) }], + }, + v2ConversationGetByIds: { + sid: 28, + cid: 7, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationIds: 1 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationGetList: { + sid: 28, + cid: 8, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { cursor: 1, limit: 2 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { + type: 'Property', + name: 'info', + reflectMapper: { 1: 'hasMore', 2: 'offset' }, + }, + ], + }, + v2ConversationsDelete: { + sid: 28, + cid: 17, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationIds: 1, clearMessage: 2 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationsUnreadClear: { + sid: 28, + cid: 18, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationIds: 1 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationSync: { + sid: 28, + cid: 19, + service: _n, + params: [{ type: 'Property', name: 'tag', reflectMapper: { cursor: 1 } }], + response: [ + { + type: 'Property', + name: 'info', + reflectMapper: { 1: 'nextCursor', 2: 'syncType' }, + }, + ], + }, + v2ConversationNotifySync: { + sid: 28, + cid: 20, + service: _n, + response: [ + { + type: 'Property', + name: 'info', + reflectMapper: { 1: 'nextCursor', 2: 'syncType' }, + }, + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + ], + }, + v2ConversationNotifySyncOnline: { + sid: 28, + cid: 21, + service: _n, + response: [ + { type: 'Property', name: 'info', reflectMapper: ft(Tn) }, + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + ], + }, + v2ConversationClearTotalUnread: { + sid: 28, + cid: 23, + service: _n, + response: [{ type: 'Property', name: 'info', reflectMapper: ft(Tn) }], + }, + v2ConversationClearTypeUnread: { + sid: 28, + cid: 24, + service: _n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationType: 1 }, + }, + ], + response: [{ type: 'Property', name: 'info', reflectMapper: ft(Tn) }], + }, + v2ConversationClearGroupUnread: { + sid: 28, + cid: 25, + service: _n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { groupId: 1 } }, + ], + response: [{ type: 'Property', name: 'info', reflectMapper: ft(Tn) }], + }, + syncConversationReadTime: { + sid: 4, + cid: 14, + service: _n, + response: [ + { type: 'StrLongMap', name: 'p2p' }, + { type: 'LongLongMap', name: 'team' }, + { type: 'Long', name: 'timetag' }, + ], + }, + syncSuperTeamReadTime: { + sid: 4, + cid: 20, + service: _n, + response: [{ type: 'LongLongMap', name: 'superTeam' }], + }, + v2SyncSessionsWithMoreRoaming: { + sid: 4, + cid: 22, + service: _n, + response: [], + }, + v2SyncSessionReliableInfo: { sid: 4, cid: 25, service: _n, response: [] }, + v2MarkConversationReadTime: { + sid: 30, + cid: 16, + service: _n, + params: [ + { type: 'Byte', name: 'scene' }, + { type: 'String', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2MarkSuperTeamReadTime: { + sid: 32, + cid: 25, + service: _n, + params: [ + { type: 'Long', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2MultiDeviceConversationReadTime: { + sid: 30, + cid: 116, + service: _n, + response: [ + { type: 'Byte', name: 'scene' }, + { type: 'String', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2MultiDeviceSuperTeamReadTime: { + sid: 21, + cid: 125, + service: _n, + response: [ + { type: 'Long', name: 'to' }, + { type: 'Long', name: 'timetag' }, + ], + }, + } +class Cn { + constructor(e, t) { + ;(this.totalUnreadCount = void 0), + (this.unreadCountByFilter = {}), + (this.core = e), + (this.service = t) + } + reset() { + ;(this.totalUnreadCount = void 0), (this.unreadCountByFilter = {}) + } + getTotalUnreadCount() { + return this.totalUnreadCount + } + resetTotalAfterSyncDone() { + var e = this.service.model + .getAll() + .reduce((e, t) => e + (t.unreadCount || 0), 0), + t = this.totalUnreadCount + return ( + (void 0 !== t && t === e) || + ((this.totalUnreadCount = e), + this.service.emit('onTotalUnreadCountChanged', e)), + e + ) + } + digestUnreadCountChange() { + this._digest() + } + _digest() { + var e = this.totalUnreadCount, + t = this.service.model + .getAll() + .reduce((e, t) => e + (t.unreadCount || 0), 0) + this.core.logger.log( + `V2NIMConversation::digestUnreadCountChange:oldUnreadCount ${e}, newUnreadCount ${t}` + ), + e !== t && + ((this.totalUnreadCount = t), + this.service.emit('onTotalUnreadCountChanged', t)), + Object.keys(this.unreadCountByFilter).forEach((e) => { + var t = JSON.parse(e), + i = this.getUnreadCountByFilter(t), + r = this.unreadCountByFilter[e] + ;(this.unreadCountByFilter[e] = i), + (t.equals = An.bind(t)), + r !== i && this.service.emit('onUnreadCountChangedByFilter', t, i) + }) + } + getUnreadCountByIds(e) { + return e.reduce((e, t) => { + var i = this.service.model.getById(t) + return e + ((i && i.unreadCount) || 0) + }, 0) + } + getUnreadCountByFilter(e) { + var t = this.service.model.count() + return this.service.model + .getByOption(0, t, { + conversationTypes: e.conversationTypes, + conversationGroupIds: e.conversationGroupId + ? [e.conversationGroupId] + : void 0, + ignoreMuted: e.ignoreMuted, + }) + .conversationList.reduce((e, t) => e + (t.unreadCount || 0), 0) + } + addFilter(e) { + var t = Nn(e) + if (void 0 !== this.unreadCountByFilter[t]) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_ALREADY_EXIST }) + var i = JSON.parse(t), + r = this.getUnreadCountByFilter(i) + ;(this.unreadCountByFilter[t] = r), + this.service.emit('onUnreadCountChangedByFilter', i, r) + } + deleteFilter(e) { + var t = Nn(e) + if (void 0 === this.unreadCountByFilter[t]) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + delete this.unreadCountByFilter[t] + } +} +function Nn(e) { + var { conversationTypes: t } = e + return ( + t && (t = t.sort()), + JSON.stringify({ + conversationGroupId: e.conversationGroupId, + conversationTypes: t, + ignoreMuted: e.ignoreMuted, + }) + ) +} +function An(e) { + return JSON.stringify(this) === Nn(e) +} +var Rn = { createTime: { type: 'number' }, updateTime: { type: 'number' } } +function On(e) { + return e && e.length > 0 ? e.map((e) => bn(e)) : [] +} +function bn(e) { + return Et(Rn, e) +} +function kn(e) { + var t = JSON.parse(e) + return Object.keys(t).map((e) => ({ + conversationId: e, + error: new he({ code: t[e] }), + })) +} +var Vn, + Pn = { + type: { type: 'number' }, + deleteVersion: { type: 'number' }, + conversationIds: { type: 'object' }, + } +function Ln(e) { + return Et(Pn, e) +} +!(function (e) { + ;(e[(e.createConversationGroup = 1)] = 'createConversationGroup'), + (e[(e.deleteConversationGroup = 2)] = 'deleteConversationGroup'), + (e[(e.updateConversationGroup = 3)] = 'updateConversationGroup'), + (e[(e.addConversationToGroup = 4)] = 'addConversationToGroup'), + (e[(e.removeConversationFromGroup = 5)] = 'removeConversationFromGroup') +})(Vn || (Vn = {})) +class Dn { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + get hasUserService() { + var e + return !!(null === (e = this.core.V2NIMUserService) || void 0 === e + ? void 0 + : e.name) + } + get hasFriendService() { + var e + return !!(null === (e = this.core.V2NIMFriendService) || void 0 === e + ? void 0 + : e.name) + } + get hasTeamService() { + var e + return !!(null === (e = this.core.V2NIMTeamService) || void 0 === e + ? void 0 + : e.name) + } + get hasMessageService() { + var e + return !!(null === (e = this.core.V2NIMMessageService) || void 0 === e + ? void 0 + : e.name) + } + computeConvs(e) { + return e.map((e) => this.computeConv(e)) + } + computeConv(e) { + var t, i, r, s, n + if (0 === e.type) return e + var o = this.core.V2NIMConversationIdUtil.parseConversationType( + e.conversationId + ), + a = this.core.V2NIMConversationIdUtil.parseConversationTargetId( + e.conversationId + ), + c = {} + if ( + (e.lastReadTime || + (c.lastReadTime = this.service.model.getReadTime(e.conversationId)), + (null === (t = this.core.V2NIMSettingService) || void 0 === t + ? void 0 + : t.name) && + (c.mute = this.core.V2NIMSettingService.getConversationMuteStatus( + e.conversationId + )), + 1 === o && this.hasUserService) + ) { + var d, + l = this.core.V2NIMUserService.model.getUser(a), + p = this.hasFriendService + ? this.core.V2NIMFriendService.model.getFriend(a) + : void 0 + e.conversationId !== + (null === (i = e.lastMessage) || void 0 === i + ? void 0 + : i.messageRefer.conversationId) || + (0 !== + (null === (r = e.lastMessage) || void 0 === r + ? void 0 + : r.lastMessageState) && + 2 !== + (null === (s = e.lastMessage) || void 0 === s + ? void 0 + : s.lastMessageState)) || + (d = + null === (n = e.lastMessage) || void 0 === n ? void 0 : n.senderName), + (c.name = + (null == p ? void 0 : p.alias) || + (null == l ? void 0 : l.name) || + d || + a), + (c.avatar = (null == l ? void 0 : l.avatar) || '') + } else if (2 === o && this.hasTeamService) { + var h = this.core.V2NIMTeamService.model.getById(a, 1) + ;(c.name = (null == h ? void 0 : h.name) || a), + (c.avatar = (null == h ? void 0 : h.avatar) || '') + } else if (3 === o && this.hasTeamService) { + var u = this.core.V2NIMTeamService.model.getById(a, 2) + ;(c.name = (null == u ? void 0 : u.name) || a), + (c.avatar = (null == u ? void 0 : u.avatar) || '') + } + return Object.assign(e, c), e + } + computeReadTimeForMark(e) { + var t, + i, + r, + s = e.conversationId, + n = this.service.model.getReadTime(s) + if ( + null === + (i = + null === (t = null == e ? void 0 : e.lastMessage) || void 0 === t + ? void 0 + : t.messageRefer) || void 0 === i + ? void 0 + : i.createTime + ) + r = e.lastMessage.messageRefer.createTime + else { + if (!this.core.timeOrigin.checkNodeReliable()) return n || 0 + r = this.core.timeOrigin.getNTPTime() + } + return r + } +} +class wn { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = this.service.model), + (this.logger = this.core.logger) + } + get ifEnabled() { + return !0 === this.core.options.enableV2CloudConversation + } + v2ConversationNotifySyncHandler(e) { + this.ifEnabled && + this.service.versionCache.recvConversationFromSyncAction(e) + } + v2ConversationNotifySyncOnlineHandler(e) { + this.ifEnabled && this.service.versionCache.recvConversation(e) + } + syncConversationReadTimeHandler(e) { + var t, i, r + if (this.ifEnabled) { + if ( + null === (t = null == e ? void 0 : e.content) || void 0 === t + ? void 0 + : t.p2p + ) + for (var [s, n] of Object.entries(e.content.p2p)) + this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.p2pConversationId(s), + n + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.p2pConversationId(s), + n + ) + if ( + null === + (r = + null === (i = null == e ? void 0 : e.content) || void 0 === i + ? void 0 + : i.team) || void 0 === r + ? void 0 + : r.m_map + ) + for (var [o, a] of Object.entries(e.content.team.m_map)) + this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.teamConversationId(o), + a + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.teamConversationId(o), + a + ) + } + } + syncSuperTeamReadTimeHandler(e) { + var t, i + if ( + this.ifEnabled && + (null === + (i = + null === (t = null == e ? void 0 : e.content) || void 0 === t + ? void 0 + : t.superTeam) || void 0 === i + ? void 0 + : i.m_map) + ) + for (var [r, s] of Object.entries(e.content.superTeam.m_map)) + this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.superTeamConversationId(r), + s + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.superTeamConversationId(r), + s + ) + } + v2MultiDeviceConversationReadTimeHandler(e) { + var t + this.ifEnabled && + (null === (t = null == e ? void 0 : e.content) || void 0 === t + ? void 0 + : t.to) && + (0 === e.content.scene + ? (this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.p2pConversationId(e.content.to), + e.content.timetag + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.p2pConversationId(e.content.to), + e.content.timetag + )) + : (this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.teamConversationId(e.content.to), + e.content.timetag + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.teamConversationId(e.content.to), + e.content.timetag + ))) + } + v2MultiDeviceSuperTeamReadTimeHandler(e) { + var t + this.ifEnabled && + (null === (t = null == e ? void 0 : e.content) || void 0 === t + ? void 0 + : t.to) && + (this.model.updateReadTime( + this.core.V2NIMConversationIdUtil.superTeamConversationId(e.content.to), + e.content.timetag + ), + this.service.emit( + 'onConversationReadTimeUpdated', + this.core.V2NIMConversationIdUtil.superTeamConversationId(e.content.to), + e.content.timetag + )) + } +} +class Un { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = this.service.model), + (this.versionCache = this.service.versionCache), + (this.logger = this.core.logger) + } + setListener() { + this.core.eventBus.on('V2NIMLoginService/loginLifeCycleLoginSucc', () => + this.versionCache.doSync() + ), + this.core.eventBus.on( + 'V2NIMConversationService/conversationOnlineSyncNotify', + this.conversationOnlineSyncNotify.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/sendMessage', + this.sendMessage.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/deleteMessages', + this.deleteMessages.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/revokeMessages', + this.revokeMessages.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/roamingMsgs', + this.roamingOrOfflineMsgs.bind(this) + ), + this.core.eventBus.on( + 'V2NIMMessageService/offlineMsgs', + this.roamingOrOfflineMsgs.bind(this) + ), + this.core.eventBus.on( + 'V2NIMSettingService/setMute', + this.setMute.bind(this) + ) + } + beforeEmit(e, ...t) { + var i, + r, + s = `${this.service.name}::emit ${e.toString()}` + if ('onConversationCreated' === e) { + var n = t[0] + this.logger.log( + `${s}`, + `id:${n.conversationId};unread:${n.unreadCount};lastMsg:${ + null === (i = n.lastMessage) || void 0 === i + ? void 0 + : i.messageRefer.messageClientId + }/${ + null === (r = n.lastMessage) || void 0 === r + ? void 0 + : r.messageRefer.messageServerId + }` + ) + } else if ('onConversationChanged' === e) { + var o = t[0] + this.logger.log( + `${s}`, + o.map((e) => { + var t, i + return `id:${e.conversationId};unread:${e.unreadCount};lastMsg:${ + null === (t = e.lastMessage) || void 0 === t + ? void 0 + : t.messageRefer.messageClientId + }/${ + null === (i = e.lastMessage) || void 0 === i + ? void 0 + : i.messageRefer.messageServerId + }` + }) + ) + } else this.logger.log(`${s}`, ...t) + } + conversationOnlineSyncNotify(e, t) { + var i + !1 !== + (null === (i = null == t ? void 0 : t.messageConfig) || void 0 === i + ? void 0 + : i.lastMessageUpdateEnabled) && + ((e.content.info = gt(e.content.info, ft(Tn))), + (e.content.data = gt(e.content.data, ft(En))), + t && (e.content.data.lastMessage = dn(this.core, t, 0)), + (e.content.datas = [e.content.data]), + this.service.handler.v2ConversationNotifySyncOnlineHandler.call(this, e)) + } + sendMessage(e, t) { + var i, r + ;(1 === t && + !0 === + (null === (i = e.messageConfig) || void 0 === i + ? void 0 + : i.historyEnabled)) || + (!1 !== + (null === (r = null == e ? void 0 : e.messageConfig) || void 0 === r + ? void 0 + : r.lastMessageUpdateEnabled) && + this.versionCache.updateModelWithLastMessage(e.conversationId, e, 2, t)) + } + deleteMessages(e) { + var t = e.map((e) => e.messageRefer.conversationId) + this.versionCache.backfillLastMsg(t, !0) + } + revokeMessages(e) { + this.versionCache.updateModelByRevoke(e) + } + roamingOrOfflineMsgs(e) { + var t = ii(e.map((e) => e.conversationId)) + this.versionCache.backfillLastMsg(t, !1) + } + setMute(e, t) { + var i = this.model.getById(e) + i && + i.mute !== t && + ((i.mute = t), + this.model.upsert(i), + this.service.triggerConversationChanged([i])) + } +} +class xn extends ni { + constructor(e, t = {}) { + super('V2NIMConversationService', e), + (this.config = {}), + (this.model = new fn()), + (this.versionCache = new In(this.core, this)), + (this.unread = new Cn(this.core, this)), + (this.compute = new Dn(this.core, this)), + (this.event = new Un(this.core, this)), + (this.handler = new wn(this.core, this)), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + 'v2' === this.core.options.apiVersion && + !0 === this.core.options.enableV2CloudConversation && + (vt({ cmdMap: Mn, cmdConfig: Sn }), + this.setOptions(t), + this.setListener()) + } + setOptions(e) { + this.config = Object.assign(this.config, e) + } + setListener() { + this.event.setListener() + } + reset() { + this.versionCache.reset(), this.model.reset(), this.unread.reset() + } + emit(e, ...t) { + return this.event.beforeEmit(e, ...t), super.emit(e, ...t) + } + checkEnable() { + if (!0 !== this.core.options.enableV2CloudConversation) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2CloudConversation is not enabled' }, + }) + } + getConversationList(e, t) { + this.checkEnable(), + this.checkV2(), + ye({ offset: { type: 'number', min: 0 } }, { offset: e }, '', !0), + ye({ limit: { type: 'number', min: 1 } }, { limit: t }, '', !0), + this.core.V2NIMLoginService.checkIllegalState() + var i = this.model.getByOption(e, t, {}) + return ( + (i.conversationList = this.compute.computeConvs(i.conversationList)), + Promise.resolve(i) + ) + } + getConversationListByOption(e, t, i) { + this.checkEnable(), + this.checkV2(), + ye({ offset: { type: 'number', min: 0 } }, { offset: e }, '', !0), + ye({ limit: { type: 'number', min: 1 } }, { limit: t }, '', !0), + ye( + { + option: { + type: 'object', + required: !0, + rules: { + conversationTypes: { + type: 'array', + itemType: 'number', + required: !1, + }, + onlyUnread: { type: 'boolean', required: !1 }, + conversationGroupIds: { + type: 'array', + itemType: 'string', + required: !1, + }, + }, + }, + }, + { option: i }, + '', + !0 + ), + this.core.V2NIMLoginService.checkIllegalState() + var r = this.model.getByOption(e, t, i) + return ( + (r.conversationList = this.compute.computeConvs(r.conversationList)), + Promise.resolve(r) + ) + } + getConversation(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), this.checkV2(), Me(this.core.account, e) + var t = this.model.getById(e) + if (t) return this.compute.computeConv(t) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + }) + } + getConversationListByIds(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { conversationIds: { type: 'array', itemType: 'string', min: 1 } }, + { conversationIds: e }, + '', + !0 + ), + this.core.V2NIMLoginService.checkIllegalState() + var t = e.map((e) => this.model.getById(e)).filter((e) => !!e) + return this.compute.computeConvs(t) + }) + } + createConversation(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), this.checkV2(), Me(this.core.account, e) + var t = Ve( + yield this.core.sendCmd('v2ConversationCreate', { + tag: { conversationId: e }, + }), + 'content.data' + ), + i = pn(this.core, t) + this.versionCache.compareAndUpdateModel([i]) + var r = this.model.getById(e) + if (r) return this.compute.computeConv(r) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + }) + } + deleteConversation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + Me(this.core.account, e), + ye( + { clearMessage: { type: 'boolean', required: !1 } }, + { clearMessage: t }, + '', + !0 + ) + try { + yield this.core.sendCmd('v2ConversationDelete', { + tag: { conversationId: e, clearMessage: Number(t || !1) }, + }) + } catch (t) { + this.logger.warn( + `V2NIMConversationService:deleteConversation: delete conversation failed: ${e}` + ) + } + this.model.getById(e) && + (t && + this.core.eventBus.emit( + 'V2NIMConversationService/deleteConversation', + [e] + ), + this.versionCache.compareAndDeleteModel([e])) + }) + } + deleteConversationListByIds(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { conversationIds: { type: 'array', itemType: 'string', min: 1 } }, + { conversationIds: e }, + '', + !0 + ), + ye( + { clearMessage: { type: 'boolean', required: !1 } }, + { clearMessage: t }, + '', + !0 + ) + var i = kn( + Ve( + yield this.core.sendCmd('v2ConversationsDelete', { + tag: { + conversationIds: JSON.stringify(e), + clearMessage: Number(t || !1), + }, + }), + 'content.info.failedMap' + ) + ).filter( + (e) => + e.error.code !== de.V2NIM_ERROR_CODE_CONVERSATION_NOT_EXIST || + !this.model.getById(e.conversationId) + ) + return ( + i.length < e.length && + (t && + this.core.eventBus.emit( + 'V2NIMConversationService/deleteConversation', + e + ), + this.versionCache.compareAndDeleteModel(e)), + i + ) + }) + } + getStickTopConversationList() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.model.getStickTopList() + ) + }) + } + stickTopConversation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + Me(this.core.account, e), + ye({ stickTop: { type: 'boolean' } }, { stickTop: t }, '', !0) + var i = Ve( + yield this.core.sendCmd('v2ConversationSetTop', { + tag: { conversationId: e, stickTop: Number(t) }, + }), + 'content.data' + ), + r = pn(this.core, i) + this.versionCache.compareAndUpdateModel([r]) + }) + } + updateConversation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + Me(this.core.account, e), + ye( + { + updateInfo: { + type: 'object', + required: !0, + rules: { serverExtension: { type: 'string' } }, + }, + }, + { updateInfo: t }, + '', + !0 + ) + var i = Ve( + yield this.core.sendCmd('v2ConversationUpdate', { + tag: Object.assign({ conversationId: e }, t), + }), + 'content.data' + ), + r = pn(this.core, i) + this.versionCache.compareAndUpdateModel([r]) + }) + } + updateConversationLocalExtension(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + Me(this.core.account, e), + ye( + { localExtension: { type: 'string' } }, + { localExtension: t }, + '', + !0 + ) + var i = this.model.getById(e) + if (!i) throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + if (i.localExtension !== t) { + var r = Object.assign(Object.assign({}, i), { localExtension: t }) + this.model.upsert(r), this.triggerConversationChanged([r]) + } + }) + } + getTotalUnreadCount() { + return ( + this.checkEnable(), this.checkV2(), this.unread.getTotalUnreadCount() || 0 + ) + } + getUnreadCountByIds(e) { + this.checkEnable(), + this.checkV2(), + ye( + { conversationIds: { type: 'array', itemType: 'string', min: 1 } }, + { conversationIds: e }, + '', + !0 + ) + var t = this.unread.getUnreadCountByIds(e) + return Promise.resolve(t) + } + getUnreadCountByFilter(e) { + this.checkEnable(), this.checkV2(), this.valiteFilter(e) + var t = this.unread.getUnreadCountByFilter(e) + return Promise.resolve(t) + } + clearTotalUnreadCount() { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), this.checkV2() + var e = Ve( + yield this.core.sendCmd('v2ConversationClearTotalUnread'), + 'content.info' + ) + this.versionCache.compareAndClearUnreadInModel(e) + }) + } + clearUnreadCountByIds(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { conversationIds: { type: 'array', itemType: 'string', min: 1 } }, + { conversationIds: e }, + '', + !0 + ) + var t = yield this.core.sendCmd('v2ConversationsUnreadClear', { + tag: { conversationIds: JSON.stringify(e) }, + }), + i = ln(this.core, Ve(t, 'content.datas')), + r = kn(Ve(t, 'content.info.failedMap')) + return this.versionCache.compareAndUpdateModel(i), r + }) + } + clearUnreadCountByGroupId(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye({ groupId: { type: 'string' } }, { groupId: e }, '', !0), + yield this.core.sendCmd('v2ConversationClearGroupUnread', { + tag: { groupId: e }, + }) + }) + } + clearUnreadCountByTypes(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye({ types: vn }, { types: e }, '', !0) + var t = Ve( + yield this.core.sendCmd('v2ConversationClearTypeUnread', { + tag: { conversationType: JSON.stringify(e) }, + }), + 'content.info' + ) + this.versionCache.compareAndClearUnreadInModel(t) + }) + } + markConversationRead(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + this.checkLogin(), + Me(this.core.account, e) + var t = this.model.getById(e) + if (!t) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Conversation not exist' }, + }) + var i = this.core.V2NIMConversationIdUtil.parseConversationTargetId(e), + r = this.core.V2NIMConversationIdUtil.parseConversationType(e), + s = this.model.getReadTime(e), + n = this.compute.computeReadTimeForMark(t) + return s >= n + ? (this.logger.log( + `V2Conv::markConversationRead currentReadTime >= readTime ${e},${s},${n}` + ), + s) + : (3 === r + ? yield this.core.sendCmd('v2MarkSuperTeamReadTime', { + timetag: n, + to: i, + }) + : yield this.core.sendCmd('v2MarkConversationReadTime', { + scene: 1 === r ? 0 : 2 === r ? 1 : 2, + timetag: n, + to: i, + }), + this.model.updateReadTime(e, n), + n) + }) + } + getConversationReadTime(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkEnable(), + this.checkV2(), + Me(this.core.account, e), + this.model.getReadTime(e) + ) + }) + } + subscribeUnreadCountByFilter(e) { + var t + this.checkEnable(), + this.checkV2(), + this.checkLogin(), + this.valiteFilter(e), + 0 === + (null === (t = e.conversationTypes) || void 0 === t + ? void 0 + : t.length) && delete e.conversationTypes, + this.unread.addFilter(e) + } + unsubscribeUnreadCountByFilter(e) { + var t + this.checkEnable(), + this.checkV2(), + this.checkLogin(), + this.valiteFilter(e), + 0 === + (null === (t = e.conversationTypes) || void 0 === t + ? void 0 + : t.length) && delete e.conversationTypes, + this.unread.deleteFilter(e) + } + valiteFilter(e) { + if ( + (ye( + { + filter: { + type: 'object', + required: !0, + rules: { + conversationTypes: { + type: 'array', + itemType: 'number', + required: !1, + }, + conversationGroupId: { + type: 'string', + allowEmpty: !1, + required: !1, + }, + ignoreMuted: { type: 'boolean', required: !1 }, + }, + }, + }, + { filter: e }, + '', + !0 + ), + void 0 === e.conversationTypes && + void 0 === e.conversationGroupId && + !0 !== e.ignoreMuted) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Filter cannot be empty' }, + }) + } + triggerConversationChanged(e) { + ;(e = this.compute.computeConvs(e)), + (e = JSON.parse(JSON.stringify(e))).forEach((e) => { + e.lastMessage || (e.lastMessage = void 0), delete e.lastMessageState + }), + this.emit('onConversationChanged', e) + } + triggerConversationCreated(e) { + ;(e = this.compute.computeConv(e)), + delete (e = JSON.parse(JSON.stringify(e))).lastMessageState, + this.emit('onConversationCreated', e) + } +} +var Fn, + Bn = { + '28_9': 'v2ConversationGroupCreate', + '28_10': 'v2ConversationGroupDelete', + '28_11': 'v2ConversationGroupUpdate', + '28_12': 'v2ConversationGroupGet', + '28_13': 'v2ConversationGroupsGet', + '28_14': 'v2ConversationGroupListGet', + '28_15': 'v2ConversationGroupAddTo', + '28_16': 'v2ConversationGroupRemoveFrom', + '28_22': 'v2ConversationGroupNotifySyncOnline', + }, + $n = 'V2NIMConversationGroupService', + Gn = { + groupId: 1, + name: 2, + serverExtension: 3, + createTime: 4, + updateTime: 5, + }, + jn = { + v2ConversationGroupCreate: { + sid: 28, + cid: 9, + service: $n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationIds: 1, name: 2, serverExtension: 3 }, + }, + ], + response: [ + { type: 'Property', name: 'data', reflectMapper: ft(Gn) }, + { type: 'PropertyArray', name: 'conversations', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationGroupDelete: { + sid: 28, + cid: 10, + service: $n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { groupId: 1 } }, + ], + response: [ + { + type: 'Property', + name: 'info', + reflectMapper: { 1: 'type', 2: 'deleteVersion', 3: 'groupList' }, + }, + ], + }, + v2ConversationGroupUpdate: { + sid: 28, + cid: 11, + service: $n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { groupId: 1, name: 2, serverExtension: 3 }, + }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Gn) }], + }, + v2ConversationGroupGet: { + sid: 28, + cid: 12, + service: $n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { groupId: 1 } }, + ], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Gn) }], + }, + v2ConversationGroupsGet: { + sid: 28, + cid: 13, + service: $n, + params: [ + { type: 'Property', name: 'tag', reflectMapper: { groupIds: 1 } }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Gn) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationGroupListGet: { + sid: 28, + cid: 14, + service: $n, + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(Gn) }, + ], + }, + v2ConversationGroupAddTo: { + sid: 28, + cid: 15, + service: $n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { groupId: 1, conversationIds: 2 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationGroupRemoveFrom: { + sid: 28, + cid: 16, + service: $n, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { groupId: 1, conversationIds: 2 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(En) }, + { type: 'Property', name: 'info', reflectMapper: { 1: 'failedMap' } }, + ], + }, + v2ConversationGroupNotifySyncOnline: { + sid: 28, + cid: 22, + service: $n, + response: [ + { + type: 'Property', + name: 'info', + reflectMapper: { + 1: 'type', + 2: 'deleteVersion', + 3: 'conversationIds', + }, + }, + { type: 'Property', name: 'data', reflectMapper: ft(Gn) }, + ], + }, + }, + qn = 'V2NIMMessageLogUtil', + Hn = { + '30_6': 'v2GetMessageList', + '33_2': 'v2GetMessageListByRefers', + '30_9': 'v2ClearRoamingMessage', + '30_18': 'v2ClearHistoryMessage', + '7_118': 'onClearHistoryMessage', + '4_24': 'syncClearHistoryMessage', + '31_23': 'v2GetTeamMessageList', + '32_14': 'v2GetSuperTeamMessageList', + }, + Yn = { + conversationType: { id: 0, retType: 'number' }, + receiverId: 1, + deleteRoam: { id: 2, converter: yt }, + teamId: 3, + onlineSync: { id: 4, converter: yt }, + deleteTime: { id: 6, retType: 'number' }, + serverExtension: 7, + }, + Kn = [ + { type: 'Long', name: 'beginTime' }, + { type: 'Long', name: 'endTime' }, + { type: 'Long', name: 'lastMsgId' }, + { type: 'Int', name: 'limit' }, + { type: 'Bool', name: 'direction' }, + { type: 'LongArray', name: 'msgTypes' }, + ], + Wn = { + v2GetMessageList: { + sid: 30, + cid: 6, + service: qn, + params: [{ type: 'String', name: 'to' }, ...Kn], + response: [ + { type: 'PropertyArray', name: 'msgs', reflectMapper: ft(Zr) }, + ], + }, + v2GetMessageListByRefers: { + sid: 33, + cid: 2, + service: qn, + params: [ + { + type: 'PropertyArray', + name: 'tag', + reflectMapper: Zr, + select: [ + 'conversationType', + 'senderId', + 'receiverId', + 'createTime', + 'messageServerId', + ], + }, + ], + response: [ + { type: 'PropertyArray', name: 'msgs', reflectMapper: ft(Zr) }, + ], + }, + v2ClearRoamingMessage: { + sid: 30, + cid: 9, + service: qn, + params: [{ type: 'StrArray', name: 'conversationIds' }], + }, + v2ClearHistoryMessage: { + sid: 30, + cid: 18, + service: qn, + params: [{ type: 'Property', name: 'tag', reflectMapper: Yn }], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2GetTeamMessageList: { + sid: 31, + cid: 23, + service: qn, + params: [{ type: 'Long', name: 'to' }, ...Kn], + response: [ + { type: 'PropertyArray', name: 'msgs', reflectMapper: ft(Zr) }, + ], + }, + v2GetSuperTeamMessageList: { + sid: 32, + cid: 14, + service: qn, + params: [{ type: 'Long', name: 'to' }, ...Kn], + response: [ + { type: 'PropertyArray', name: 'msgs', reflectMapper: ft(Zr) }, + ], + }, + onClearHistoryMessage: { + sid: 7, + cid: 118, + service: qn, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Yn) }], + }, + syncClearHistoryMessage: { + sid: 4, + cid: 24, + service: qn, + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Yn) }, + ], + }, + }, + Jn = 'V2NIMMessageExtendUtil', + zn = { + '29_5': 'v2VoiceToText', + '33_15': 'v2PinMessage', + '33_16': 'v2UpdatePinMessage', + '33_17': 'v2UnpinMessage', + '23_18': 'onPinMessage', + '23_19': 'onUpdatePinMessage', + '23_20': 'onUnpinMessage', + '23_115': 'onPinMessage', + '23_116': 'onUpdatePinMessage', + '23_117': 'onUnpinMessage', + '33_21': 'v2GetPinMessageList', + '33_3': 'v2AddQuickComment', + '33_4': 'v2RemoveQuickComment', + '33_7': 'v2GetQuickComment', + '23_5': 'onAddQuickComment', + '23_6': 'onRemoveQuickComment', + '23_103': 'onAddQuickComment', + '23_104': 'onRemoveQuickComment', + '33_8': 'v2AddCollection', + '33_9': 'v2RemoveCollections', + '33_10': 'v2UpdateCollectionExtension', + '33_11': 'v2GetCollectionListByOption', + '30_26': 'v2SearchCloudMessagesGroupByConversation', + '30_27': 'v2SearchCloudMessages', + '30_34': 'v2SearchCloudMessagesEx', + '33_1': 'v2GetThreadMessageList', + }, + Xn = { + conversationType: { + id: 1, + converter: os, + retConverter: as, + access: 'messageRefer.conversationType', + }, + senderId: { id: 2, access: 'messageRefer.senderId' }, + receiverId: { id: 3, access: 'messageRefer.receiverId' }, + createTime: { id: 4, retType: 'number', access: 'messageRefer.createTime' }, + messageServerId: { id: 5, access: 'messageRefer.messageServerId' }, + messageClientId: { id: 6, access: 'messageRefer.messageClientId' }, + detail: 7, + modify: { id: 8, retType: 'number' }, + }, + Qn = { + conversationType: { + id: 1, + access: 'messageRefer.conversationType', + retConverter: as, + }, + senderId: { id: 2, access: 'messageRefer.senderId' }, + receiverId: { id: 3, access: 'messageRefer.receiverId' }, + time: { + id: 4, + access: 'messageRefer.createTime', + converter: yt, + retType: 'number', + }, + messageServerId: { id: 5, access: 'messageRefer.messageServerId' }, + messageClientId: { id: 6, access: 'messageRefer.messageClientId' }, + operatorId: 7, + serverExtension: 8, + createTime: { id: 9, converter: yt, retType: 'number' }, + updateTime: { id: 10, converter: yt, retType: 'number' }, + }, + Zn = { + operatorId: 1, + index: { id: 2, retType: 'number' }, + createTime: { id: 3, retType: 'number' }, + serverExtension: 4, + pushEnabled: { id: 5, access: 'pushConfig.pushEnabled', converter: yt }, + needBadge: { id: 6, access: 'pushConfig.needBadge', converter: yt }, + title: { id: 7, access: 'pushConfig.title' }, + pushContent: { id: 8, access: 'pushConfig.pushContent' }, + pushPayload: { id: 9, access: 'pushConfig.pushPayload' }, + }, + eo = { + accid: 1, + serverExtension: 2, + createTime: { id: 3, retType: 'number' }, + updateTime: { id: 4, retType: 'number' }, + }, + to = { + collectionId: 1, + collectionType: { id: 2, retType: 'number' }, + collectionData: 3, + serverExtension: 4, + uniqueId: 5, + createTime: { id: 6, retType: 'number' }, + updateTime: { id: 7, retType: 'number' }, + }, + io = { + keyword: 1, + beginTime: 2, + endTime: 3, + messageLimit: 5, + sortOrder: { id: 6, converter: (e) => (0 === e ? 2 : 1) }, + p2pAccountIds: { id: 7, converter: (e) => e.join(',') }, + teamIds: { id: 8, converter: (e) => e.join(',') }, + senderAccountIds: { id: 9, converter: (e) => e.join(',') }, + messageTypes: { id: 10, converter: (e) => e.join(',') }, + messageSubtypes: { id: 11, converter: (e) => e.join(',') }, + }, + ro = { + keywordList: { id: 1, converter: (e) => Mt(e) }, + keywordMatchType: 2, + searchStartTime: 3, + searchTimePeriod: 4, + pageToken: 5, + limit: 7, + direction: 8, + conversationId: 9, + senderAccountIds: { id: 12, converter: (e) => e.join(',') }, + messageTypes: { id: 13, converter: (e) => e.join(',') }, + messageSubtypes: { id: 14, converter: (e) => e.join(',') }, + }, + so = Object.assign(Object.assign({}, io), { conversationLimit: 4 }), + no = { + v2PinMessage: { + sid: 33, + cid: 15, + service: Jn, + params: [ + { + type: 'Property', + name: 'msg', + reflectMapper: Zr, + select: [ + 'conversationType', + 'receiverId', + 'senderId', + 'createTime', + 'messageClientId', + 'messageServerId', + ], + }, + { type: 'Property', name: 'msgPin', reflectMapper: eo }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2UnpinMessage: { + sid: 33, + cid: 17, + service: Jn, + params: [ + { + type: 'Property', + name: 'msg', + reflectMapper: Zr, + select: [ + 'conversationType', + 'receiverId', + 'senderId', + 'createTime', + 'messageClientId', + 'messageServerId', + ], + }, + { type: 'Property', name: 'msgPin', reflectMapper: eo }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2UpdatePinMessage: { + sid: 33, + cid: 16, + service: Jn, + params: [ + { + type: 'Property', + name: 'msg', + reflectMapper: Zr, + select: [ + 'conversationType', + 'receiverId', + 'senderId', + 'createTime', + 'messageClientId', + 'messageServerId', + ], + }, + { type: 'Property', name: 'msgPin', reflectMapper: eo }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2GetPinMessageList: { + sid: 33, + cid: 21, + service: Jn, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { conversationId: 1, timetag: 2 }, + }, + ], + response: [ + { type: 'Long', name: 'timetag' }, + { type: 'Bool', name: 'changed' }, + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Qn) }, + ], + }, + v2VoiceToText: { + sid: 29, + cid: 5, + service: Jn, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + mimeType: 0, + sampleRate: 1, + voiceUrl: 2, + duration: 3, + }, + }, + ], + response: [{ type: 'String', name: 'data' }], + }, + v2AddQuickComment: { + sid: 33, + cid: 3, + service: Jn, + params: [ + { + type: 'Property', + name: 'message', + reflectMapper: Zr, + select: [ + 'conversationType', + 'senderId', + 'receiverId', + 'createTime', + 'messageClientId', + 'messageServerId', + ], + }, + { type: 'Property', name: 'quickComment', reflectMapper: Zn }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + v2RemoveQuickComment: { + sid: 33, + cid: 4, + service: Jn, + params: [ + { + type: 'Property', + name: 'message', + reflectMapper: Zr, + select: [ + 'conversationType', + 'senderId', + 'receiverId', + 'createTime', + 'messageClientId', + 'messageServerId', + ], + }, + { type: 'Property', name: 'quickComment', reflectMapper: Zn }, + ], + response: [{ type: 'Long', name: 'timetag' }], + }, + onAddQuickComment: { + sid: 23, + cid: 5, + service: Jn, + response: [ + { type: 'Property', name: 'message', reflectMapper: ft(Zr) }, + { type: 'Property', name: 'quickComment', reflectMapper: ft(Zn) }, + ], + }, + onRemoveQuickComment: { + sid: 23, + cid: 6, + service: Jn, + response: [ + { type: 'Property', name: 'message', reflectMapper: ft(Zr) }, + { type: 'Property', name: 'quickComment', reflectMapper: ft(Zn) }, + ], + }, + v2GetQuickComment: { + sid: 33, + cid: 7, + service: Jn, + params: [{ type: 'PropertyArray', name: 'tag', reflectMapper: Xn }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Xn) }, + ], + }, + onPinMessage: { + sid: 23, + cid: 18, + service: Jn, + response: [ + { type: 'Property', name: 'msg', reflectMapper: ft(Zr) }, + { type: 'Property', name: 'pinInfo', reflectMapper: ft(eo) }, + ], + }, + onUpdatePinMessage: { + sid: 23, + cid: 19, + service: Jn, + response: [ + { type: 'Property', name: 'msg', reflectMapper: ft(Zr) }, + { type: 'Property', name: 'pinInfo', reflectMapper: ft(eo) }, + ], + }, + onUnpinMessage: { + sid: 23, + cid: 20, + service: Jn, + response: [ + { type: 'Property', name: 'msg', reflectMapper: ft(Zr) }, + { type: 'Property', name: 'pinInfo', reflectMapper: ft(eo) }, + ], + }, + v2AddCollection: { + sid: 33, + cid: 8, + service: Jn, + params: [{ type: 'Property', name: 'tag', reflectMapper: to }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(to) }], + }, + v2RemoveCollections: { + sid: 33, + cid: 9, + service: Jn, + params: [ + { + type: 'PropertyArray', + name: 'tag', + reflectMapper: to, + select: ['collectionId', 'createTime'], + }, + ], + response: [{ type: 'Int', name: 'data' }], + }, + v2UpdateCollectionExtension: { + sid: 33, + cid: 10, + service: Jn, + params: [{ type: 'Property', name: 'tag', reflectMapper: to }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(to) }], + }, + v2GetCollectionListByOption: { + sid: 33, + cid: 11, + service: Jn, + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + beginTime: 1, + endTime: 2, + excludeId: 3, + limit: 4, + direction: 5, + collectionType: 6, + }, + }, + ], + response: [ + { type: 'Long', name: 'total' }, + { type: 'PropertyArray', name: 'data', reflectMapper: ft(to) }, + ], + }, + v2SearchCloudMessagesGroupByConversation: { + sid: 30, + cid: 26, + service: Jn, + params: [{ type: 'Property', name: 'tag', reflectMapper: so }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Zr) }, + ], + }, + v2SearchCloudMessages: { + sid: 30, + cid: 27, + service: Jn, + params: [{ type: 'Property', name: 'tag', reflectMapper: io }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Zr) }, + ], + }, + v2SearchCloudMessagesEx: { + sid: 30, + cid: 34, + service: Jn, + params: [{ type: 'Property', name: 'tag', reflectMapper: ro }], + response: [ + { type: 'PropertyArray', name: 'msgs', reflectMapper: ft(Zr) }, + { type: 'Int', name: 'hasMore' }, + { type: 'String', name: 'nextPageToken' }, + ], + }, + v2GetThreadMessageList: { + sid: 33, + cid: 1, + service: Jn, + params: [ + { type: 'Property', name: 'messageRefer', reflectMapper: Zr }, + { + type: 'Property', + name: 'tag', + reflectMapper: { + beginTime: 1, + endTime: 2, + excludeMessageServerId: 3, + limit: 4, + reverse: 5, + }, + }, + ], + response: [ + { type: 'Property', name: 'message', reflectMapper: ft(Zr) }, + { + type: 'Property', + name: 'replyResult', + reflectMapper: ft({ + total: { id: 1, retType: 'number' }, + timestamp: { id: 2, retType: 'number' }, + }), + }, + { type: 'PropertyArray', name: 'replyList', reflectMapper: ft(Zr) }, + ], + }, + }, + oo = { + joinMode: { type: 'enum', values: [1, 0, 2], required: !1 }, + agreeMode: { type: 'enum', values: [0, 1], required: !1 }, + inviteMode: { type: 'enum', values: [1, 0], required: !1 }, + updateInfoMode: { type: 'enum', values: [1, 0], required: !1 }, + updateExtensionMode: { type: 'enum', values: [1, 0], required: !1 }, + chatBannedMode: { type: 'enum', values: [0, 1], required: !1 }, + }, + ao = { + type: 'object', + required: !0, + rules: Object.assign( + { + name: { type: 'string', allowEmpty: !1 }, + teamType: { type: 'enum', values: [1, 2] }, + memberLimit: { type: 'number', min: 1, required: !1 }, + }, + oo + ), + }, + co = { type: 'array', min: 1, itemType: 'string' }, + lo = { type: 'boolean' }, + po = { type: 'string' }, + ho = { type: 'string', allowEmpty: !1 }, + uo = { + type: 'object', + rules: { antispamBusinessId: { type: 'string', required: !1 } }, + required: !1, + }, + mo = { teamId: { type: 'string', regExp: /^[1-9]\d*$/, allowEmpty: !1 } }, + go = { + teamIds: { + type: 'array', + itemRules: { type: 'string', allowEmpty: !1, regExp: /^[1-9]\d*$/ }, + min: 1, + }, + }, + vo = { teamType: { type: 'enum', values: [1, 2] } }, + fo = { + teamTypes: { + type: 'array', + itemType: 'enum', + values: [1, 2], + required: !1, + }, + }, + yo = { + inviteeParams: { + type: 'object', + required: !0, + rules: { + inviteeAccountIds: co, + postscript: Object.assign(Object.assign({}, po), { required: !1 }), + serverExtension: Object.assign(Object.assign({}, po), { required: !1 }), + }, + }, + }, + Io = { + updateTeamInfoParams: { + type: 'object', + required: !0, + rules: Object.assign( + { + name: { type: 'string', allowEmpty: !1, required: !1 }, + memberLimit: { type: 'number', min: 1, required: !1 }, + }, + oo + ), + }, + }, + Mo = { type: 'enum', values: [0, 2] }, + _o = { + memberInfoParams: { + type: 'object', + rules: { + teamNick: { type: 'string', required: !1 }, + serverExtension: { type: 'string', required: !1 }, + antispamConfig: { + type: 'object', + required: !1, + rules: { antispamBusinessId: { type: 'string', required: !1 } }, + }, + }, + }, + }, + Eo = { chatBannedMode: { type: 'enum', values: [0, 1] } }, + To = { + queryOption: { + type: 'object', + rules: { + roleQueryType: { type: 'enum', values: [0, 2, 1] }, + onlyChatBanned: { type: 'boolean', required: !1 }, + direction: { type: 'enum', values: [1, 0], required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + nextToken: { type: 'string', required: !1 }, + }, + }, + }, + So = { + teamId: mo.teamId, + teamType: { type: 'enum', values: [1, 2] }, + operatorAccountId: { type: 'string', allowEmpty: !1 }, + }, + Co = { actionType: { type: 'enum', values: [2, 0, 1, 3] } }, + No = { actionType: { type: 'enum', values: [2] } }, + Ao = { actionType: { type: 'enum', values: [0] } }, + Ro = { + types: { + type: 'array', + itemType: 'enum', + values: [0, 2, 1, 3], + required: !1, + }, + status: { + type: 'array', + itemType: 'enum', + values: [1, 3, 0, 2], + required: !1, + }, + offset: { type: 'number', min: 0, required: !1 }, + limit: { type: 'number', min: 1, required: !1 }, + }, + Oo = { teamId: mo.teamId, teamType: vo.teamType, accountIds: co }, + bo = { + accountId: { type: 'string', allowEmpty: !1 }, + teamNick: { type: 'string' }, + antispamConfig: { + type: 'object', + required: !1, + rules: { antispamBusinessId: { type: 'string', required: !1 } }, + }, + } +class ko { + constructor() { + ;(this.teamMap = new Map()), (this.superTeamMap = new Map()) + } + set(e) { + e.forEach((e) => { + this.chooseMap(e.teamType).set(e.teamId, e) + }) + } + reset() { + this.teamMap.clear(), this.superTeamMap.clear() + } + count(e, t = !0) { + var i = this.chooseMap(e), + r = 0 + return ( + i.forEach((e) => { + t && e.isValidTeam && r++, t || r++ + }), + r + ) + } + chooseMap(e) { + return 2 === e ? this.superTeamMap : 1 === e ? this.teamMap : new Map() + } + getById(e, t, i = !0) { + var r = this.chooseMap(t).get(e) + if (r) { + if (i && r.isValidTeam) return r + if (!i) return r + } + } + getAll(e, t = !0) { + var i = this.chooseMap(e) + return Array.from(i.values()) + .filter((e) => !(!t || !e.isValidTeam) || !t || void 0) + .sort((e, t) => t.updateTime - e.updateTime) + } + upsert(e) { + var t = e.teamId, + i = e.teamType, + r = this.chooseMap(i), + s = r.get(t) || {}, + n = Object.assign({}, s, e) + return r.set(t, n), n + } + deleteById(e, t) { + var i = this.getById(e, t) + if (i) return (i.isValidTeam = !1), i + } + searchTeamByKeyword(e) { + var t = [] + return ( + this.teamMap.forEach((i) => { + i.name.includes(e) && t.push(i) + }), + this.superTeamMap.forEach((i) => { + i.name.includes(e) && t.push(i) + }), + t + ) + } +} +class Vo { + constructor() { + ;(this.teamMembers = []), (this.superTeamMembers = []), (this.maxSize = 2e3) + } + reset() { + ;(this.teamMembers = []), (this.superTeamMembers = []) + } + setData(e) { + e.forEach((e) => { + this.chooseList(e.teamType).push(e) + }) + } + chooseList(e) { + return 2 === e ? this.superTeamMembers : 1 === e ? this.teamMembers : [] + } + getById(e, t, i) { + return this.chooseList(t).find((t) => t.teamId === e && t.accountId === i) + } + upsert(e) { + var t = e.teamType, + i = e.teamId, + r = this.chooseList(t), + s = r.findIndex((t) => t.teamId === i && t.accountId === e.accountId) + ;-1 === s ? r.push(e) : (r[s] = Object.assign(Object.assign({}, r[s]), e)), + r.length > this.maxSize && r.shift() + } + deleteByAccount(e, t, i) { + var r = this.chooseList(t), + s = r.findIndex((t) => t.teamId === e && t.accountId === i) + if (-1 !== s) { + var n = r[s] + return (n.inTeam = !1), r.splice(s, 1), n + } + } + deleteByTeamId(e, t) { + var i = this.chooseList(t).filter((t) => t.teamId !== e) + 2 === t ? (this.superTeamMembers = i) : (this.teamMembers = i) + } +} +class Po { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + processNotification(e) { + var { attachment: t, senderId: i, receiverId: r, createTime: s } = e, + { id: n, data: o } = t, + a = n > 400 ? 2 : 1, + { id: c, ids: d, tinfo: l, mute: p } = Ur(o, a), + h = this.service.model.getById(r, a) + switch ( + (this.core.logger.log( + `v2Team::processNotification, notificationType:${n}, teamId:${r}`, + o + ), + n) + ) { + case Fn.SUPER_TEAM_INVITATION: + case Fn.TEAM_INVITATION: + d.includes(this.core.account) && this.onTeamJoined(l), + this.onTeamMembersJoined( + l, + d.filter((e) => e !== this.core.account) + ) + break + case Fn.SUPER_TEAM_INVITE_ACCEPT: + case Fn.TEAM_INVITE_ACCEPT: + i === this.core.account + ? this.onTeamJoined(l) + : this.onTeamMemberJoined(l, i) + break + case Fn.SUPER_TEAM_APPLY_ACCEPT: + case Fn.TEAM_APPLY_ACCEPT: + c === this.core.account + ? this.onTeamJoined(l) + : this.onTeamMemberJoined(l, c) + break + case Fn.SUPER_TEAM_ADD_MANAGER: + case Fn.TEAM_ADD_MANAGER: + this.updateTeamMemberRole(r, a, d, { memberRole: 2, updateTime: s }) + break + case Fn.SUPER_TEAM_REMOVE_MANAGER: + case Fn.TEAM_REMOVE_MANAGER: + this.updateTeamMemberRole(r, a, d, { memberRole: 0, updateTime: s }) + break + case Fn.SUPER_TEAM_KICK: + case Fn.TEAM_KICK: + this.onTeamInfoUpdated(l), + d.forEach((e) => { + e === this.core.account + ? this.onTeamLeft(r, a, !0) + : this.onTeamMemberKicked(i, l.teamId, l.teamType, e) + }) + break + case Fn.SUPER_TEAM_LEAVE: + case Fn.TEAM_LEAVE: + l + ? this.onTeamInfoUpdated(l) + : h && + i === this.core.account && + ((h.isValidTeam = !1), this.onTeamInfoUpdated(h)), + i === this.core.account + ? this.onTeamLeft(r, a, !1) + : this.onTeamMemberLeft(r, a, i) + break + case Fn.SUPER_TEAM_DISMISS: + case Fn.TEAM_DISMISS: + this.onTeamDismissed(r, a) + break + case Fn.SUPER_TEAM_UPDATE: + case Fn.TEAM_UPDATED: + this.onTeamInfoUpdated(l) + break + case Fn.SUPER_TEAM_TRANSFER_OWNER: + case Fn.TEAM_TRANSFER_OWNER: + this.onTeamInfoUpdated(l), + this.updateTeamMemberRole( + r, + a, + [i, l.ownerAccountId], + [ + { memberRole: 0, updateTime: s }, + { memberRole: 1, updateTime: s, joinTime: s }, + ], + !1 + ) + break + case Fn.SUPER_TEAM_MEMBER_MUTE: + case Fn.TEAM_MEMBER_MUTE: + this.service.model.upsert(l), + this.updateTeamMemberRole(r, a, c ? [c] : d, { + chatBanned: 0 !== p, + updateTime: s, + }) + } + } + onTeamJoined(e) { + this.service.model.upsert(e), + this.service.emit('onTeamJoined', e), + this.service + .getTeamMemberListByIds(e.teamId, e.teamType, [this.core.account]) + .catch((e) => { + this.core.logger.error('Get Member error after onTeamJoined', e) + }) + } + onTeamLeft(e, t, i) { + var r = this.service.model.deleteById(e, t) || xr(e, t, { isValidTeam: !1 }) + this.service.memberModel.deleteByAccount(e, t, this.core.account), + this.service.emit('onTeamLeft', r, i) + } + onTeamDismissed(e, t) { + var i = this.service.model.deleteById(e, t) + i || (i = xr(e, t, { isValidTeam: !1 })), + this.service.memberModel.deleteByTeamId(e, t), + this.service.emit('onTeamDismissed', i) + } + onTeamInfoUpdated(e) { + var t = this.service.model.upsert(e) + this.service.emit('onTeamInfoUpdated', t) + } + onTeamMemberJoined(e, t) { + this.service.model.upsert(e), this.service.emit('onTeamInfoUpdated', e) + var i = e.updateTime || e.createTime, + r = Fr(e.teamId, e.teamType, t, { joinTime: i, updateTime: i }) + this.service.emit('onTeamMemberJoined', [r]) + } + onTeamMembersJoined(e, t) { + var i = e.updateTime || e.createTime, + r = t.map((t) => + Fr(e.teamId, e.teamType, t, { joinTime: i, updateTime: i }) + ) + 0 !== r.length && + (this.service.model.upsert(e), + this.service.emit('onTeamInfoUpdated', e), + this.service.emit('onTeamMemberJoined', r)) + } + onTeamMemberLeft(e, t, i) { + var r = this.service.memberModel.deleteByAccount(e, t, i) + r || (r = Fr(e, t, i, { inTeam: !1 })), + this.service.emit('onTeamMemberLeft', [r]) + } + onTeamMemberKicked(e, t, i, r) { + var s = this.service.memberModel.deleteByAccount(t, i, r) + s || (s = Fr(t, i, r, { inTeam: !1 })), + this.service.emit('onTeamMemberKicked', e, [s]) + } + onTeamMemberInfoUpdated(e) { + e.forEach((e) => { + if ( + e.accountId === this.core.account && + this.core.V2NIMSettingService.name && + this.core.V2NIMConversationIdUtil.name + ) { + var t = + 1 === e.teamType + ? this.core.V2NIMConversationIdUtil.teamConversationId(e.teamId) + : this.core.V2NIMConversationIdUtil.superTeamConversationId( + e.teamId + ), + i = this.core.V2NIMSettingService.getConversationMuteStatus(t) + this.core.eventBus.emit('V2NIMSettingService/setMute', t, i) + } + }), + this.service.emit('onTeamMemberInfoUpdated', e) + } + updateTeamMemberRole(e, t, i, r, s = !0) { + return Te(this, void 0, void 0, function* () { + var n = i.filter((i, s) => { + var n = this.service.memberModel.getById(e, t, i) + return ( + n && + this.service.memberModel.upsert( + Object.assign(Object.assign({}, n), Array.isArray(r) ? r[s] : r) + ), + !n + ) + }) + if (s && n.length > 0) + try { + ;(yield this.service.getTeamMemberListByIds(e, t, n)).forEach((e) => + this.service.memberModel.upsert(e) + ) + } catch (e) { + this.core.logger.warn( + 'v2Team::processNotification, getTeamMemberListByIds failed', + e + ) + } + var o = i + .map((i, n) => { + var o = this.service.memberModel.getById(e, t, i) + return o || s ? o : Fr(e, t, i, Array.isArray(r) ? r[n] : r) + }) + .filter((e) => !!e) + o.length > 0 && this.onTeamMemberInfoUpdated(o) + }) + } + processSysNotification(e) { + var { + receiverId: t, + postscript: i, + senderId: r, + timestamp: s, + content: n, + } = e, + o = {} + try { + o = JSON.parse(n) + } catch (e) { + this.core.logger.warn( + 'v2Team::processSysNotification, parse content failed', + n + ) + } + var a = { + actionType: { 0: 0, 1: 1, 2: 2, 3: 3, 15: 0, 16: 1, 17: 2, 18: 3 }[ + e.type + ], + teamId: t, + teamType: e.type >= 15 ? 2 : 1, + operatorAccountId: r, + postscript: i, + timestamp: s, + actionStatus: 0, + read: !1, + } + o.attach && (a.serverExtension = o.attach), + this.core.logger.log('v2Team::processSysNotification, type:', e.type, a), + this.service.notificationModel.create(a), + this.service.emit('onReceiveTeamJoinActionInfo', a) + } + updateTeamActionStatus(e, t) { + this.service.notificationModel.update({ + teamId: e.teamId, + teamType: e.teamType, + operatorAccountId: e.operatorAccountId, + actionType: e.actionType, + actionStatus: t, + }) + } + checkIfExpired(e) { + return !(!e || (509 !== e && ((e >= 500 && e <= 599) || e >= 19e4))) + } +} +!(function (e) { + ;(e[(e.TEAM_INVITATION = 0)] = 'TEAM_INVITATION'), + (e[(e.TEAM_KICK = 1)] = 'TEAM_KICK'), + (e[(e.TEAM_LEAVE = 2)] = 'TEAM_LEAVE'), + (e[(e.TEAM_UPDATED = 3)] = 'TEAM_UPDATED'), + (e[(e.TEAM_DISMISS = 4)] = 'TEAM_DISMISS'), + (e[(e.TEAM_APPLY_ACCEPT = 5)] = 'TEAM_APPLY_ACCEPT'), + (e[(e.TEAM_TRANSFER_OWNER = 6)] = 'TEAM_TRANSFER_OWNER'), + (e[(e.TEAM_ADD_MANAGER = 7)] = 'TEAM_ADD_MANAGER'), + (e[(e.TEAM_REMOVE_MANAGER = 8)] = 'TEAM_REMOVE_MANAGER'), + (e[(e.TEAM_INVITE_ACCEPT = 9)] = 'TEAM_INVITE_ACCEPT'), + (e[(e.TEAM_MEMBER_MUTE = 10)] = 'TEAM_MEMBER_MUTE'), + (e[(e.SUPER_TEAM_INVITATION = 401)] = 'SUPER_TEAM_INVITATION'), + (e[(e.SUPER_TEAM_KICK = 402)] = 'SUPER_TEAM_KICK'), + (e[(e.SUPER_TEAM_LEAVE = 403)] = 'SUPER_TEAM_LEAVE'), + (e[(e.SUPER_TEAM_UPDATE = 404)] = 'SUPER_TEAM_UPDATE'), + (e[(e.SUPER_TEAM_DISMISS = 405)] = 'SUPER_TEAM_DISMISS'), + (e[(e.SUPER_TEAM_TRANSFER_OWNER = 406)] = 'SUPER_TEAM_TRANSFER_OWNER'), + (e[(e.SUPER_TEAM_ADD_MANAGER = 407)] = 'SUPER_TEAM_ADD_MANAGER'), + (e[(e.SUPER_TEAM_REMOVE_MANAGER = 408)] = 'SUPER_TEAM_REMOVE_MANAGER'), + (e[(e.SUPER_TEAM_MEMBER_MUTE = 409)] = 'SUPER_TEAM_MEMBER_MUTE'), + (e[(e.SUPER_TEAM_APPLY_ACCEPT = 410)] = 'SUPER_TEAM_APPLY_ACCEPT'), + (e[(e.SUPER_TEAM_INVITE_ACCEPT = 411)] = 'SUPER_TEAM_INVITE_ACCEPT') +})(Fn || (Fn = {})) +class Lo { + constructor() { + ;(this.list = []), (this.maxCount = 1e3) + } + reset() { + this.list = [] + } + checkSameAction(e, t, i = !1) { + return ( + e.teamId === t.teamId && + e.teamType === t.teamType && + e.actionType === t.actionType && + e.operatorAccountId === t.operatorAccountId && + (!i || e.timestamp === t.timestamp) + ) + } + create(e) { + this.list.push(e), this.list.length > this.maxCount && this.list.shift() + } + update(e) { + this.list.forEach((t) => { + this.checkSameAction(t, e) && 0 === t.actionStatus && Object.assign(t, e) + }) + } + delete(e) { + this.list = this.list + .map((t) => { + if (!this.checkSameAction(t, e, !1)) return t + }) + .filter((e) => e) + } + getByOption(e) { + var { types: t, status: i, offset: r = 0, limit: s = 50 } = e, + n = [] + this.list.forEach((e) => { + ;(t && t.length > 0 && !t.includes(e.actionType)) || + (i && i.length > 0 && !i.includes(e.actionStatus)) || + n.push(e) + }), + (n = n.sort((e, t) => t.timestamp - e.timestamp)) + var o = 0 + r > 0 && + ((o = Be(n, 'timestamp', r)), n[o] && n[o].timestamp === r && (o += 1)) + var a = n.slice(o).length + return (n = n.slice(o, o + s)).length > 0 + ? { + offset: a > s ? n[n.length - 1].timestamp : 0, + finished: !(a > s), + infos: n, + } + : { offset: 0, finished: !0, infos: n } + } + setRead(e) { + for (var t of this.list) this.checkSameAction(t, e) && (t.read = !0) + } + setAllRead() { + for (var e of this.list) e.read = !0 + } + getUnreadCount() { + var e = new Set() + for (var t of this.list) + t.read || + 0 !== t.actionStatus || + (0 !== t.actionType && 2 !== t.actionType) || + e.add(`${t.operatorAccountId}_${t.teamType}_${t.teamId}`) + return e.size + } +} +class Do { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = t.model), + (this.memberModel = t.memberModel), + (this.notification = t.notification), + (this.logger = this.core.logger) + } + setListener() { + this.core.eventBus.on('V2NIMTeamService/onSyncStarted', () => { + this.service.emit('onSyncStarted') + }), + this.core.eventBus.on('V2NIMTeamService/onSyncFinished', () => { + this.service.emit('onSyncFinished') + }), + this.core.eventBus.on('V2NIMTeamService/onSyncFailed', (e) => { + this.service.emit('onSyncFailed', e) + }), + this.core.eventBus.on('forwardReceive/V2NIMTeamService/created', (e) => { + this.model.upsert(e) + var t = Fr(e.teamId, e.teamType, this.core.account, { memberRole: 1 }) + this.memberModel.upsert(t), this.service.emit('onTeamCreated', e) + }), + this.core.eventBus.on( + 'forwardReceive/V2NIMTeamService/updateSelfTeamMemberInfo', + (e) => { + this.memberModel.upsert(e), + this.service.emit('onTeamInfoUpdated', [e]) + } + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMTeamService/updateTeamActionStatus', + this.notification.updateTeamActionStatus.bind(this.notification) + ), + this.core.eventBus.on( + 'V2NIMTeamService/sysNotification', + this.notification.processSysNotification.bind(this.notification) + ), + this.core.eventBus.on( + 'V2NIMTeamService/notification', + this.notification.processNotification.bind(this.notification) + ) + } + beforeEmit(e, ...t) { + var i = `${this.service.name}::emit ${e.toString()}` + if ( + 'onTeamCreated' === e || + 'onTeamDismissed' === e || + 'onTeamJoined' === e || + 'onTeamLeft' === e || + 'onTeamInfoUpdated' === e + ) { + var r = t[0] + this.logger.log( + `${i}`, + `team:${r.teamId}_${r.teamType};updateTime:${r.updateTime}` + ) + } else if ( + 'onTeamMemberJoined' === e || + 'onTeamMemberLeft' === e || + 'onTeamMemberInfoUpdated' === e + ) { + var s = t[0] + this.logger.log( + `${i}`, + s.map((e) => `team:${e.teamId}_${e.teamType};account:${e.accountId}`) + ) + } else if ('onTeamMemberKicked' === e) { + var n = t[0], + o = t[1] + this.logger.log( + `${i}`, + `operator${n}`, + o.map((e) => `team:${e.teamId}_${e.teamType};account:${e.accountId}`) + ) + } else this.logger.log(`${i}`, ...t) + } + onSyncDone(e) { + e + ? this.service.emit('onSyncFailed', e) + : this.service.emit('onSyncFinished') + } +} +class wo { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = t.model), + (this.memberModel = t.memberModel), + (this.logger = this.core.logger) + } + v2TeamSyncHandler(e) { + this.model.set(e.content.datas) + } + v2SuperTeamSyncHandler(e) { + this.model.set(e.content.datas) + } + v2TeamCreateMultiSyncHandler(e) { + var t = e.content.data + this.model.upsert(t) + var i = Fr(t.teamId, t.teamType, this.core.account, { memberRole: 1 }) + this.memberModel.upsert(i), this.service.emit('onTeamCreated', t) + } + v2SuperTeamCreateMultiSyncHandler(e) { + var t = e.content.data + this.model.upsert(t) + var i = Fr(t.teamId, t.teamType, this.core.account, { memberRole: 1 }) + this.memberModel.upsert(i), this.service.emit('onTeamCreated', t) + } + v2TeamMemberUpdateMultiSyncHandler(e) { + var t = e.content.data + t.teamType = 1 + var i = this.memberModel.getById(t.teamId, t.teamType, t.accountId) + this.service.notification.updateTeamMemberRole( + t.teamId, + t.teamType, + [t.accountId], + t + ), + t.accountId === this.core.account && + i && + i.bits !== t.bits && + this.core.eventBus.emit( + 'V2NIMSettingService/updateBits', + t.teamId, + t.teamType, + t.bits + ) + } + v2SuperTeamMemberUpdateMultiSyncHandler(e) { + var t = e.content.data + t.teamType = 2 + var i = this.memberModel.getById(t.teamId, t.teamType, t.accountId) + this.service.notification.updateTeamMemberRole( + t.teamId, + t.teamType, + [t.accountId], + t + ), + t.accountId === this.core.account && + i && + i.bits !== t.bits && + this.core.eventBus.emit( + 'V2NIMSettingService/updateBits', + t.teamId, + t.teamType, + t.bits + ) + } + v2TeamMembersOfSelfInSyncHandler(e) { + e.content.datas.forEach((e) => { + ;(e.teamType = 1), this.memberModel.upsert(e) + }) + } + v2SuperTeamMembersOfSelfInSyncHandler(e) { + e.content.datas.forEach((e) => { + ;(e.teamType = 2), this.memberModel.upsert(e) + }) + } +} +var Uo = 'V2NIMUserService', + xo = { + '34_3': 'v2UpdateBlockList', + '34_7': 'v2GetUserList', + '34_10': 'v2UpdateSelfUserProfile', + '3_109': 'v2SyncSelfUserInfo', + '3_110': 'onUpdateUserProfile', + '3_103': 'onUpdateBlockList', + '3_8': 'syncBlockAndMuteList', + '34_5': 'v2SetP2PMessageMuteMode', + '3_105': 'v2OnUpdateMuteList', + }, + Fo = { + accountId: 1, + name: 3, + avatar: 4, + sign: 5, + gender: { id: 6, retType: 'number' }, + email: 7, + birthday: 8, + mobile: 9, + serverExtension: 10, + createTime: { id: 12, retType: 'number' }, + updateTime: { id: 13, retType: 'number' }, + }, + Bo = { + v2UpdateBlockList: { + sid: 34, + cid: 3, + service: Uo, + params: [ + { type: 'String', name: 'accountId' }, + { type: 'Bool', name: 'addToBlockList' }, + ], + }, + v2GetUserList: { + sid: 34, + cid: 7, + service: Uo, + params: [{ type: 'StrArray', name: 'accountIds' }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Fo) }, + ], + }, + v2UpdateSelfUserProfile: { + sid: 34, + cid: 10, + service: Uo, + params: [{ type: 'Property', name: 'tag', reflectMapper: Fo }], + response: [{ type: 'Long', name: 'updateTime' }], + }, + onUpdateUserProfile: { + sid: 3, + cid: 110, + service: Uo, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Fo) }], + }, + onUpdateBlockList: { + sid: 3, + cid: 103, + service: Uo, + response: [ + { type: 'String', name: 'accountId' }, + { type: 'Bool', name: 'addToBlockList' }, + ], + }, + syncBlockAndMuteList: { + sid: 3, + cid: 8, + service: Uo, + response: [ + { + type: 'PropertyArray', + name: 'data', + reflectMapper: ft({ + accountId: 0, + isMute: { id: 1, retType: 'boolean' }, + isBlock: { id: 2, retType: 'boolean' }, + }), + }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2SyncSelfUserInfo: { + sid: 3, + cid: 109, + service: Uo, + response: [{ type: 'Property', name: 'user', reflectMapper: ft(Fo) }], + }, + v2SetP2PMessageMuteMode: { + sid: 34, + cid: 5, + service: Uo, + params: [ + { type: 'String', name: 'accountId' }, + { type: 'Bool', name: 'muteMode' }, + ], + }, + v2OnUpdateMuteList: { + sid: 3, + cid: 105, + service: Uo, + response: [ + { type: 'String', name: 'accountId' }, + { type: 'Bool', name: 'mute' }, + ], + }, + } +class $o { + constructor() { + ;(this.muteList = new Set()), + (this.userMap = new Map()), + (this.blockList = []) + } + reset() { + this.muteList.clear(), this.userMap.clear(), (this.blockList = []) + } + setAccountMuteMode(e, t) { + 1 === t ? this.muteList.add(e) : this.muteList.delete(e) + } + setUser(e) { + this.userMap.set(e.accountId, e) + } + getUser(e) { + return this.userMap.get(e) + } + getUserListBySearchOption(e) { + return Array.from(this.userMap.values()).filter( + (t) => + !( + (void 0 !== e.searchName && !e.searchName) || + !t.name.includes(e.keyword) + ) || + !(!e.searchAccountId || !t.accountId.includes(e.keyword)) || + !!(t.mobile && e.searchMobile && t.mobile.includes(e.keyword)) + ) + } + addToBlockList(e) { + e.forEach((e) => { + this.blockList.includes(e) || this.blockList.push(e) + }) + } + removeFromBlockList(e) { + e.forEach((e) => { + var t = this.blockList.indexOf(e) + ;-1 !== t && this.blockList.splice(t, 1) + }) + } + checkBlock(e) { + var t = {} + return ( + e.forEach((e) => { + t[e] = this.blockList.includes(e) + }), + t + ) + } +} +var Go = { type: 'string', required: !0, allowEmpty: !1 }, + jo = { type: 'string', required: !1, allowEmpty: !0 }, + qo = { + name: { type: 'string', required: !1, allowEmpty: !0 }, + avatar: jo, + sign: jo, + email: jo, + birthday: jo, + mobile: jo, + gender: { type: 'number', required: !1 }, + serverExtension: jo, + } +class Ho extends ni { + constructor(e) { + super('V2NIMUserService', e), + vt({ cmdMap: xo, cmdConfig: Bo }), + (this.model = new $o()), + 'v2' === this.core.options.apiVersion && this.setListener() + } + reset() { + this.model.reset() + } + setListener() { + this.core.eventBus.on( + 'forwardReceive/V2NIMUserService/updateBlockList', + (e, t) => { + t + ? this.model.addToBlockList([e]) + : this.model.removeFromBlockList([e]), + t ? this.emitBlockListAdded(e) : this.emit('onBlockListRemoved', e) + } + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMUserService/updateUserProfile', + (e) => { + this.updateUserProfileInMemory(e) + } + ) + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + if ('onUserProfileChanged' === e) { + var r = t[0] + this.logger.log( + `${i}`, + r.map( + (e) => `id:${e.accountId};name:${e.name};updateTime:${e.updateTime}` + ) + ) + } else if ('onBlockListAdded' === e) { + var s = t[0] + this.logger.log( + `${i}`, + `id:${s.accountId};name:${s.name};updateTime:${s.updateTime}` + ) + } else this.logger.log(`${i}`, ...t) + return super.emit(e, ...t) + } + getUserList(e) { + return Te(this, void 0, void 0, function* () { + return this.checkV2(), this._getUserList(e) + }) + } + _getUserList(e) { + var t + return Te(this, void 0, void 0, function* () { + ye({ accountIds: co }, { accountIds: e }, '', !0) + var i = [] + e.forEach((e) => { + this.model.getUser(e) || i.push(e) + }) + var r = null + i.length > 0 && + (r = yield this.core.sendCmd('v2GetUserList', { accountIds: i })), + ( + (null === (t = null == r ? void 0 : r.content) || void 0 === t + ? void 0 + : t.data) || [] + ).forEach((e) => { + this.model.setUser(e) + }) + var s = [] + return ( + e.forEach((e) => { + var t = this.model.getUser(e) + t && s.push(t) + }), + s + ) + }) + } + getUserListFromCloud(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye( + { + accountIds: { type: 'array', min: 1, max: 500, itemType: 'string' }, + }, + { accountIds: e }, + '', + !0 + ) + var t = + (yield this.core.sendCmd('v2GetUserList', { accountIds: e })).content + .data || [], + i = [] + t.forEach((e) => { + var t = this.model.getUser(e.accountId) + this.compareUserForUpdate(t, e) && i.push(e), this.model.setUser(e) + }) + var r = e.reduce((e, t) => { + var i = this.model.getUser(t) + return i && e.push(i), e + }, []) + return i.length > 0 && this.emit('onUserProfileChanged', i), r + }) + } + compareUserForUpdate(e, t) { + return ( + !e || + !( + 'number' == typeof e.updateTime && + 'number' == typeof t.updateTime && + e.updateTime >= t.updateTime + ) + ) + } + updateSelfUserProfile(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), ye(qo, e, '', !0) + var t = yield this.core.sendCmd('v2UpdateSelfUserProfile', { + tag: Object.assign(Object.assign({}, e), { + accountId: this.core.account, + }), + }) + yield this.updateUserProfileInMemory( + Object.assign(Object.assign({}, e), { + updateTime: t.content.updateTime, + }) + ) + }) + } + addUserToBlockList(e) { + return Te(this, void 0, void 0, function* () { + if ((this.checkV2(), e === this.core.account)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Cannot block yourself' }, + }) + ye({ accountId: Go }, { accountId: e }, '', !0), + yield this.core.sendCmd('v2UpdateBlockList', { + accountId: e, + addToBlockList: !0, + }), + this.model.addToBlockList([e]), + this.emitBlockListAdded(e) + }) + } + removeUserFromBlockList(e) { + return Te(this, void 0, void 0, function* () { + if ((this.checkV2(), e === this.core.account)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Cannot unblock yourself' }, + }) + ye({ accountId: Go }, { accountId: e }, '', !0), + yield this.core.sendCmd('v2UpdateBlockList', { + accountId: e, + addToBlockList: !1, + }), + this.model.removeFromBlockList([e]), + this.emit('onBlockListRemoved', e) + }) + } + searchUserByOption(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye( + { + keyword: { type: 'string', allowEmpty: !1 }, + searchName: { type: 'boolean', required: !1 }, + searchAccountId: { type: 'boolean', required: !1 }, + searchMobile: { type: 'boolean', required: !1 }, + }, + e, + '', + !0 + ), + !1 === (void 0 === e.searchName || e.searchName) && + !e.searchAccountId && + !e.searchMobile) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'one of searchName, searchAccountId, searchMobile must be true', + }, + }) + return this.model.getUserListBySearchOption(e) + }) + } + getBlockList() { + return this.checkV2(), Promise.resolve(this.model.blockList) + } + checkBlock(e) { + return ( + this.checkV2(), + ye({ accountIds: co }, { accountIds: e }, '', !0), + Promise.resolve(this.model.checkBlock(e)) + ) + } + updateUserProfileInMemory(e) { + return Te(this, void 0, void 0, function* () { + var t = this.model.getUser(this.core.account) + t + ? (Object.assign(t, e), this.model.setUser(t)) + : (t = (yield this._getUserList([this.core.account]))[0]), + t && this.emit('onUserProfileChanged', [t]) + }) + } + onUpdateUserProfileHandler(e) { + return Te(this, void 0, void 0, function* () { + var t = e.content.data + yield this.updateUserProfileInMemory(t) + }) + } + onUpdateBlockListHandler(e) { + var t = e.content.accountId + e.content.addToBlockList + ? (this.model.addToBlockList([t]), this.emitBlockListAdded(t)) + : (this.model.removeFromBlockList([t]), + this.emit('onBlockListRemoved', t)) + } + syncBlockAndMuteListHandler(e) { + e.content.data.forEach((e) => { + e.isBlock + ? this.model.addToBlockList([e.accountId]) + : this.model.setAccountMuteMode(e.accountId, e.isMute ? 1 : 0) + }) + } + v2SyncSelfUserInfoHandler(e) { + var t = e.content.user + this.model.setUser(t) + } + checkUserUpdate(e, t) { + var i = e.senderId + i !== this.core.account && this.refreshUserInfo(i, t) + } + refreshUserInfo(e, t = 0) { + return Te(this, void 0, void 0, function* () { + if (e && 'string' == typeof e) { + var i = this.model.getUser(e), + r = [] + if ( + !i || + (i && + 'number' == typeof i.updateTime && + 'number' == typeof t && + !isNaN(i.updateTime) && + !isNaN(t) && + i.updateTime < t) + ) + try { + r = (yield this.core.sendCmd('v2GetUserList', { accountIds: [e] })) + .content.data + } catch (t) { + return void this.logger.warn( + `V2NIMUserService:refreshUserInfo: failed for ${e}` + ) + } + for (var s of r) + this.model.setUser(s), this.emit('onUserProfileChanged', [s]) + } + }) + } + emitBlockListAdded(e) { + return Te(this, void 0, void 0, function* () { + var t = yield this._getUserList([e]) + 1 === t.length && this.emit('onBlockListAdded', t[0]) + }) + } + v2OnUpdateMuteListHandler(e) { + return Te(this, void 0, void 0, function* () { + var { accountId: t, mute: i } = e.content, + r = i ? 1 : 0 + this.core.eventBus.emit('v2NIMUserService/updateMuteList', t, r) + }) + } +} +var Yo = 'V2NIMFriendService', + Ko = { + '35_1': 'v2AddFriend', + '35_2': 'v2DeleteFriend', + '35_3': 'v2SetFriendInfo', + '35_4': 'v2IncFriendInfo', + '12_101': 'v2OnAddFriend', + '12_102': 'v2OnDeleteFriend', + '12_103': 'v2OnUpdateFriendInfo', + '12_5': 'v2SyncFriendList', + '12_6': 'v2SyncFriendUserList', + }, + Wo = { + accountId: 4, + relationShip: { id: 5, retType: 'number' }, + source: { id: 7, retType: 'number' }, + alias: 8, + serverExtension: 10, + createTime: { id: 11, retType: 'number' }, + updateTime: { id: 12, retType: 'number' }, + customerExtension: 13, + }, + Jo = { + v2AddFriend: { + sid: 35, + cid: 1, + service: Yo, + params: [ + { type: 'String', name: 'accountId' }, + { type: 'Byte', name: 'verifyType' }, + { type: 'String', name: 'postscript' }, + ], + response: [], + }, + v2DeleteFriend: { + sid: 35, + cid: 2, + service: Yo, + params: [ + { type: 'String', name: 'accountId' }, + { + type: 'Property', + name: 'params', + reflectMapper: { deleteAlias: { id: 1, converter: yt } }, + }, + ], + }, + v2SetFriendInfo: { + sid: 35, + cid: 3, + service: Yo, + params: [{ type: 'Property', name: 'tag', reflectMapper: Wo }], + }, + v2OnAddFriend: { + sid: 12, + cid: 101, + service: Yo, + response: [ + { type: 'String', name: 'accountId' }, + { type: 'Byte', name: 'verifyType' }, + { type: 'String', name: 'postscript' }, + { type: 'Property', name: 'ext', reflectMapper: ft({ serverExt: 1 }) }, + ], + }, + v2OnDeleteFriend: { + sid: 12, + cid: 102, + service: Yo, + response: [{ type: 'String', name: 'accountId' }], + }, + v2OnUpdateFriendInfo: { + sid: 12, + cid: 103, + service: Yo, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Wo) }], + }, + v2SyncFriendList: { + sid: 12, + cid: 5, + service: Yo, + response: [ + { type: 'PropertyArray', name: 'friends', reflectMapper: ft(Wo) }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2SyncFriendUserList: { + sid: 12, + cid: 6, + service: Yo, + response: [ + { type: 'PropertyArray', name: 'users', reflectMapper: ft(Fo) }, + ], + }, + v2IncFriendInfo: { + sid: 35, + cid: 4, + service: Yo, + params: [{ type: 'Long', name: 'timetag' }], + response: [ + { type: 'PropertyArray', name: 'friends', reflectMapper: ft(Wo) }, + { type: 'Long', name: 'timetag' }, + ], + }, + }, + zo = { + accountId: { type: 'string', required: !0, allowEmpty: !1 }, + params: { + type: 'object', + required: !0, + rules: { + addMode: { type: 'enum', required: !0, values: [1, 2] }, + postscript: { type: 'string', required: !1, allowEmpty: !0 }, + }, + }, + }, + Xo = { + accountId: { type: 'string', required: !0, allowEmpty: !1 }, + params: { + type: 'object', + required: !1, + rules: { deleteAlias: { type: 'boolean', required: !1 } }, + }, + }, + Qo = { + accountId: { type: 'string', required: !0, allowEmpty: !1 }, + params: { + type: 'object', + required: !1, + rules: { + alias: { type: 'string', required: !1, allowEmpty: !0 }, + serverExtension: { type: 'string', required: !1, allowEmpty: !0 }, + }, + }, + }, + Zo = { + applicantAccountId: { type: 'string', allowEmpty: !1 }, + recipientAccountId: { type: 'string', allowEmpty: !1 }, + operatorAccountId: { type: 'string', required: !1, allowEmpty: !1 }, + postscript: { type: 'string', required: !1, allowEmpty: !0 }, + status: { type: 'enum', values: [1, 4, 3, 0, 2] }, + timestamp: { type: 'number', min: 1 }, + } +function ea(e, t) { + if ( + (ye(Zo, e, '', !0), + e && e.applicantAccountId !== t && e.recipientAccountId !== t) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Friend application is not your own' }, + }) +} +var ta = { + offset: { type: 'number', required: !1 }, + limit: { type: 'number', required: !1 }, + status: { + type: 'array', + itemType: 'enum', + required: !1, + values: [1, 4, 3, 0, 2], + }, +} +class ia { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + processSysNotification(e) { + if (6 === e.type) { + var t = e.senderId + this.core.V2NIMFriendService.handleDeleteFriend(t, 2) + } else if (5 === e.type) + try { + var i = JSON.parse(e.content) + if (1 === (null == i ? void 0 : i.vt)) { + this.core.V2NIMFriendService.handleAddFriend(e.senderId, e.timestamp) + var r = { + applicantAccountId: e.senderId, + recipientAccountId: e.receiverId, + operatorAccountId: e.senderId, + postscript: e.postscript, + timestamp: e.timestamp, + status: 4, + read: !1, + } + this.service.notificationModel.appendFriendAddApplication(r), + this.service.notificationModel.updateFriendAddApplicationStatus( + r.applicantAccountId, + 4, + r.applicantAccountId + ) + } else if (2 === (null == i ? void 0 : i.vt)) { + var s = { + applicantAccountId: e.senderId, + recipientAccountId: e.receiverId, + operatorAccountId: e.senderId, + postscript: e.postscript, + timestamp: e.timestamp, + status: 0, + read: !1, + } + this.service.handleApplyFriend(s), + this.service.notificationModel.appendFriendAddApplication(s) + } else if (3 === (null == i ? void 0 : i.vt)) { + this.core.V2NIMFriendService.handleAddFriend(e.senderId, e.timestamp) + var n = { + applicantAccountId: e.receiverId, + recipientAccountId: e.senderId, + operatorAccountId: e.senderId, + timestamp: e.timestamp, + postscript: e.postscript, + status: 1, + read: !1, + } + this.service.notificationModel.appendFriendAddApplication(n) + } else if (4 === (null == i ? void 0 : i.vt)) { + var o = { + applicantAccountId: e.receiverId, + recipientAccountId: e.senderId, + operatorAccountId: e.senderId, + timestamp: e.timestamp, + postscript: e.postscript, + status: 2, + read: !1, + } + this.service.notificationModel.appendFriendAddApplication(o), + this.service.emit('onFriendAddRejected', o) + } + } catch (e) { + this.core.logger.warn( + 'V2NIMFriendNotificationImpl::processSysNotification, parse content error:', + e + ) + } + } +} +class ra { + constructor() { + ;(this.validFriendIds = new Set()), + (this.friendMap = new Map()), + (this.friendTimetag = 0) + } + reset() { + this.friendMap.clear(), this.validFriendIds.clear() + } + upsertFriend(e, t) { + delete t.relationShip + var i = this.friendMap.get(e) || {}, + r = Object.assign({ accountId: e }, i, t) + return this.friendMap.set(e, r), this.validFriendIds.add(e), r + } + addFriend(e) { + this.validFriendIds.add(e) + } + deleteFriend(e) { + this.validFriendIds.delete(e) + } + getFriend(e) { + return this.validFriendIds.has(e) ? this.friendMap.get(e) : void 0 + } + getFriendList() { + return Array.from(this.validFriendIds.values()) + .map((e) => this.getFriend(e)) + .filter((e) => !!e) + } + getFriendListBySearchOption(e) { + return Array.from(this.validFriendIds.values()) + .map((e) => this.getFriend(e)) + .filter((t) => { + var i = void 0 === e.searchAlias || e.searchAlias + return !( + void 0 === t || + !( + (i && t.alias && t.alias.includes(e.keyword)) || + (e.searchAccountId && t.accountId.includes(e.keyword)) + ) + ) + }) + } + getFriendByIds(e) { + return e.map((e) => this.getFriend(e)).filter((e) => !!e) + } + setFriendTimetag(e) { + this.friendTimetag = e + } + getFriendTimetag() { + return this.friendTimetag + } +} +class sa { + constructor() { + ;(this.list = []), (this.maxCount = 1e3) + } + reset() { + this.list = [] + } + updateFriendAddApplicationStatus(e, t, i) { + if (0 !== t) + for (var r of this.list) + r.applicantAccountId === e && + 0 === r.status && + ((r.status = t), (r.operatorAccountId = i)) + } + getAddApplicationList(e) { + var t = void 0 === e.offset ? 0 : e.offset, + i = this.list + .filter((t) => { + var i = e.status || [] + return 0 === i.length || !!i.includes(t.status) + }) + .reverse(), + r = e.limit || 50, + s = i.slice(t, t + r), + n = t + r >= i.length + return { infos: s, finished: n, offset: n ? 0 : t + r } + } + checkSameApplication(e, t, i = !1) { + return ( + e.applicantAccountId === t.applicantAccountId && + e.recipientAccountId === t.recipientAccountId && + (!i || e.timestamp === t.timestamp) + ) + } + setAllApplicationRead() { + for (var e of this.list) e.read = !0 + } + setApplicationRead(e) { + for (var t of this.list) this.checkSameApplication(t, e) && (t.read = !0) + } + getAddApplicationUnreadCount() { + var e = new Set() + for (var t of this.list) + t.read || 0 !== t.status || e.add(t.applicantAccountId) + return e.size + } + appendFriendAddApplication(e) { + this.list.push(e), this.list.length > this.maxCount && this.list.shift() + } + clearApplicationList() { + this.list = [] + } + deleteApplication(e) { + this.list = this.list + .map((t) => { + if (!this.checkSameApplication(t, e, !1)) return t + }) + .filter((e) => e) + } +} +var na = { muteMode: { type: 'enum', values: [2, 0, 1] } }, + oa = { + accountId: { type: 'string', required: !0, allowEmpty: !1 }, + muteMode: { type: 'enum', required: !0, values: [2, 0, 1] }, + }, + aa = { + type: 'object', + required: !1, + rules: { + certificateName: { type: 'string', required: !0, allowEmpty: !1 }, + appId: { type: 'string', required: !1, allowEmpty: !1 }, + appKey: { type: 'string', required: !1, allowEmpty: !1 }, + secret: { type: 'string', required: !1, allowEmpty: !1 }, + }, + }, + ca = { + config: { + type: 'object', + required: !0, + rules: { + apns: aa, + hwPush: aa, + miPush: aa, + vivoPush: aa, + oppoPush: aa, + honorPush: aa, + fcmPush: aa, + mzPush: aa, + }, + }, + }, + da = 'V2NIMSettingService', + la = { + '34_1': 'v2SetDeviceToken', + '34_2': 'v2SetAppBackground', + '34_15': 'v2SetPushMobileOnDesktopOnline', + '3_115': 'v2SettingMutilSyncDonnop', + '4_13': 'v2SettingSyncDonnop', + }, + pa = { + need: { + id: 1, + converter: (e) => (e ? 2 : 1), + retConverter: (e) => '2' === e, + }, + }, + ha = { + v2SetDeviceToken: { + sid: 34, + cid: 1, + service: da, + params: [ + { type: 'String', name: 'certificateName' }, + { type: 'String', name: 'pushDeviceToken' }, + { type: 'Int', name: 'pushkit' }, + ], + }, + v2SetAppBackground: { + sid: 34, + cid: 2, + service: da, + params: [ + { type: 'Bool', name: 'isBackground' }, + { type: 'Int', name: 'badge' }, + ], + }, + v2SetPushMobileOnDesktopOnline: { + sid: 34, + cid: 15, + service: da, + params: [{ type: 'Property', name: 'tag', reflectMapper: pa }], + }, + v2SettingMutilSyncDonnop: { + sid: 3, + cid: 115, + service: da, + response: [ + { type: 'Property', name: 'data', reflectMapper: ft(pa) }, + { type: 'Long', name: 'timetag' }, + ], + }, + v2SettingSyncDonnop: { + sid: 4, + cid: 13, + service: da, + response: [ + { type: 'Property', name: 'data', reflectMapper: ft(pa) }, + { type: 'Long', name: 'timetag' }, + ], + }, + } +class ua { + constructor(e, t) { + ;(this.core = e), (this.service = t) + } + v2SettingMutilSyncDonnopHandler(e) { + var { need: t } = e.content.data + ;(this.service.needToPushMobileOnDesktopOnline = t), + this.service.emit('onPushMobileOnDesktopOnline', t) + } + v2SettingSyncDonnopHandler(e) { + var { need: t } = e.content.data + ;(this.service.needToPushMobileOnDesktopOnline = t), + this.service.emit('onPushMobileOnDesktopOnline', t) + } +} +var ma = + ma || + (function (t) { + var i + 'undefined' != typeof window && window.crypto && (i = window.crypto), + 'undefined' != typeof self && self.crypto && (i = self.crypto), + 'undefined' != typeof globalThis && + globalThis.crypto && + (i = globalThis.crypto), + !i && + 'undefined' != typeof window && + window.msCrypto && + (i = window.msCrypto), + !i && void 0 !== e.g && e.g.crypto && (i = e.g.crypto) + var r = function () { + if (i) { + if ('function' == typeof i.getRandomValues) + try { + return i.getRandomValues(new Uint32Array(1))[0] + } catch (e) {} + if ('function' == typeof i.randomBytes) + try { + return i.randomBytes(4).readInt32LE() + } catch (e) {} + } + throw new Error( + 'Native crypto module could not be used to get secure random number.' + ) + }, + s = + Object.create || + (function () { + function e() {} + return function (t) { + var i + return (e.prototype = t), (i = new e()), (e.prototype = null), i + } + })(), + n = {}, + o = (n.lib = {}), + a = (o.Base = { + extend: function (e) { + var t = s(this) + return ( + e && t.mixIn(e), + (t.hasOwnProperty('init') && this.init !== t.init) || + (t.init = function () { + t.$super.init.apply(this, arguments) + }), + (t.init.prototype = t), + (t.$super = this), + t + ) + }, + create: function () { + var e = this.extend() + return e.init.apply(e, arguments), e + }, + init: function () {}, + mixIn: function (e) { + for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]) + e.hasOwnProperty('toString') && (this.toString = e.toString) + }, + clone: function () { + return this.init.prototype.extend(this) + }, + }), + c = (o.WordArray = a.extend({ + init: function (e, t) { + ;(e = this.words = e || []), + (this.sigBytes = null != t ? t : 4 * e.length) + }, + toString: function (e) { + return (e || l).stringify(this) + }, + concat: function (e) { + var t = this.words, + i = e.words, + r = this.sigBytes, + s = e.sigBytes + if ((this.clamp(), r % 4)) + for (var n = 0; n < s; n++) { + var o = (i[n >>> 2] >>> (24 - (n % 4) * 8)) & 255 + t[(r + n) >>> 2] |= o << (24 - ((r + n) % 4) * 8) + } + else for (var a = 0; a < s; a += 4) t[(r + a) >>> 2] = i[a >>> 2] + return (this.sigBytes += s), this + }, + clamp: function () { + var e = this.words, + i = this.sigBytes + ;(e[i >>> 2] &= 4294967295 << (32 - (i % 4) * 8)), + (e.length = t.ceil(i / 4)) + }, + clone: function () { + var e = a.clone.call(this) + return (e.words = this.words.slice(0)), e + }, + random: function (e) { + for (var t = [], i = 0; i < e; i += 4) t.push(r()) + return new c.init(t, e) + }, + })), + d = (n.enc = {}), + l = (d.Hex = { + stringify: function (e) { + for (var t = e.words, i = e.sigBytes, r = [], s = 0; s < i; s++) { + var n = (t[s >>> 2] >>> (24 - (s % 4) * 8)) & 255 + r.push((n >>> 4).toString(16)), r.push((15 & n).toString(16)) + } + return r.join('') + }, + parse: function (e) { + for (var t = e.length, i = [], r = 0; r < t; r += 2) + i[r >>> 3] |= parseInt(e.substr(r, 2), 16) << (24 - (r % 8) * 4) + return new c.init(i, t / 2) + }, + }), + p = (d.Latin1 = { + stringify: function (e) { + for (var t = e.words, i = e.sigBytes, r = [], s = 0; s < i; s++) { + var n = (t[s >>> 2] >>> (24 - (s % 4) * 8)) & 255 + r.push(String.fromCharCode(n)) + } + return r.join('') + }, + parse: function (e) { + for (var t = e.length, i = [], r = 0; r < t; r++) + i[r >>> 2] |= (255 & e.charCodeAt(r)) << (24 - (r % 4) * 8) + return new c.init(i, t) + }, + }), + h = (d.Utf8 = { + stringify: function (e) { + try { + return decodeURIComponent(escape(p.stringify(e))) + } catch (e) { + throw new Error('Malformed UTF-8 data') + } + }, + parse: function (e) { + return p.parse(unescape(encodeURIComponent(e))) + }, + }), + u = (o.BufferedBlockAlgorithm = a.extend({ + reset: function () { + ;(this._data = new c.init()), (this._nDataBytes = 0) + }, + _append: function (e) { + 'string' == typeof e && (e = h.parse(e)), + this._data.concat(e), + (this._nDataBytes += e.sigBytes) + }, + _process: function (e) { + var i, + r = this._data, + s = r.words, + n = r.sigBytes, + o = this.blockSize, + a = n / (4 * o), + d = + (a = e ? t.ceil(a) : t.max((0 | a) - this._minBufferSize, 0)) * + o, + l = t.min(4 * d, n) + if (d) { + for (var p = 0; p < d; p += o) this._doProcessBlock(s, p) + ;(i = s.splice(0, d)), (r.sigBytes -= l) + } + return new c.init(i, l) + }, + clone: function () { + var e = a.clone.call(this) + return (e._data = this._data.clone()), e + }, + _minBufferSize: 0, + })) + o.Hasher = u.extend({ + cfg: a.extend(), + init: function (e) { + ;(this.cfg = this.cfg.extend(e)), this.reset() + }, + reset: function () { + u.reset.call(this), this._doReset() + }, + update: function (e) { + return this._append(e), this._process(), this + }, + finalize: function (e) { + return e && this._append(e), this._doFinalize() + }, + blockSize: 16, + _createHelper: function (e) { + return function (t, i) { + return new e.init(i).finalize(t) + } + }, + _createHmacHelper: function (e) { + return function (t, i) { + return new m.HMAC.init(e, i).finalize(t) + } + }, + }) + var m = (n.algo = {}) + return n + })(Math), + ga = ma.enc.Utf8, + va = ma, + fa = va.lib, + ya = fa.Base, + Ia = fa.WordArray, + Ma = va.algo, + _a = Ma.MD5, + Ea = (Ma.EvpKDF = ya.extend({ + cfg: ya.extend({ keySize: 4, hasher: _a, iterations: 1 }), + init: function (e) { + this.cfg = this.cfg.extend(e) + }, + compute: function (e, t) { + for ( + var i, + r = this.cfg, + s = r.hasher.create(), + n = Ia.create(), + o = n.words, + a = r.keySize, + c = r.iterations; + o.length < a; + + ) { + i && s.update(i), (i = s.update(e).finalize(t)), s.reset() + for (var d = 1; d < c; d++) (i = s.finalize(i)), s.reset() + n.concat(i) + } + return (n.sigBytes = 4 * a), n + }, + })) +;(va.EvpKDF = function (e, t, i) { + return Ea.create(i).compute(e, t) +}), + ma.EvpKDF +var Ta = ma, + Sa = Ta.lib.WordArray +;(Ta.enc.Base64 = { + stringify: function (e) { + var t = e.words, + i = e.sigBytes, + r = this._map + e.clamp() + for (var s = [], n = 0; n < i; n += 3) + for ( + var o = + (((t[n >>> 2] >>> (24 - (n % 4) * 8)) & 255) << 16) | + (((t[(n + 1) >>> 2] >>> (24 - ((n + 1) % 4) * 8)) & 255) << 8) | + ((t[(n + 2) >>> 2] >>> (24 - ((n + 2) % 4) * 8)) & 255), + a = 0; + a < 4 && n + 0.75 * a < i; + a++ + ) + s.push(r.charAt((o >>> (6 * (3 - a))) & 63)) + var c = r.charAt(64) + if (c) for (; s.length % 4; ) s.push(c) + return s.join('') + }, + parse: function (e) { + var t = e.length, + i = this._map, + r = this._reverseMap + if (!r) { + r = this._reverseMap = [] + for (var s = 0; s < i.length; s++) r[i.charCodeAt(s)] = s + } + var n = i.charAt(64) + if (n) { + var o = e.indexOf(n) + ;-1 !== o && (t = o) + } + return (function (e, t, i) { + for (var r = [], s = 0, n = 0; n < t; n++) + if (n % 4) { + var o = + (i[e.charCodeAt(n - 1)] << ((n % 4) * 2)) | + (i[e.charCodeAt(n)] >>> (6 - (n % 4) * 2)) + ;(r[s >>> 2] |= o << (24 - (s % 4) * 8)), s++ + } + return Sa.create(r, s) + })(e, t, r) + }, + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', +}), + ma.enc.Base64, + (function (e) { + e.lib.Cipher || + (function () { + var t = e, + i = t.lib, + r = i.Base, + s = i.WordArray, + n = i.BufferedBlockAlgorithm, + o = t.enc + o.Utf8 + var a = o.Base64, + c = t.algo.EvpKDF, + d = (i.Cipher = n.extend({ + cfg: r.extend(), + createEncryptor: function (e, t) { + return this.create(this._ENC_XFORM_MODE, e, t) + }, + createDecryptor: function (e, t) { + return this.create(this._DEC_XFORM_MODE, e, t) + }, + init: function (e, t, i) { + ;(this.cfg = this.cfg.extend(i)), + (this._xformMode = e), + (this._key = t), + this.reset() + }, + reset: function () { + n.reset.call(this), this._doReset() + }, + process: function (e) { + return this._append(e), this._process() + }, + finalize: function (e) { + return e && this._append(e), this._doFinalize() + }, + keySize: 4, + ivSize: 4, + _ENC_XFORM_MODE: 1, + _DEC_XFORM_MODE: 2, + _createHelper: (function () { + function e(e) { + return 'string' == typeof e ? y : v + } + return function (t) { + return { + encrypt: function (i, r, s) { + return e(r).encrypt(t, i, r, s) + }, + decrypt: function (i, r, s) { + return e(r).decrypt(t, i, r, s) + }, + } + } + })(), + })) + i.StreamCipher = d.extend({ + _doFinalize: function () { + return this._process(!0) + }, + blockSize: 1, + }) + var l = (t.mode = {}), + p = (i.BlockCipherMode = r.extend({ + createEncryptor: function (e, t) { + return this.Encryptor.create(e, t) + }, + createDecryptor: function (e, t) { + return this.Decryptor.create(e, t) + }, + init: function (e, t) { + ;(this._cipher = e), (this._iv = t) + }, + })), + h = (l.CBC = (function () { + var e = p.extend() + function t(e, t, i) { + var r, + s = this._iv + s ? ((r = s), (this._iv = void 0)) : (r = this._prevBlock) + for (var n = 0; n < i; n++) e[t + n] ^= r[n] + } + return ( + (e.Encryptor = e.extend({ + processBlock: function (e, i) { + var r = this._cipher, + s = r.blockSize + t.call(this, e, i, s), + r.encryptBlock(e, i), + (this._prevBlock = e.slice(i, i + s)) + }, + })), + (e.Decryptor = e.extend({ + processBlock: function (e, i) { + var r = this._cipher, + s = r.blockSize, + n = e.slice(i, i + s) + r.decryptBlock(e, i), + t.call(this, e, i, s), + (this._prevBlock = n) + }, + })), + e + ) + })()), + u = ((t.pad = {}).Pkcs7 = { + pad: function (e, t) { + for ( + var i = 4 * t, + r = i - (e.sigBytes % i), + n = (r << 24) | (r << 16) | (r << 8) | r, + o = [], + a = 0; + a < r; + a += 4 + ) + o.push(n) + var c = s.create(o, r) + e.concat(c) + }, + unpad: function (e) { + var t = 255 & e.words[(e.sigBytes - 1) >>> 2] + e.sigBytes -= t + }, + }) + i.BlockCipher = d.extend({ + cfg: d.cfg.extend({ mode: h, padding: u }), + reset: function () { + var e + d.reset.call(this) + var t = this.cfg, + i = t.iv, + r = t.mode + this._xformMode == this._ENC_XFORM_MODE + ? (e = r.createEncryptor) + : ((e = r.createDecryptor), (this._minBufferSize = 1)), + this._mode && this._mode.__creator == e + ? this._mode.init(this, i && i.words) + : ((this._mode = e.call(r, this, i && i.words)), + (this._mode.__creator = e)) + }, + _doProcessBlock: function (e, t) { + this._mode.processBlock(e, t) + }, + _doFinalize: function () { + var e, + t = this.cfg.padding + return ( + this._xformMode == this._ENC_XFORM_MODE + ? (t.pad(this._data, this.blockSize), (e = this._process(!0))) + : ((e = this._process(!0)), t.unpad(e)), + e + ) + }, + blockSize: 4, + }) + var m = (i.CipherParams = r.extend({ + init: function (e) { + this.mixIn(e) + }, + toString: function (e) { + return (e || this.formatter).stringify(this) + }, + })), + g = ((t.format = {}).OpenSSL = { + stringify: function (e) { + var t = e.ciphertext, + i = e.salt + return ( + i ? s.create([1398893684, 1701076831]).concat(i).concat(t) : t + ).toString(a) + }, + parse: function (e) { + var t, + i = a.parse(e), + r = i.words + return ( + 1398893684 == r[0] && + 1701076831 == r[1] && + ((t = s.create(r.slice(2, 4))), + r.splice(0, 4), + (i.sigBytes -= 16)), + m.create({ ciphertext: i, salt: t }) + ) + }, + }), + v = (i.SerializableCipher = r.extend({ + cfg: r.extend({ format: g }), + encrypt: function (e, t, i, r) { + r = this.cfg.extend(r) + var s = e.createEncryptor(i, r), + n = s.finalize(t), + o = s.cfg + return m.create({ + ciphertext: n, + key: i, + iv: o.iv, + algorithm: e, + mode: o.mode, + padding: o.padding, + blockSize: e.blockSize, + formatter: r.format, + }) + }, + decrypt: function (e, t, i, r) { + return ( + (r = this.cfg.extend(r)), + (t = this._parse(t, r.format)), + e.createDecryptor(i, r).finalize(t.ciphertext) + ) + }, + _parse: function (e, t) { + return 'string' == typeof e ? t.parse(e, this) : e + }, + })), + f = ((t.kdf = {}).OpenSSL = { + execute: function (e, t, i, r) { + r || (r = s.random(8)) + var n = c.create({ keySize: t + i }).compute(e, r), + o = s.create(n.words.slice(t), 4 * i) + return (n.sigBytes = 4 * t), m.create({ key: n, iv: o, salt: r }) + }, + }), + y = (i.PasswordBasedCipher = v.extend({ + cfg: v.cfg.extend({ kdf: f }), + encrypt: function (e, t, i, r) { + var s = (r = this.cfg.extend(r)).kdf.execute( + i, + e.keySize, + e.ivSize + ) + r.iv = s.iv + var n = v.encrypt.call(this, e, t, s.key, r) + return n.mixIn(s), n + }, + decrypt: function (e, t, i, r) { + ;(r = this.cfg.extend(r)), (t = this._parse(t, r.format)) + var s = r.kdf.execute(i, e.keySize, e.ivSize, t.salt) + return (r.iv = s.iv), v.decrypt.call(this, e, t, s.key, r) + }, + })) + })() + })(ma) +var Ca = ma, + Na = Ca.lib.StreamCipher, + Aa = Ca.algo, + Ra = (Aa.RC4 = Na.extend({ + _doReset: function () { + for ( + var e = this._key, + t = e.words, + i = e.sigBytes, + r = (this._S = []), + s = 0; + s < 256; + s++ + ) + r[s] = s + s = 0 + for (var n = 0; s < 256; s++) { + var o = s % i, + a = (t[o >>> 2] >>> (24 - (o % 4) * 8)) & 255 + n = (n + r[s] + a) % 256 + var c = r[s] + ;(r[s] = r[n]), (r[n] = c) + } + this._i = this._j = 0 + }, + _doProcessBlock: function (e, t) { + e[t] ^= Oa.call(this) + }, + keySize: 8, + ivSize: 0, + })) +function Oa() { + for (var e = this._S, t = this._i, i = this._j, r = 0, s = 0; s < 4; s++) { + i = (i + e[(t = (t + 1) % 256)]) % 256 + var n = e[t] + ;(e[t] = e[i]), (e[i] = n), (r |= e[(e[t] + e[i]) % 256] << (24 - 8 * s)) + } + return (this._i = t), (this._j = i), r +} +Ca.RC4 = Na._createHelper(Ra) +var ba = (Aa.RC4Drop = Ra.extend({ + cfg: Ra.cfg.extend({ drop: 192 }), + _doReset: function () { + Ra._doReset.call(this) + for (var e = this.cfg.drop; e > 0; e--) Oa.call(this) + }, +})) +Ca.RC4Drop = Na._createHelper(ba) +var ka = ma.RC4 +class Va { + constructor(e, t) { + ;(this.offlinePushPlugin = void 0), + (this.offlinePushConfig = void 0), + (this.authConfig = void 0), + (this.aosPushInfo = void 0), + (this.appBackgroundOptions = { badge: 0, isBackground: !1 }), + (this.setTokenAndBackgroundStateAfterLogin = (e) => { + ;(this.aosPushInfo = e), + this.logger.log( + 'OfflinePushService: setToken, deviceClientId:', + null == e ? void 0 : e.clientId + ), + this.offlinePushPlugin && + (this.logger.log('OfflinePushService: setToken plugin is provided'), + this.logger.log( + 'OfflinePushService: setToken pushType is: ', + e && e.pushType + ), + this.regToken(), + this.core.sendCmd('v2SetAppBackground', { + isBackground: this.appBackgroundOptions.isBackground, + badge: this.appBackgroundOptions.badge || 0, + })) + }), + (this.core = e), + (this.service = t), + (this.logger = e.logger) + } + getRNDeviceInfo() { + var e + return ( + this.logger.log('OfflinePushService:getDeviceInfo start'), + null === (e = this.offlinePushPlugin) || + void 0 === e || + e.init(JSON.stringify(this.authConfig), (e, t, i) => { + if ( + (this.logger.log( + `OfflinePushService:: type: ${e}, tokenName: ${t}, token: ${i}` + ), + i) + ) { + var r = '', + s = Ae.getSystemInfo() || {}, + n = s.os ? s.os.toLowerCase() : '' + this.aosPushInfo && this.aosPushInfo.pushType + ? (r = this.aosPushInfo.pushType) + : 'ios' === n + ? (r = '') + : 'android' === n && (r = '8'), + this.pushTokenToServer(r, i) + } else + this.logger.warn( + 'OfflinePushService:: token is empty. Please check your parameters' + ) + }), + new Promise((e, t) => { + var i + null === (i = this.offlinePushPlugin) || + void 0 === i || + i.getDeviceInfo((i) => { + try { + this.logger.log( + `OfflinePushService:getDeviceInfo result ${ + i ? JSON.stringify(i) : '' + }` + ), + e(JSON.parse(i)) + } catch (e) { + t( + new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'OfflinePushService:getDeviceInfo error' }, + }) + ) + } + }), + setTimeout(() => { + t( + new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'OfflinePushService:getDeviceInfo timeout' }, + }) + ) + }, 2e3) + }) + ) + } + pushTokenToServer(e, t) { + var i, + r, + s, + n, + o, + a, + c, + d, + l = '', + p = this.offlinePushConfig + switch (e) { + case '5': + l = + null === (i = null == p ? void 0 : p.miPush) || void 0 === i + ? void 0 + : i.certificateName + break + case '6': + l = + null === (r = null == p ? void 0 : p.hwPush) || void 0 === r + ? void 0 + : r.certificateName + break + case '7': + l = + null === (s = null == p ? void 0 : p.mzPush) || void 0 === s + ? void 0 + : s.certificateName + break + case '8': + l = + null === (n = null == p ? void 0 : p.fcmPush) || void 0 === n + ? void 0 + : n.certificateName + break + case '9': + l = + null === (o = null == p ? void 0 : p.vivoPush) || void 0 === o + ? void 0 + : o.certificateName + break + case '10': + l = + null === (a = null == p ? void 0 : p.oppoPush) || void 0 === a + ? void 0 + : a.certificateName + break + case '11': + l = + null === (c = null == p ? void 0 : p.honorPush) || void 0 === c + ? void 0 + : c.certificateName + break + default: + l = + null === (d = null == p ? void 0 : p.apns) || void 0 === d + ? void 0 + : d.certificateName + } + if ('' === l || void 0 === l) + this.logger.warn( + 'OfflinePushService:: certificate name is empty for push type: ', + e + ) + else + try { + if ('UNIAPP' === Ae.platform) { + var h = ga.parse('557d1e3cafa43e2589a588270c53d56f'), + u = ga.stringify(ka.decrypt(t, h)) + this.logger.log('OfflinePushService:: token', u), + this.core.sendCmd('v2SetDeviceToken', { + certificateName: l, + pushDeviceToken: u, + pushkit: 0, + }) + } else + this.core.sendCmd('v2SetDeviceToken', { + certificateName: l, + pushDeviceToken: t, + pushkit: 0, + }) + } catch (e) { + return ( + this.logger.log('OfflinePushService:: decrypt error', e), + void this.logger.warn('OfflinePushService:: token before decrypt', t) + ) + } + } + regToken() { + var e = Ae.getSystemInfo() || {}, + t = e.os ? e.os.toLowerCase() : '' + if ( + (this.logger.log('OfflinePushService: os', t), + 'ios' === t || 'android' === t) + ) + if ( + !this.offlinePushPlugin || + ('UNIAPP' === Ae.platform && + 'function' != typeof this.offlinePushPlugin.getDeviceToken) || + ('React Native' === Ae.platform && + 'android' === t && + 'function' != typeof this.offlinePushPlugin.init) || + ('React Native' === Ae.platform && + 'ios' === t && + 'function' != typeof this.offlinePushPlugin.checkPermissions) + ) + this.logger.warn( + 'OfflinePushService: plugin is not correct, please check your plugin according to Yunxin Official Documentation' + ) + else { + 'React Native' === Ae.platform && + Ae.envPayload.AppState && + Ae.envPayload.AppState.addEventListener( + 'change', + this.handleRNAppStateChange.bind(this) + ) + var i = '' + this.aosPushInfo && this.aosPushInfo.pushType + ? (i = this.aosPushInfo.pushType) + : 'ios' === t + ? (i = '') + : 'android' === t && (i = '8'), + this.logger.log( + 'OfflinePushService:: prepare to get device token. suggestPushType: ' + + i + ), + this.logger.log( + 'OfflinePushService push config', + JSON.stringify(this.authConfig, null, 2), + 'platform', + Ae.platform + ), + 'UNIAPP' === Ae.platform + ? this.offlinePushPlugin.getDeviceToken( + { suggestPushType: i, config: this.authConfig }, + (e) => { + e + ? (this.logger.log('OfflinePushService:: token is :' + e), + this.pushTokenToServer(i, e)) + : this.logger.warn( + 'OfflinePushService:: token is empty. Please check your parameters' + ) + } + ) + : 'React Native' === Ae.platform && 'android' === t + ? (this.logger.log( + 'OfflinePushService:: onLogin', + this.core.account, + typeof i, + i + ), + this.offlinePushPlugin.onLogin( + this.core.account, + parseInt(i), + !1, + '' + )) + : 'React Native' === Ae.platform && 'ios' === t + ? this.offlinePushPlugin.checkPermissions(() => { + this.logger.log( + 'OfflinePushService addEventListener requestPermissions' + ) + try { + this.offlinePushPlugin.requestPermissions() + } catch (e) { + this.logger.log( + 'OfflinePushService:: requestPermissions error', + e + ) + } + this.offlinePushPlugin.addEventListener('register', (e) => { + this.logger.log(`OfflinePushService:: ios token: ${e}`), + this.pushTokenToServer(i, e) + }), + this.offlinePushPlugin.addEventListener( + 'registrationError', + (e) => { + this.logger.log( + 'OfflinePushService:: ios registerError', + e + ) + } + ) + }) + : this.logger.error( + `OfflinePushService:: platform is not supported. Please check your parameters. Platform: ${Ae.platform}. os: ${t}` + ) + } + else + this.logger.warn( + 'OfflinePushService: only Android or IOS support offline push' + ) + } + handleRNAppStateChange(e) { + this.logger.log( + `push::handleAppStateChange: pushConfig ios/aos; state: ${e}` + ), + (this.appBackgroundOptions = { + badge: this.core.V2NIMConversationService.getTotalUnreadCount(), + isBackground: 'background' === e || 'inactive' === e, + }), + this.setAppBackground( + this.appBackgroundOptions.isBackground, + this.appBackgroundOptions.badge + ) + } + setOfflinePushConfig(e, t) { + var i, + r, + s, + n, + o, + a, + c, + d, + l, + p, + h, + u, + m, + g, + v, + f, + y, + I, + M, + _, + E, + T, + S, + C, + N, + A, + R, + O, + b, + k, + V, + P, + L, + D, + w, + U + this.logger.log('setOfflinePushConfig', 'plugin', e, 'config', t), + (this.offlinePushPlugin = e), + (this.offlinePushConfig = t), + (this.authConfig = { + xmAppId: + null === + (r = + null === (i = this.offlinePushConfig) || void 0 === i + ? void 0 + : i.miPush) || void 0 === r + ? void 0 + : r.appId, + xmAppKey: + null === + (n = + null === (s = this.offlinePushConfig) || void 0 === s + ? void 0 + : s.miPush) || void 0 === n + ? void 0 + : n.appKey, + xmCertificateName: + null === + (a = + null === (o = this.offlinePushConfig) || void 0 === o + ? void 0 + : o.miPush) || void 0 === a + ? void 0 + : a.certificateName, + hwAppId: + null === + (d = + null === (c = this.offlinePushConfig) || void 0 === c + ? void 0 + : c.hwPush) || void 0 === d + ? void 0 + : d.appId, + hwCertificateName: + null === + (p = + null === (l = this.offlinePushConfig) || void 0 === l + ? void 0 + : l.hwPush) || void 0 === p + ? void 0 + : p.certificateName, + oppoAppId: + null === + (u = + null === (h = this.offlinePushConfig) || void 0 === h + ? void 0 + : h.oppoPush) || void 0 === u + ? void 0 + : u.appId, + oppoAppKey: + null === + (g = + null === (m = this.offlinePushConfig) || void 0 === m + ? void 0 + : m.oppoPush) || void 0 === g + ? void 0 + : g.appKey, + oppoAppSecret: + null === + (f = + null === (v = this.offlinePushConfig) || void 0 === v + ? void 0 + : v.oppoPush) || void 0 === f + ? void 0 + : f.secret, + oppoCertificateName: + null === + (I = + null === (y = this.offlinePushConfig) || void 0 === y + ? void 0 + : y.oppoPush) || void 0 === I + ? void 0 + : I.certificateName, + vivoAppId: + null === + (_ = + null === (M = this.offlinePushConfig) || void 0 === M + ? void 0 + : M.vivoPush) || void 0 === _ + ? void 0 + : _.appId, + vivoAppKey: + null === + (T = + null === (E = this.offlinePushConfig) || void 0 === E + ? void 0 + : E.vivoPush) || void 0 === T + ? void 0 + : T.appKey, + vivoCertificateName: + null === + (C = + null === (S = this.offlinePushConfig) || void 0 === S + ? void 0 + : S.vivoPush) || void 0 === C + ? void 0 + : C.certificateName, + fcmCertificateName: + null === + (A = + null === (N = this.offlinePushConfig) || void 0 === N + ? void 0 + : N.fcmPush) || void 0 === A + ? void 0 + : A.certificateName, + mzAppId: + null === + (O = + null === (R = this.offlinePushConfig) || void 0 === R + ? void 0 + : R.mzPush) || void 0 === O + ? void 0 + : O.appId, + mzAppKey: + null === + (k = + null === (b = this.offlinePushConfig) || void 0 === b + ? void 0 + : b.mzPush) || void 0 === k + ? void 0 + : k.appKey, + mzCertificateName: + null === + (P = + null === (V = this.offlinePushConfig) || void 0 === V + ? void 0 + : V.mzPush) || void 0 === P + ? void 0 + : P.certificateName, + apnsCertificateName: + null === + (D = + null === (L = this.offlinePushConfig) || void 0 === L + ? void 0 + : L.apns) || void 0 === D + ? void 0 + : D.certificateName, + honorCertificateName: + null === + (U = + null === (w = this.offlinePushConfig) || void 0 === w + ? void 0 + : w.honorPush) || void 0 === U + ? void 0 + : U.certificateName, + }) + } + setAppBackground(e, t) { + return Te(this, void 0, void 0, function* () { + ;(this.appBackgroundOptions = { isBackground: e, badge: t || 0 }), + yield this.core.sendCmd('v2SetAppBackground', { + isBackground: e, + badge: t || 0, + }) + }) + } +} +class Pa { + constructor(e, t) { + ;(this.p2pMessageMuteModeChangeHandler = (e, t) => { + this.service.emit('onP2PMessageMuteModeChanged', e, t), + this.hasUserService && + this.core.V2NIMUserService.model.setAccountMuteMode(e, t) + var i = this.core.V2NIMConversationIdUtil.p2pConversationId(e), + r = 1 === t + this.core.eventBus.emit('V2NIMSettingService/setMute', i, r) + }), + (this.core = e), + (this.service = t) + } + get hasUserService() { + var e + return !!(null === (e = this.core.V2NIMUserService) || void 0 === e + ? void 0 + : e.name) + } + get hasTeamService() { + var e + return !!(null === (e = this.core.V2NIMTeamService) || void 0 === e + ? void 0 + : e.name) + } + getConversationMuteStatus(e) { + if ('string' != typeof e) return !1 + var t = this.core.V2NIMConversationIdUtil.parseConversationType(e), + i = this.core.V2NIMConversationIdUtil.parseConversationTargetId(e) + return 3 === t + ? 0 !== this.getTeamMessageMuteMode(i, 2) + : 2 === t + ? 0 !== this.getTeamMessageMuteMode(i, 1) + : !( + 1 !== t || + !this.hasUserService || + !this.core.V2NIMUserService.model.muteList.has(i) + ) + } + setTeamMessageMuteMode(e, t, i) { + return Te(this, void 0, void 0, function* () { + var r = + 2 === t + ? 'v2SuperTeamUpdateSelfMemberInfo' + : 'v2TeamUpdateSelfMemberInfo', + s = { teamId: e, teamType: t, accountId: this.core.account, bits: i } + yield this.core.sendCmd(r, { teamMember: s }), + this.core.V2NIMTeamService.memberModel.upsert(s), + this.service.emit('onTeamMessageMuteModeChanged', e, t, i) + var n = + 1 === t + ? this.core.V2NIMConversationIdUtil.teamConversationId(e) + : this.core.V2NIMConversationIdUtil.superTeamConversationId(e), + o = this.getConversationMuteStatus(n) + this.core.eventBus.emit('V2NIMSettingService/setMute', n, o) + }) + } + getTeamMessageMuteMode(e, t) { + var i + return 'string' != typeof e || 'number' != typeof t + ? 0 + : this.hasTeamService + ? 3 & + ((null === + (i = this.core.V2NIMTeamService.memberModel.getById( + e, + t, + this.core.account + )) || void 0 === i + ? void 0 + : i.bits) || 0) + : 0 + } + getAllTeamMessageMuteMode(e) { + if (!this.hasTeamService) return Promise.resolve({}) + var t = this.core.V2NIMTeamService.memberModel.chooseList(e), + i = {} + return ( + t.forEach((e) => { + if (e.accountId === this.core.account) { + var t = e.bits || 0 + i[e.teamId] = 3 & t + } + }), + Promise.resolve(i) + ) + } + setP2PMessageMuteMode(e, t) { + return Te(this, void 0, void 0, function* () { + yield this.core.sendCmd('v2SetP2PMessageMuteMode', { + accountId: e, + muteMode: 1 === t, + }), + this.p2pMessageMuteModeChangeHandler(e, t) + }) + } + getP2PMessageMuteMode(e) { + return this.hasUserService && + this.core.V2NIMUserService.model.muteList.has(e) + ? 1 + : 0 + } + getP2PMessageMuteList() { + return this.hasUserService + ? Promise.resolve(Array.from(this.core.V2NIMUserService.model.muteList)) + : Promise.resolve([]) + } +} +class La { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.push = t.push), + (this.mute = t.mute) + } + setListener() { + this.core.eventBus.on('V2NIMSettingService/updateBits', (e, t, i) => { + this.service.emit('onTeamMessageMuteModeChanged', e, t, i) + }), + this.core.eventBus.on( + 'V2NIMLoginService/loginLifeCycleLoginSucc', + this.push.setTokenAndBackgroundStateAfterLogin.bind(this.push) + ), + this.core.eventBus.on( + 'v2NIMUserService/updateMuteList', + this.mute.p2pMessageMuteModeChangeHandler.bind(this.mute) + ), + this.core.eventBus.on( + 'forwardReceive/v2NIMSettingService/setP2PMessageMuteMode', + this.mute.p2pMessageMuteModeChangeHandler.bind(this.mute) + ) + } +} +class Da { + constructor() { + this.aiStreamMap = new Map() + } + reset() { + this.aiStreamMap.clear() + } + getAiStream(e) { + return this.aiStreamMap.get(e) + } + getAiStreamIsComplete(e) { + var t = this.aiStreamMap.get(e) + return !t || t.isComplete + } + getAiStreamQueryStatus(e) { + var t = this.aiStreamMap.get(e) + return t ? t.queryStatus : 0 + } + upsertAiStreamChunks(e, t, i) { + var r = this.aiStreamMap.get(e) + return ( + r && !r.isComplete && (r.chunks[t] = i), + r || { isComplete: !1, queryStatus: 0, chunks: [] } + ) + } + setAiStream(e, t, i = !1) { + var r = this.aiStreamMap.get(e) + return ( + r + ? this.aiStreamMap.set(e, Object.assign(Object.assign({}, r), t)) + : i && + this.aiStreamMap.set( + e, + Object.assign({ isComplete: !1, queryStatus: 0, chunks: [] }, t) + ), + this.aiStreamMap.get(e) || { isComplete: !1, queryStatus: 0, chunks: [] } + ) + } + completeAiStream(e) { + var t = this.aiStreamMap.get(e) + t && + this.aiStreamMap.set( + e, + Object.assign(Object.assign({}, t), { + isComplete: !0, + queryStatus: 0, + chunks: [], + aiRAGs: void 0, + }) + ) + } +} +var wa = { + '4_26': 'v2AIChatNotify', + '29_35': 'v2AIProxyModelCall', + '29_36': 'v2AIGetUserList', + '4_29': 'v2AIOnStreamMessageChunk', + '4_30': 'v2AIChatStreamNotify', + '29_38': 'v2AIStopModelStreamCall', + '29_39': 'v2AIStreamQuery', + '29_40': 'v2AIRegenMessage', + }, + Ua = { + accountId: 1, + messages: { id: 2, converter: Mt, retConverter: _t }, + requestId: 3, + content: { id: 4, converter: Mt, retConverter: _t }, + promptVariables: 5, + modelConfigParams: { id: 6, converter: Mt, retConverter: _t }, + antispamBusinessId: 7, + antispamEnabled: { id: 8, converter: yt }, + aiStream: { id: 9, converter: yt }, + }, + xa = { + accountId: 1, + name: 3, + avatar: 4, + sign: 5, + gender: { id: 6, retType: 'number' }, + email: 7, + birthday: 8, + mobile: 9, + serverExtension: 10, + modelType: { id: 11, retType: 'number' }, + modelConfig: { + id: 12, + retConverter: (e) => { + if ((e = _t(e))) { + var t = Object.keys(e).reduce( + (t, i) => ( + (t[ + (function (e) { + return (e = e || '') + .split('_') + .map((e, t) => + 0 === t ? e : e[0].toUpperCase() + e.slice(1) + ) + .join('') + })(i) + ] = e[i]), + t + ), + {} + ) + if ('string' == typeof t.promptKeys) + try { + t.promptKeys = JSON.parse(t.promptKeys) + } catch (e) {} + return t + } + }, + }, + yunxinConfig: { + id: 13, + retConverter: (e) => { + if ((e = _t(e))) return e + }, + }, + valid: { id: 14, retType: 'boolean' }, + createTime: { id: 15, retType: 'number' }, + updateTime: { id: 16, retType: 'number' }, + } +function Fa(e) { + try { + var t = JSON.parse(e) + return 'number' == typeof t.index + ? { + msg: t.msg || '', + type: t.type, + lastChunk: { + content: t.msg, + chunkTime: parseInt(t.timestamp), + type: t.type, + index: parseInt(t.index), + }, + } + : t + } catch (e) { + return + } +} +function Ba(e) { + try { + var t = JSON.parse(e) + return t && t.length > 0 + ? t.map((e) => ((e.description = e.desc), delete e.desc, e)) + : [] + } catch (e) { + return [] + } +} +var $a = { + code: { id: 1, retType: 'number' }, + accountId: 2, + requestId: 3, + content: { id: 4, retConverter: Fa }, + aiRAGs: { id: 5, retConverter: Ba }, + timestamp: { id: 6, retType: 'number' }, + aiStreamStatus: { id: 7, retType: 'number' }, + aiStream: { id: 8, retType: 'boolean' }, + }, + Ga = { + serverId: 1, + clientId: 2, + type: { id: 3, retType: 'number' }, + from: 4, + to: 5, + aiAccount: 6, + startIndex: { id: 7, retType: 'number' }, + endIndex: { id: 8, retType: 'number' }, + excludeIndex: { id: 9, converter: Mt }, + }, + ja = { + serverId: 1, + clientId: 2, + type: { id: 3, retType: 'number' }, + content: { id: 4, retConverter: Fa }, + aiRAGs: { id: 6, retConverter: Ba }, + }, + qa = { + v2AIChatNotify: { + sid: 4, + cid: 26, + service: 'V2NIMAIService', + response: [{ type: 'Property', name: 'data', reflectMapper: ft($a) }], + }, + v2AIProxyModelCall: { + sid: 29, + cid: 35, + service: 'V2NIMAIService', + params: [{ type: 'Property', name: 'tag', reflectMapper: Ua }], + }, + v2AIGetUserList: { + sid: 29, + cid: 36, + service: 'V2NIMAIService', + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { pageToken: 1, limit: 2 }, + }, + ], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(xa) }, + { + type: 'Property', + name: 'queryTag', + reflectMapper: ft({ + hasMore: { id: 16, retType: 'boolean' }, + nextToken: 2, + }), + }, + ], + }, + v2AIOnStreamMessageChunk: { + sid: 4, + cid: 29, + service: 'V2NIMAIService', + response: [{ type: 'Property', name: 'msg', reflectMapper: ft(Zr) }], + }, + v2AIChatStreamNotify: { + sid: 4, + cid: 30, + service: 'V2NIMAIService', + response: [{ type: 'Property', name: 'data', reflectMapper: ft($a) }], + }, + v2AIStopModelStreamCall: { + sid: 29, + cid: 38, + service: 'V2NIMAIService', + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + serverId: 1, + clientId: 2, + type: { id: 3, retType: 'number' }, + from: 4, + to: 5, + aiAccount: 6, + opeType: { id: 7, retType: 'number' }, + updateContent: { id: 8 }, + messageTime: { id: 11, retType: 'number' }, + }, + }, + ], + }, + v2AIStreamQuery: { + sid: 29, + cid: 39, + service: 'V2NIMAIService', + params: [{ type: 'Property', name: 'tag', reflectMapper: Ga }], + response: [ + { type: 'PropertyArray', name: 'datas', reflectMapper: ft(ja) }, + ], + }, + v2AIRegenMessage: { + sid: 29, + cid: 40, + service: 'V2NIMAIService', + params: [ + { + type: 'Property', + name: 'tag', + reflectMapper: { + fromAccount: 1, + to: 2, + aiAccount: 3, + serverId: 4, + clientId: 5, + time: { id: 6, retType: 'number' }, + type: { id: 7, retType: 'number' }, + opeType: { id: 8, retType: 'number' }, + replyMsgFromAccount: 9, + replyMsgToAccount: 10, + replyMsgTime: { id: 11, retType: 'number' }, + replyMsgIdServer: 12, + replyMsgIdClient: 13, + }, + }, + ], + }, + } +class Ha { + constructor(e, t) { + ;(this.core = e), (this.service = t), (this.logger = this.core.logger) + } + setListener() {} + beforeEmit(e, ...t) { + var i, + r, + s = `${this.service.name}::emit ${e.toString()}` + if ('onProxyAIModelCall' === e) { + var n = t[0] + this.logger.log( + `${s}`, + `requestId:${n.requestId};aiStreamStatus:${n.aiStreamStatus}` + ) + } else if ('onProxyAIModelStreamCall' === e) { + var o = t[0] + this.logger.log( + `${s}`, + `requestId:${o.requestId};chunkIndex:${ + null === (i = o.content) || void 0 === i ? void 0 : i.lastChunk.index + };chunkTime:${ + null === (r = o.content) || void 0 === r + ? void 0 + : r.lastChunk.chunkTime + }` + ) + } else this.logger.log(`${s}`, ...t) + } +} +class Ya { + constructor(e, t) { + ;(this.core = e), + (this.service = t), + (this.model = t.model), + (this.logger = this.core.logger) + } + v2AIChatNotifyHandler(e) { + var t = e.content.data + t && + t.requestId && + (this.model.completeAiStream(t.requestId), + (t.aiStreamStatus = t.aiStreamStatus || 0), + (t.aiStream = t.aiStream || !1), + t.content && (t.content.msg = t.content.msg || ''), + this.service.emit('onProxyAIModelCall', t)) + } + v2AIChatStreamNotifyHandler(e) { + var t = e.content.data + if (t && t.requestId && t.content && t.content.msg) { + var i = this.model.getAiStream(t.requestId) + if ( + (i || + (i = this.model.setAiStream( + t.requestId, + { isComplete: !1, queryStatus: 0, chunks: [] }, + !0 + )), + !i.isComplete) + ) { + var { lastChunk: r } = t.content + if ( + (0 === r.index && + t.aiRAGs && + (i = this.model.setAiStream(t.requestId, { aiRAGs: t.aiRAGs })), + this.logger.log( + `V2AI::streamNotify requestId:${t.requestId};index:${r.index};cacheChunkLength:${i.chunks.length};chunkTime:${r.chunkTime}.` + ), + 0 === i.chunks.length && r.index > 0) + ) + this.logger.log( + `V2AI::streamNotify requestId:${ + t.requestId + };chunks missing 0,currentIdx:${r.index},needQuery:${ + 0 === i.queryStatus + }.` + ), + 0 === i.queryStatus && + ((i = this.model.setAiStream(t.requestId, { queryStatus: 1 })), + this.service._queryAiStream({ + clientId: t.requestId, + type: 4, + from: this.core.account, + aiAccount: t.accountId, + startIndex: 0, + endIndex: r.index - 1, + })) + else if ( + r.index > 0 && + i.chunks.length > 0 && + void 0 === i.chunks[r.index - 1] + ) { + var s = i.chunks.reduce( + (e, t, i) => (void 0 !== t && e.push(i), e), + [] + ) + this.logger.log( + `V2AI::streamNotify requestId:${ + t.requestId + };out of order,currenIdx:${r.index},cacheIdx:[${s.join( + ',' + )}],needReport:${!i.hasReported}.` + ), + i.hasReported || + ((i = this.model.setAiStream(t.requestId, { hasReported: !0 })), + this.reportOutOfOrder({ + requestId: t.requestId, + cacheIds: s, + targetIndex: r.index, + target: '4-30', + })) + } + ;(i = this.model.upsertAiStreamChunks(t.requestId, r.index, r.content)) + .chunks[0] || 1 !== i.queryStatus + ? ((t.content.msg = i.chunks.join('')), + i.aiRAGs && (t.aiRAGs = i.aiRAGs), + this.service.emit('onProxyAIModelStreamCall', t)) + : this.logger.log( + `V2AI::streamNotify requestId:${t.requestId};chunks ignore index:${r.index};queryStatus:${i.queryStatus}.` + ) + } + } + } + v2AIOnStreamMessageChunkHandler(e) { + var t, + i, + r, + s = $r(this.core, e.content.msg) + if (s.streamConfig && s.streamConfig.lastChunk) { + var n = this.model.getAiStream(s.messageClientId) + if (!n || !n.isComplete) { + n || + (n = this.model.setAiStream( + s.messageClientId, + { isComplete: !1, queryStatus: 0, chunks: [] }, + !0 + )) + var o = s.streamConfig.lastChunk, + a = s.messageClientId + if ( + (0 === o.index && + (null === (t = s.aiConfig) || void 0 === t ? void 0 : t.aiRAGs) && + (n = this.model.setAiStream(a, { aiRAGs: s.aiConfig.aiRAGs })), + this.logger.log( + `V2AI::aiStream requestId:${a};index:${o.index};cacheChunkLength:${n.chunks.length};chunkTime:${o.chunkTime}.` + ), + 0 === n.chunks.length && o.index > 0) + ) + this.logger.log( + `V2AI::msg:aiStream requestId:${a};chunks missing 0,currentIdx:${ + o.index + },needQuery:${0 === n.queryStatus}.` + ), + 0 === n.queryStatus && + ((n = this.model.setAiStream(a, { queryStatus: 1 })), + this.service._queryAiStream({ + serverId: s.messageServerId, + clientId: a, + type: ( + null === (i = s.aiConfig) || void 0 === i + ? void 0 + : i.accountId + ) + ? s.conversationType + : 5, + from: s.senderId, + to: s.receiverId, + aiAccount: + null === (r = s.aiConfig) || void 0 === r + ? void 0 + : r.accountId, + startIndex: 0, + endIndex: o.index - 1, + })) + else if ( + o.index > 0 && + n.chunks.length > 0 && + void 0 === n.chunks[o.index - 1] + ) { + var c = n.chunks.reduce( + (e, t, i) => (void 0 !== t && e.push(i), e), + [] + ) + this.logger.log( + `V2AI::msg:aiStream requestId:${a};out of order,currenIdx:${ + o.index + };streamCache.chunks:${JSON.stringify(n.chunks)},cacheIdx:[${c.join( + ',' + )}],needReport:${!n.hasReported}.` + ), + n.hasReported || + ((n = this.model.setAiStream(a, { hasReported: !0 })), + this.reportOutOfOrder({ + requestId: a, + cacheIds: c, + targetIndex: o.index, + target: '4-29', + })) + } + ;(n = this.model.upsertAiStreamChunks(a, o.index, o.content)) + .chunks[0] || 1 !== n.queryStatus + ? ((s.streamConfig.status = -1), + s.aiConfig && (s.aiConfig.aiStreamStatus = -1), + (s.text = n.chunks.join('')), + n.aiRAGs && s.aiConfig && (s.aiConfig.aiRAGs = n.aiRAGs), + n.msg && + (s = Object.assign( + {}, + n.msg, + Object.assign( + { + text: s.text, + modifyTime: o.chunkTime, + modifyAccountId: n.msg.senderId, + streamConfig: s.streamConfig, + }, + s.aiConfig ? { aiConfig: s.aiConfig } : {} + ) + )), + this.core.eventBus.emit('V2NIMAIService/receiveMessagesModified', [ + s, + ])) + : this.logger.log( + `V2AI::msg:callStream requestId:${a};chunks ignore index:${o.index};queryStatus:${n.queryStatus}.` + ) + } + } + } + reportOutOfOrder(e) { + this.core.reporter.reportTraceStart('exceptions', { + user_id: this.core.account, + trace_id: Ve(this.core, 'clientSocket.socket.sessionId'), + action: 2, + exception_service: 0, + }), + this.core.reporter.reportTraceUpdateV2('exceptions', { + code: 0, + context: e.requestId, + description: `[${e.cacheIds.join(',')}],${e.targetIndex}`, + operation_type: 2, + target: e.target, + net_connect: !0, + }), + this.core.reporter.reportTraceEnd('exceptions', 4) + } +} +var Ka = { + accountId: 1, + uid: { id: 2, retType: 'number' }, + joinTime: { id: 3, retType: 'number' }, + expireTime: { id: 4, retType: 'number' }, + deviceId: 5, + }, + Wa = { + channelType: { + id: 1, + retType: 'number', + retAccess: 'channelInfo.channelType', + }, + channelName: { id: 2, retAccess: 'channelInfo.channelName' }, + channelId: { id: 3, retAccess: 'channelInfo.channelId' }, + createTime: { + id: 4, + retType: 'number', + retAccess: 'channelInfo.createTime', + }, + expireTime: { + id: 5, + retType: 'number', + retAccess: 'channelInfo.expireTime', + }, + creatorAccountId: { id: 6, retAccess: 'channelInfo.creatorAccountId' }, + channelExtension: { id: 7, retAccess: 'channelInfo.channelExtension' }, + channelValid: { + id: 8, + retDef: !0, + retAccess: 'channelInfo.channelValid', + retConverter: (e) => 1 !== parseInt(e), + }, + fromAccid: 10, + toAccid: 11, + requestId: 12, + pushEnabled: { + id: 13, + access: 'pushConfig.pushEnabled', + converter: yt, + retType: 'boolean', + }, + pushTitle: { id: 14, access: 'pushConfig.pushTitle' }, + pushContent: { id: 15, access: 'pushConfig.pushContent' }, + pushPayload: { id: 16, access: 'pushConfig.pushPayload' }, + unreadEnabled: { + id: 17, + access: 'signallingConfig.unreadEnabled', + converter: yt, + retType: 'boolean', + def: 1, + }, + members: { + id: 18, + retAccess: 'members', + retConverter: (e) => { + try { + return JSON.parse(e).map((e) => gt(e, ft(Ka))) + } catch (e) { + return + } + }, + }, + attach: { id: 19, retConverter: _t }, + serverExtension: { id: 20, retDef: '' }, + offlineEnabled: { id: 21, converter: yt, retType: 'boolean', def: 1 }, + msgId: 22, + selfUid: { id: 23, retType: 'number', access: 'signallingConfig.selfUid' }, + time: { id: 24, retType: 'number' }, + rtcChannelName: { id: 25, access: 'rtcConfig.rtcChannelName' }, + rtcTokenTtl: { + id: 26, + retType: 'number', + access: 'rtcConfig.rtcTokenTtl', + retAccess: 'rtcInfo.rtcTokenTtl', + }, + rtcToken: { id: 27, retAccess: 'rtcInfo.rtcToken' }, + rtcParams: { + id: 28, + access: 'rtcConfig.rtcParams', + retAccess: 'rtcInfo.rtcParams', + }, + callStatus: { id: 30, retType: 'number' }, + } +ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa), + ft(Wa) +var Ja, + za = { + '19_1': 'v2PublishEvent', + '14_2': 'v2OnUserStatusChange', + '19_3': 'v2SubscribeUserStatus', + '19_4': 'v2UnsubscribeUserStatus', + '19_5': 'v2UnsubscribeAllUserStatus', + '19_6': 'v2QuerySubscribeEvent', + '19_7': 'v2QueryAllSubscribeEvent', + '14_9': 'v2OnMultiUserStatusChange', + }, + Xa = 'V2NIMSubscriptionService', + Qa = { + eventType: { id: 1, retType: 'number' }, + statusType: { id: 2, retType: 'number' }, + uniqueId: 3, + extension: 4, + duration: { id: 5, retType: 'number' }, + onlineOnly: { id: 6, retType: 'boolean', converter: (e) => (e ? 1 : 2) }, + multiSync: { id: 7, retType: 'boolean', converter: yt }, + publishTime: { id: 10, retType: 'number' }, + serverId: 11, + clientType: { id: 12, retType: 'number' }, + serverExtension: 13, + extensionReceived: 14, + accountId: 103, + }, + Za = { + eventType: { id: 1, retType: 'number' }, + duration: { id: 2, retType: 'number' }, + immediateSync: { id: 3, retType: 'number', converter: yt }, + accountId: 102, + subscribeTime: { id: 105, retType: 'number' }, + }, + ec = { + v2PublishEvent: { + sid: 19, + cid: 1, + service: Xa, + params: [{ type: 'Property', name: 'tag', reflectMapper: Qa }], + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Qa) }], + }, + v2OnUserStatusChange: { + sid: 14, + cid: 2, + service: Xa, + response: [{ type: 'Property', name: 'data', reflectMapper: ft(Qa) }], + }, + v2SubscribeUserStatus: { + sid: 19, + cid: 3, + service: Xa, + params: [ + { type: 'Property', name: 'tag', reflectMapper: Za }, + { type: 'StrArray', name: 'accountIds' }, + ], + response: [{ type: 'StrArray', name: 'failedList' }], + }, + v2UnsubscribeUserStatus: { + sid: 19, + cid: 4, + service: Xa, + params: [ + { type: 'Property', name: 'tag', reflectMapper: Za }, + { type: 'StrArray', name: 'accountIds' }, + ], + response: [{ type: 'StrArray', name: 'failedList' }], + }, + v2UnsubscribeAllUserStatus: { + sid: 19, + cid: 5, + service: Xa, + params: [{ type: 'Property', name: 'tag', reflectMapper: Za }], + }, + v2QuerySubscribeEvent: { + sid: 19, + cid: 6, + service: Xa, + params: [ + { type: 'Property', name: 'tag', reflectMapper: Za }, + { type: 'StrArray', name: 'accountIds' }, + ], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Za) }, + ], + }, + v2QueryAllSubscribeEvent: { + sid: 19, + cid: 7, + service: Xa, + params: [{ type: 'Property', name: 'tag', reflectMapper: Za }], + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Za) }, + ], + }, + v2OnMultiUserStatusChange: { + sid: 14, + cid: 9, + service: Xa, + response: [ + { type: 'PropertyArray', name: 'data', reflectMapper: ft(Qa) }, + ], + }, + }, + tc = { + accountIds: { + type: 'array', + required: !0, + itemType: 'string', + min: 1, + max: 100, + }, + duration: { type: 'number', required: !1, min: 60, max: 2592e3 }, + immediateSync: { type: 'boolean', required: !1 }, + }, + ic = { + accountIds: { type: 'array', required: !1, itemType: 'string', max: 100 }, + }, + rc = { + statusType: { type: 'number', required: !0, min: 1e4, max: 2147483647 }, + duration: { type: 'number', required: !1, min: 60, max: 604800 }, + extension: { type: 'jsonstr', required: !1 }, + onlineOnly: { type: 'boolean', required: !1 }, + multiSync: { type: 'boolean', required: !1 }, + } +!(function (e) { + ;(e[(e.V2NIM_PROXY_REQUEST_METHOD_GET = 1)] = + 'V2NIM_PROXY_REQUEST_METHOD_GET'), + (e[(e.V2NIM_PROXY_REQUEST_METHOD_POST = 2)] = + 'V2NIM_PROXY_REQUEST_METHOD_POST'), + (e[(e.V2NIM_PROXY_REQUEST_METHOD_PUT = 3)] = + 'V2NIM_PROXY_REQUEST_METHOD_PUT'), + (e[(e.V2NIM_PROXY_REQUEST_METHOD_DELETE = 4)] = + 'V2NIM_PROXY_REQUEST_METHOD_DELETE') +})(Ja || (Ja = {})) +ft({ zone: 1, path: 2, method: 3, header: 4, body: 5 }), + ft({ fromAccountId: 1, body: 2, time: { id: 3, retType: 'number' } }), + Ja.V2NIM_PROXY_REQUEST_METHOD_DELETE, + Ja.V2NIM_PROXY_REQUEST_METHOD_GET, + Ja.V2NIM_PROXY_REQUEST_METHOD_POST, + Ja.V2NIM_PROXY_REQUEST_METHOD_PUT +var sc = ct +sc.registerService( + class extends ni { + constructor(e, t = {}) { + var i + super('V2NIMLoginService', e), + (this.account = ''), + (this.previousLoginAccount = ''), + (this.token = ''), + (this.deviceId = ''), + (this.clientSession = ''), + (this.processId = ''), + (this.kickedDetail = null), + (this.binaryWebsocket = !0), + this.core._registerDep(ui, 'misc'), + vt({ cmdMap: Nt, cmdConfig: Ot }), + 'v2' === e.options.apiVersion && + (vt({ cmdMap: At, cmdConfig: bt }), (this.core.auth = this)), + (this.previousLoginManager = new He()), + (this.doLoginStepsManager = new He()), + (this.loginTimerManager = new _e()), + (this.loginOption = Object.assign({}, fi)), + (this.config = { + lbsUrls: vi, + linkUrl: 'weblink.netease.im:443', + linkSSL: !0, + }), + this.setOptions(t), + (e.V2NIMLoginService = this), + !1 !== this.core.options.binaryWebsocket && + 'function' == typeof Uint8Array + ? ((this.binaryWebsocket = !0), (i = new Wt(this.core))) + : ((this.binaryWebsocket = !1), (i = new ei(this.core))), + (this.clientSocket = i), + 'v2' === this.core.options.apiVersion && (this.core.clientSocket = i), + (this.lifeCycle = new oi(e)), + (this.reconnect = new ti(e)), + (this.lbs = new ri(e)), + (this.authenticator = new si(e)), + (this.dataSync = new ai(e)) + } + get hasSettingService() { + var e + return !!(null === (e = this.core.V2NIMSettingService) || void 0 === e + ? void 0 + : e.name) + } + setOptions(e) { + var t, i, r + ye( + { + lbsUrls: { type: 'array', itemType: 'string', min: 1, required: !1 }, + linkUrl: { type: 'string', allowEmpty: !1, required: !1 }, + }, + e, + '', + !0 + ), + (this.config = we(this.config, e)), + null === + (i = + null === (t = this.core.clientSocket) || void 0 === t + ? void 0 + : t.setLinkSSL) || + void 0 === i || + i.call(t, null === (r = this.config.linkSSL) || void 0 === r || r) + var s = '', + n = '' + this.config.isFixedDeviceId + ? ((s = Ae.localStorage.getItem('__NIM_DEVC_ID__') || Le()), + (n = Ae.localStorage.getItem('__NIM_CLIENT_SESSION_ID__') || Le()), + Ae.localStorage.setItem('__NIM_DEVC_ID__', s), + Ae.localStorage.setItem('__NIM_CLIENT_SESSION_ID__', n)) + : ((s = Le()), (n = Le())), + (this.deviceId = s), + (this.clientSession = n), + this.core.reporter.setConfig({ common: { dev_id: s } }) + } + reset() { + ;(this.account = ''), + (this.token = ''), + (this.processId = ''), + this.lbs.reset(), + this.reconnect.reset(), + this.authenticator.reset(), + this.authenticator.clearLastLoginClient(), + this.dataSync.reset() + } + login(e, t, i = {}) { + return Te(this, void 0, void 0, function* () { + this._checkApiVersion() + var r = Ae.getSystemInfo() || {}, + s = r.os ? r.os.toLowerCase() : '' + if ( + 'React Native' === Ae.platform && + 'android' === s && + this.hasSettingService && + Ve(this.core.V2NIMSettingService, 'push.offlinePushPlugin') + ) + try { + this.deviceInfo = + yield this.core.V2NIMSettingService.push.getRNDeviceInfo() + } catch (e) { + this.logger.error(e) + } + if ('string' != typeof e || '' === e.trim()) + throw new me({ detail: { reason: 'Account must be string' } }) + if ((ye(gi, i, '', !0), 0 === (i = we(fi, i)).authType && !t)) + throw new me({ + detail: { reason: 'When authType is 0, token cannot be empty' }, + }) + if ( + ('' !== this.previousLoginAccount && + this.previousLoginAccount !== e && + this.core._clearModuleData(), + 0 === this.getLoginStatus()) + ) + this.logger.log(`V2NIMLoginService::login:allowLogin:${e}`, i) + else { + if (1 === this.getLoginStatus()) return this.smoothForLogined(e, t, i) + if (2 === this.getLoginStatus()) + return this.smoothForLogining(e, t, i) + } + ;(this.account = e), + (this.previousLoginAccount = e), + (this.token = t), + (this.processId = Le()), + (this.loginOption = we(fi, i)), + (this.kickedDetail = null), + this.loginTimerManager.destroy(), + this.loginTimerManager.addTimer( + () => { + var e = new he({ + code: de.V2NIM_ERROR_CODE_TIMEOUT, + detail: { reason: 'Login API timeout' }, + }) + this.doLoginStepsManager.clear(e), + this.previousLoginManager.clear(e), + (this.originLoginPromise = void 0), + this.lifeCycle.processEvent('exited', e) + }, + this.loginOption.timeout > 0 ? this.loginOption.timeout : 6e4, + 1 + ) + try { + yield this.multiTryDoLogin(), this.loginTimerManager.destroy() + } catch (e) { + throw (this.loginTimerManager.destroy(), e) + } + }) + } + setAppVisibility(e) { + this.reconnect.setAppVisibility(e) + } + getChatroomLinkAddress(e, t) { + return Te(this, void 0, void 0, function* () { + return ( + ye( + { + roomId: { + type: 'string', + regExp: /^\d+$/, + required: !0, + allowEmpty: !1, + }, + miniProgram: { type: 'boolean', required: !1 }, + }, + { roomId: e, miniProgram: t }, + '', + !0 + ), + (t = void 0 === t ? De() : t), + (yield this.clientSocket.sendCmd('v2GetChatroomLinkAddress', { + roomId: e, + miniProgram: t, + })).content.linkAddress + ) + }) + } + multiTryDoLogin(e) { + return Te(this, void 0, void 0, function* () { + for ( + var t = new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'loginFailed' }, + }), + i = 0; + i <= this.loginOption.retryCount; + i++ + ) { + var r = `V2NIMLoginService::times of login try: ${i}` + i > 0 ? this.logger.warn(r) : this.logger.log(r) + try { + ;(this.originLoginPromise = e || this.doLogin(!1)), (e = void 0) + var s = yield this.previousLoginManager.add(this.originLoginPromise) + return ( + this.core.reporter.reportTraceEnd('login', !0), + this.doLoginStepsManager.clear(), + this.previousLoginManager.clear(), + (this.originLoginPromise = void 0), + s + ) + } catch (e) { + if ( + ((t = e || t), + this.logger.error( + `V2NIMLoginService::login failed, times of login try: ${i}, err.code: ${ + null == t ? void 0 : t.code + }, err.message: "${null == t ? void 0 : t.message}"` + ), + t.code !== de.V2NIM_ERROR_CODE_CANCELLED && + this.core.reporter.reportTraceEnd('login', !1), + this.reconnect.clearReconnectTimer(), + this.checkLoginTerminalCode(t && t.code)) + ) + throw (this.lifeCycle.processEvent('exited', t), t) + t && 399 === t.code && this.lbs.reset() + } + } + throw (this.lifeCycle.processEvent('exited', t), t) + }) + } + doLogin(e) { + var t, i + return Te(this, void 0, void 0, function* () { + var r = + !!e || this.authenticator.checkAutoLogin(this.loginOption.forceMode) + this.core.reporter.reportTraceCancel('login'), + this.core.reporter.reportTraceStart( + 'login', + r + ? { + user_id: this.account, + action: 'auto_login', + process_id: this.processId, + binary_websocket: this.binaryWebsocket, + } + : { + user_id: this.account, + action: 'manual_login', + process_id: this.processId, + binary_websocket: this.binaryWebsocket, + } + ), + this.core.reporter.reportTraceUpdateV2( + 'login', + { + code: 0, + description: JSON.stringify(this.loginOption), + operation_type: 'conf_init', + succeed: !0, + duration: 0, + target: '', + }, + { asyncParams: Ae.net.getNetworkStatus() } + ) + var s = yield this.doLoginStepsManager.add(this.lbs.getLbsInfos()) + yield this.doLoginStepsManager.add(this.clientSocket.connect(s, e)) + var n = yield this.doLoginStepsManager.add( + this.authenticator.verifyAuthentication(r) + ) + if ( + ((this.processId = Le()), + this.clientSocket.resetSocketConfig(), + this.reconnect.reset(), + this.dataSync.reset(), + this.lifeCycle.processEvent( + 'loginSucc', + void 0, + Object.assign(Object.assign({}, n), { isReconnect: e }) + ), + this.clientSocket.ping(), + this.core.abtest.abtRequest(), + 'function' == + typeof (null === (t = this.core.V2NIMClientAntispamUtil) || + void 0 === t + ? void 0 + : t.downloadLocalAntiSpamVocabs) && + this.core.V2NIMClientAntispamUtil.downloadLocalAntiSpamVocabs(), + 'function' == + typeof (null === (i = this.core.cloudStorage) || void 0 === i + ? void 0 + : i.init)) + ) + try { + yield this.core.cloudStorage.init(n.timestamp) + } catch (e) { + this.logger.warn('doLogin::cloudStorage init error', e) + } + return n + }) + } + smoothForLogined(e, t, i) { + return Te(this, void 0, void 0, function* () { + var r = this.checkIsSameLogin(e, t, i) + return ( + this.logger.warn( + `V2NIMLoginService::smoothForLogined:Logined, isSameLogin ${r}` + ), + r ? void 0 : (yield this.logout(), this.login(e, t, i)) + ) + }) + } + smoothForLogining(e, t, i) { + return Te(this, void 0, void 0, function* () { + var r = this.checkIsSameLogin(e, t, i) + if ( + (this.logger.warn( + `V2NIMLoginService::smoothForLogining:Logining progress exists, abort the previous login attempt and start next attempt, isSameLogin ${r}` + ), + this.previousLoginManager.clear(), + this.reconnect.reset(), + (this.account = e), + (this.previousLoginAccount = e), + (this.token = t), + (this.loginOption = we(this.loginOption, i)), + !r) + ) + return ( + this.doLoginStepsManager.clear(), + this.clientSocket.doDisconnect(xt.ACTIVE, 'Aborted'), + this.reset(), + this.lifeCycle.processEvent('logout'), + yield Promise.resolve(), + this.login(e, t, i) + ) + if (!this.originLoginPromise) + throw new he({ + code: de.V2NIM_ERROR_CODE_INTERNAL, + detail: { reason: 'NoPreviousLoginExists' }, + }) + this.reconnect.reset(), + yield Promise.resolve(), + yield this.multiTryDoLogin(this.originLoginPromise) + }) + } + checkIsSameLogin(e, t, i) { + return ( + this.account === e && + this.loginOption.authType === i.authType && + (0 !== i.authType || this.token === t) + ) + } + logout() { + return Te(this, void 0, void 0, function* () { + this._checkApiVersion(), + this.doLoginStepsManager.clear(), + this.previousLoginManager.clear(), + this.loginTimerManager.destroy(), + (this.originLoginPromise = void 0) + var e = this.getConnectStatus(), + t = this.getLoginStatus() + switch (t) { + case 1: + try { + yield this.clientSocket.sendCmd('v2Logout', void 0, { + timeout: 1e3, + }), + this.clientSocket.doDisconnect( + xt.ACTIVE, + 'UserActiveDisconnect' + ), + this.core._clearModuleData(), + this.lifeCycle.processEvent('logout') + } catch (e) { + this.logger.error('Instance::disconnect sendCmd:logout error', e), + this.clientSocket.doDisconnect( + xt.ACTIVE, + 'UserActiveDisconnect' + ), + this.core._clearModuleData(), + this.lifeCycle.processEvent('logout') + } + break + case 2: + case 3: + this.clientSocket.doDisconnect(xt.ACTIVE, 'UserActiveDisconnect'), + this.core._clearModuleData(), + this.lifeCycle.processEvent('logout') + break + case 0: + throw ( + (this.core._clearModuleData(), + new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: { + reason: `Illegal logout. loginStatus ${t}. connectStatus ${e}`, + }, + })) + ) + default: + throw ( + (this.core._clearModuleData(), + new he({ + code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE, + detail: { + reason: `Illegal logout. illegal status: loginStatus ${t}. connectStatus ${e}`, + }, + })) + ) + } + }) + } + getConnectStatus() { + return this.lifeCycle.getConnectStatus() + } + getLoginStatus() { + return this.lifeCycle.getLoginStatus() + } + getLoginUser() { + return this.account + } + getLoginClients() { + return (function (e, t) { + ;(e = e || []), (t = t || '') + for (var i = [], r = [], s = 0; s < e.length; s++) { + var n = e[s][t] + ;-1 === r.indexOf(n) && (r.push(n), i.push(e[s])) + } + return i + })(this.authenticator.loginClients, 'clientId').map((e) => + mi(e, [ + 'type', + 'os', + 'timestamp', + 'customTag', + 'customClientType', + 'clientId', + 'clientIP', + ]) + ) + } + getCurrentLoginClient() { + var e + if ( + null === (e = this.authenticator.loginClientOfThisConnection) || + void 0 === e + ? void 0 + : e.clientId + ) + return mi(this.authenticator.loginClientOfThisConnection, [ + 'type', + 'os', + 'timestamp', + 'customTag', + 'customClientType', + 'clientId', + 'clientIP', + ]) + } + getDataSync() { + var e = this.dataSync.datas + return e && e.length > 0 + ? e.map((e) => ({ type: e.type, state: e.state })) + : null + } + setReconnectDelayProvider(e) { + this.reconnect._setReconnectDelayProvider(e) + } + kickOffline(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this._checkApiVersion(), + ye({ clientId: { type: 'string', allowEmpty: !1 } }, e, '', !0), + 0 === + Ve( + yield this.clientSocket.sendCmd('v2KickOffline', { + clientIds: [e.clientId], + }), + 'content.clientIds.length' + )) + ) + throw new he({ code: de.V2NIM_ERROR_CODE_REQUEST_FAILED }) + }) + } + getKickedOfflineDetail() { + return this.kickedDetail + } + checkLoginTerminalCode(e) { + return this.authenticator.checkLoginTerminalCode(e) + } + checkIllegalState() { + if (!this.getLoginUser()) + throw new he({ code: de.V2NIM_ERROR_CODE_ILLEGAL_STATE }) + } + _checkApiVersion() { + if ('v2' !== this.core.options.apiVersion) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'apiVersion is not "v2"' }, + }) + } + v2LoginHandler(e) { + if (e.error) + throw (this.clientSocket.doDisconnect(xt.ACTIVE, e.error), e.error) + return e + } + v2LoginClientChangeHandler(e) { + this.authenticator.changeLoginClient( + parseInt(e.content.state), + e.content.datas + ) + } + nimLoginClientChangeHandler(e) { + this.authenticator.changeLoginClient( + parseInt(e.content.state), + e.content.datas + ) + } + qchatLoginClientChangeHandler(e) { + var t = parseInt(e.content.state) + ;(t = 1 === t ? 2 : 3), + this.authenticator.changeLoginClient(t, [e.content.data]) + } + v2BeKickedHandler(e) { + if (e.error) this.core.logger.error('v2BeKickedHandler error, ', e.error) + else { + var t = (function (e) { + return Et( + { + reason: { type: 'number' }, + clientType: { type: 'number' }, + customClientType: { type: 'number' }, + }, + e + ) + })(e.content) + this.core.logger.warn('v2Bekicked::', t), + (this.kickedDetail = t), + this.clientSocket.doDisconnect(xt.KICKED, t), + this.core._clearModuleData(), + this.lifeCycle.processEvent( + 'kicked', + new he({ + code: de.V2NIM_ERROR_CODE_DISCONNECT, + detail: { reason: 'disconnect due to kicked' }, + }), + t + ), + this.emit('onKickedOffline', t) + } + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + if ( + 'onLoginFailed' === e || + 'onDisconnected' === e || + 'onConnectFailed' === e + ) { + var r = t[0] + this.logger.log(`${i}`, r.toString()) + } else if ('onDataSync' === e) { + var s = t[2] + this.logger.log(`${i}`, t[0], t[1], s && s.toString()) + } else this.logger.log(`${i}`, ...t) + return super.emit(e, ...t) + } + }, + 'V2NIMLoginService' +), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMSyncService', e), + (this.teamKey = [ + 'teams', + 'superTeams', + 'myTeamMembers', + 'mySuperTeamMembers', + ]), + (this.config = {}), + (this.timetags = {}), + 'v2' === this.core.options.apiVersion && + (this.initEventListeners(), + vt({ cmdMap: yi, cmdConfig: Ii }), + this.setListener()) + } + reset() { + this.timetags = {} + } + setListener() { + this.core.eventBus.on('V2NIMSync/updateTimetag', (e) => { + Object.keys(e).forEach((t) => { + e[t] > (this.timetags[t] || 0) && (this.timetags[t] = e[t]) + }) + }) + } + setOptions(e) { + var t = this.core, + i = !( + !t.V2NIMConversationService.name && + !t.V2NIMLocalConversationService.name + ) + return ( + (this.config = Object.assign( + { + myInfo: !!t.V2NIMUserService.name, + offlineMsgs: !!t.V2NIMMessageService.name, + roamingMsgs: !!t.V2NIMMessageService.name, + relations: !!t.V2NIMUserService.name, + friends: !!t.V2NIMFriendService.name, + friendUsers: !!t.V2NIMUserService.name, + msgReceipts: !!t.V2NIMMessageService.name, + broadcastMsgs: !!t.V2NIMNotificationService.name, + recallMsg: !!t.V2NIMMessageService.name, + sessionAck: i, + superTeamSessionAck: i, + stickTopSessions: i, + superTeamRoamingMsgs: !!t.V2NIMTeamService.name, + deleteSuperTeamMsg: !!t.V2NIMTeamService.name, + deleteSelfMsgs: !!t.V2NIMMessageService.name, + sessionHistoryMsgsDelete: !!t.V2NIMMessageService.name, + avSignal: !!t.V2NIMSignallingService.name, + teams: !!t.V2NIMTeamService.name, + superTeams: !!t.V2NIMTeamService.name, + myTeamMembers: !!t.V2NIMTeamService.name, + mySuperTeamMembers: !!t.V2NIMTeamService.name, + donnop: !!t.V2NIMSettingService.name, + p2pTeamModifyMessage: !!t.V2NIMMessageService.name, + superTeamModifyMessage: !!t.V2NIMMessageService.name, + }, + e + )), + this.config + ) + } + doBasicSync() { + return Te(this, void 0, void 0, function* () { + var e = Object.keys(this.config).filter( + (e) => !this.teamKey.includes(e) && this.config[e] + ), + t = this.genSyncParams(e) + this.logger.log('V2Sync:basic', t) + var i = (yield this.core.clientSocket.sendCmd('v2NIMSync', { + tag: t, + })).content.timetag + this.setTimetags( + i, + e.filter((e) => 'broadcastMsgs' !== e) + ), + yield this.delaySyncDone(), + yield this.handleImmediate(), + this.core.logger.log('sync::basic sync complete in', i) + }) + } + doTeamSync() { + return Te(this, void 0, void 0, function* () { + var e = this.teamKey.filter((e) => this.config[e]) + if (0 !== e.length) { + var t = this.genSyncParams(e) + this.core.eventBus.emit('V2NIMTeamService/onSyncStarted'), + this.logger.log('V2Sync:team', t) + var i = null + try { + i = yield this.core.clientSocket.sendCmd('v2NIMSync', { tag: t }) + } catch (e) { + throw ( + (this.core.eventBus.emit('V2NIMTeamService/onSyncFailed', e), e) + ) + } + this.core.eventBus.emit('V2NIMTeamService/onSyncFinished') + var r = i.content.timetag + this.setTimetags(r, this.teamKey), + this.core.logger.log('sync::team sync complete in', r) + } + }) + } + doQchatSync() { + return Te(this, void 0, void 0, function* () { + var e = yield this.core.clientSocket.sendCmd('v2QChatSync', { + tag: { systemNotification: 0 }, + }) + this.core.logger.log( + 'sync::qchat sync complete in', + e.content.timetag + ) + }) + } + doSync() { + return Te(this, void 0, void 0, function* () { + var e = Ve( + this.core, + 'V2NIMLoginService.authenticator.loginClientOfThisConnection.loginType' + ) + if (void 0 !== e) { + if ( + (this.logger.log(`sync::doSync:type ${e}`), + this.core.V2NIMLoginService.dataSync.switchDataSync({ + type: 1, + state: 2, + subType: 'mainSync', + }), + 1 === e) + ) + try { + yield this.doBasicSync(), yield this.doTeamSync() + } catch (e) { + return void this.doSyncComplete(e) + } + else if (2 === e) + try { + yield this.doQchatSync() + } catch (e) { + return void this.doSyncComplete(e) + } + else { + if (3 !== e) return + try { + yield this.doBasicSync(), + yield this.doTeamSync(), + yield this.doQchatSync() + } catch (e) { + return void this.doSyncComplete(e) + } + } + this.doSyncComplete() + } else this.logger.warn('sync::doSync: no loginType, stop sync') + }) + } + doSyncComplete(e) { + e && this.core.logger.log('sync::doSync complete but got error', e), + this.core.V2NIMLoginService.dataSync.switchDataSync({ + type: 1, + state: 3, + error: e, + subType: 'mainSync', + }) + } + initEventListeners() { + this.core.eventBus.on( + 'V2NIMLoginService/loginLifeCycleLoginSucc', + () => { + this.doSync() + } + ) + } + genSyncParams(e) { + return e.reduce((e, t) => { + var i = t + return (e[i] = this.timetags[i] || 0), e + }, {}) + } + setTimetags(e, t) { + t.forEach((t) => { + this.timetags[t] = e + }) + } + handleImmediate() { + return ( + this.core.session && + this.core.session.onSyncDone && + this.core.session.onSyncDone(), + Promise.resolve() + ) + } + delaySyncDone() { + var { hostEnvEnum: e } = Ae.getSystemInfo() + return 102 === e + ? (this.core.logger.log( + 'sync: emit ALIAPP sycnHandler, handle later' + ), + new Promise((e) => { + setTimeout(() => { + e() + }, 100) + })) + : Promise.resolve() + } + }, + 'V2NIMSyncService' + ), + Ce(Ae, { + setLogger: _i, + platform: 'UNIAPP', + localStorage: Ni, + request: bi, + WebSocket: Ui, + uploadFile: Di, + getFileUploadInformation: wi, + getSystemInfo: Li, + net: Oi, + logStorage: Ai, + }), + sc.registerService(Ys, 'V2NIMMessageService'), + sc.registerService(xn, 'V2NIMConversationService'), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMAIService', e), + (this.model = new Da()), + (this.event = new Ha(this.core, this)), + (this.handler = new Ya(this.core, this)), + vt({ cmdMap: wa, cmdConfig: qa }) + } + setListener() { + this.event.setListener() + } + reset() { + this.model.reset() + } + emit(e, ...t) { + return this.event.beforeEmit(e, ...t), super.emit(e, ...t) + } + getAIUserList() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + (yield this.core.sendCmd('v2AIGetUserList', { tag: {} })).content + .datas + ) + }) + } + proxyAIModelCall(e) { + return Te(this, void 0, void 0, function* () { + if ((ye($i, e, '', !0), this.model.getAiStream(e.requestId))) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + desc: 'Same requestId', + detail: { rawData: e.requestId }, + }) + this.model.setAiStream( + e.requestId, + { isComplete: !1, queryStatus: 0, chunks: [] }, + !0 + ), + yield this.core.sendCmd('v2AIProxyModelCall', { tag: e }) + }) + } + stopAIModelStreamCall(e) { + return Te(this, void 0, void 0, function* () { + ye(Gi, e, '', !0), + yield this.core.sendCmd('v2AIStopModelStreamCall', { + tag: { + clientId: e.requestId, + aiAccount: e.accountId, + type: 4, + from: this.core.account, + }, + }), + this.logger.log(`V2AI::streamCallStop,requestId:${e.requestId}`), + this.model.completeAiStream(e.requestId) + }) + } + _queryAiStream(e) { + return Te(this, void 0, void 0, function* () { + this.model.setAiStream(e.clientId, { queryStatus: 1 }) + try { + var t = yield this.core.sendCmd('v2AIStreamQuery', { tag: e }) + this.model.setAiStream(e.clientId, { queryStatus: 2 }) + var i = t.content.datas + if (!(i && i.length > 0)) return + i.forEach((e) => { + var t = e.clientId, + i = this.model.getAiStream(t) + if ( + i && + (!i || !i.isComplete) && + e.content && + e.content.lastChunk + ) { + var r = e.content.lastChunk + this.model.upsertAiStreamChunks(t, r.index, r.content), + 0 === r.index && + e.aiRAGs && + this.model.setAiStream(t, { aiRAGs: e.aiRAGs }), + this.logger.log( + `V2AI::queryAiStream requestId:${t};index:${r.index};cacheChunkLength:${i.chunks.length};chunkTime:${r.chunkTime}.` + ) + } + }) + } catch (t) { + this.logger.warn( + `V2AI::queryAiStream requestId:${e.clientId};error:`, + t + ), + this.model.setAiStream(e.clientId, { queryStatus: 2 }) + } + }) + } + }, + 'V2NIMAIService' + ), + sc.registerService( + class extends ni { + constructor(e, t = {}) { + super('V2NIMLocalConversationService', e), + (this.config = {}), + (this.model = new Xs()), + (this.unread = new on(this.core, this)), + (this.compute = new un(this.core, this)), + (this.event = new gn(this.core, this)), + (this.handler = new mn(this.core, this)), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + this.core._registerDep(Ys, 'V2NIMMessageService'), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: Zs, cmdConfig: sn }), + this.setOptions(t), + this.setListener()) + } + setOptions(e) { + this.config = Object.assign(this.config, e) + } + setListener() { + this.event.setListener() + } + reset() { + this.model.reset(), this.unread.reset() + } + emit(e, ...t) { + return this.event.beforeEmit(e, ...t), super.emit(e, ...t) + } + getConversationList(e, t) { + this.checkV2(), + ye({ offset: { type: 'number', min: 0 } }, { offset: e }, '', !0), + ye({ limit: { type: 'number', min: 1 } }, { limit: t }, '', !0), + this.core.V2NIMLoginService.checkIllegalState() + var i = this.model.getByOption(e, t, {}) + return ( + (i.conversationList = i.conversationList.map((e) => + this.compute.computeFromExternal(e) + )), + Promise.resolve(i) + ) + } + getConversationListByOption(e, t, i) { + this.checkV2(), + ye({ offset: { type: 'number', min: 0 } }, { offset: e }, '', !0), + ye({ limit: { type: 'number', min: 1 } }, { limit: t }, '', !0), + ye( + { + conversationTypes: { + type: 'array', + itemType: 'number', + required: !1, + }, + onlyUnread: { type: 'boolean', required: !1 }, + }, + i, + 'option', + !0 + ), + this.core.V2NIMLoginService.checkIllegalState() + var r = this.model.getByOption(e, t, i) + return ( + (r.conversationList = r.conversationList.map((e) => + this.compute.computeFromExternal(e) + )), + Promise.resolve(r) + ) + } + getConversation(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), Me(this.core.account, e) + var t = this.model.getById(e) + if (t) return this.compute.computeFromExternal(t) + throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + }) + } + getConversationListByIds(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye( + { + conversationIds: { type: 'array', itemType: 'string', min: 1 }, + }, + { conversationIds: e }, + '', + !0 + ), + this.core.V2NIMLoginService.checkIllegalState(), + e + .map((e) => this.model.getById(e)) + .filter((e) => !!e) + .map((e) => this.compute.computeFromExternal(e)) + ) + }) + } + createConversation(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), Me(this.core.account, e) + var t = this.model.getById(e) + if (t) return this.compute.computeFromExternal(t) + var i = this.compute.computeConvByMsgsCache(e, { + updateTime: this.core.timeOrigin.getNTPTime(), + }) + ;(i = this.compute.computeConvWithUnread(i)), + (i = this.compute.computeFromExternal(i)), + this.model.upsert(i) + var r = this.model.getById(e) + return this.triggerConversationCreated(r), r + }) + } + deleteConversation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + Me(this.core.account, e), + ye( + { clearMessage: { type: 'boolean', required: !1 } }, + { clearMessage: t }, + '', + !0 + ), + yield this.unread.markConversationRead(e) + var i = this.model.deleteById(e) + if (!i) throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + t && this.core.V2NIMMessageService.model.deleteMessages(e), + !!(i && i.unreadCount > 0) && this.unread.digestUnreadCountChange(), + this.emit('onConversationDeleted', [e]) + }) + } + deleteConversationListByIds(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye( + { + conversationIds: { type: 'array', itemType: 'string', min: 1 }, + }, + { conversationIds: e }, + '', + !0 + ), + ye( + { clearMessage: { type: 'boolean', required: !1 } }, + { clearMessage: t }, + '', + !0 + ), + yield this.unread.markMultiConversationRead(e) + var i = !1 + return ( + e.forEach((e) => { + t && this.core.V2NIMMessageService.model.deleteMessages(e), + this.model.deleteById(e) && (i = !0) + }), + i && this.unread.digestUnreadCountChange(), + this.emit('onConversationDeleted', e), + [] + ) + }) + } + getStickTopConversationList() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.model.getStickTopList() + ) + }) + } + stickTopConversation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + Me(this.core.account, e), + ye({ stickTop: { type: 'boolean' } }, { stickTop: t }, '', !0) + var i = this.model.getById(e) + if ((null == i ? void 0 : i.stickTop) !== t) { + var r = + this.core.V2NIMConversationIdUtil.parseConversationTargetId(e), + s = this.core.V2NIMConversationIdUtil.parseConversationType(e), + n = yield this.core.sendCmd( + t ? 'v2LocalConvStickTopAdd' : 'v2LocalConvStickTopDelete', + { tag: { id: zs(s, r) } } + ) + this.model.updateStickTop(e, t) + var o = n.content.timetag || n.content.data.updateTime + this.model.upsert({ + conversationId: e, + type: s, + stickTop: t, + updateTime: o, + sortOrder: this.compute.computeSortOrder(t, o), + }) + var a = [this.model.getById(e)] + this.triggerConversationChanged(a) + } + }) + } + updateConversationLocalExtension(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + Me(this.core.account, e), + ye( + { localExtension: { type: 'string' } }, + { localExtension: t }, + '', + !0 + ) + var i = this.model.getById(e) + if (!i) throw new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }) + if (i.localExtension !== t) { + var r = Object.assign(Object.assign({}, i), { localExtension: t }) + this.model.upsert(r), this.triggerConversationChanged([r]) + } + }) + } + getTotalUnreadCount() { + return this.checkV2(), this.unread.getTotalUnreadCount() || 0 + } + getUnreadCountByIds(e) { + this.checkV2(), + ye( + { conversationIds: { type: 'array', itemType: 'string', min: 1 } }, + { conversationIds: e }, + '', + !0 + ) + var t = this.unread.getUnreadCountByIds(e) + return Promise.resolve(t) + } + getUnreadCountByFilter(e) { + this.checkV2(), this.valiteFilter(e) + var t = this.unread.getUnreadCountByFilter(e) + return Promise.resolve(t) + } + clearTotalUnreadCount() { + return Te(this, void 0, void 0, function* () { + this.checkV2(), this.checkLogin() + var e = this.model.getAll() + yield this.unread.markMultiConversationRead( + e.map((e) => e.conversationId) + ), + this.unread.clearUnreadCount(e) + }) + } + clearUnreadCountByIds(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.checkLogin(), + ye( + { + conversationIds: { type: 'array', itemType: 'string', min: 1 }, + }, + { conversationIds: e }, + '', + !0 + ) + var t = [], + i = [], + r = new RegExp(`^${this.core.account}\\|[1-3]\\|`) + if ( + (e.forEach((e) => { + r.test(e) ? t.push(e) : i.push(e) + }), + t.length > 0) + ) { + var s = t.map((e) => this.model.getById(e)).filter((e) => !!e) + yield this.unread.markMultiConversationRead(t), + this.unread.clearUnreadCount(s) + } + return i.map((e) => ({ + conversationId: e, + error: new he({ code: de.V2NIM_ERROR_CODE_RESOURCE_NOT_EXIST }), + })) + }) + } + clearUnreadCountByTypes(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.checkLogin(), + ye({ types: vn }, { types: e }, '', !0) + var t = this.model.getByOption(0, 1e3, { conversationTypes: e }) + yield this.unread.markMultiConversationRead( + t.conversationList.map((e) => e.conversationId) + ), + this.unread.clearUnreadCount(t.conversationList) + }) + } + subscribeUnreadCountByFilter(e) { + var t + this.checkV2(), + this.checkLogin(), + this.valiteFilter(e), + 0 === + (null === (t = e.conversationTypes) || void 0 === t + ? void 0 + : t.length) && delete e.conversationTypes, + this.unread.addFilter(e) + } + unsubscribeUnreadCountByFilter(e) { + var t + this.checkV2(), + this.checkLogin(), + this.valiteFilter(e), + 0 === + (null === (t = e.conversationTypes) || void 0 === t + ? void 0 + : t.length) && delete e.conversationTypes, + this.unread.deleteFilter(e) + } + getConversationReadTime(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), Me(this.core.account, e), this.model.getReadTime(e) + ) + }) + } + markConversationRead(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.checkLogin(), + Me(this.core.account, e), + this.unread.markConversationRead(e) + ) + }) + } + valiteFilter(e) { + if ( + (ye( + { + filter: { + type: 'object', + required: !0, + rules: { + conversationTypes: { + type: 'array', + itemType: 'number', + required: !1, + }, + ignoreMuted: { type: 'boolean', required: !1 }, + }, + }, + }, + { filter: e }, + '', + !0 + ), + void 0 === e.conversationTypes && !0 !== e.ignoreMuted) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Filter cannot be empty' }, + }) + } + triggerConversationChanged(e) { + ;(e = e.map((e) => this.compute.computeFromExternal(e))), + (e = JSON.parse(JSON.stringify(e))).forEach((e) => { + e.lastMessage || (e.lastMessage = void 0), delete e.lastMessageState + }), + this.emit('onConversationChanged', e) + } + triggerConversationCreated(e) { + ;(e = this.compute.computeFromExternal(e)), + delete (e = JSON.parse(JSON.stringify(e))).lastMessageState, + this.emit('onConversationCreated', e) + } + }, + 'V2NIMLocalConversationService' + ), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMSubscriptionService', e), + 'v2' === this.core.options.apiVersion && + vt({ cmdMap: za, cmdConfig: ec }) + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + return this.logger.log(`${i}`, ...t), super.emit(e, ...t) + } + subscribeUserStatus(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkLogin(), + this.checkV2(), + ye(tc, e, '', !0), + (yield this.core.sendCmd('v2SubscribeUserStatus', { + tag: { + eventType: 1, + duration: e.duration || 60, + immediateSync: void 0 !== e.immediateSync && e.immediateSync, + }, + accountIds: e.accountIds, + })).content.failedList + ) + }) + } + unsubscribeUserStatus(e) { + return Te(this, void 0, void 0, function* () { + this.checkLogin(), this.checkV2(), ye(ic, e, '', !0) + var t = [] + return ( + e.accountIds.length > 0 + ? (t = (yield this.core.sendCmd('v2UnsubscribeUserStatus', { + tag: { eventType: 1 }, + accountIds: e.accountIds, + })).content.failedList) + : (yield this.core.sendCmd('v2UnsubscribeAllUserStatus', { + tag: { eventType: 1 }, + }), + (t = [])), + t + ) + }) + } + publishCustomUserStatus(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkLogin(), + this.checkV2(), + ye(rc, e, '', !0), + (yield this.core.sendCmd('v2PublishEvent', { + tag: Object.assign(Object.assign({}, e), { + eventType: 1, + uniqueId: Le(), + duration: e.duration || 60, + onlineOnly: void 0 === e.onlineOnly || e.onlineOnly, + multiSync: void 0 !== e.multiSync && e.multiSync, + }), + })).content.data + ) + }) + } + queryUserStatusSubscriptions(e) { + return Te(this, void 0, void 0, function* () { + this.checkLogin(), + this.checkV2(), + ye( + { + accountIds: { + type: 'array', + required: !0, + itemType: 'string', + max: 3e3, + }, + }, + { accountIds: e }, + '', + !0 + ) + var t = [] + if (e.length > 0) + for (var i = 0; i < e.length; i += 100) { + var r = yield this.core.sendCmd('v2QuerySubscribeEvent', { + tag: { eventType: 1 }, + accountIds: e.slice(i, i + 100), + }) + t = t.concat( + r.content.data.map((e) => ({ + accountId: e.accountId, + subscribeTime: e.subscribeTime, + duration: e.duration, + })) + ) + } + else { + var s = yield this.core.sendCmd('v2QueryAllSubscribeEvent', { + tag: { eventType: 1 }, + }) + t = t.concat( + s.content.data.map((e) => ({ + accountId: e.accountId, + subscribeTime: e.subscribeTime, + duration: e.duration, + })) + ) + } + return t + }) + } + v2OnUserStatusChangeHandler(e) { + var t = e.content.data, + { eventType: i, extensionReceived: r } = t, + s = Ee(t, ['eventType', 'extensionReceived']) + 1 === i + ? this.emit('onUserStatusChanged', [ + Object.assign(Object.assign({}, s), { extension: r }), + ]) + : this.logger.log( + 'v2OnUserStatusChangeHandler eventType = ', + i, + 'msgEvent = ', + t + ) + } + v2OnMultiUserStatusChangeHandler(e) { + var t = e.content.data + .filter((e) => 1 === e.eventType) + .map((e) => { + var { eventType: t, extensionReceived: i } = e, + r = Ee(e, ['eventType', 'extensionReceived']) + return Object.assign(Object.assign({}, r), { extension: i }) + }) + t.length > 0 && this.emit('onUserStatusChanged', t) + } + }, + 'V2NIMSubscriptionService' + ), + sc.registerService( + class extends ni { + constructor(e, t = {}) { + super('V2NIMConversationGroupService', e), + (this.config = {}), + this.core._registerDep(xn, 'V2NIMConversationService'), + 'v2' === this.core.options.apiVersion && + !0 === this.core.options.enableV2CloudConversation && + (vt({ cmdMap: Bn, cmdConfig: jn }), this.setOptions(t)) + } + setOptions(e) { + this.config = Object.assign(this.config, e) + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + if ('onConversationsAddedToGroup' === e) { + var r = t[0], + s = t[1] + this.logger.log( + `${i}`, + `groupId:${r}`, + `conversations:${s.map((e) => e.conversationId).join(',')}` + ) + } else this.logger.log(`${i}`, ...t) + return super.emit(e, ...t) + } + get ifEnabled() { + return !0 === this.core.options.enableV2CloudConversation + } + checkEnable() { + if (!0 !== this.core.options.enableV2CloudConversation) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'V2CloudConversation is not enabled' }, + }) + } + createConversationGroup(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { name: { type: 'string', allowEmpty: !1 } }, + { name: e }, + '', + !0 + ), + ye( + { serverExtension: { type: 'string', required: !1 } }, + { serverExtension: t }, + '', + !0 + ), + ye( + { + conversationIds: { + type: 'array', + itemType: 'string', + required: !1, + }, + }, + { conversationIds: i }, + '', + !0 + ) + var r = yield this.core.sendCmd('v2ConversationGroupCreate', { + tag: { + name: e, + serverExtension: t || '', + conversationIds: i && JSON.stringify(i), + }, + }), + s = bn(Ve(r, 'content.data')), + n = ln(this.core, Ve(r, 'content.conversations')), + o = kn(Ve(r, 'content.info.failedMap')) + return ( + this.emit('onConversationGroupCreated', s), + n.length > 0 && + (this.core.V2NIMConversationService.versionCache.compareAndUpdateModel( + n + ), + this.emit( + 'onConversationsAddedToGroup', + s.groupId, + n + .map((e) => + this.core.V2NIMConversationService.model.getById( + e.conversationId + ) + ) + .filter((e) => !!e) + )), + { group: s, failedList: o } + ) + }) + } + deleteConversationGroup(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { groupId: { type: 'string', allowEmpty: !1 } }, + { groupId: e }, + '', + !0 + ) + var t = Ln( + Ve( + yield this.core.sendCmd('v2ConversationGroupDelete', { + tag: { groupId: e }, + }), + 'content.info' + ) + ) + this.core.V2NIMConversationService.versionCache.compareAndDeleteGroupInModel( + t.deleteVersion, + e + ), + this.emit('onConversationGroupDeleted', e) + }) + } + updateConversationGroup(e, t, i) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkEnable(), + this.checkV2(), + ye( + { groupId: { type: 'string', allowEmpty: !1 } }, + { groupId: e }, + '', + !0 + ), + ye({ name: { type: 'string', required: !1 } }, { name: t }, '', !0), + ye( + { serverExtension: { type: 'string', required: !1 } }, + { serverExtension: i }, + '', + !0 + ), + void 0 === t && void 0 === i) + ) + throw new he({ code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER }) + var r = bn( + Ve( + yield this.core.sendCmd('v2ConversationGroupUpdate', { + tag: { groupId: e, name: t, serverExtension: i }, + }), + 'content.data' + ) + ) + this.emit('onConversationGroupChanged', r) + }) + } + addConversationsToGroup(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { groupId: { type: 'string', allowEmpty: !1 } }, + { groupId: e }, + '', + !0 + ), + ye( + { + conversationIds: { + type: 'array', + itemType: 'string', + min: 1, + allowEmpty: !1, + }, + }, + { conversationIds: t }, + '', + !0 + ) + var i = yield this.core.sendCmd('v2ConversationGroupAddTo', { + tag: { groupId: e, conversationIds: JSON.stringify(t) }, + }), + r = Ve(i, 'content.info.failedMap') || '', + s = [] + r && (s = kn(r)) + var n = ln(this.core, Ve(i, 'content.datas')) + this.core.V2NIMConversationService.versionCache.compareAndUpdateModel( + n + ) + var o = n + .map((e) => + this.core.V2NIMConversationService.model.getById(e.conversationId) + ) + .filter((e) => !!e) + return ( + o.length > 0 && this.emit('onConversationsAddedToGroup', e, o), s + ) + }) + } + removeConversationsFromGroup(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { groupId: { type: 'string', allowEmpty: !1 } }, + { groupId: e }, + '', + !0 + ), + ye( + { + conversationIds: { + type: 'array', + itemType: 'string', + min: 1, + allowEmpty: !1, + }, + }, + { conversationIds: t }, + '', + !0 + ) + var i = yield this.core.sendCmd('v2ConversationGroupRemoveFrom', { + tag: { groupId: e, conversationIds: JSON.stringify(t) }, + }), + r = Ve(i, 'content.info.failedMap') || '', + s = [] + r && (s = kn(r)) + var n = ln(this.core, Ve(i, 'content.datas')) + return ( + this.core.V2NIMConversationService.versionCache.compareAndUpdateModel( + n + ), + this.emit( + 'onConversationsRemovedFromGroup', + e, + n.map((e) => e.conversationId) + ), + s + ) + }) + } + getConversationGroup(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkEnable(), + this.checkV2(), + ye( + { groupId: { type: 'string', allowEmpty: !1 } }, + { groupId: e }, + '', + !0 + ), + bn( + Ve( + yield this.core.sendCmd('v2ConversationGroupGet', { + tag: { groupId: e }, + }), + 'content.data' + ) + ) + ) + }) + } + getConversationGroupList() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkEnable(), + this.checkV2(), + On( + Ve( + yield this.core.sendCmd('v2ConversationGroupListGet'), + 'content.datas' + ) + ) + ) + }) + } + getConversationGroupListByIds(e) { + return Te(this, void 0, void 0, function* () { + this.checkEnable(), + this.checkV2(), + ye( + { groupIds: { type: 'array', itemType: 'string', min: 1 } }, + { groupIds: e }, + '', + !0 + ) + var t = On( + Ve( + yield this.core.sendCmd('v2ConversationGroupsGet', { + tag: { groupIds: e && JSON.stringify(e) }, + }), + 'content.datas' + ) + ) + return e + .map((e) => t.filter((t) => t.groupId === e)[0]) + .filter((e) => !!e) + }) + } + v2ConversationGroupNotifySyncOnlineHandler(e) { + if (this.ifEnabled) { + var t = Ln(Ve(e, 'content.info')), + { type: i, deleteVersion: r, conversationIds: s } = t, + n = bn(Ve(e, 'content.data')) + if ( + (this.core.logger.log( + 'v2ConversationGroupNotifySyncOnlineHandler', + t, + n + ), + 1 === i) + ) + this.emit('onConversationGroupCreated', n), + s && + s.length > 0 && + this.emit( + 'onConversationsAddedToGroup', + n.groupId, + s + .map((e) => + this.core.V2NIMConversationService.model.getById(e) + ) + .filter((e) => !!e) + ) + else if (2 === i) + this.emit('onConversationGroupDeleted', n.groupId), + this.core.V2NIMConversationService.versionCache.compareAndDeleteGroupInModel( + r, + n.groupId + ) + else if (3 === i) this.emit('onConversationGroupChanged', n) + else if (4 === i) { + var o = s + .map((e) => this.core.V2NIMConversationService.model.getById(e)) + .filter((e) => !!e) + this.emit('onConversationsAddedToGroup', n.groupId, o) + } else + 5 === i && + this.emit('onConversationsRemovedFromGroup', n.groupId, s) + } + } + }, + 'V2NIMConversationGroupService' + ), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMMessageLogUtil', e), + (this.clearHistoryMessageFn = (e) => { + var t = Yr(this.core, e) + this.emitClearHistoryMessage([t]) + }), + (this.core = e), + (this.service = this.core.V2NIMMessageService), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: Hn, cmdConfig: Wn }), this.setListener()) + } + setListener() { + this.core.eventBus.on( + 'forwardReceive/V2NIMMessageLogService/clearHistoryMessage', + this.clearHistoryMessageFn + ) + } + getMessageListByRefers(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(er, { messageRefers: e }, '', !0), + 0 === e.length) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getMessageListByRefers: messageRefers cannot be an empty array', + }, + }) + var t = [], + i = e.map((e) => { + var i = this.service.model.getMessageById(e.messageClientId) + return ( + !i && + e.messageServerId && + '0' !== e.messageServerId && + t.push(e), + i + ) + }), + r = [] + if (t.length > 0) { + var s = yield this.core.sendCmd('v2GetMessageListByRefers', { + tag: t, + }) + r = s.content.msgs + } + return i + .map((t, i) => { + if (t) return t + var s = e[i], + n = r.find((e) => e.messageServerId === s.messageServerId) + return n ? $r(this.core, n) : void 0 + }) + .filter((e) => void 0 !== e && !this.service._filterMessage(e)) + }) + } + getMessageList(e) { + var t + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Qi, e, '', !0), + Me(this.core.account, e.conversationId) + var i = this.core.V2NIMConversationIdUtil.parseConversationType( + e.conversationId + ), + r = this.core.V2NIMConversationIdUtil.parseConversationTargetId( + e.conversationId + ), + s = + 1 === i + ? 'v2GetMessageList' + : 2 === i + ? 'v2GetTeamMessageList' + : 'v2GetSuperTeamMessageList', + n = e.beginTime || 0, + o = e.endTime || 0 + if (0 !== n && 0 !== o && n > o) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getMessageList: beginTime cannot be greater than endTime', + }, + }) + var a = void 0 === e.direction ? 0 : e.direction + if (e.anchorMessage) + if (0 === e.direction) { + if (0 === o) o = e.anchorMessage.createTime + else if (o !== e.anchorMessage.createTime) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getMessageList: When providing anchorMessage, when sorting in descending order, endTime does not need to be provided, or endTime should be equal to anchorMessage.createTime', + }, + }) + } else if (0 === n) n = e.anchorMessage.createTime + else if (n !== e.anchorMessage.createTime) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getMessageList: When providing anchorMessage, when sorting in ascending order, there is no need to provide beginTime, or beginTime should be equal to anchorMessage.createTime', + }, + }) + var c = + null === (t = e.anchorMessage) || void 0 === t + ? void 0 + : t.messageServerId, + d = yield this.core.sendCmd(s, { + beginTime: n, + endTime: o, + lastMsgId: c || 0, + limit: e.limit || 50, + direction: a, + msgTypes: e.messageTypes ? e.messageTypes.slice() : [], + to: r, + }), + { content: l } = d, + p = l.msgs.map((e) => $r(this.core, e)) + return ( + c && (p = p.filter((e) => e.messageServerId !== c)), + this.getMessageListMonkeyPatch(p, e) + ) + }) + } + getMessageListMonkeyPatch(e, t) { + var i = t.conversationId, + r = e, + s = r.reduce((e, t) => ((e[t.messageClientId] = !0), e), {}), + n = this.service.model.getMessagesByConversationId(i) + n = n.sort((e, i) => + 1 === t.direction + ? e.createTime - i.createTime + : i.createTime - e.createTime + ) + var o = 0, + a = t.beginTime || 0, + c = t.endTime || 0 + t.anchorMessage && + (0 === t.direction + ? (c = t.anchorMessage.createTime) + : (a = t.anchorMessage.createTime), + (o = n.findIndex((e) => { + var i + return ( + e.messageClientId === + (null === (i = t.anchorMessage) || void 0 === i + ? void 0 + : i.messageClientId) + ) + })), + (o += 1)) + for (var d = o; d < n.length; d++) { + var l = n[d], + p = !s[l.messageClientId], + h = void 0 === l.sendingState || 1 === l.sendingState, + u = l.conversationId === i, + m = l.createTime > a && (l.createTime < c || 0 === c), + g = !t.messageTypes || t.messageTypes.includes(l.messageType) + p && h && u && m && g && r.push(n[d]) + } + return (r = r.sort((e, i) => + 1 === t.direction + ? e.createTime - i.createTime + : i.createTime - e.createTime + )).slice(0, t.limit || 50) + } + clearHistoryMessage(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(rr, e, '', !0), + Me(this.core.account, e.conversationId) + var { + conversationId: t, + deleteRoam: i, + onlineSync: r, + serverExtension: s, + } = e, + n = this.core.V2NIMConversationIdUtil.parseConversationType(t), + o = this.core.V2NIMConversationIdUtil.parseConversationTargetId(t), + a = { + deleteRoam: i, + onlineSync: r, + serverExtension: s, + conversationType: n, + } + 1 === n ? (a.receiverId = o) : (a.teamId = o) + var c = this.core.timeOrigin.getNTPTime() + ;(e.clearMode = e.clearMode || 0), + 0 === e.clearMode && + (c = (yield this.core.sendCmd('v2ClearHistoryMessage', { + tag: a, + })).content.timetag), + 2 === e.clearMode && + Ae.localStorage.setItem( + `nim_${this.core.account}_${t}_clearTime`, + c.toString() + ), + this.core.eventBus.emit( + 'forwardSend/V2NIMMessageLogService/clearHistoryMessage', + Object.assign(Object.assign({}, a), { deleteTime: c }) + ), + this.emitClearHistoryMessage([ + { deleteTime: c, serverExtension: s, conversationId: t }, + ]) + }) + } + clearRoamingMessage(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye( + { + conversationIds: { type: 'array', itemType: 'string', min: 1 }, + }, + { conversationIds: e }, + void 0, + !0 + ) + var t = [] + try { + t = e.map((e) => { + var t = + this.core.V2NIMConversationIdUtil.parseConversationTargetId(e) + return zs( + this.core.V2NIMConversationIdUtil.parseConversationType(e), + t + ) + }) + } catch (t) { + throw ( + (this.logger.error( + `V2NIMMessage::clearRoamingMessage with ${e}`, + t + ), + new he({ + code: de.V2NIM_ERROR_CODE_PARAMETER_ERROR, + detail: { reason: 'Failed to create session', rawData: `${e}` }, + })) + ) + } + yield this.core.sendCmd('v2ClearRoamingMessage', { + conversationIds: t, + }) + }) + } + syncClearHistoryMessageHandler(e) { + var t = e.content.data.map((e) => Yr(this.core, e)) + this.emitClearHistoryMessage(t) + } + onClearHistoryMessageHandler(e) { + var t = Yr(this.core, e.content.data) + this.emitClearHistoryMessage([t]) + } + emitClearHistoryMessage(e) { + e.forEach((e) => { + this.service.model.deleteMessages(e.conversationId, e.deleteTime), + this.core.eventBus.emit('V2NIMSync/updateTimetag', { + sessionHistoryMsgsDelete: e.deleteTime, + }) + }), + this.core.eventBus.emit( + 'V2NIMMessageLogUtil/onClearHistoryNotifications', + e + ), + this.service.emit('onClearHistoryNotifications', e) + } + }, + 'V2NIMMessageLogUtil' + ), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMMessageExtendUtil', e), + (this.core = e), + (this.service = this.core.V2NIMMessageService), + 'v2' === this.core.options.apiVersion && + vt({ cmdMap: zn, cmdConfig: no }) + } + pinMessage(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Zi, e, 'message', !0), + ye(sr, { serverExtension: t }, '', !0) + var i = yield this.core.sendCmd('v2PinMessage', { + msg: e, + msgPin: { serverExtension: t }, + }) + this.emitPinNotification({ + pinState: 1, + message: e, + serverExtension: t, + createTime: i.content.timetag, + updateTime: i.content.timetag, + operatorId: this.core.account, + }) + }) + } + unpinMessage(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Zi, e, 'messageRefer', !0), + ye(sr, { serverExtension: t }, '', !0) + var i = yield this.core.sendCmd('v2UnpinMessage', { + msg: e, + msgPin: { serverExtension: t }, + }) + this.emitPinNotification({ + pinState: 0, + message: e, + serverExtension: t, + updateTime: i.content.timetag, + operatorId: this.core.account, + }) + }) + } + updatePinMessage(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Zi, e, 'message', !0), + ye(sr, { serverExtension: t }, '', !0) + var i = yield this.core.sendCmd('v2UpdatePinMessage', { + msg: e, + msgPin: { serverExtension: t }, + }) + this.emitPinNotification({ + pinState: 2, + message: e, + serverExtension: t, + updateTime: i.content.timetag, + operatorId: this.core.account, + }) + }) + } + getPinnedMessageList(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + !this.core.V2NIMConversationIdUtil || + !this.core.V2NIMConversationIdUtil.parseConversationType) + ) + throw new Error('Service "V2NIMConversationService" does not exist') + Me(this.core.account, e) + var t = this.core.V2NIMConversationIdUtil.convertToV1ConversationId(e) + return ( + (t = t.replace('superTeam', 'super_team')), + (yield this.core.sendCmd('v2GetPinMessageList', { + tag: { conversationId: t, timetag: 0 }, + })).content.data + .map((e) => + Object.assign(Object.assign({}, e), { + messageRefer: Object.assign( + Object.assign({}, e.messageRefer), + { + conversationId: + this.core.V2NIMConversationIdUtil.messageConversationId( + e.messageRefer + ), + } + ), + }) + ) + .sort((e, t) => t.updateTime - e.updateTime) + ) + }) + } + addQuickComment(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye( + cr, + { message: e, index: t, serverExtension: i, pushConfig: r }, + '', + !0 + ) + var s = yield this.core.sendCmd('v2AddQuickComment', { + message: e, + quickComment: { index: t, serverExtension: i, pushConfig: r }, + }), + n = { + operationType: 1, + quickComment: { + messageRefer: qr(this.core, e), + createTime: s.content.timetag, + index: t, + serverExtension: i || '', + operatorId: this.core.account, + }, + } + this.core.V2NIMMessageService.emit( + 'onMessageQuickCommentNotification', + n + ) + }) + } + removeQuickComment(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Zi, e, 'messageRefer', !0), + ye({ index: { type: 'number', min: 1 } }, { index: t }, '', !0), + ye( + { serverExtension: { type: 'string', required: !1 } }, + { serverExtension: i }, + '', + !0 + ) + var r = yield this.core.sendCmd('v2RemoveQuickComment', { + message: e, + quickComment: { index: t, serverExtension: i }, + }), + s = { + operationType: 2, + quickComment: { + messageRefer: qr(this.core, e), + createTime: r.content.timetag, + index: t, + serverExtension: i || '', + operatorId: this.core.account, + }, + } + this.core.V2NIMMessageService.emit( + 'onMessageQuickCommentNotification', + s + ) + }) + } + getQuickCommentList(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), ye(dr, { messages: e }, '', !0) + var t = {} + return ( + (yield this.core.sendCmd('v2GetQuickComment', { + tag: e.map((e) => ({ messageRefer: e })), + })).content.data.forEach((e) => { + var i, r + try { + if (!e.detail) + return void ( + t[(i = e.messageRefer.messageClientId)] || (t[i] = []) + ) + var s = JSON.parse(e.detail) + t[(r = e.messageRefer.messageClientId)] || (t[r] = []), + s.forEach((i) => { + t[e.messageRefer.messageClientId].push({ + messageRefer: Object.assign( + Object.assign({}, e.messageRefer), + { + conversationId: + this.core.V2NIMConversationIdUtil.messageConversationId( + e.messageRefer + ), + } + ), + operatorId: i[1], + index: parseInt(i[2]), + createTime: parseInt(i[3]), + serverExtension: i[4], + }) + }) + } catch (t) { + this.logger.error( + 'getQuickCommentList JSON Parse Error', + e.detail, + t + ) + } + }), + t + ) + }) + } + voiceToText(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(ar, e, '', !0), + !e.voicePath && !e.voiceUrl && !e.file) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'voiceToText: voicePath、voiceUrl、file cannot be empty at the same time', + }, + }) + var { + voicePath: t, + file: i, + mimeType: r, + sampleRate: s, + duration: n, + sceneName: o, + } = e, + a = o ? this.core.V2NIMStorageService.getStorageScene(o) : null, + c = e.voiceUrl + if (!c) { + var d = {} + i + ? (d.file = i) + : 0 === (null == t ? void 0 : t.indexOf('nim-external')) + ? (d.fileInput = t) + : (d.filePath = t), + (c = (yield this.core.cloudStorage.uploadFile( + Object.assign( + { + type: 'audio', + nosScenes: a ? a.sceneName : void 0, + nosSurvivalTime: a ? a.expireTime : void 0, + }, + d + ) + )).url) + } + return (yield this.core.sendCmd( + 'v2VoiceToText', + { tag: { voiceUrl: c, mimeType: r, sampleRate: s, duration: n } }, + { timeout: 3e4 } + )).content.data + }) + } + onPinMessageHandler(e) { + return this.pinMessageChangeHandler(e, 1) + } + onUnpinMessageHandler(e) { + return this.pinMessageChangeHandler(e, 0) + } + onUpdatePinMessageHandler(e) { + return this.pinMessageChangeHandler(e, 2) + } + pinMessageChangeHandler(e, t) { + var i = e.content.msg, + r = e.content.pinInfo + ;(i.conversationId = + this.core.V2NIMConversationIdUtil.messageConversationId(i)), + this.emitPinNotification({ + pinState: t, + message: i, + serverExtension: r.serverExtension, + createTime: r.createTime, + updateTime: r.updateTime, + operatorId: r.accid, + }) + } + emitPinNotification(e) { + var t = { + pinState: e.pinState, + pin: Object.assign( + Object.assign( + { + serverExtension: e.serverExtension || '', + operatorId: e.operatorId, + }, + e.createTime ? { createTime: e.createTime } : {} + ), + { updateTime: e.updateTime, messageRefer: qr(this.core, e.message) } + ), + } + this.core.V2NIMMessageService.emit('onMessagePinNotification', t) + } + onAddQuickCommentHandler(e) { + return this.onQuickCommentNotificationHandler(e, 1) + } + onRemoveQuickCommentHandler(e) { + return this.onQuickCommentNotificationHandler(e, 2) + } + onQuickCommentNotificationHandler(e, t) { + var i = { + operationType: t, + quickComment: Object.assign( + { + messageRefer: Object.assign( + Object.assign({}, e.content.message), + { + conversationId: + this.core.V2NIMConversationIdUtil.messageConversationId( + e.content.message + ), + } + ), + }, + e.content.quickComment + ), + } + this.core.V2NIMMessageService.emit( + 'onMessageQuickCommentNotification', + i + ) + } + addCollection(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye(lr, { params: e }, '', !0), + (yield this.core.sendCmd('v2AddCollection', { tag: e })).content + .data + ) + }) + } + removeCollections(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye(pr, { collections: e }, '', !0), + (yield this.core.sendCmd('v2RemoveCollections', { tag: e })).content + .data + ) + }) + } + updateCollectionExtension(e, t) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye(hr, { collection: e, serverExtension: t }, '', !0), + (yield this.core.sendCmd('v2UpdateCollectionExtension', { + tag: Object.assign(Object.assign({}, e), { serverExtension: t }), + })).content.data + ) + }) + } + getCollectionListByOption(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + ye(ur, e, '', !0), + (yield this.getCollectionListExByOption(e)).collectionList + ) + }) + } + getCollectionListExByOption(e) { + var t, i + return Te(this, void 0, void 0, function* () { + this.checkV2(), ye(ur, e, '', !0) + var r = e.beginTime || 0, + s = e.endTime || 0, + n = void 0 === e.direction ? 0 : e.direction + if ( + void 0 !== + (null === (t = e.anchorCollection) || void 0 === t + ? void 0 + : t.collectionId) + ) + if (0 === e.direction) { + if (0 === s) s = e.anchorCollection.createTime + else if (s !== e.anchorCollection.createTime) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getCollectionListExByOption: When providing anchorCollection, when sorting in descending order, endTime does not need to be provided, or endTime should be equal to anchorCollection.createTime', + }, + }) + } else if (0 === r) r = e.anchorCollection.createTime + else if (r !== e.anchorCollection.createTime) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getCollectionListExByOption: When providing anchorCollection, when sorting in ascending order, there is no need to provide beginTime, or beginTime should be equal to anchorCollection.createTime', + }, + }) + if (0 !== r && 0 !== s && r >= s) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getCollectionListExByOption: beginTime cannot be greater than endTime', + }, + }) + var o = { + beginTime: r, + endTime: s, + direction: n, + limit: e.limit, + collectionType: e.collectionType, + excludeId: ( + null === (i = e.anchorCollection) || void 0 === i + ? void 0 + : i.collectionId + ) + ? e.anchorCollection.collectionId + : 0, + } + o.collectionType || delete o.collectionType + var a = yield this.core.sendCmd('v2GetCollectionListByOption', { + tag: o, + }) + return { totalCount: a.content.total, collectionList: a.content.data } + }) + } + searchCloudMessages(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), ye(mr, e, '', !0) + var t = e.beginTime || 0, + i = e.endTime || 0 + if (0 !== t && 0 !== i && t > i) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'searchCloudMessages: beginTime cannot be greater than endTime', + }, + }) + var r = void 0 === e.sortOrder ? 0 : e.sortOrder, + s = e.conversationLimit || 0, + n = e.messageLimit || 10, + o = + s > 0 + ? 'v2SearchCloudMessagesGroupByConversation' + : 'v2SearchCloudMessages', + a = yield this.core.sendCmd(o, { + tag: Object.assign(Object.assign({}, e), { + beginTime: t, + endTime: i, + sortOrder: r, + conversationLimit: s, + messageLimit: n, + }), + }) + return this.service._filterMessagesByFn( + a.content.data.map((e) => $r(this.core, e)) + ) + }) + } + searchCloudMessagesEx(e) { + var t, i, r + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(gr, e, '', !0), + e.conversationId && Me(this.core.account, e.conversationId), + !(null === (t = e.keywordList) || void 0 === t + ? void 0 + : t.length) && + !(null === (i = e.senderAccountIds) || void 0 === i + ? void 0 + : i.length) && + !(null === (r = e.messageTypes) || void 0 === r + ? void 0 + : r.length)) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'searchCloudMessagesEx: keywordList senderAccountIds messageTypes cannot be empty at the same time', + }, + }) + 0 === e.searchTimePeriod && delete e.searchTimePeriod + var s = yield this.core.sendCmd('v2SearchCloudMessagesEx', { + tag: Object.assign({}, e), + }), + { msgs: n, hasMore: o, nextPageToken: a } = s.content, + c = this.service + ._filterMessagesByFn(n.map((e) => $r(this.core, e))) + .sort((e, t) => t.createTime - e.createTime) + return { + count: n.length, + items: Wr(this.core, c), + hasMore: It(o), + nextPageToken: a, + } + }) + } + getThreadMessageList(e) { + return Te(this, void 0, void 0, function* () { + if ( + (ye(Er, e, 'getThreadMessageList', !0), + (e.beginTime = e.beginTime || 0), + e.endTime && e.beginTime > e.endTime) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'getThreadMessageList: beginTime cannot be greater than endTime', + }, + }) + var t = yield this.core.sendCmd('v2GetThreadMessageList', { + messageRefer: e.messageRefer, + tag: { + beginTime: e.beginTime, + endTime: e.endTime, + limit: e.limit, + reverse: 1 === e.direction ? 1 : 0, + excludeMessageServerId: e.excludeMessageServerId, + }, + }), + { message: i, replyResult: r, replyList: s } = t.content, + n = $r(this.core, i), + o = s.map((e) => $r(this.core, e)) + return ( + (o = this.service._filterMessagesByFn(o)), + (o = this.service._filterMessageByClearTime(n.conversationId, o)), + { + message: n, + timestamp: r.timestamp, + replyCount: r.total, + replyList: o, + } + ) + }) + } + }, + 'V2NIMMessageExtendUtil' + ), + sc.registerService(Ds, 'V2NIMStorageService'), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMTeamService', e), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + (this.model = new ko()), + (this.memberModel = new Vo()), + (this.notificationModel = new Lo()), + (this.notification = new Po(e, this)), + (this.event = new Do(e, this)), + (this.handler = new wo(e, this)), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: Or, cmdConfig: wr }), this.setListener()) + } + setListener() { + this.event.setListener() + } + reset() { + this.model.reset(), + this.memberModel.reset(), + this.notificationModel.reset() + } + emit(e, ...t) { + return this.event.beforeEmit(e, ...t), super.emit(e, ...t) + } + createTeam(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye({ createTeamParams: ao }, { createTeamParams: e }, '', !0), + ye( + { + inviteeAccountIds: Object.assign(Object.assign({}, co), { + min: 0, + required: !1, + }), + }, + { inviteeAccountIds: t }, + '', + !0 + ), + ye({ antispamConfig: uo }, { antispamConfig: r }, '', !0) + var s = 2 === e.teamType ? 'v2SuperTeamCreate' : 'v2TeamCreate', + n = yield this.core.sendCmd(s, { + team: e, + inviteeAccountIds: t || [], + postscript: i || '', + antispamConfig: r, + }), + o = n.content.team + return ( + this.model.upsert(o), + this.getTeamMemberListByIds(o.teamId, o.teamType, [ + this.core.account, + ]).catch((e) => { + this.core.logger.error('Get Member error after createTeam', e) + }), + this.emit('onTeamCreated', o), + { team: o, failedList: n.content.failedList } + ) + }) + } + updateTeamInfo(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(Io, { updateTeamInfoParams: i }, '', !0), + ye({ antispamConfig: uo }, { antispamConfig: r }, '', !0) + var s = Object.assign({ teamId: e, teamType: t }, i), + n = 2 === t ? 'v2SuperTeamUpdateInfo' : 'v2TeamUpdateInfo' + yield this.core.sendCmd(n, { team: s, antispamConfig: r }), + this.model.upsert(s) + }) + } + leaveTeam(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0) + var i = 2 === t ? 'v2SuperTeamLeave' : 'v2TeamLeave' + yield this.core.sendCmd(i, { teamId: e }), this.model.deleteById(e, t) + }) + } + getTeamInfo(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0) + var i = 2 === t ? 'v2SuperTeamGetInfo' : 'v2TeamGetInfo', + r = this.model.getById(e, t, !1) + if (r) return r + var s = (yield this.core.sendCmd(i, { teamId: e })).content.team + return this.model.upsert(s), s + }) + } + getJoinedTeamList(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(fo, { teamTypes: e }, '', !0), + this.core.V2NIMLoginService.checkIllegalState(), + (e && 0 !== e.length) || (e = [1, 2]) + var t = [] + return ( + e.forEach((e) => { + t = t.concat(this.model.getAll(e)) + }), + t.sort((e, t) => e.createTime - t.createTime) + ) + }) + } + getJoinedTeamCount(e) { + this.checkV2(), + ye(fo, { teamTypes: e }, '', !0), + this.core.V2NIMLoginService.checkIllegalState(), + (e && 0 !== e.length) || (e = [1, 2]) + var t = 0 + return ( + e.forEach((e) => { + t += this.model.count(e) + }), + t + ) + } + getJoinedTeamMembers(e) { + this.checkV2(), + ye(fo, { teamTypes: e }, '', !0), + this.core.V2NIMLoginService.checkIllegalState(), + (e && 0 !== e.length) || (e = [1, 2]) + var t = [] + return ( + e.forEach((e) => { + var i = this.memberModel + .chooseList(e) + .filter((e) => e.accountId === this.core.account) + t = t.concat(i) + }), + Promise.resolve(t) + ) + } + getTeamInfoByIds(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(go, { teamIds: e }, '', !0), + ye(vo, { teamType: t }, '', !0) + var i = 2 === t ? 'v2SuperTeamGetByIds' : 'v2TeamGetByIds', + r = e.map((e) => this.model.getById(e, t, !1)), + s = e.filter((e, t) => !r[t]) + if (0 === s.length) return r + var n = (yield this.core.sendCmd(i, { teamIds: s })).content.teams + return r + .map((t, i) => { + if (t) return t + var r = e[i], + s = n.find((e) => e.teamId === r) + return s && this.model.upsert(s), s + }) + .filter((e) => !!e) + }) + } + dismissTeam(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0) + var i = 2 === t ? 'v2SuperTeamDismiss' : 'v2TeamDismiss' + yield this.core.sendCmd(i, { teamId: e }) + }) + } + inviteMember(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ inviteeAccountIds: co }, { inviteeAccountIds: i }, '', !0), + ye( + { + postscript: Object.assign(Object.assign({}, po), { + required: !1, + }), + }, + { postscript: r }, + '', + !0 + ) + var s = 2 === t ? 'v2SuperTeamInviteMembers' : 'v2TeamInviteMembers' + return (yield this.core.sendCmd(s, { + teamId: e, + accounts: i, + ps: r || '', + })).content.abortedAccidList + }) + } + inviteMemberEx(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(yo, { inviteeParams: i }, '', !0) + var r = 2 === t ? 'v2SuperTeamInviteMembers' : 'v2TeamInviteMembers' + return (yield this.core.sendCmd(r, { + teamId: e, + accounts: i.inviteeAccountIds, + ps: i.postscript || '', + attach: i.serverExtension, + })).content.abortedAccidList + }) + } + acceptInvitation(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(So, e, 'invitationInfo', !0), + ye(No, e, 'invitationInfo', !0) + var { teamType: t, teamId: i, operatorAccountId: r } = e, + s = + 2 === t ? 'v2SuperTeamAcceptInvitation' : 'v2TeamAcceptInvitation' + try { + var n = yield this.core.sendCmd(s, { teamId: i, from: r }) + return ( + this.notification.updateTeamActionStatus(e, 1), n.content.team + ) + } catch (t) { + var o = t + throw ( + (this.notification.checkIfExpired(o.code) && + this.notification.updateTeamActionStatus(e, 3), + t) + ) + } + }) + } + rejectInvitation(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(So, e, 'invitationInfo', !0), + ye(No, e, 'invitationInfo', !0), + ye( + { + postscript: Object.assign(Object.assign({}, po), { + required: !1, + }), + }, + { postscript: t }, + '', + !0 + ) + var { teamType: i, teamId: r, operatorAccountId: s } = e, + n = 2 === i ? 'v2SuperTeamRejectInvite' : 'v2TeamRejectInvite' + try { + yield this.core.sendCmd(n, { teamId: r, from: s, ps: t || '' }), + this.notification.updateTeamActionStatus(e, 2) + } catch (t) { + var o = t + throw ( + (this.notification.checkIfExpired(o.code) && + this.notification.updateTeamActionStatus(e, 3), + t) + ) + } + }) + } + kickMember(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ memberAccountIds: co }, { memberAccountIds: i }, '', !0) + var r = 2 === t ? 'v2SuperTeamKickMembers' : 'v2TeamKickMembers' + yield this.core.sendCmd(r, { teamId: e, accounts: i }) + }) + } + applyJoinTeam(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0) + var r = 2 === t ? 'v2SuperTeamApplyToJoin' : 'v2TeamApplyToJoin', + s = yield this.core.sendCmd(r, { teamId: e, ps: i || '' }), + n = s.content.team, + o = s.content.isInTeam + return (n.isValidTeam = !!n.isValidTeam && !!o), n + }) + } + acceptJoinApplication(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(So, e, 'applicationInfo', !0), + ye(Ao, e, 'applicationInfo', !0) + var { teamType: t, teamId: i, operatorAccountId: r } = e, + s = + 2 === t + ? 'v2SuperTeamAcceptJoinApplication' + : 'v2TeamAcceptJoinApplication' + try { + yield this.core.sendCmd(s, { teamId: i, from: r }), + this.notification.updateTeamActionStatus(e, 1) + } catch (t) { + var n = t + throw ( + (this.notification.checkIfExpired(n.code) && + this.notification.updateTeamActionStatus(e, 3), + t) + ) + } + }) + } + rejectJoinApplication(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(So, e, 'applicationInfo', !0), + ye(Ao, e, 'applicationInfo', !0), + ye( + { + postscript: Object.assign(Object.assign({}, po), { + required: !1, + }), + }, + { postscript: t }, + '', + !0 + ) + var { teamType: i, teamId: r, operatorAccountId: s } = e, + n = + 2 === i + ? 'v2SuperTeamRejectJoinApplication' + : 'v2TeamRejectJoinApplication' + try { + yield this.core.sendCmd(n, { teamId: r, from: s, ps: t || '' }), + this.notification.updateTeamActionStatus(e, 2) + } catch (t) { + var o = t + throw ( + (this.notification.checkIfExpired(o.code) && + this.notification.updateTeamActionStatus(e, 3), + t) + ) + } + }) + } + updateTeamMemberRole(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ memberAccountIds: co }, { memberAccountIds: i }, '', !0), + ye({ memberRole: Mo }, { memberRole: r }, '', !0) + var s = 2 === r ? 'AddManagers' : 'RemoveManagers' + ;(s = 2 === t ? `v2SuperTeam${s}` : `v2Team${s}`), + yield this.core.sendCmd(s, { teamId: e, accounts: ii(i) }) + }) + } + transferTeamOwner(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ accountId: ho }, { accountId: i }, '', !0), + ye( + { leave: { type: 'boolean', required: !1 } }, + { leave: r }, + '', + !0 + ) + var s = this.model.getById(e, t) + if (s && s.ownerAccountId === i) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Transfer to self is not allowed' }, + }) + var n = 2 === t ? 'v2SuperTeamTransferOwner' : 'v2TeamTransferOwner' + yield this.core.sendCmd(n, { teamId: e, account: i, leave: r || !1 }) + }) + } + updateSelfTeamMemberInfo(e, t, i) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(_o, { memberInfoParams: i }, '', !0), + void 0 === i.teamNick && void 0 === i.serverExtension) + ) + throw new he({ code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER }) + var r = + 2 === t + ? 'v2SuperTeamUpdateSelfMemberInfo' + : 'v2TeamUpdateSelfMemberInfo', + s = Object.assign(Object.assign({}, i), { + teamId: e, + accountId: this.core.account, + }), + n = i.antispamConfig + ? { + teamMember: s, + specialFollowUpdate: {}, + antispam: i.antispamConfig, + } + : { teamMember: s } + yield this.core.sendCmd(r, n), + yield this.notification.updateTeamMemberRole( + e, + t, + [this.core.account], + s + ) + var o = this.memberModel.getById(e, t, this.core.account) + if ( + this.core.V2NIMSettingService.name && + this.core.V2NIMConversationIdUtil.name + ) { + var a = + 1 === t + ? this.core.V2NIMConversationIdUtil.teamConversationId(e) + : this.core.V2NIMConversationIdUtil.superTeamConversationId( + e + ), + c = this.core.V2NIMSettingService.getConversationMuteStatus(a) + this.core.eventBus.emit('V2NIMSettingService/setMute', a, c) + } + this.core.eventBus.emit( + 'forwardSend/V2NIMTeamService/updateSelfTeamMemberInfo', + o + ) + }) + } + updateTeamMemberNick(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ accountId: ho }, { accountId: i }, '', !0), + ye({ nick: po }, { nick: r }, '', !0), + i === this.core.account) + ) + return this.updateSelfTeamMemberInfo(e, t, { teamNick: r }) + var s = 2 === t ? 'v2SuperTeamUpdateMember' : 'v2TeamUpdateMember' + yield this.core.sendCmd(s, { + teamMember: { teamNick: r, teamId: e, accountId: i }, + }) + }) + } + updateTeamMemberNickEx(e, t, i) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(bo, i, '', !0), + i.accountId === this.core.account) + ) + return this.updateSelfTeamMemberInfo(e, t, { + teamNick: i.teamNick, + antispamConfig: i.antispamConfig, + }) + var r = 2 === t ? 'v2SuperTeamUpdateMember' : 'v2TeamUpdateMember' + yield this.core.sendCmd(r, { + teamMember: { + teamNick: i.teamNick, + teamId: e, + accountId: i.accountId, + }, + antispam: i.antispamConfig, + }) + }) + } + setTeamChatBannedMode(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(Eo, { chatBannedMode: i }, '', !0) + var r = + 2 === t ? 'v2SuperTeamSetChatBannedMode' : 'v2TeamSetChatBannedMode' + yield this.core.sendCmd(r, { teamId: e, chatBannedMode: i }), + this.model.upsert({ teamId: e, teamType: t, chatBannedMode: i }) + }) + } + setTeamMemberChatBannedStatus(e, t, i, r) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ accountId: ho }, { accountId: i }, '', !0), + ye({ chatBanned: lo }, { chatBanned: r }, '', !0) + var s = + 2 === t + ? 'v2SuperTeamMemberSetChatBannedStatus' + : 'v2TeamMemberSetChatBannedStatus' + yield this.core.sendCmd(s, { + teamId: e, + accountId: 2 === t ? [i] : i, + chatBanned: r ? 1 : 0, + }) + }) + } + getTeamMemberList(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(To, { queryOption: i }, '', !0) + var r = void 0 === i.direction ? 0 : i.direction + r = 0 === r ? 1 : 0 + var s = yield this.core.sendCmd('v2TeamMemberGetList', { + tag: Object.assign( + Object.assign( + { + teamId: e, + teamType: t, + onlyChatBanned: !1, + nextToken: '', + limit: 100, + }, + i + ), + { direction: r } + ), + }), + n = s.content.datas, + o = Ve(s, 'raw.r.0') + return ( + 2 === t && o && o.map && (n = o.map((e) => gt(e, ft(Lr)))), + { + nextToken: s.content.pageInfo.nextToken || '', + finished: !+s.content.pageInfo.hasMore, + memberList: Br(n, t), + } + ) + }) + } + getTeamMemberListByIds(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ accountIds: co }, { accountIds: i }, '', !0) + for ( + var r = + 2 === t + ? 'v2SuperTeamMemberGetListByIds' + : 'v2TeamMemberGetListByIds', + s = i.map((t) => `${e}|${t}`), + n = [], + o = 0; + o < s.length; + o += 20 + ) { + var a = Br( + (yield this.core.sendCmd(r, { tag: s.slice(o, o + 20) })).content + .datas, + t + ) + ;(n = n.concat(a)), a.forEach((e) => this.memberModel.upsert(e)) + } + return n + }) + } + getTeamMemberInvitor(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye({ accountIds: co }, { accountIds: i }, '', !0) + var r = + 2 === t ? 'v2SuperTeamGetMemberInvitor' : 'v2TeamGetMemberInvitor' + return (yield this.core.sendCmd(r, { + teamId: e, + accounts: i, + })).content.accountsMap + }) + } + searchTeamByKeyword(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.checkLogin(), + ye({ keyword: ho }, { keyword: e }, '', !0), + this.model.searchTeamByKeyword(e) + ) + }) + } + addTeamMembersFollow(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Oo, { teamId: e, teamType: t, accountIds: i }, '', !0) + var r = + 2 === t + ? 'v2SuperTeamUpdateSelfMemberInfo' + : 'v2TeamUpdateSelfMemberInfo', + [s] = yield this.getTeamMemberListByIds(e, t, [this.core.account]), + n = (yield this.core.sendCmd(r, { + teamMember: { teamId: e }, + specialFollowUpdate: { accountIds: i, operation: 1 }, + })).content.data + Object.keys(n).length > 0 && + (Object.assign(s, n), + this.emit('onTeamMemberInfoUpdated', [s]), + this.memberModel.upsert(s)) + }) + } + removeTeamMembersFollow(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye(Oo, { teamId: e, teamType: t, accountIds: i }, '', !0) + var [r] = yield this.getTeamMemberListByIds(e, t, [ + this.core.account, + ]), + s = + 2 === t + ? 'v2SuperTeamUpdateSelfMemberInfo' + : 'v2TeamUpdateSelfMemberInfo', + n = (yield this.core.sendCmd(s, { + teamMember: { teamId: e }, + specialFollowUpdate: { accountIds: i, operation: 0 }, + })).content.data + Object.keys(n).length > 0 && + (Object.assign(r, n), + this.emit('onTeamMemberInfoUpdated', [r]), + this.memberModel.upsert(r)) + }) + } + getTeamJoinActionInfoList(e) { + return ( + this.checkV2(), + ye(Ro, e, 'option', !0), + this.core.V2NIMLoginService.checkIllegalState(), + Promise.resolve(this.notificationModel.getByOption(e)) + ) + } + clearAllTeamJoinActionInfo() { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.notificationModel.reset() + }) + } + deleteTeamJoinActionInfo(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye(So, e, '', !0), + ye(Co, e, '', !0), + ye({ timestamp: { type: 'number', min: 1 } }, e, '', !0), + this.notificationModel.delete(e) + }) + } + setTeamJoinActionInfoRead(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + e + ? (ye(So, e, '', !0), + ye(Co, e, '', !0), + this.notificationModel.setRead(e)) + : this.notificationModel.setAllRead() + }) + } + getTeamJoinActionInfoUnreadCount() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.notificationModel.getUnreadCount() + ) + }) + } + }, + 'V2NIMTeamService' + ), + sc.registerService(Ho, 'V2NIMUserService'), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMFriendService', e), + (this.notification = new ia(this.core, this)), + (this.model = new ra()), + (this.notificationModel = new sa()), + this.core._registerDep(Ho, 'V2NIMUserService'), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: Ko, cmdConfig: Jo }), this.setListener()) + } + reset() { + this.model.reset() + } + setListener() { + this.core.eventBus.on( + 'V2NIMFriendService/sysNotification', + this.notification.processSysNotification.bind(this.notification) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMFriendService/addFriend', + this.handleAddFriend.bind(this) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMFriendService/deleteFriend', + this.handleDeleteFriend.bind(this) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMFriendService/setFriendInfo', + this.handleSetFriendInfo.bind(this) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMFriendService/acceptAddApplication', + this.handlePassFriendApply.bind(this) + ), + this.core.eventBus.on( + 'forwardReceive/V2NIMFriendService/rejectAddApplication', + this.handleRejectFriendApply.bind(this) + ) + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + if ('onFriendAdded' === e || 'onFriendInfoChanged' === e) { + var r = t[0] + this.logger.log(`${i}`, `${r.accountId};updateTime:${r.updateTime}`) + } else this.logger.log(`${i}`, ...t) + return super.emit(e, ...t) + } + get hasUserService() { + var e + return !!(null === (e = this.core.V2NIMUserService) || void 0 === e + ? void 0 + : e.name) + } + addFriend(e, t) { + return Te(this, void 0, void 0, function* () { + if ((this.checkV2(), e === this.core.account)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Cannot add yourself' }, + }) + ye(zo, { accountId: e, params: t }, '', !0), + yield this.core.sendCmd('v2AddFriend', { + accountId: e, + verifyType: t.addMode, + postscript: t.postscript || '', + }), + 1 === t.addMode && + (yield this.handleAddFriend(e), + this.notificationModel.updateFriendAddApplicationStatus( + e, + 4, + this.core.account + )) + }) + } + deleteFriend(e, t) { + return Te(this, void 0, void 0, function* () { + if ((this.checkV2(), e === this.core.account)) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Cannot delete yourself' }, + }) + ye(Xo, { accountId: e, params: t }, '', !0), + yield this.core.sendCmd('v2DeleteFriend', { + accountId: e, + params: t, + }), + t.deleteAlias && this.model.upsertFriend(e, { alias: '' }), + this.handleDeleteFriend(e) + }) + } + acceptAddApplication(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), ea(e, this.core.account) + try { + yield this.core.sendCmd('v2AddFriend', { + accountId: e.applicantAccountId, + verifyType: 3, + postscript: '', + }), + this.handlePassFriendApply(e.applicantAccountId) + } catch (t) { + throw (this.handlePassFriendApply(e.applicantAccountId, t), t) + } + }) + } + rejectAddApplication(e, t) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), ea(e, this.core.account) + try { + yield this.core.sendCmd('v2AddFriend', { + accountId: e.applicantAccountId, + verifyType: 4, + postscript: t || '', + }), + this.handleRejectFriendApply({ + applicantAccountId: e.applicantAccountId, + recipientAccountId: e.recipientAccountId, + operatorAccountId: this.core.account, + postscript: t || '', + timestamp: this.core.timeOrigin.getNTPTime(), + read: !1, + status: 2, + }) + } catch (i) { + throw ( + (this.handleRejectFriendApply( + { + applicantAccountId: e.applicantAccountId, + recipientAccountId: e.recipientAccountId, + operatorAccountId: this.core.account, + postscript: t || '', + timestamp: this.core.timeOrigin.getNTPTime(), + read: !1, + status: 3, + }, + i + ), + i) + ) + } + }) + } + setFriendInfo(e, t) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + ye(Qo, { accountId: e, params: t }, '', !0), + e === this.core.account) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'Cannot set yourself' }, + }) + yield this.core.sendCmd('v2SetFriendInfo', { + tag: Object.assign({ accountId: e }, t), + }), + this.handleSetFriendInfo(e, t) + }) + } + getFriendList() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.computedFields(this.model.getFriendList()) + ) + }) + } + getFriendByIds(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye( + { + accountIds: { + type: 'array', + itemType: 'string', + required: !0, + min: 1, + }, + }, + { accountIds: e }, + '', + !0 + ), + this.computedFields(this.model.getFriendByIds(e)) + ) + }) + } + checkFriend(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye( + { + accountIds: { + type: 'array', + itemType: 'string', + required: !0, + min: 1, + }, + }, + { accountIds: e }, + '', + !0 + ) + var t = {} + return ( + e.forEach((e) => { + t[e] = !!this.model.getFriend(e) + }), + t + ) + }) + } + getAddApplicationList(e) { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye(ta, e, '', !0), + this.notificationModel.getAddApplicationList(e) + ) + }) + } + setAddApplicationRead() { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.notificationModel.setAllApplicationRead() + }) + } + setAddApplicationReadEx(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + e + ? (ea(e, this.core.account), + this.notificationModel.setApplicationRead(e)) + : this.notificationModel.setAllApplicationRead() + }) + } + getAddApplicationUnreadCount() { + return Te(this, void 0, void 0, function* () { + return ( + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.notificationModel.getAddApplicationUnreadCount() + ) + }) + } + clearAllAddApplication() { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + this.notificationModel.clearApplicationList() + }) + } + deleteAddApplication(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ea(e, this.core.account), + this.notificationModel.deleteApplication(e) + }) + } + searchFriendByOption(e) { + return Te(this, void 0, void 0, function* () { + if ( + (this.checkV2(), + this.core.V2NIMLoginService.checkIllegalState(), + ye( + { + keyword: { type: 'string', allowEmpty: !1 }, + searchAccountId: { type: 'boolean', required: !1 }, + }, + e, + '', + !0 + ), + void 0 !== e.searchAlias && !e.searchAlias && !e.searchAccountId) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { + reason: + 'searchAlias and searchAccountId cannot be false at the same time', + }, + }) + return this.computedFields(this.model.getFriendListBySearchOption(e)) + }) + } + v2OnAddFriendHandler(e) { + var { accountId: t, verifyType: i, postscript: r } = e.content + if (1 === i) + this.handleAddFriend(t), + this.notificationModel.updateFriendAddApplicationStatus( + t, + 4, + this.core.account + ) + else if (2 === i) { + var s = { + applicantAccountId: this.core.account, + recipientAccountId: t, + operatorAccountId: this.core.account, + postscript: r, + timestamp: this.core.timeOrigin.getNTPTime(), + status: 0, + read: !1, + } + this.handleApplyFriend(s) + } else if (3 === i) this.handlePassFriendApply(t) + else if (4 === i) { + var n = { + applicantAccountId: t, + recipientAccountId: this.core.account, + operatorAccountId: this.core.account, + postscript: r, + timestamp: this.core.timeOrigin.getNTPTime(), + status: 2, + read: !1, + } + this.handleRejectFriendApply(n) + } + } + v2OnDeleteFriendHandler(e) { + var { accountId: t } = e.content + this.handleDeleteFriend(t) + } + v2OnUpdateFriendInfoHandler(e) { + var { data: t } = e.content, + i = this.model.upsertFriend(t.accountId, t) + this.emit('onFriendInfoChanged', this.computedField(i)) + } + v2SyncFriendListHandler(e) { + var { friends: t, timetag: i } = e.content + this.model.setFriendTimetag(i), + t.forEach((e) => { + e.serverExtension || (e.serverExtension = ''), + e.customerExtension || (e.customerExtension = ''), + 0 === e.relationShip + ? this.model.deleteFriend(e.accountId) + : this.model.upsertFriend(e.accountId, e) + }) + } + v2SyncFriendUserListHandler(e) { + var { users: t } = e.content + this.hasUserService && + t.forEach((e) => { + this.core.V2NIMUserService.model.setUser(e) + }) + } + handleApplyFriend(e) { + this.emit('onFriendAddApplication', e) + } + handleAddFriend(e, t) { + return Te(this, void 0, void 0, function* () { + this.model.addFriend(e), + yield this.incrementSyncFriend(), + yield this.core.V2NIMUserService.refreshUserInfo(e) + var t = this.model.getFriend(e) + t && this.emit('onFriendAdded', this.computedField(t)) + }) + } + handleDeleteFriend(e, t) { + ;(t = void 0 === t ? 1 : t), + this.emit('onFriendDeleted', e, t), + this.model.deleteFriend(e) + } + handleSetFriendInfo(e, t) { + var i = this.model.upsertFriend(e, t) + this.emit('onFriendInfoChanged', this.computedField(i)) + } + handlePassFriendApply(e, t) { + var i = t ? (null == t ? void 0 : t.code) : 200 + if ( + !(i >= 19e4 || i === de.V2NIM_ERROR_CODE_FRIEND_OPERATION_RATE_LIMIT) + ) + if (200 === i || i === de.V2NIM_ERROR_CODE_FRIEND_ALREADY_EXIST) + this.notificationModel.updateFriendAddApplicationStatus( + e, + 1, + this.core.account + ), + this.handleAddFriend(e) + else { + if (i >= 500 && i <= 599 && 509 !== i) return + this.notificationModel.updateFriendAddApplicationStatus( + e, + 3, + this.core.account + ) + } + } + handleRejectFriendApply(e, t) { + var i = t ? (null == t ? void 0 : t.code) : 200 + if ( + !(i >= 19e4 || i === de.V2NIM_ERROR_CODE_FRIEND_OPERATION_RATE_LIMIT) + ) + if (200 === i) + this.emit('onFriendAddRejected', e), + this.notificationModel.updateFriendAddApplicationStatus( + e.applicantAccountId, + 2, + this.core.account + ) + else if (i === de.V2NIM_ERROR_CODE_FRIEND_ALREADY_EXIST) + this.notificationModel.updateFriendAddApplicationStatus( + e.applicantAccountId, + 1, + this.core.account + ) + else { + if (i >= 500 && i <= 599 && 509 !== i) return + this.notificationModel.updateFriendAddApplicationStatus( + e.applicantAccountId, + 3, + this.core.account + ) + } + } + incrementSyncFriend() { + return Te(this, void 0, void 0, function* () { + var e = yield this.core.sendCmd('v2IncFriendInfo', { + timetag: this.model.getFriendTimetag(), + }), + { friends: t, timetag: i } = e.content + this.model.setFriendTimetag(i), + t.forEach((e) => { + this.model.upsertFriend(e.accountId, e) + }) + }) + } + computedFields(e) { + return e.map((e) => this.computedField(e)) + } + computedField(e) { + var t, + i, + r = + null === + (i = + null === (t = this.core.V2NIMUserService) || void 0 === t + ? void 0 + : t.model) || void 0 === i + ? void 0 + : i.getUser(e.accountId) + return r ? Object.assign({}, e, { userProfile: r }) : e + } + }, + 'V2NIMFriendService' + ), + sc.registerService( + class extends ni { + constructor(e, t) { + super('V2NIMNotificationService', e), + (this.config = { compatibleWithV1: !0 }), + (this.notificationUtil = new vs(this.core)), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + 'v2' === this.core.options.apiVersion && + (vt({ cmdMap: ds, cmdConfig: hs }), this.setOptions(t)) + } + setOptions(e) { + var t + ;( + null === (t = this.core.systemMessage) || void 0 === t + ? void 0 + : t.name + ) + ? (this.config.compatibleWithV1 = !0) + : (this.config.compatibleWithV1 = !1), + (this.config = Object.assign(this.config, e)) + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + if ('onReceiveCustomNotifications' === e) { + var r = t[0] + this.logger.log( + `${i}`, + r.map( + (e) => + `sender:${e.senderId};receiver:${e.receiverId};ctype:${e.conversationType};time:${e.timestamp}` + ) + ) + } else if ('onReceiveBroadcastNotifications' === e) { + var s = t[0] + this.logger.log( + `${i}`, + s.map((e) => `id:${e.id};sender:${e.senderId};time:${e.timestamp}`) + ) + } else this.logger.log(`${i}`, ...t) + return super.emit(e, ...t) + } + sendCustomNotification(e, t, i) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + Me(this.core.account, e), + ye(gs, { content: t, params: i }, '', !0) + var r = + 3 === this.core.V2NIMConversationIdUtil.parseConversationType(e) + ? 'v2SendCustomNotificationWithSuperTeam' + : 'v2SendCustomNotification', + s = this.notificationUtil.generateNotificationTag(e, t, i) + yield this.core.sendCmd(r, { tag: s }) + }) + } + processSystemNotification(e) { + var t = e.type + if ([0, 1, 2, 3, 4, 15, 16, 17, 18].includes(t)) + this.core.eventBus.emit('V2NIMTeamService/sysNotification', e) + else { + if (![5, 6].includes(t)) { + var i = Object.assign(Object.assign({}, e), { + conversationType: { 100: 1, 101: 2, 102: 1, 103: 3 }[t], + }) + return delete i.type, i + } + this.core.eventBus.emit('V2NIMFriendService/sysNotification', e) + } + } + markBroadcastMsgAck(e) { + this.config.compatibleWithV1 || + this.core.sendCmd('v2BatchMarkRead', { + sid: 7, + cid: 17, + ids: e.map((e) => e.id), + }) + } + syncBroadcastMsgHandler(e) { + var t = e.content.datas + this.markBroadcastMsgAck(t), + t.forEach((e) => { + this.core.eventBus.emit('V2NIMSync/updateTimetag', { + broadcastMsgs: parseInt(e.id), + }) + }), + this.emit('onReceiveBroadcastNotifications', t) + } + onBroadcastMsgHandler(e) { + var t = e.content.data + this.markBroadcastMsgAck([t]), + this.core.eventBus.emit('V2NIMSync/updateTimetag', { + broadcastMsgs: parseInt(t.id), + }), + this.emit('onReceiveBroadcastNotifications', [t]) + } + onSysNotificationHandler(e) { + var t = $e(e, e.content.data, 'idServer') + this.markSysNotificationAck([t]) + var i = this.processSystemNotification(t) + i && this.emit('onReceiveCustomNotifications', [i]) + } + v2SyncOfflineSysNotificationsHandler(e) { + this.markSysNotificationAck(e.content.datas) + var t = e.content.datas + .sort((e, t) => e.timestamp - t.timestamp) + .map((e) => this.processSystemNotification(e)) + .filter((e) => e) + t && this.emit('onReceiveCustomNotifications', t) + } + v2NotificationRevokeHandler(e) { + var t = $e(e, e.content.data, 'idServer') + this.markSysNotificationAck([t]) + } + v2NotificationSyncRevokeHandler(e) { + var { type: t } = e.content + 1 === parseInt(t) && this.markSysNotificationAck(e.content.datas) + } + markSysNotificationAck(e) { + if (!this.config.compatibleWithV1) { + var t = [], + i = [], + r = [15, 16, 17, 18, 103] + e.forEach((e) => { + e.idServer && + (r.includes(e.type) ? i.push(e.idServer) : t.push(e.idServer)) + }), + t.length > 0 && + this.core.sendCmd('v2BatchMarkRead', { + sid: '7', + cid: '3', + ids: t, + }), + i.length > 0 && + this.core.sendCmd('v2BatchMarkRead', { + sid: '21', + cid: '19', + ids: i, + }) + } + } + }, + 'V2NIMNotificationService' + ), + sc.registerService( + class extends ni { + constructor(e) { + super('V2NIMSettingService', e), + (this.needToPushMobileOnDesktopOnline = !0), + this.core._registerDep(xi, 'V2NIMConversationIdUtil'), + (this.push = new Va(e, this)), + (this.mute = new Pa(e, this)), + (this.event = new La(e, this)), + (this.handler = new ua(e, this)), + 'v2' === this.core.options.apiVersion && + (this.setListener(), vt({ cmdMap: la, cmdConfig: ha })) + } + get hasUserService() { + var e + return !!(null === (e = this.core.V2NIMUserService) || void 0 === e + ? void 0 + : e.name) + } + get hasTeamService() { + var e + return !!(null === (e = this.core.V2NIMTeamService) || void 0 === e + ? void 0 + : e.name) + } + setListener() { + this.event.setListener() + } + emit(e, ...t) { + var i = `${this.name}::emit ${e.toString()}` + return this.logger.log(`${i}`, ...t), super.emit(e, ...t) + } + getConversationMuteStatus(e) { + return this.mute.getConversationMuteStatus(e) + } + setTeamMessageMuteMode(e, t, i) { + if (!this.hasTeamService) + throw new he({ + code: de.V2NIM_ERROR_CODE_MISUSE, + detail: { reason: 'setTeamMessageMuteMode: no team service' }, + }) + return ( + this.checkV2(), + ye(mo, { teamId: e }, '', !0), + ye(vo, { teamType: t }, '', !0), + ye(na, { muteMode: i }, '', !0), + this.mute.setTeamMessageMuteMode(e, t, i) + ) + } + getTeamMessageMuteMode(e, t) { + return this.mute.getTeamMessageMuteMode(e, t) + } + getAllTeamMessageMuteMode(e) { + return ( + this.checkV2(), + this.checkLogin(), + ye(vo, { teamType: e }, '', !0), + this.mute.getAllTeamMessageMuteMode(e) + ) + } + setP2PMessageMuteMode(e, t) { + if ( + (this.checkV2(), + ye(oa, { accountId: e, muteMode: t }, '', !0), + e === this.core.account) + ) + throw new he({ + code: de.V2NIM_ERROR_CODE_INVALID_PARAMETER, + detail: { reason: 'can not set mute mode for self' }, + }) + return this.mute.setP2PMessageMuteMode(e, t) + } + getP2PMessageMuteMode(e) { + return ( + ye( + { accountId: { type: 'string', required: !0, allowEmpty: !1 } }, + { accountId: e }, + '', + !0 + ), + this.mute.getP2PMessageMuteMode(e) + ) + } + getP2PMessageMuteList() { + return this.mute.getP2PMessageMuteList() + } + setAppBackground(e, t) { + return ( + this.checkV2(), + ye( + { + isBackground: { type: 'boolean' }, + badge: { type: 'number', required: !1 }, + }, + { isBackground: e, badge: t }, + '', + !0 + ), + this.push.setAppBackground(e, t) + ) + } + setOfflinePushConfig(e, t) { + ye(ca, { config: t }, '', !0), this.push.setOfflinePushConfig(e, t) + } + setPushMobileOnDesktopOnline(e) { + return Te(this, void 0, void 0, function* () { + this.checkV2(), + ye( + { need: { type: 'boolean', required: !1 } }, + { need: e }, + '', + !0 + ), + (e = void 0 === e || e), + yield this.core.sendCmd('v2SetPushMobileOnDesktopOnline', { + tag: { need: e }, + }), + (this.needToPushMobileOnDesktopOnline = e), + this.emit('onPushMobileOnDesktopOnline', e) + }) + } + getPushMobileOnDesktopOnline() { + return ( + this.checkLogin(), + Promise.resolve(this.needToPushMobileOnDesktopOnline) + ) + } + }, + 'V2NIMSettingService' + ), + sc.registerService( + class { + constructor(e) { + ;(this.name = 'V2NIMMessageConverter'), (this.core = e) + } + messageSerialization(e) { + if (!e) return null + var t = mt(e, Zr) + return JSON.stringify(t) + } + messageDeserialization(e) { + var t, i, r, s, n, o, a, c, d, l, p, h, u, m, g, v, f, y, I, M, _, E, T + if (!e) return null + try { + var S = gt(JSON.parse(e), es) + return ( + (S.sendingState = 0), + 1 !== S.conversationType || + (S.senderId !== this.core.account && + S.receiverId !== this.core.account) + ? 2 === S.conversationType + ? (S.conversationId = + this.core.V2NIMConversationIdUtil.teamConversationId( + S.receiverId + )) + : 3 === S.conversationType && + (S.conversationId = + this.core.V2NIMConversationIdUtil.superTeamConversationId( + S.receiverId + )) + : (S.conversationId = + this.core.V2NIMConversationIdUtil.p2pConversationId( + S.senderId === this.core.account ? S.receiverId : S.senderId + )), + S.threadReply && + ((S.threadReply.conversationType = S.conversationType), + (S.threadReply = jr(this.core, S.threadReply))), + S.threadRoot && + ((S.threadRoot.conversationType = S.conversationType), + (S.threadRoot = jr(this.core, S.threadRoot))), + [1, 3, 2, 0].includes(S.conversationType) || + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid conversationType(enum): ${S.conversationType}` + ), + S.senderId && + 'string' != typeof S.senderId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid senderId(string): ${S.senderId}` + ), + S.receiverId && + 'string' != typeof S.receiverId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid receiverId(string): ${S.receiverId}` + ), + 'createTime' in S && + isNaN(S.createTime) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid createTime(number): ${S.createTime}` + ), + [2, 7, 12, 100, 6, 1, -1, 4, 5, 11, 0, 10, 3].includes( + S.messageType + ) || + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageType(enum): ${S.messageType}` + ), + 'subType' in S && + isNaN(S.subType) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid subType(number): ${S.subType}` + ), + S.messageClientId && + 'string' != typeof S.messageClientId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageClientId(string): ${S.messageClientId}` + ), + S.messageServerId && + 'string' != typeof S.messageServerId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageServerId(string): ${S.messageServerId}` + ), + S.attachment && + 'object' != typeof S.attachment && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid attachment(object): ${S.attachment}` + ), + S.text && + 'string' != typeof S.text && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid text(string): ${S.text}` + ), + S.serverExtension && + 'string' != typeof S.serverExtension && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid serverExtension(string): ${S.serverExtension}` + ), + S.callbackExtension && + 'string' != typeof S.callbackExtension && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid callbackExtension(string): ${S.callbackExtension}` + ), + (null === (t = S.pushConfig) || void 0 === t + ? void 0 + : t.pushContent) && + 'string' != typeof S.pushConfig.pushContent && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid pushContent(string): ${S.pushConfig.pushContent}` + ), + (null === (i = S.pushConfig) || void 0 === i + ? void 0 + : i.pushPayload) && + 'string' != typeof S.pushConfig.pushPayload && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid pushPayload(string): ${S.pushConfig.pushPayload}` + ), + (null === (r = S.pushConfig) || void 0 === r + ? void 0 + : r.forcePushContent) && + 'string' != typeof S.pushConfig.forcePushContent && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid forcePushContent(string): ${S.pushConfig.forcePushContent}` + ), + (null === (s = S.pushConfig) || void 0 === s + ? void 0 + : s.forcePushAccountIds) && + !Array.isArray(S.pushConfig.forcePushAccountIds) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid forcePushAccountIds(array): ${S.pushConfig.forcePushAccountIds}` + ), + (null === (n = S.routeConfig) || void 0 === n + ? void 0 + : n.routeEnvironment) && + 'string' != typeof S.routeConfig.routeEnvironment && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid routeEnvironment(string): ${S.routeConfig.routeEnvironment}` + ), + (null === (o = S.antispamConfig) || void 0 === o + ? void 0 + : o.antispamBusinessId) && + 'string' != typeof S.antispamConfig.antispamBusinessId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid antispamBusinessId(string): ${S.antispamConfig.antispamBusinessId}` + ), + (null === (a = S.antispamConfig) || void 0 === a + ? void 0 + : a.antispamCustomMessage) && + 'string' != typeof S.antispamConfig.antispamCustomMessage && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid antispamCustomMessage(string): ${S.antispamConfig.antispamCustomMessage}` + ), + (null === (c = S.antispamConfig) || void 0 === c + ? void 0 + : c.antispamCheating) && + 'string' != typeof S.antispamConfig.antispamCheating && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid antispamCheating(string): ${S.antispamConfig.antispamCheating}` + ), + (null === (d = S.antispamConfig) || void 0 === d + ? void 0 + : d.antispamExtension) && + 'string' != typeof S.antispamConfig.antispamExtension && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid antispamExtension(string): ${S.antispamConfig.antispamExtension}` + ), + (null === (l = S.robotConfig) || void 0 === l + ? void 0 + : l.accountId) && + 'string' != typeof S.robotConfig.accountId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid accountId(string): ${S.robotConfig.accountId}` + ), + (null === (p = S.robotConfig) || void 0 === p ? void 0 : p.topic) && + 'string' != typeof S.robotConfig.topic && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid topic(string): ${S.robotConfig.topic}` + ), + (null === (h = S.robotConfig) || void 0 === h + ? void 0 + : h.function) && + 'string' != typeof S.robotConfig.function && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid function(string): ${S.robotConfig.function}` + ), + (null === (u = S.robotConfig) || void 0 === u + ? void 0 + : u.customContent) && + 'string' != typeof S.robotConfig.customContent && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid customContent(string): ${S.robotConfig.customContent}` + ), + (null === (m = S.threadRoot) || void 0 === m + ? void 0 + : m.senderId) && + 'string' != typeof S.threadRoot.senderId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid senderId(string): ${S.threadRoot.senderId}` + ), + (null === (g = S.threadRoot) || void 0 === g + ? void 0 + : g.receiverId) && + 'string' != typeof S.threadRoot.receiverId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid receiverId(string): ${S.threadRoot.receiverId}` + ), + (null === (v = S.threadRoot) || void 0 === v + ? void 0 + : v.messageClientId) && + 'string' != typeof S.threadRoot.messageClientId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageClientId(string): ${S.threadRoot.messageClientId}` + ), + (null === (f = S.threadRoot) || void 0 === f + ? void 0 + : f.messageServerId) && + 'string' != typeof S.threadRoot.messageServerId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageServerId(string): ${S.threadRoot.messageServerId}` + ), + S.threadRoot && + 'createTime' in S.threadRoot && + isNaN(S.threadRoot.createTime) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid createTime(number): ${S.threadRoot.createTime}` + ), + S.threadRoot && + ![1, 3, 2, 0].includes(S.threadRoot.conversationType) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid conversationType(enum): ${S.threadRoot.conversationType}` + ), + (null === (y = S.threadRoot) || void 0 === y + ? void 0 + : y.conversationId) && + 'string' != typeof S.threadRoot.conversationId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid conversationId(string): ${S.threadRoot.conversationId}` + ), + (null === (I = S.threadReply) || void 0 === I + ? void 0 + : I.senderId) && + 'string' != typeof S.threadReply.senderId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid senderId(string): ${S.threadReply.senderId}` + ), + (null === (M = S.threadReply) || void 0 === M + ? void 0 + : M.receiverId) && + 'string' != typeof S.threadReply.receiverId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid receiverId(string): ${S.threadReply.receiverId}` + ), + (null === (_ = S.threadReply) || void 0 === _ + ? void 0 + : _.messageClientId) && + 'string' != typeof S.threadReply.messageClientId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageClientId(string): ${S.threadReply.messageClientId}` + ), + (null === (E = S.threadReply) || void 0 === E + ? void 0 + : E.messageServerId) && + 'string' != typeof S.threadReply.messageServerId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid messageServerId(string): ${S.threadReply.messageServerId}` + ), + S.threadReply && + 'createTime' in S.threadReply && + isNaN(S.threadReply.createTime) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid createTime(number): ${S.threadReply.createTime}` + ), + S.threadReply && + ![1, 3, 2, 0].includes(S.threadReply.conversationType) && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid conversationType(enum): ${S.threadReply.conversationType}` + ), + (null === (T = S.threadReply) || void 0 === T + ? void 0 + : T.conversationId) && + 'string' != typeof S.threadReply.conversationId && + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid conversationId(string): ${S.threadReply.conversationId}` + ), + delete S.__clientExt, + delete S.userUpdateTime, + S + ) + } catch (t) { + return ( + this.core.logger.error( + `V2NIMMessageConverterImpl.messageDeserialization: invalid message string: ${e}` + ), + null + ) + } + } + }, + 'V2NIMMessageConverter' + ) +var nc = t.p, + oc = t.K +export { nc as NIM, oc as V2NIMConst } diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..1e75773 --- /dev/null +++ b/locale/en.json @@ -0,0 +1,5 @@ +{ + "messageText": "Message", + "cantactsText": "Cantact", + "mineText": "Me" +} diff --git a/locale/en.ts b/locale/en.ts new file mode 100644 index 0000000..2f4a85e --- /dev/null +++ b/locale/en.ts @@ -0,0 +1,367 @@ +// en.js +export default { + appText: 'NIM', + messageText: 'Message', + contactText: 'Contacts', + mineText: 'Me', + logoutText: 'Log out', + commsEaseText: 'About NIM', + logoutConfirmText: 'Are you sure you want to log out?', + avatarText: 'Avatar', + accountText: 'Account', + name: 'Nickname', + genderText: 'Gender', + remark: 'remark', + mobile: 'Phone', + email: 'Email', + sign: 'Signature', + man: 'Male', + woman: 'Female', + unknow: 'Unknown', + birthText: 'Birthday', + userOnlineText: 'Online', + userOfflineText: 'Offline', + updateAvatarText: 'Update Avatar', + updateNameText: 'Update Name', + + FriendPageText: 'Friend Card', + startConversationText: 'Start Chat', + addText: 'Add', + applyFriendSuccessText: 'Request Sent', + applyFriendFailText: 'Request Failed', + addFriendText: 'Add Friend', + addFriendFailText: 'Add Friend Failed', + deleteFriendText: 'Delete Friend', + deleteFriendConfirmText: 'Are you sure you want to delete this friend?', + deleteFriendSuccessText: 'Delete Friend Success', + deleteFriendFailText: 'Delete Friend Failed', + setBlackFailText: 'Add to blacklist failed', + removeBlackFailText: 'Remove from blacklist failed', + removeBlackSuccessText: 'Remove from blacklist success', + addPermissionText: + 'Please add relevant permissions in the system settings page', + FailAvatarText: 'Avatar upload failed', + chooseDefaultImage: 'Choose default image', + chatButtonText: 'Go to Chat', + gotoChatFailText: 'Go to chat failed', + chatWithFriendText: 'Chat', + okText: 'OK', + updateText: 'Update', + cancelText: 'Cancel', + friendSelectText: 'Select Friend', + telErrorText: 'Invalid phone number format', + emailErrorText: 'Invalid email format', + createButtonText: 'Create', + createP2PText: 'Start Chat', + createTeamText: 'Create Group', + addTeamMemberText: 'Add Group Member', + discussionMemberText: '讨论组成员', + addTeamMemberFailText: 'Add Group Member Failed', + teamTitlePlaceholder: 'Enter Group Name', + maxSelectedText: 'You can only select up to 200 friends', + createTeamSuccessText: 'Create Group Success', + createTeamFailedText: 'Create Group Failed', + PersonalPageText: 'PersonalCard', + deleteSessionText: 'Delete', + sessionMuteText: 'Mute Notifications', + sessionMuteFailText: 'Mute Notifications Failed', + sessionUnMuteFailText: 'Unmute Notifications Failed', + stickTopText: 'Pin Chat', + deleteStickTopText: 'Unpin Chat', + addStickTopText: 'Pin', + deleteSessionFailText: 'Delete Conversation Failed', + deleteStickTopFailText: 'Unpin Chat Failed', + addStickTopFailText: 'Pin Message Failed', + teamMemberText: 'Group Members', + saveText: 'Save', + setText: 'Settings', + failText: 'Failed', + saveSuccessText: 'Save Success', + saveFailedText: 'Save Failed', + searchTeamPlaceholder: 'Enter Group Name', + teamTitle: 'Group Name', + discussionTitle: 'Discussion Group Name', + teamInfoText: 'Group Information', + discussionInfoText: 'Discussion Group Information', + teamAvatar: 'Group Avatar', + discussionAvatarText: 'Discussion Group Avatar', + networkError: 'Current network error', + searchFailText: 'Search Failed', + offlineText: 'Network is unavailable, please check network settings.', + connectingText: + 'The current IM connection has been disconnected and is reconnecting…', + teamMenuText: 'My Groups', + teamChooseText: 'My Group Chats', + chooseText: 'Choose', + friendSelect: 'Please select a contact', + getHistoryMsgFailedText: 'Failed to get message history', + deleteText: 'Delete', + recallText: 'Recall', + copyText: 'Copy', + forwardText: 'Forward', + forwardComment: 'forward comment', + replyText: 'Reply', + replyNotFindText: 'Message has recalled or deleted', + forwardToTeamText: 'Forward to Group', + forwardToFriendText: 'Forward to Contact', + sessionRecordText: 'Conversation Record', + chatInputPlaceHolder: 'What would you like to say?', + enableV2CloudConversationText: 'Enable V2 Cloud Conversation', + SwitchToEnglishText: 'Switch to English', + pinText: 'Mark', + pinFailedText: 'Mark Failed', + unpinText: 'Unmark', + unpinFailedText: 'Unmark Failed', + noPinListText: 'No Mark', + collectionText: 'Collection', + deleteCollectionText: 'Delete collection', + addCollectionSuccessText: 'Add collection success', + addCollectionFailedText: 'Add collection Failed', + deleteCollectionFailedText: 'Delete collection Failed', + noCollectionsText: 'No collection', + teamBannedText: 'Message Banned', + you: 'You', + pinThisText: 'Marked this message', + delete: 'Delete this message', + recall: 'Recalled a message', + recall2: 'This message has been recalled', + recall3: 'Recall this message', + recallMsgFailText: 'Recall Message Failed', + reeditText: 'Edit', + loadingMoreText: 'Loading…', + noMoreText: 'No more', + deleteMsgSuccessText: 'Delete Success', + deleteMsgFailText: 'Delete Failed', + conversationEmptyText: 'No conversation', + teamOwner: 'Group Owner', + teamManager: 'Group Manager', + teamEmptyText: 'NoGroup Chats', + blacklistEmptyText: 'No Blocked Contacts', + blacklistSubTitle: 'You will not get messages from anyone on the list. ', + validEmptyText: 'No Verification Messages', + dismissTeamText: 'Dismiss Group', + dismissTeamConfirmText: 'Are you sure you want to dismiss this group?', + leaveTeamTitle: 'Leave Group', + leaveDiscussionTitle: 'Leave Discussion Group', + leaveTeamConfirmText: 'Are you sure you want to leave this group?', + leaveTeamSuccessText: 'You have left this group', + leaveTeamFailedText: 'Failed to leave this group', + leaveDiscussionSuccessText: 'Successfully left the discussion group', + leaveDiscussionFailedText: 'Failed to leave the discussion group', + dismissTeamSuccessText: 'Dismiss Group Success', + dismissTeamFailedText: 'Dismiss Group Failed', + updateTeamSuccessText: 'Update Success', + updateTeamFailedText: 'Update Failed', + teamTitleConfirmText: 'Group name cannot be empty', + teamIntroConfirmText: 'Group introduction cannot be empty', + aliasConfirmText: 'Alias cannot be empty', + sendImageFailedText: 'Failed to send Image', + sendVideoFailedText: 'Failed to send Video', + sendAudioFailedText: 'Failed to send Audio', + sendFileFailedText: 'Failed to send File', + sendMsgFailedText: 'Failed to send Message', + weekText: 'Weeks ago', + dayText: 'Days ago', + hourText: 'Hours ago', + minuteText: 'Minutes ago', + nowText: 'Just now', + sendText: 'Send', + sendToText: 'Send to', + textMsgText: 'Text Message', + audioMsgText: 'Audio Message', + videoMsgText: 'Video Message', + fileMsgText: 'File Message', + callMsgText: 'Call Message', + geoMsgText: 'Location Message', + imgMsgText: 'Image Message', + notiMsgText: 'Notification Message', + robotMsgText: 'Robot Message', + tipMsgText: 'Tip Message', + customMsgText: 'Custom Message', + unknowMsgText: 'Unknown Message', + noFriendText: 'No Friends', + onDismissTeamText: 'This group has been dismissed', + onRemoveTeamText: 'You have left the group', + selectSessionFailText: 'Failed to select conversation', + noExistUser: 'This user does not exist', + enterAccount: 'Enter account', + validMsgText: 'Verification Message', + blacklistText: 'Blocked Contacts', + applyTeamText: 'Apply to Join Group', + acceptResultText: 'Accepted', + rejectResultText: 'Rejected', + rejectTeamInviteText: 'Rejected group invitation', + beRejectResultText: 'Rejected friend request', + passResultText: 'Accepted friend request', + acceptedText: 'This request has been accepted', + acceptFailedText: 'Failed to accept this request', + rejectedText: 'This request has been rejected', + rejectFailedText: 'Failed to reject this request', + passFriendAskText: + "I have accepted your friend request, let's start chatting!", + applyFriendText: 'Add you as a friend', + rejectText: 'Reject', + acceptText: 'Accept', + inviteTeamText: 'Invite to Group', + addBlacklist: 'Block', + removeBlacklist: 'Unblock', + forwardSuccessText: 'Forward Success', + forwardFailText: 'Forward Failed', + getMessageFailed: 'Fail to get message', + getForwardMessageFailed: 'Fail to get forward message', + sendFailWithInBlackText: + 'The other party has blocked you, message sending failed', + sendFailWithDeleteText: + 'The relationship between both parties has been terminated, please reapply for contact', + friendVerificationText: 'Friend Verification', + teamAll: 'all', + chooseMentionText: 'Choose Mention', + someoneText: 'someone', + meText: 'mention', + teamMutePlaceholder: 'The current group owner has set the group to mute', + viewMoreText: 'View More', + resendMsgFailText: 'Resend Failed', + audioBtnText: 'Press and hold to speak', + audioRemindText: 'Release to send', + audioErrorText: 'Recording failed', + videoPlayText: 'Video Play', + voiceCallText: 'Voice Call', + videoCallText: 'Video Call', + callDurationText: 'call duration', + callCancelText: 'canceled', + callRejectedText: 'rejected', + callTimeoutText: 'Missed call', + callBusyText: 'busy line', + callFailedText: 'call failed', + wxAppFileCopyText: 'Please paste the URL in the mobile browser.', + shootText: 'shoot', + albumText: 'album', + msgReadPageTitleText: 'Message Reading Status', + readText: 'Read', + unreadText: 'Unread', + fileText: 'file', + allUnReadText: 'All Unread', + msgRecallTimeErrorText: 'Message recall time exceeded', + allReadText: 'All Read', + searchText: 'Search', + searchTitleText: 'Search', + friendText: 'Friend', + teamText: 'Group', + discussionText: 'Discussion Group', + searchResultNullText: 'User does not exist', + conversationSendFailText: '[Send Failed]', + conversationNotificationText: '[Notification]', + fileMsgTitleText: '[File Message]', + collectionFromText: 'Collection from', + copySuccessText: 'Copy Success', + openUrlText: 'Copied. Open in browser.', + teamManagerText: 'Team Manager', + teamManagerSettingText: 'Team Manager Setting', + updateTeamInfoText: 'Who is allowed to edit group details', + teamOwnerAndManagerText: 'TeamOwnerAndManager', + updateTeamInviteText: 'Who is allowed to invite group members', + updateTeamAtText: 'Who is allowed to @', + addMemberText: 'Add Member', + removeText: 'remove', + + securityTipText: + 'For test only. Beware of money transfer, lottery winnings & strange call scams.', + createDiscussionText: 'Create Discussion', + + // emoji 不能随便填,要用固定 key + Laugh: '[Laugh]', + Happy: '[Happy]', + Sexy: '[Sexy]', + Cool: '[Cool]', + Mischievous: '[Mischievous]', + Kiss: '[Kiss]', + Spit: '[Spit]', + Squint: '[Squint]', + Cute: '[Cute]', + Grimace: '[Grimace]', + Snicker: '[Snicker]', + Joy: '[Joy]', + Ecstasy: '[Ecstasy]', + Surprise: '[Surprise]', + Tears: '[Tears]', + Sweat: '[Sweat]', + Angle: '[Angle]', + Funny: '[Funny]', + Awkward: '[Awkward]', + Thrill: '[Thrill]', + Cry: '[Cry]', + Fretting: '[Fretting]', + Terrorist: '[Terrorist]', + Halo: '[Halo]', + Shame: '[Shame]', + Sleep: '[Sleep]', + Tired: '[Tired]', + Mask: '[Mask]', + ok: '[ok]', + AllRight: '[All right]', + Despise: '[Despise]', + Uncomfortable: '[Uncomfortable]', + Disdain: '[Disdain]', + ill: '[ill]', + Mad: '[Mad]', + Ghost: '[Ghost]', + Angry: '[Angry]', + Unhappy: '[Unhappy]', + Frown: '[Frown]', + Broken: '[Broken]', + Beckoning: '[Beckoning]', + Ok: '[Ok]', + Low: '[Low]', + Nice: '[Nice]', + Applause: '[Applause]', + GoodJob: '[Good job]', + Hit: '[Hit]', + Please: '[Please]', + Bye: '[Bye]', + First: '[First]', + Fist: '[Fist]', + GiveMeFive: '[Give me five]', + Knife: '[Knife]', + Hi: '[Hi]', + No: '[No]', + Hold: '[Hold]', + Think: '[Think]', + Pig: '[Pig]', + NoListen: '[No listen]', + NoLook: '[No look]', + NoWords: '[No words]', + Monkey: '[Monkey]', + Bomb: '[Bomb]', + Cloud: '[Cloud]', + Rocket: '[Rocket]', + Ambulance: '[Ambulance]', + Poop: '[Poop]', + // 错误码及提示内容 + // 通用错误码 + 190001: 'internal error', + 190002: 'illegal state', + 191001: 'misuse', + 191002: 'cancelled', + 191003: 'callback failed', + 191004: 'invalid parameter', + 191005: 'timeout', + 191006: 'resource not exist', + 191007: 'resource already exist', + // 连接相关 + 192001: 'connect failed', + 192002: 'connect timeout', + 192003: 'disconnected', + 192004: 'protocol timeout', + 192005: 'protocol send failed', + 192006: 'request failed', + // 消息相关 + 107319: 'PIN limit exceeded', + 107320: 'PIN not exist', + 107322: 'PIN already exist', + 107327: 'PIN function disabled', + 189301: 'collection limit exceeded', + 189302: 'collection not exist', + 189449: 'collection concurrent operation failed', + // 群相关 + 109432: 'no permission', +} diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json new file mode 100644 index 0000000..2d6db61 --- /dev/null +++ b/locale/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "messageText": "消息", + "cantactsText": "通讯录", + "mineText": "我的" +} diff --git a/locale/zh-Hans.ts b/locale/zh-Hans.ts new file mode 100644 index 0000000..e6d42b8 --- /dev/null +++ b/locale/zh-Hans.ts @@ -0,0 +1,407 @@ +// zn.js +export default { + appText: '云信IM', + messageText: '消息', + contactText: '通讯录', + mineText: '我的', + logoutText: '退出登录', + commsEaseText: '关于云信', + logoutConfirmText: '确定退出登录吗?', + avatarText: '头像', + updateAvatarText: '修改头像', + updateNameText: '修改名称', + accountText: '账号', + name: '昵称', + genderText: '性别', + remarkText: '备注名', + mobile: '手机', + email: '邮箱', + sign: '签名', + man: '男', + woman: '女', + unknow: '未知', + birthText: '生日', + userOnlineText: '在线', + userOfflineText: '离线', + FriendPageText: '好友名片', + startConversationText: '发起单聊', + addText: '添加', + removeText: '移除', + addTeamManagerSuccessText: '添加管理员成功', + addTeamManagerFailText: '添加管理员失败', + confirmRemoveText: '是否移除?', + removeManagerExplain: '移除后该成员将无管理权限', + removeMemberExplain: '将移除该成员', + removeSuccessText: '移除成功', + removeFailText: '移除失败', + userNotInTeam: '该用户不在群里', + noTeamManager: '暂无群管理员', + noTeamMember: '暂无群成员', + applyFriendSuccessText: '好友申请已发送', + applyFriendFailText: '发送申请失败', + addFriendText: '添加好友', + addMemberText: '添加成员', + addFriendFailText: '添加好友失败', + deleteFriendText: '删除好友', + deleteFriendConfirmText: '是否确认删除好友', + deleteFriendSuccessText: '删除好友成功', + deleteFriendFailText: '删除好友失败', + setBlackFailText: '加入黑名单失败', + removeBlackFailText: '解除黑名单失败', + removeBlackSuccessText: '解除黑名单成功', + addPermissionText: '请在系统设置页添加相关权限', + FailAvatarText: '上传头像失败', + chooseDefaultImage: '选择默认图标', + chatButtonText: '去聊天', + gotoChatFailText: '去聊天失败', + chatWithFriendText: '聊天', + okText: '确定', + updateText: '修改', + cancelText: '取消', + friendSelectText: '选择好友', + telErrorText: '手机格式不正确', + emailErrorText: '邮箱格式不正确', + createButtonText: '创建', + createP2PText: '发起单聊', + createTeamText: '创建群聊', + addTeamMemberText: '添加群成员', + addTeamMemberFailText: '添加群成员失败', + teamTitlePlaceholder: '请输入群名称', + maxSelectedText: '最多只能选择200位好友', + createTeamSuccessText: '创建群组成功', + createDiscussionSuccessText: '创建讨论组成功', + createTeamFailedText: '创建群组失败', + createDiscussionFailedText: '创建讨论组失败', + PersonalPageText: '个人名片', + deleteSessionText: '删除会话', + sessionMuteText: '开启消息提醒', + sessionMuteFailText: '开启消息提醒失败', + sessionUnMuteFailText: '关闭消息提醒失败', + stickTopText: '聊天置顶', + deleteStickTopText: '取消置顶', + addStickTopText: '置顶消息', + deleteSessionFailText: '删除会话失败', + deleteStickTopFailText: '取消置顶失败', + addStickTopFailText: '置顶消息失败', + teamMemberText: '群成员', + discussionMemberText: '讨论组成员', + teamManagerText: '群管理', + teamManagerSettingText: '管理管理员', + updateTeamInfoText: '谁可以编辑群信息', + updateTeamInviteText: '谁可以邀请新成员', + updateTeamAtText: '谁可以@所有人', + transformTeam: '转让群主', + transformTeamContent: '确认转让群主给', + doubt: '吗?', + transformTeamSuccessText: '转让群主成功', + transformTeamFailedText: '转让群主失败', + transformTeamText: '选择转让成员', + teamBannedText: '群禁言', + saveText: '保存', + setText: '设置', + failText: '失败', + saveSuccessText: '保存成功', + saveFailedText: '保存失败', + searchTeamPlaceholder: '请输入群名称', + nickInTeamEmptyText: '请输入群昵称', + teamTitle: '群名称', + discussionTitle: '讨论组名称', + teamInfoText: '群信息', + discussionInfoText: '讨论组信息', + teamIntro: '群介绍', + teamAvatar: '群头像', + discussionAvatarText: '讨论组头像', + networkError: '当前网络错误', + searchFailText: '查找失败', + offlineText: '当前网络不可用,请检查你当前网络设置。', + connectingText: '当前IM连接已断开,正在重连...', + teamMenuText: '我的群组', + teamChooseText: '我的群聊', + chooseText: '选择', + friendSelect: '请选择联系人', + pleaseSelectMember: '请选择成员', + teamMemebrSelect: '人员选择', + getHistoryMsgFailedText: '获取失败', + deleteText: '删除', + recallText: '撤回', + copyText: '复制', + forwardText: '转发', + forwardComment: '留言', + forwardSuccessText: '转发成功', + forwardFailedText: '转发失败', + getMessageFailed: '获取消息失败', + replyText: '回复', + replyNotFindText: '该消息已撤回或删除', + msgRecallTimeErrorText: '已超过时间无法撤回', + enableV2CloudConversationText: '是否开启云端会话', + SwitchToEnglish: '切换语言为英文', + copySuccessText: '复制成功', + + forwardToTeamText: '转发到群组', + forwardToFriendText: '转发到个人', + sessionRecordText: '的会话记录', + chatInputPlaceHolder: '说点什么呢~', + pinText: '标记', + pinFailedText: '标记失败', + unpinText: '取消标记', + unpinFailedText: '取消标记失败', + noPinListText: '暂无标记消息', + collectionText: '收藏', + deleteCollectionText: '删除收藏', + addCollectionSuccessText: '收藏成功', + addCollectionFailedText: '添加收藏失败', + deleteCollectionFailedText: '删除收藏失败', + noCollectionsText: '暂无收藏', + you: '你', + pinThisText: '标记了这条消息', + delete: '删除此消息', + recall: '撤回了一条消息', + recall2: '此消息已撤回', + recall3: '撤回此消息', + recallMsgFailText: '撤回消息失败', + reeditText: '重新编辑', + loadingMoreText: '加载更多……', + noMoreText: '没有更多了', + deleteMsgSuccessText: '删除成功', + deleteMsgFailText: '删除失败', + conversationEmptyText: '暂无会话', + teamOwner: '群主', + teamManager: '群管理员', + manager: '管理员', + teamEmptyText: '暂无群聊', + blacklistEmptyText: '暂无黑名单', + blacklistSubTitle: '你不会收到列表中任何联系人的消息', + validEmptyText: '暂无验证消息', + dismissTeamText: '解散群组', + dismissTeamConfirmText: '是否确认解散该群组', + leaveTeamTitle: '退出群聊', + leaveDiscussionTitle: '退出讨论组', + leaveTeamConfirmText: '是否确认退出该群组', + leaveDiscussionConfirmText: '是否确认退出该讨论组', + leaveTeamSuccessText: '已成功退出此群', + leaveDiscussionSuccessText: '已成功退出此讨论组', + leaveTeamFailedText: '退出此群失败', + leaveDiscussionFailedText: '退出此讨论组失败', + dismissTeamSuccessText: '群解散成功', + dismissTeamFailedText: '群解散失败', + updateTeamSuccessText: '修改成功', + updateTeamFailedText: '修改失败', + teamTitleConfirmText: '群名称不能为空', + teamIntroConfirmText: '群介绍不能为空', + aliasConfirmText: '备注名不能为空', + sendImageFailedText: '发送图片失败', + sendVideoFailedText: '发送视频失败', + sendAudioFailedText: '发送音频失败', + sendFileFailedText: '发送文件失败', + sendMsgFailedText: '发送消息失败', + weekText: '周前', + dayText: '天前', + hourText: '小时前', + minuteText: '分钟前', + nowText: '刚刚', + sendText: '发送', + sendToText: '发送给', + textMsgText: '文本消息', + audioMsgText: '音频消息', + videoMsgText: '视频消息', + fileMsgText: '文件消息', + callMsgText: '话单消息', + geoMsgText: '地理位置消息', + imgMsgText: '图片消息', + notiMsgText: '通知消息', + robotMsgText: '机器消息', + tipMsgText: '提示消息', + customMsgText: '自定义消息', + unknowMsgText: '未知消息体', + noFriendText: '暂无好友', + onDismissTeamText: '该群聊已解散', + onRemoveTeamText: '您已离开群组', + selectSessionFailText: '选择会话失败', + noExistUser: '该用户不存在', + enterAccount: '请输入账号', + validMsgText: '验证消息', + blacklistText: '黑名单', + applyTeamText: '申请入群', + acceptResultText: '已同意', + rejectResultText: '已拒绝', + rejectTeamInviteText: '拒绝了群邀请', + beRejectResultText: '拒绝了好友申请', + passResultText: '通过了好友申请', + acceptedText: '已同意该申请', + acceptFailedText: '同意该申请失败', + rejectedText: '已拒绝该申请', + rejectFailedText: '拒绝该申请失败', + passFriendAskText: '我已经同意了你的申请,现在开始聊天吧~', + applyFriendText: '添加您为好友', + rejectText: '拒绝', + acceptText: '同意', + inviteTeamText: '邀请入群', + addBlacklist: '加入黑名单', + removeBlacklist: '解除', + teamAll: '所有人', + sendFailWithInBlackText: '对方已将你拉黑,消息发送失败', + sendFailWithDeleteText: '双方关系已解除,如需沟通,请申请', + friendVerificationText: '好友验证', + chooseMentionText: '选择提醒', + someoneText: '有人', + meText: '我', + teamMutePlaceholder: '当前群主已经设置为群禁言', + noPermission: '您暂无权限操作', + muteAllTeamFailedText: '全员禁言失败', + unmuteAllTeamFailedText: '解除全员禁言失败', + + nickInTeam: '我在群里的昵称', + viewMoreText: '查看更多', + resendMsgFailText: '重发失败', + audioBtnText: '按住说话', + audioRemindText: '松开发送', + audioErrorText: '录音失败,请检查是否开启权限', + videoPlayText: '视频播放', + updateTeamAvatar: '更新了群头像', + updateTeamName: '更新群名称为', + updateTeamIntro: '更新了群介绍', + updateTeamInviteMode: '更新了群权限“邀请他人权限”为', + updateTeamUpdateTeamMode: '更新了群权限“群资料修改权限”为', + updateAllowAt: '更新了“@所有人权限”为', + updateTeamMute: '更新了“群禁言”为', + onlyTeamOwner: '仅群主', + teamOwnerAndManagerText: '群主和管理员', + closeText: '关闭', + openText: '开启', + joinTeamText: '加入群组', + leaveTeamText: '离开了群组', + beRemoveTeamText: '被移出群组', + beAddTeamManagersText: '被任命为管理员', + beRemoveTeamManagersText: '被移除管理员', + newGroupOwnerText: '成为新群主', + callDurationText: '通话时长', + callCancelText: '已取消', + callRejectedText: '已拒绝', + callTimeoutText: '超时未接听', + callBusyText: '忙线未接听', + callFailedText: '呼叫失败', + wxAppFileCopyText: '已自动复制网址,请在手机浏览器里粘贴该网址', + shootText: '拍摄', + albumText: '相册', + voiceCallText: '语音通话', + videoCallText: '视频通话', + msgReadPageTitleText: '消息阅读状态', + readText: '已读', + unreadText: '未读', + fileText: '文件', + allUnReadText: '全部成员未读', + allReadText: '全部成员已读', + searchText: '请输入你要搜索的关键字', + searchTitleText: '搜索', + friendText: '好友', + teamText: '群组', + discussionText: '讨论组', + searchResultNullText: '该用户不存在', + conversationSendFailText: '[发送失败]', + conversationNotificationText: '[通知消息]', + getForwardMessageFailed: '该消息已撤回或删除', + fileMsgTitleText: '[文件消息]', + collectionFromText: '来自', + openUrlText: '已复制链接,请在浏览器打开链接', + SwitchToEnglishText: '是否切换为英文', + securityTipText: + '仅用于体验云信IM 产品功能,请勿轻信汇款、中奖等涉及钱款的信息,勿轻易拨打陌生电话,谨防上当受骗。', + createDiscussionText: '创建讨论组', + + // emoji 不能随便填,要用固定 key + Laugh: '[大笑]', + Happy: '[开心]', + Sexy: '[色]', + Cool: '[酷]', + Mischievous: '[奸笑]', + Kiss: '[亲]', + Spit: '[伸舌头]', + Squint: '[眯眼]', + Cute: '[可爱]', + Grimace: '[鬼脸]', + Snicker: '[偷笑]', + Joy: '[喜悦]', + Ecstasy: '[狂喜]', + Surprise: '[惊讶]', + Tears: '[流泪]', + Sweat: '[流汗]', + Angle: '[天使]', + Funny: '[笑哭]', + Awkward: '[尴尬]', + Thrill: '[惊恐]', + Cry: '[大哭]', + Fretting: '[烦躁]', + Terrorist: '[恐怖]', + Halo: '[两眼冒星]', + Shame: '[害羞]', + Sleep: '[睡着]', + Tired: '[冒星]', + Mask: '[口罩]', + ok: '[OK]', + AllRight: '[好吧]', + Despise: '[鄙视]', + Uncomfortable: '[难受]', + Disdain: '[不屑]', + ill: '[不舒服]', + Mad: '[愤怒]', + Ghost: '[鬼怪]', + Angry: '[发怒]', + Unhappy: '[不高兴]', + Frown: '[皱眉]', + Broken: '[心碎]', + Beckoning: '[心动]', + Ok: '[好的]', + Low: '[低级]', + Nice: '[赞]', + Applause: '[鼓掌]', + GoodJob: '[给力]', + Hit: '[打你]', + Please: '[阿弥陀佛]', + Bye: '[拜拜]', + First: '[第一]', + Fist: '[拳头]', + GiveMeFive: '[手掌]', + Knife: '[剪刀]', + Hi: '[招手]', + No: '[不要]', + Hold: '[举着]', + Think: '[思考]', + Pig: '[猪头]', + NoListen: '[不听]', + NoLook: '[不看]', + NoWords: '[不说]', + Monkey: '[猴子]', + Bomb: '[炸弹]', + Cloud: '[筋斗云]', + Rocket: '[火箭]', + Ambulance: '[救护车]', + Poop: '[便便]', + // 错误码及提示内容 + // 通用错误码 + 190001: '内部错误', + 190002: '非法状态', + 191001: '使用姿势错误', + 191002: '操作取消', + 191003: '回调失败', + 191004: '参数错误', + 191005: '请求超时', + 191006: '资源不存在', + 191007: '资源已存在', + // 连接相关 + 192001: '连接错误', + 192002: '连接超时', + 192003: '连接断开', + 192004: '协议超时', + 192005: '协议发送失败', + 192006: '请求失败', + // 消息相关 + 107319: 'PIN 数量超限', + 107320: 'PIN 消息不存在', + 107322: '重复 PIN', + 107327: '未开启 PIN 功能', + 189301: '收藏数量超限', + 189302: '收藏不存在', + 189449: '并发操作收藏失败', + // 群相关 + 109432: '没有权限', +} diff --git a/package.json b/package.json index 231ecbb..9a8f25a 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,10 @@ "description": "", "dependencies": { "crypto-js": "^4.2.0", + "@xkit-yx/im-store-v2": "^0.8.3", + "@xkit-yx/utils": "^0.7.2", + "mobx": "^6.6.1", + "nim-web-sdk-ng": "^10.9.30", "dayjs": "^1.11.18", "js-base64": "^3.7.8", "js-md5": "^0.8.3", diff --git a/pages.json b/pages.json index ef24f6e..fa5d51e 100644 --- a/pages.json +++ b/pages.json @@ -208,6 +208,47 @@ } } }, + { + "path": "patientInfo/patientInfo", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "患者信息", + "app": { + "bounce": "none" + } + } + }, + + { + "path": "myAnswer/myAnswer", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "我的意见", + "app": { + "bounce": "none" + } + } + }, + { + "path": "consultDetail/consultDetail", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "uni-app分页", + "app": { + "bounce": "none" + } + } + }, + { + "path": "consult/consult", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "uni-app分页", + "app": { + "bounce": "none" + } + } + }, { "path": "searchNews/searchNews", "style": { @@ -361,6 +402,7 @@ } } }, + { "path": "selectPatient/selectPatient", "style": { @@ -394,6 +436,16 @@ } } }, + { + "path": "liveReplay/liveReplay", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "uni-app分页", + "app": { + "bounce": "none" + } + } + }, { "path": "videoDetail/videoDetail", "style": { @@ -885,12 +937,23 @@ { "path": "feedback/feedback-logoff", "style": { - "navigationStyle": "custom", + "navigationStyle": "custom", "navigationBarTitleText": "注销账户", "app": { "bounce": "none" } } + }, + { + "path": "reply/reply", + "style": { + "navigationStyle": "custom", + "navigationBarRightButton":{ "hide": true}, + "navigationBarTitleText": "回复", + "app": { + "bounce": "none" + } + } } @@ -970,6 +1033,32 @@ } } ] + }, + { + "root": "pages_chat", + "pages": [ + { + "path": "chat/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "聊天页", + "app": { + "bounce": "none" + } + } + }, + { + "path": "groupMessage/groupMessage", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "uni-app分页", + "app": { + "bounce": "none" + } + } + } + + ] }], "globalStyle": { "navigationBarTextStyle": "black", diff --git a/pages/index/index.vue b/pages/index/index.vue index 62ae857..d6de956 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -56,7 +56,7 @@ - + {{ item.text }} @@ -254,6 +254,7 @@ import sign from "@/static/home_qiandao_icon.png" import signImg from "@/static/sign_in_bng_big.png" import dayjs from 'dayjs' + //import imLogin from "@/utils/IM.js" const expertDetail=reactive({}) const showSign=ref(false) const signInfo=reactive({ @@ -446,28 +447,31 @@ const onReplayClick = (item) => { console.log('点击精彩回放:', item); navTo({ - url: '/pages_course/course_detail/course_detail?id=' + item.id + url: '/pages_app/videoDetail/videoDetail?id='+item.id }) }; // 网格点击事件 - const onClick = (index) => { + const onClick = (index,name) => { + console.log(name) console.log('点击了第' + index + '个'); let url='' - if(index==0){ + if(name=='我的患者'){ url='/pages_app/patientMsg/patientMsg' - }else if(index==1){ + }else if(name=='肝胆视频'){ url='/pages_app/video/video' - }else if(index==2){ + }else if(name=='公益咨询'){ url='/pages_app/consult/consult' - }else if(index==3){ + }else if(name=='指南杂志'){ url='/pages_app/zhinan/zhinan' - }else if(index==4){ - url='/pages_app/news/news' - }else if(index==5){ + }else if(name=='肝胆新闻'){ + url='/pages_app/newsList/newsList' + }else if(name=='肝胆课件'){ url='/pages_app/ppt/ppt' - }else if(index==6){ + }else if(name=='精品课'){ url='/pages_course/course/course' + }else if(name=='积分商城'){ + url='/pages_goods/pointMall/pointMall' }else{ url='/pages_app/myApplication/myApplication' } @@ -831,16 +835,18 @@ // 页面加载 onLoad(() => { console.log('首页加载完成'); - }); - - // 页面显示 - onShow(() => { - console.log('首页显示'); // 获取首页数据 getHomeData(); // 页面加载完成后测试tabbar功能 testTabbar(); + }); + + // 页面显示 + onShow(() => { + //imLogin(); + console.log('首页显示'); + // 5秒后获取tabbar状态 setTimeout(() => { getTabbarStatus(); diff --git a/pages/live/live.vue b/pages/live/live.vue index 6c745aa..f6b9119 100644 --- a/pages/live/live.vue +++ b/pages/live/live.vue @@ -13,7 +13,7 @@ - + 会议回放 @@ -39,7 +39,7 @@ {{ group.monthYear }} - + @@ -167,7 +167,7 @@ import timeImg from "@/static/play_long.png" import docUrl from "@/utils/docUrl" import dayjs from 'dayjs' - + import navTo from '@/utils/navTo.js'; // 弹窗状态 const isTimePopupShow = ref(false); const isLocationPopupShow = ref(false); @@ -230,6 +230,12 @@ monthList.value = months; console.log('生成的月份列表:', monthList.value); }; + const goDetail=(item)=>{ + const encoded = encodeURIComponent(item.path); + uni.navigateTo({ + url: `/pages_app/webview/webview?url=${encoded}` + }); + } // 省份数据 const provinceList = ref([ { code: '', name: '全国' }, @@ -268,7 +274,11 @@ { code: '香港', name: '香港特别行政区' }, { code: '澳门', name: '澳门特别行政区' } ]); - + const goLiveReplay = () => { + navTo({ + url: '/pages_app/liveReplay/liveReplay' + }); + }; // 会议列表数据 const meetingList = ref([]); @@ -869,7 +879,7 @@ $shadow: 0 2px 8px rgba(0,0,0,0.1); margin-top: 231rpx; position: relative; background-color: $white; - + box-sizing: border-box; width: 100%; height: calc(100vh - 433rpx); padding:40rpx; @@ -932,6 +942,7 @@ $shadow: 0 2px 8px rgba(0,0,0,0.1); display: block; white-space: nowrap; overflow: hidden; + width:106rpx; text-overflow: ellipsis; word-break: break-all; } diff --git a/pages_app/consult/consult.vue b/pages_app/consult/consult.vue new file mode 100644 index 0000000..a88288a --- /dev/null +++ b/pages_app/consult/consult.vue @@ -0,0 +1,479 @@ + + + + + + 新的咨询 + 我已回答 + + + + + + + + {{ item.maskName }} + {{ item.date }} + + + {{ item.content }} + + + {{ item.answer_num }}位医生已回答 + {{ item.tag }} + + + + 问题详情 + {{ item.tag }} + + + + + 加载中... + 没有更多了 + + + + + 快速问医生 + 多对一解惑 + + + + + + + + + diff --git a/pages_app/consultDetail/consultDetail.vue b/pages_app/consultDetail/consultDetail.vue new file mode 100644 index 0000000..0187cac --- /dev/null +++ b/pages_app/consultDetail/consultDetail.vue @@ -0,0 +1,575 @@ + + + + + + + + + + + + {{ userInfo.name }} + ({{ userInfo.gender }} {{ userInfo.age }}岁) + + + + + + + + + + + {{ questionInfo.diseaseTag }} + + {{ questionInfo.date }} + + + + + {{ questionInfo.diseaseDescribe }} + + + + + + + + + + + + + + 医生回答 + + + + + + + {{ item.realname }} + + {{ item.hospital }} + {{ item.create_date }} + + + + + + {{ item.note }} + + + + + + + + + + + + + + + + + + + + + 特别声明: + 答案仅为医生个人经验或建议分享,不能视为诊断依据,如有诊疗需求,请务必前往正规医院就诊。 + + + + + {{status==1?'我要编辑':'我要回答'}} + + + + + + + + diff --git a/pages_app/feedback/feedback.vue b/pages_app/feedback/feedback.vue index d05a25c..e4387c4 100644 --- a/pages_app/feedback/feedback.vue +++ b/pages_app/feedback/feedback.vue @@ -1,15 +1,9 @@ - - + - - - ‹ - - 意见反馈 - + @@ -41,7 +35,7 @@ import { ref } from 'vue'; import api from '@/api/api'; const feedbackText = ref(''); - + import navBar from "@/components/navBar/navBar.vue" // 返回上一页 const goBack = () => { uni.navigateBack(); diff --git a/pages_app/idcardAuth/bankCardList.vue b/pages_app/idcardAuth/bankCardList.vue index 47c3041..0e33655 100644 --- a/pages_app/idcardAuth/bankCardList.vue +++ b/pages_app/idcardAuth/bankCardList.vue @@ -29,6 +29,7 @@ + @@ -39,6 +40,7 @@ import { ref, onMounted } from 'vue'; import navTo from '@/utils/navTo'; import api from '@/api/api'; +import empty from "@/components/empty/empty.vue" const bankCards = ref([]); // 银行卡数据 diff --git a/pages_app/liveReplay/liveReplay.vue b/pages_app/liveReplay/liveReplay.vue new file mode 100644 index 0000000..1cc2786 --- /dev/null +++ b/pages_app/liveReplay/liveReplay.vue @@ -0,0 +1,1124 @@ + + + + + + + 会议时间 + + + + + 全国会议 + + + + + + + + + + + + + + {{ group.monthYear }} + + + + + {{ formatDay(item.begin_date) }} + + + + + {{ item.title }} + + + + + + + {{ item.status }} + + + + + + + + {{ formatDate(item.begin_date,'YYYY.MM.DD')}} + + + + {{ item.location }} + + + + + + + + + + + + + + 暂无会议数据 + + + + + + + 加载中... + + + 上拉加载更多 + + + 没有更多数据了 + + + + + + + + + + + {{ month.label }} + + + + + + + + + + {{ location.name }} + + + + + + + + + + 过往会议 + + + + + + + + diff --git a/pages_app/myAnswer/myAnswer.vue b/pages_app/myAnswer/myAnswer.vue new file mode 100644 index 0000000..8fd0ad2 --- /dev/null +++ b/pages_app/myAnswer/myAnswer.vue @@ -0,0 +1,273 @@ + + + + + + + + 我的意见 * + + + + + + + + + 相关图片 + 可以用部分科普或文献来协助回答问题,最多6张 + + + + × + + + + + + + + + + + + 提交 + + + + + + + + + diff --git a/pages_app/myApplication/myApplication.vue b/pages_app/myApplication/myApplication.vue index 06320b9..fd0c92f 100644 --- a/pages_app/myApplication/myApplication.vue +++ b/pages_app/myApplication/myApplication.vue @@ -83,8 +83,9 @@ @@ -182,7 +235,7 @@ const onSave = () => { width:100%; color: #ffffff; - text-aviewgn: center; + text-align: center; .banner-title-small { font-size: 26rpx; @@ -279,10 +332,10 @@ const onSave = () => { font-weight:bold; letter-spacing: 8rpx; flex-direction: column; - text-aviewgn: center; + text-align: center; font-size: 40rpx; color: #1e88e5; - viewne-height: 1.6; + line-height: 1.6; text{ text-align: center; } @@ -293,7 +346,7 @@ const onSave = () => { } .contact-qr { display: flex; - aviewgn-items: center; + align-items: center; justify-content: space-between; gap: 20rpx; margin-top: 30rpx; @@ -305,12 +358,12 @@ const onSave = () => { color: #ffffff; display: flex; - aviewgn-items: center; + align-items: center; justify-content: space-between; .contact-text { white-space: pre-viewne; font-size: 26rpx; - viewne-height: 1.5; + line-height: 1.5; } .arrow { font-size: 36rpx; diff --git a/pages_app/patientInfo/patientInfo.vue b/pages_app/patientInfo/patientInfo.vue new file mode 100644 index 0000000..1dceaaa --- /dev/null +++ b/pages_app/patientInfo/patientInfo.vue @@ -0,0 +1,269 @@ + + + + + + + + + + 基本资料 + + + 病史信息 + + + + + + + + + 姓名 + {{ patientInfo.name || '提**' }} + + + 性别 + {{ patientInfo.gender || '男' }} + + + 年龄 + {{ patientInfo.age || '15' }} + + + 地址 + {{ patientInfo.address || '北京市东城区' }} + + + 肝硬化或肝癌家族史 + {{ patientInfo.familyHistory || '无' }} + + + + + + + 既往病史 + 暂无 + + + 过敏史 + 暂无 + + + 手术史 + 暂无 + + + 用药史 + 暂无 + + + + + + + + + diff --git a/pages_app/patientMsg/conversation-list/conversation-item-isRead.vue b/pages_app/patientMsg/conversation-list/conversation-item-isRead.vue new file mode 100644 index 0000000..eccd6b0 --- /dev/null +++ b/pages_app/patientMsg/conversation-list/conversation-item-isRead.vue @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + diff --git a/pages_app/patientMsg/conversation-list/conversation-item-last-msg-content.vue b/pages_app/patientMsg/conversation-list/conversation-item-last-msg-content.vue new file mode 100644 index 0000000..ef4c2da --- /dev/null +++ b/pages_app/patientMsg/conversation-list/conversation-item-last-msg-content.vue @@ -0,0 +1,266 @@ + + + + {{ t('recall') }} + + + {{ t('conversationNotificationText') }} + + + {{ t('conversationSendFailText') }} + + + + {{ translateMsg('fileMsgText') }} + + + {{ translateMsg('imgMsgText') }} + + + {{ props.lastMessage.text || translateMsg('customMsgText') }} + + + {{ translateMsg('audioMsgText') }} + + + {{ translateMsg('callMsgText') }} + + + {{ translateMsg('geoMsgText') }} + + + + {{ translateMsg('robotMsgText') }} + + + {{ translateMsg('tipMsgText') }} + + + {{ translateMsg('videoMsgText') }} + + + + + {{ item.value }} + + + + + + + + + + + + + + diff --git a/pages_app/patientMsg/conversation-list/conversation-item.vue b/pages_app/patientMsg/conversation-list/conversation-item.vue new file mode 100644 index 0000000..09506e9 --- /dev/null +++ b/pages_app/patientMsg/conversation-list/conversation-item.vue @@ -0,0 +1,496 @@ + + + + + + + + {{ unread }} + + + + + + + + + + + + + {{ sessionName }} + + {{ date }} + + + + + {{ '[' + t('someoneText') + '@' + t('meText') + ']' }} + + + + + + + + + + + + + + + + + handleClick(action.type)" + > + {{ action.name }} + + + + + + + + diff --git a/pages_app/patientMsg/conversation-list/index.vue b/pages_app/patientMsg/conversation-list/index.vue new file mode 100644 index 0000000..bbe901f --- /dev/null +++ b/pages_app/patientMsg/conversation-list/index.vue @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + {{ t('addFriendText') }} + + + + {{ t('createTeamText') }} + + + + {{ t('createDiscussionText') }} + + + + + + + + + + + + + + + {{ t('searchText') }} + + + + + + + + + {{ t('securityTipText') }} + + + + + + + + {{ t('searchText') }} + + + + + + + + + + + + + diff --git a/pages_app/patientMsg/patientMsg.vue b/pages_app/patientMsg/patientMsg.vue index 1af7678..258289b 100644 --- a/pages_app/patientMsg/patientMsg.vue +++ b/pages_app/patientMsg/patientMsg.vue @@ -28,8 +28,9 @@ :refresher-triggered="isRefreshing" @refresherrefresh="onRefresh" > + - + - + @@ -141,7 +142,10 @@ - {{ item.note }} + + {{ item.note }} + {{ item.patientname }} + @@ -207,7 +211,7 @@ @@ -1081,7 +1094,11 @@ font-size: 30rpx; color:#333; } - + .right-content .name{ + margin-top: 30rpx; + font-size: 28rpx; + color:#8B2316; + } /* 加载状态样式 */ .load-more { display: flex; diff --git a/pages_app/patientSetting/patientSetting.vue b/pages_app/patientSetting/patientSetting.vue index fe76668..4017ab7 100644 --- a/pages_app/patientSetting/patientSetting.vue +++ b/pages_app/patientSetting/patientSetting.vue @@ -148,6 +148,7 @@ &:last-child{ border-bottom: none; } .cell-left{ font-size: 32rpx; + white-space:nowrap; color: #333; } .cell-right{ diff --git a/pages_app/reply/reply.vue b/pages_app/reply/reply.vue new file mode 100644 index 0000000..fc9e9ed --- /dev/null +++ b/pages_app/reply/reply.vue @@ -0,0 +1,397 @@ + + + + + + + 确定 + + + + + + + + + + + + + + + + diff --git a/pages_app/schedule/schedule.vue b/pages_app/schedule/schedule.vue index a9bc0e8..699b35e 100644 --- a/pages_app/schedule/schedule.vue +++ b/pages_app/schedule/schedule.vue @@ -102,11 +102,13 @@ diff --git a/pages_chat/chat/index.vue b/pages_chat/chat/index.vue new file mode 100644 index 0000000..cc64e8a --- /dev/null +++ b/pages_chat/chat/index.vue @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message-read-info.vue b/pages_chat/chat/message-read-info.vue new file mode 100644 index 0000000..edf79e6 --- /dev/null +++ b/pages_chat/chat/message-read-info.vue @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + {{ `${t('readText')}(${readCount})` }} + + + {{ `${t('unreadText')}(${unReadCount})` }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/face.vue b/pages_chat/chat/message/face.vue new file mode 100644 index 0000000..4de802d --- /dev/null +++ b/pages_chat/chat/message/face.vue @@ -0,0 +1,140 @@ + + + + + { + handleEmojiClick({ key, type: emojiMap[key] }) + } + " + v-for="key in emojiRow" + :key="key" + class="msg-face-item" + > + + + + + + + + + + + + + + {{ t('sendText') }} + + + + + + + diff --git a/pages_chat/chat/message/mention-member-list.vue b/pages_chat/chat/message/mention-member-list.vue new file mode 100644 index 0000000..48bb1a7 --- /dev/null +++ b/pages_chat/chat/message/mention-member-list.vue @@ -0,0 +1,293 @@ + + + + + + + {{ t('chooseMentionText') }} + + + {{ teamExt }} + + handleItemClick({ + accountId: AT_ALL_ACCOUNT, + appellation: t('teamAll'), + }) + " + > + + + {{ t('teamAll') }} + + + handleItemClick(member)" + > + + + + + + {{ t('teamOwner') }} + + + {{ t('teamManager') }} + + + + + + + + + + diff --git a/pages_chat/chat/message/message-audio.vue b/pages_chat/chat/message/message-audio.vue new file mode 100644 index 0000000..b773bf6 --- /dev/null +++ b/pages_chat/chat/message/message-audio.vue @@ -0,0 +1,242 @@ + + + {{ duration }}s + + + + + + + + + diff --git a/pages_chat/chat/message/message-avatar.vue b/pages_chat/chat/message/message-avatar.vue new file mode 100644 index 0000000..e85ec84 --- /dev/null +++ b/pages_chat/chat/message/message-avatar.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/pages_chat/chat/message/message-bubble.vue b/pages_chat/chat/message/message-bubble.vue new file mode 100644 index 0000000..ccd1637 --- /dev/null +++ b/pages_chat/chat/message/message-bubble.vue @@ -0,0 +1,883 @@ + + + + + + + {{ t('copyText') }} + + + + {{ t('replyText') }} + + + + {{ t('forwardText') }} + + + + + {{ + props.msg.pinState ? t('unpinText') : t('pinText') + }} + + + + {{ t('deleteText') }} + + + + {{ t('collectionText') }} + + + + + + + {{ t('deleteText') }} + + + + + + + + + + + + + + + + {{ t('copyText') }} + + + + {{ t('deleteText') }} + + + + + + + + + + + + + ! + + + + + + + {{ t('copyText') }} + + + + {{ t('deleteText') }} + + + + + + + + + + + {{ t('sendFailWithInBlackText') }} + + + {{ t('sendFailWithDeleteText') }} + {{ + t('friendVerificationText') + }} + + + + + + + + {{ t('copyText') }} + + + + {{ t('replyText') }} + + + + {{ t('forwardText') }} + + + + + {{ + props.msg.pinState ? t('unpinText') : t('pinText') + }} + + + + {{ t('deleteText') }} + + + + {{ t('recallText') }} + + + + {{ t('collectionText') }} + + + + + + + {{ t('deleteText') }} + + + + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/message-file.vue b/pages_chat/chat/message/message-file.vue new file mode 100644 index 0000000..08c10ec --- /dev/null +++ b/pages_chat/chat/message/message-file.vue @@ -0,0 +1,167 @@ + + + openInBrowser(downloadUrl)" + > + + + + {{ prefixName }} + {{ suffixName }} + + {{ parseFileSize(size) }} + + + + + + + + + {{ prefixName }} + {{ suffixName }} + + + {{ parseFileSize(size) }} + + + + + + + + diff --git a/pages_chat/chat/message/message-forward-modal.vue b/pages_chat/chat/message/message-forward-modal.vue new file mode 100644 index 0000000..38f925b --- /dev/null +++ b/pages_chat/chat/message/message-forward-modal.vue @@ -0,0 +1,146 @@ + + + + + + {{ (props.forwardToTeamInfo && props.forwardToTeamInfo.name) || '' }} + + + + + + {{ forwardToNick }} + + + + {{ '[' + t('forwardText') + ']' }} + {{ forwardFromNick }} + {{ t('sessionRecordText') }} + + + + + + + + diff --git a/pages_chat/chat/message/message-g2.vue b/pages_chat/chat/message/message-g2.vue new file mode 100644 index 0000000..acd62a1 --- /dev/null +++ b/pages_chat/chat/message/message-g2.vue @@ -0,0 +1,82 @@ + + + + {{ status }} + {{ duration }} + + + + + + diff --git a/pages_chat/chat/message/message-input.vue b/pages_chat/chat/message/message-input.vue new file mode 100644 index 0000000..f0b9784 --- /dev/null +++ b/pages_chat/chat/message/message-input.vue @@ -0,0 +1,1181 @@ + + + + + + + + + | + {{ t('replyText') }} + + + + + : + + {{ t('replyNotFindText') }} + + + + + {{ + replyMsg + ? '[' + REPLY_MSG_TYPE_MAP[replyMsg.messageType] + ']' + : '' + }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ inputText }} + + {{ + isTeamMute ? t('teamMutePlaceholder') : t('chatInputPlaceHolder') + }} + + + + + + {}"> + + + + {}" + > + + + + {}" + > + + handleSendVideoMsg('camera', event)" + > + + + {{ t('shootText') }} + + + handleSendVideoMsg('album', event)" + > + + + {{ t('albumText') }} + + + + + + + {{ t('voiceCallText') }} + + + + + handleCall(2)"> + + + {{ t('videoCallText') }} + + + + + + {{ t('fileText') }} + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/message-item.vue b/pages_chat/chat/message/message-item.vue new file mode 100644 index 0000000..83704b8 --- /dev/null +++ b/pages_chat/chat/message/message-item.vue @@ -0,0 +1,664 @@ + + + + + {{ props.msg.timeValue }} + + + + + + {{ t('recall2') }} + { + handleReeditMsg(props.msg) + } + " + > + {{ t('reeditText') }} + + + + + + + + {{ t('you') + t('recall') }} + + + + + + + + {{ appellation }} + + + + {{ !props.msg.isSelf ? t('recall2') : `${t('you') + t('recall')}` }} + + + + + + + + + + {{ appellation }} + + + + + + + + + + + + + + {{ appellation }} + + + { + //@ts-ignore + handleImageTouch(props.msg.attachment?.url) + } + " + > + + + + + + + + + + + + {{ appellation }} + + + handleVideoTouch(props.msg)" + > + + + + + + + + + + + + + + + {{ appellation }} + + + + + + + + + + + + {{ appellation }} + + + + + + + + + + + + + {{ appellation }} + + + + + + + + + + + + + + {{ appellation }} + + + [{{ t('unknowMsgText') }}] + + + + + + {{ `${t('you')}` }} + {{ `${t('pinThisText')}` }} + + + + + + + diff --git a/pages_chat/chat/message/message-list.vue b/pages_chat/chat/message/message-list.vue new file mode 100644 index 0000000..ea219f6 --- /dev/null +++ b/pages_chat/chat/message/message-list.vue @@ -0,0 +1,222 @@ + + + + + + {{ t('viewMoreText') }} + + {{ t('noMoreText') }} + + + + + + + + + + + diff --git a/pages_chat/chat/message/message-notification.vue b/pages_chat/chat/message/message-notification.vue new file mode 100644 index 0000000..4a55023 --- /dev/null +++ b/pages_chat/chat/message/message-notification.vue @@ -0,0 +1,223 @@ + + + {{ notificationContent }} + + + + + + diff --git a/pages_chat/chat/message/message-pin-card.vue b/pages_chat/chat/message/message-pin-card.vue new file mode 100644 index 0000000..e7150e8 --- /dev/null +++ b/pages_chat/chat/message/message-pin-card.vue @@ -0,0 +1,382 @@ + + + + + + + + + + + + + {{ timeFormat() }} + + + + + + + + + + + + { + handleImageTouch(props.msg.attachment.url) + } + " + > + + + + + handleVideoTouch(props.msg)" + > + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/message-read.vue b/pages_chat/chat/message/message-read.vue new file mode 100644 index 0000000..bb78fb0 --- /dev/null +++ b/pages_chat/chat/message/message-read.vue @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/message-reply.vue b/pages_chat/chat/message/message-reply.vue new file mode 100644 index 0000000..aef0b51 --- /dev/null +++ b/pages_chat/chat/message/message-reply.vue @@ -0,0 +1,334 @@ + + + + + + {{ t('replyNotFindText') }} + + + + | + + + + : + + + + + {{ t('fileMsgTitleText') }} + + openInBrowser(downloadUrl)" + > + {{ t('fileMsgTitleText') }} + + + + {{ '[' + REPLY_MSG_TYPE_MAP[props.replyMsg.messageType] + ']' }} + + + + + + + + + + + + + + + + + + + {}" + > + + + + + + + + + diff --git a/pages_chat/chat/message/message-section.vue b/pages_chat/chat/message/message-section.vue new file mode 100644 index 0000000..100df25 --- /dev/null +++ b/pages_chat/chat/message/message-section.vue @@ -0,0 +1,80 @@ + + + {{ start + index }} + + + + + + + + diff --git a/pages_chat/chat/message/message-text.vue b/pages_chat/chat/message/message-text.vue new file mode 100644 index 0000000..1d86f68 --- /dev/null +++ b/pages_chat/chat/message/message-text.vue @@ -0,0 +1,86 @@ + + + + + {{ item.value }} + + + + {{ ' ' + item.value + ' ' }} + + + + + + + + {{ item.value }} + + openInBrowser(item.value)" + > + {{ item.value }} + + + + + + + + + diff --git a/pages_chat/chat/message/nav-bar.vue b/pages_chat/chat/message/nav-bar.vue new file mode 100644 index 0000000..253d3e0 --- /dev/null +++ b/pages_chat/chat/message/nav-bar.vue @@ -0,0 +1,87 @@ + + + + + + + + + + {{ title }} + {{ subTitle }} + + + + + + + + + + + + diff --git a/pages_chat/chat/message/p2p-set.vue b/pages_chat/chat/message/p2p-set.vue new file mode 100644 index 0000000..2f16370 --- /dev/null +++ b/pages_chat/chat/message/p2p-set.vue @@ -0,0 +1,279 @@ + + + + + + + + + {{ myNick }} + + + + + + + + + {{ t('pinText') }} + + + + {{ t('sessionMuteText') }} + + + + {{ t('stickTopText') }} + + + + + + + + + + diff --git a/pages_chat/chat/message/pin-in-p2p.vue b/pages_chat/chat/message/pin-in-p2p.vue new file mode 100644 index 0000000..1a26357 --- /dev/null +++ b/pages_chat/chat/message/pin-in-p2p.vue @@ -0,0 +1,105 @@ + + + + + {{ t('pinText') }} + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/pin-list.vue b/pages_chat/chat/message/pin-list.vue new file mode 100644 index 0000000..7d20ae3 --- /dev/null +++ b/pages_chat/chat/message/pin-list.vue @@ -0,0 +1,116 @@ + + + + + {{ t('pinText') }} + + + + + + + + + + + + + + + + diff --git a/pages_chat/chat/message/voice-panel.vue b/pages_chat/chat/message/voice-panel.vue new file mode 100644 index 0000000..4db15f1 --- /dev/null +++ b/pages_chat/chat/message/voice-panel.vue @@ -0,0 +1,228 @@ + + + {{ t('audioRemindText') }} + + + + + + + + + {{ t('audioBtnText') }} + + + + + + diff --git a/pages_chat/chat/video-play.vue b/pages_chat/chat/video-play.vue new file mode 100644 index 0000000..4cda004 --- /dev/null +++ b/pages_chat/chat/video-play.vue @@ -0,0 +1,60 @@ + + + /> + + + + + + + + diff --git a/pages_chat/groupMessage/groupMessage.vue b/pages_chat/groupMessage/groupMessage.vue new file mode 100644 index 0000000..3c8ea3f --- /dev/null +++ b/pages_chat/groupMessage/groupMessage.vue @@ -0,0 +1,170 @@ + + + + + + + + 群发消息 + + + + + {{ currentTime }} + + + + + {{ patientCount }}位患者: + + × + + + + {{ patientName }} + {{ patientPhone }} + + + 再发一条 + + + + + + + + + 群发消息 + + + + + + + diff --git a/static/icon_book_collect_nor.png b/static/icon_book_collect_nor.png new file mode 100644 index 0000000..55f5fc4 Binary files /dev/null and b/static/icon_book_collect_nor.png differ diff --git a/static/icon_book_collect_sel.png b/static/icon_book_collect_sel.png new file mode 100644 index 0000000..12150b6 Binary files /dev/null and b/static/icon_book_collect_sel.png differ diff --git a/static/iv_jiwangshi.png b/static/iv_jiwangshi.png new file mode 100644 index 0000000..67ef2f7 Binary files /dev/null and b/static/iv_jiwangshi.png differ diff --git a/static/nor_news_yes.png b/static/nor_news_yes.png new file mode 100644 index 0000000..243611a Binary files /dev/null and b/static/nor_news_yes.png differ diff --git a/store.js b/store.js new file mode 100644 index 0000000..25c5f67 --- /dev/null +++ b/store.js @@ -0,0 +1,9234 @@ +import { makeAutoObservable } from 'mobx' +import { logDebug, EventTracking } from '@xkit-yx/utils' + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) +} + +function __rest(s, e) { + var t = {} + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p] + if (s != null && typeof Object.getOwnPropertySymbols === 'function') + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if ( + e.indexOf(p[i]) < 0 && + Object.prototype.propertyIsEnumerable.call(s, p[i]) + ) + t[p[i]] = s[p[i]] + } + return t +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} + +function __generator(thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while ((g && ((g = 0), op[0] && (_ = 0)), _)) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y['return'] + : op[0] + ? y['throw'] || ((t = y['return']) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if ( + !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0 + continue + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } +} + +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next: function () { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError( + s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.' + ) +} + +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error: error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) +} + +typeof SuppressedError === 'function' + ? SuppressedError + : function (error, suppressed, message) { + var e = new Error(message) + return ( + (e.name = 'SuppressedError'), + (e.error = error), + (e.suppressed = suppressed), + e + ) + } + +/**Mobx 可观察对象,负责连接的子 store */ +var ConnectStore = /** @class */ (function () { + function ConnectStore(rootStore, nim, localOptions) { + this.rootStore = rootStore + this.nim = nim + this.localOptions = localOptions + this.connectStatus = 3 + this.loginStatus = 0 + this.logger = null + makeAutoObservable(this) + this._onLoginStatus = this._onLoginStatus.bind(this) + this._onLoginFailed = this._onLoginFailed.bind(this) + this._onKickedOffline = this._onKickedOffline.bind(this) + this._onLoginClientChanged = this._onLoginClientChanged.bind(this) + this._onConnectStatus = this._onConnectStatus.bind(this) + this._onDisconnected = this._onDisconnected.bind(this) + this._onConnectFailed = this._onConnectFailed.bind(this) + this._onDataSync = this._onDataSync.bind(this) + this.logger = rootStore.logger + /** 登录状态变化 */ + nim.V2NIMLoginService.on('onLoginStatus', this._onLoginStatus) + /** 登录失败 */ + nim.V2NIMLoginService.on('onLoginFailed', this._onLoginFailed) + /** 被踢下线 */ + nim.V2NIMLoginService.on('onKickedOffline', this._onKickedOffline) + /** 多端登录回调 */ + nim.V2NIMLoginService.on('onLoginClientChanged', this._onLoginClientChanged) + /** 连接状态变化 */ + nim.V2NIMLoginService.on('onConnectStatus', this._onConnectStatus) + /** 登录连接断开 */ + nim.V2NIMLoginService.on('onDisconnected', this._onDisconnected) + /** 登录连接失败 */ + nim.V2NIMLoginService.on('onConnectFailed', this._onConnectFailed) + /** 数据同步 */ + nim.V2NIMLoginService.on('onDataSync', this._onDataSync) + } + /** 销毁 ConnectStore,并取消相关的监听 */ + ConnectStore.prototype.destroy = function () { + this.nim.V2NIMLoginService.off('onLoginStatus', this._onLoginStatus) + this.nim.V2NIMLoginService.off('onLoginFailed', this._onLoginFailed) + this.nim.V2NIMLoginService.off('onKickedOffline', this._onKickedOffline) + this.nim.V2NIMLoginService.off( + 'onLoginClientChanged', + this._onLoginClientChanged + ) + this.nim.V2NIMLoginService.off('onConnectStatus', this._onConnectStatus) + this.nim.V2NIMLoginService.off('onDisconnected', this._onDisconnected) + this.nim.V2NIMLoginService.off('onConnectFailed', this._onConnectFailed) + this.nim.V2NIMLoginService.off('onDataSync', this._onDataSync) + } + ConnectStore.prototype._onLoginStatus = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onLoginStatus', e) + this.loginStatus = e + } + ConnectStore.prototype._onLoginFailed = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onLoginFailed', e) + } + ConnectStore.prototype._onKickedOffline = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onKickedOffline', e) + } + ConnectStore.prototype._onLoginClientChanged = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onLoginClientChanged', e) + } + ConnectStore.prototype._onConnectStatus = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onConnectStatus', e) + this.connectStatus = e + // SDK 暂不支持自定义推送相关 + // if (e === V2NIMConnectStatus.V2NIM_CONNECT_STATUS_CONNECTED) { + // // 重连时需要重置其他人的登录状态 + // this.rootStore.eventStore.stateMap.clear() + // } + // 同步完成之前需先清理下上次的在线离线状态,避免断开网络 好友退出登录 联网查看好友状态不对。只有在线离线需要处理,因为其他的都会在断网重连后触发其他事件,就在线离线不会触发 + // 注意这里必须同步前重置,否则会导致数据同步时的状态丢失 + if ( + e === 1 /* V2NIMConst.V2NIMConnectStatus.V2NIM_CONNECT_STATUS_CONNECTED */ + ) { + this.rootStore.subscriptionStore.resetState() + } + } + ConnectStore.prototype._onDisconnected = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onDisconnected', e) + } + ConnectStore.prototype._onConnectFailed = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onConnectFailed', e) + } + ConnectStore.prototype._onDataSync = function (type, V2NIMDataSyncState) { + var _a, _b, _c, _d + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onDataSync', type, V2NIMDataSyncState) + // 获取个人信息 + this.rootStore.userStore.getMyUserInfoActive() + // 获取黑名单列表 + this.rootStore.relationStore.getBlockListActive() + // 获取P2P免打扰列表 + this.rootStore.relationStore.getP2PMuteListActive() + if ( + (_b = this.rootStore.sdkOptions) === null || _b === void 0 + ? void 0 + : _b.enableV2CloudConversation + ) { + // 获取云端会话列表 + ;(_c = this.rootStore.conversationStore) === null || _c === void 0 + ? void 0 + : _c.getConversationListActive( + 0, + this.localOptions.conversationLimit || 100 + ) + } else { + // 获取本地会话列表 + ;(_d = this.rootStore.localConversationStore) === null || _d === void 0 + ? void 0 + : _d.getConversationListActive( + 0, + this.localOptions.conversationLimit || 100 + ) + } + // 获取群组 + this.rootStore.teamStore.getJoinedTeamListActive() + // 获取好友列表 + this.rootStore.friendStore.getFriendListActive() + // 获取好友申请,先拉一页100条 + this.rootStore.friendStore.getAddApplicationListActive({ + status: [], + offset: 0, + limit: 100, + }) + // 获取群组申请,先拉一页100条 + this.rootStore.teamStore.getTeamJoinActionInfoListActive({ + offset: 0, + limit: 100, + }) + // 获取 AI 机器人 + if (this.localOptions.aiVisible) { + this.rootStore.aiUserStore.getAIUserListActive() + } + } + return ConnectStore +})() + +/**Mobx 可观察对象,负责管理好友信息的子 store */ +var FriendStore = /** @class */ (function () { + function FriendStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.friends = new Map() + this.logger = null + makeAutoObservable(this) + this._onFriendAdded = this._onFriendAdded.bind(this) + this._onFriendDeleted = this._onFriendDeleted.bind(this) + this._onFriendAddApplication = this._onFriendAddApplication.bind(this) + this._onFriendAddRejected = this._onFriendAddRejected.bind(this) + this._onFriendInfoChanged = this._onFriendInfoChanged.bind(this) + this.logger = rootStore.logger + nim.V2NIMFriendService.on('onFriendAdded', this._onFriendAdded) + nim.V2NIMFriendService.on('onFriendDeleted', this._onFriendDeleted) + /** 申请添加好友的相关信息,其他端向本端发送好友申请,会触发该事件,多端登录情况下也会触发 */ + nim.V2NIMFriendService.on( + 'onFriendAddApplication', + this._onFriendAddApplication + ) + /** 对端拒绝本端好友申请,本端会触发该事件 */ + nim.V2NIMFriendService.on('onFriendAddRejected', this._onFriendAddRejected) + /** 好友信息更新回调,返回变更的好友信息,包括本端直接更新的好友信息和其他端同步更新的好友信息 */ + nim.V2NIMFriendService.on('onFriendInfoChanged', this._onFriendInfoChanged) + } + FriendStore.prototype.resetState = function () { + this.friends.clear() + } + /** + * 销毁FriendStore,会取消好友事件监听 + */ + FriendStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMFriendService.off('onFriendAdded', this._onFriendAdded) + this.nim.V2NIMFriendService.off('onFriendDeleted', this._onFriendDeleted) + this.nim.V2NIMFriendService.off( + 'onFriendAddApplication', + this._onFriendAddApplication + ) + this.nim.V2NIMFriendService.off( + 'onFriendAddRejected', + this._onFriendAddRejected + ) + this.nim.V2NIMFriendService.off( + 'onFriendInfoChanged', + this._onFriendInfoChanged + ) + } + /** + * 查询好友列表 + */ + FriendStore.prototype.getFriendListActive = function () { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var friends, error_1 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getFriendListActive') + return [4 /*yield*/, this.nim.V2NIMFriendService.getFriendList()] + case 1: + friends = _d.sent() + this.addFriend(friends) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getFriendListActive success', friends) + return [2 /*return*/, friends] + case 2: + error_1 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getFriendListActive failed: ', error_1) + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 根据Id 查询好友信息 + */ + FriendStore.prototype.getFriendByIdsActive = function (ids) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var friends, error_2 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getFriendByIdsActive', ids) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.getFriendByIds(ids), + ] + case 1: + friends = _d.sent() + this.addFriend(friends) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getFriendByIdsActive success', friends) + return [2 /*return*/, friends] + case 2: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getFriendByIdsActive failed: ', error_2) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取申请添加好友列表通知 + * @param options V2NIMFriendAddApplicationQueryOption + */ + FriendStore.prototype.getAddApplicationListActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_3 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getAddApplicationListActive') + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.getAddApplicationList(options), + ] + case 1: + res = _d.sent() + this.rootStore.sysMsgStore.addFriendApplyMsg(res.infos) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getAddApplicationListActive success', res) + return [2 /*return*/, res] + case 2: + error_3 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getAddApplicationListActive failed: ', error_3) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 添加好友申请 + * @param accountId 账号 + * @param params 添加好友的配置参数 + */ + FriendStore.prototype.addFriendActive = function (accountId, params) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('addFriendActive', accountId) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.addFriend(accountId, params), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('addFriendActive success', accountId, params) + return [3 /*break*/, 3] + case 2: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('addFriendActive failed: ', accountId, params, error_4) + throw error_4 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 接受好友申请 + * @param application 申请添加好友的相关信息 + */ + FriendStore.prototype.acceptAddApplicationActive = function (application) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('acceptAddApplicationActive', application) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.acceptAddApplication(application), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('acceptAddApplicationActive success', application) + return [3 /*break*/, 3] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'acceptAddApplicationActive failed: ', + application, + error_5 + ) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 拒绝好友申请 + * @param application 申请添加好友的相关信息 + * @param postscript 拒绝好友申请的附言 + */ + FriendStore.prototype.rejectAddApplicationActive = function ( + application, + postscript + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_6 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('rejectAddApplicationActive', application, postscript) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.rejectAddApplication( + application, + postscript + ), + // this.rootStore.sysMsgStore.updateFriendApplyMsg([ + // { + // ...application, + // status: + // V2NIMConst.V2NIMFriendAddApplicationStatus + // .V2NIM_FRIEND_ADD_APPLICATION_STATUS_REJECTED, + // isRead: true, + // }, + // ]) + ] + case 1: + _d.sent() + // this.rootStore.sysMsgStore.updateFriendApplyMsg([ + // { + // ...application, + // status: + // V2NIMConst.V2NIMFriendAddApplicationStatus + // .V2NIM_FRIEND_ADD_APPLICATION_STATUS_REJECTED, + // isRead: true, + // }, + // ]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'rejectFriendApplyActive success', + application, + postscript + ) + return [3 /*break*/, 3] + case 2: + error_6 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'rejectFriendApplyActive failed: ', + application, + postscript, + error_6 + ) + throw error_6 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 删除好友 + * @param accountId 账号 + */ + FriendStore.prototype.deleteFriendActive = function (accountId) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_7 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('deleteFriendActive', accountId) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.deleteFriend(accountId, { + deleteAlias: true, + }), + ] + case 1: + _d.sent() + this.removeFriend([accountId]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('deleteFriendActive success', accountId) + return [3 /*break*/, 3] + case 2: + error_7 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('deleteFriendActive failed: ', accountId, error_7) + throw error_7 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 更新好友信息 + * @param accountId 账号 + * @param params 设置好友信息的配置参数。 + */ + FriendStore.prototype.setFriendInfoActive = function (accountId, params) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_8 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('setFriendInfoActive', accountId, params) + return [ + 4 /*yield*/, + this.nim.V2NIMFriendService.setFriendInfo(accountId, params), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('setFriendInfoActive success', accountId, params) + return [3 /*break*/, 3] + case 2: + error_8 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'setFriendInfoActive failed: ', + accountId, + params, + error_8 + ) + throw error_8 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 内存中增加好友 + * @param data - 好友数组 + */ + FriendStore.prototype.addFriend = function (data) { + var _this = this + data + .filter(function (item) { + return !!item.accountId + }) + .forEach(function (item) { + var oldFriend = _this.friends.get(item.accountId) + if (!oldFriend) { + _this.friends.set( + item.accountId, + __assign(__assign({}, item), item.userProfile) + ) + // 这里不用再去获取用户信息,sdk返回的好友信息的userProfile 已经包含用户信息了 此时再去拉取用户信息会有性能问题 + // this.rootStore.userStore.getUserActive(item.accountId) + } else { + _this.friends.set( + item.accountId, + __assign(__assign(__assign({}, oldFriend), item), item.userProfile) + ) + } + }) + this.rootStore.userStore.addUsers( + data.map(function (item) { + return __assign(__assign({}, item), item.userProfile) + }) + ) + } + /** + * 内存中删除好友 + * @param data - 好友数组 + */ + FriendStore.prototype.removeFriend = function (accounts) { + var _this = this + accounts.forEach(function (item) { + _this.friends.delete(item) + }) + } + /** + * 监听添加好友 + */ + FriendStore.prototype._onFriendAdded = function (friend) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onFriendAdded', friend) + this.addFriend([friend]) + // 如果存在系统消息,则更新系统消息,这里只能自己是被申请者 + this.rootStore.sysMsgStore.updateFriendApplyMsg([ + { + operatorAccountId: this.rootStore.userStore.myUserInfo.accountId, + applicantAccountId: friend.accountId, + recipientAccountId: this.rootStore.userStore.myUserInfo.accountId, + timestamp: Date.now(), + status: 1 /* V2NIMConst.V2NIMFriendAddApplicationStatus + .V2NIM_FRIEND_ADD_APPLICATION_STATUS_AGREED */, + isRead: true, + read: true, + }, + ]) + } + /** + * 监听删除好友 + */ + FriendStore.prototype._onFriendDeleted = function (accountId) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onFriendDeleted', accountId) + if (accountId) { + this.removeFriend([accountId]) + } + } + /** + * 申请添加好友的相关信息,其他端向本端发送好友申请,会触发该事件 + */ + FriendStore.prototype._onFriendAddApplication = function (application) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onFriendAddApplication', application) + // 多端登录时,本端发送好友申请,多端登录另一端会收到该事件,此时需要过滤,多端登录另一端不需要提醒 + if ( + application.applicantAccountId !== + this.rootStore.userStore.myUserInfo.accountId + ) { + this.rootStore.sysMsgStore.addFriendApplyMsg([application]) + } + } + /** + * 对端拒绝本端好友申请,本端会触发该事件 + */ + FriendStore.prototype._onFriendAddRejected = function (rejection) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onFriendAddRejected', rejection) + // 如果存在系统消息,则更新系统消息 + this.rootStore.sysMsgStore.addFriendApplyMsg([ + __assign(__assign({}, rejection), { isRead: true }), + ]) + } + /** + * 好友信息更新回调,返回变更的好友信息,包括本端直接更新的好友信息和其他端同步更新的好友信息 + */ + FriendStore.prototype._onFriendInfoChanged = function (friend) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onFriendInfoChanged', friend) + this.addFriend([friend]) + } + return FriendStore +})() + +var AT_ALL_ACCOUNT = 'ait_all' +var BE_MENTIONED = 'beMentioned' +var AT_ALL_ACCOUNT_TOSDK = '#%@all@%#' +var HISTORY_LIMIT = 20 +var PIN_CONVERSATION_LIMIT = 20 +var RECALL_TIME = 2 * 60 * 1000 +var AI_MESSAGE_LIMIT = 30 + +var constant = /*#__PURE__*/ Object.freeze({ + __proto__: null, + AT_ALL_ACCOUNT: AT_ALL_ACCOUNT, + BE_MENTIONED: BE_MENTIONED, + AT_ALL_ACCOUNT_TOSDK: AT_ALL_ACCOUNT_TOSDK, + HISTORY_LIMIT: HISTORY_LIMIT, + PIN_CONVERSATION_LIMIT: PIN_CONVERSATION_LIMIT, + RECALL_TIME: RECALL_TIME, + AI_MESSAGE_LIMIT: AI_MESSAGE_LIMIT, +}) + +var name$1 = '@xkit-yx/im-store-v2' +var version$1 = '0.8.2' +var description$1 = '云信即时通讯 store V2 版本' +var license$1 = 'MIT' +var main$1 = 'dist/index.cjs.js' +var module = 'dist/index.esm.js' +var typings = 'dist/types/index.d.ts' +var publishConfig = { + access: 'public', +} +var scripts$1 = { + dev: 'rollup -c --environment DEV', + build: 'rollup -c --environment PROD', +} +var files$1 = ['dist'] +var author$1 = '' +var devDependencies$1 = { + '@rollup/plugin-commonjs': '^17.1.0', + '@rollup/plugin-json': '^4.1.0', + '@rollup/plugin-node-resolve': '^11.2.0', + del: '^6.0.0', + gulp: '^4.0.2', + 'gulp-less': '^5.0.0', + 'gulp-rename': '^2.0.0', + 'gulp-typescript': '^6.0.0-alpha.1', + less: '^4.1.1', + 'less-plugin-npm-import': '^2.1.0', + 'nim-web-sdk-ng': '10.9.10', + postcss: '^8.3.5', + 'postcss-nested': '^5.0.5', + rollup: '^2.39.0', + 'rollup-plugin-postcss': '^4.0.0', + 'rollup-plugin-terser': '^7.0.2', + 'rollup-plugin-typescript2': '^0.31.0', + tslib: '^2.5.0', + typescript: '^4.6.4', +} +var peerDependencies = { + 'nim-web-sdk-ng': '^10.x', +} +var dependencies = { + '@xkit-yx/utils': '^0.7.1', + mobx: '^6.6.1', +} +var packageJson = { + name: name$1, + version: version$1, + description: description$1, + license: license$1, + main: main$1, + module: module, + typings: typings, + publishConfig: publishConfig, + scripts: scripts$1, + files: files$1, + author: author$1, + devDependencies: devDependencies$1, + peerDependencies: peerDependencies, + dependencies: dependencies, +} + +var logger = logDebug({ + level: 'debug', + version: packageJson.version, + appName: packageJson.name, + needStringify: false, +}) +var frequencyControl = function (fn, delay, limit) { + var promiseQueue = [] + var requesting = false + var timer + return function (args) { + var _this = this + return new Promise(function (resolve, reject) { + var p = promiseQueue.find(function (item) { + return item.args === args + }) + if (p) { + p.queue.push({ resolve: resolve, reject: reject }) + } else { + promiseQueue.push({ + args: args, + queue: [{ resolve: resolve, reject: reject }], + }) + } + if (requesting) { + return + } + var handler = function (pq) { + if (!pq.length) { + return + } + requesting = true + fn.call( + // @ts-ignore + _this, + pq.map(function (item) { + return item.args + }) + ) + .then(function (res) { + var _loop_1 = function () { + var p_1 = pq.shift() + if (p_1) { + var _1 = res.find(function (j) { + return j.accountId === p_1.args + }) + p_1.queue.forEach(function (j) { + return j.resolve(_1) + }) + } + } + while (pq.length) { + _loop_1() + } + }) + .catch(function (err) { + while (pq.length) { + var p_2 = pq.shift() + if (p_2) { + p_2.queue.forEach(function (item) { + return item.reject(err) + }) + } + } + }) + .finally(function () { + requesting = false + if (promiseQueue.length) { + handler(promiseQueue.splice(0, limit)) + } + }) + } + // 如果参数数量到达 limit,立即执行 + if (promiseQueue.length >= limit) { + clearTimeout(timer) + handler(promiseQueue.splice(0, limit)) + } else { + clearTimeout(timer) + timer = setTimeout(function () { + handler(promiseQueue.splice(0, limit)) + }, delay) + } + }) + } +} +/** + * 过滤消息,处理了撤回消息的过滤 + */ +var getFilterMsgs = function (msgs, filterFn) { + var filterMsgs = __spreadArray([], __read(msgs), false) + if (filterFn) { + filterMsgs = filterMsgs.filter(filterFn) + } + var res = [] + var filterRecallMsg = [] + var startWithoutRecallMsg + filterMsgs.forEach(function (item) { + // 找到第一条不是撤回消息的消息,记录时间 + if ( + !( + item.messageType === + 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */ && + ['beReCallMsg', 'reCallMsg'].includes(item.recallType || '') + ) && + startWithoutRecallMsg === void 0 + ) { + startWithoutRecallMsg = item.createTime + } + // 不在上述时间范围内的撤回消息过滤掉不显示 + if ( + item.messageType === + 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */ && + ['beReCallMsg', 'reCallMsg'].includes(item.recallType || '') + ) { + if ( + startWithoutRecallMsg !== void 0 && + item.createTime >= startWithoutRecallMsg + ) { + res.push(item) + } else { + filterRecallMsg.push(item) + } + } else { + res.push(item) + } + }) + // 如果当前只有撤回消息,则需要显示 + if (!res.length && filterRecallMsg.length) { + return filterRecallMsg + } + return res +} +var batchRequest = function (fn, max) { + return function (params) { + var args = [] + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i] + } + return __awaiter(this, void 0, void 0, function () { + var batches, i, batches_1, batches_1_1, batch, e_1_1 + var e_1, _a + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!!params.length) return [3 /*break*/, 2] + // @ts-ignore + return [4 /*yield*/, fn.apply(this, [params].concat(args))] + case 1: + // @ts-ignore + _b.sent() + _b.label = 2 + case 2: + batches = [] + for (i = 0; i < params.length; i += max) { + batches.push(params.slice(i, i + max)) + } + _b.label = 3 + case 3: + _b.trys.push([3, 8, 9, 10]) + ;(batches_1 = __values(batches)), (batches_1_1 = batches_1.next()) + _b.label = 4 + case 4: + if (!!batches_1_1.done) return [3 /*break*/, 7] + batch = batches_1_1.value + // @ts-ignore + return [4 /*yield*/, fn.apply(this, [batch].concat(args))] + case 5: + // @ts-ignore + _b.sent() + _b.label = 6 + case 6: + batches_1_1 = batches_1.next() + return [3 /*break*/, 4] + case 7: + return [3 /*break*/, 10] + case 8: + e_1_1 = _b.sent() + e_1 = { error: e_1_1 } + return [3 /*break*/, 10] + case 9: + try { + if (batches_1_1 && !batches_1_1.done && (_a = batches_1.return)) + _a.call(batches_1) + } finally { + if (e_1) throw e_1.error + } + return [7 /*endfinally*/] + case 10: + return [2 /*return*/] + } + }) + }) + } +} + +var utils = /*#__PURE__*/ Object.freeze({ + __proto__: null, + logDebug: logDebug, + logger: logger, + frequencyControl: frequencyControl, + getFilterMsgs: getFilterMsgs, + batchRequest: batchRequest, +}) + +var Queue = /** @class */ (function () { + /** + * @param itemLength 队列长度 + * @param flow 队列方向 + */ + function Queue(itemLength, flow) { + if (itemLength === void 0) { + itemLength = 20 + } + if (flow === void 0) { + flow = 'rightToLeft' + } + this.itemLength = itemLength + this.flow = flow + this.queue = [] + makeAutoObservable(this) + } + Queue.prototype.push = function (item, noLimit) { + this.queue.push(item) + this._handle(noLimit) + } + Queue.prototype.unshift = function (item, noLimit) { + this.queue.unshift(item) + this._handle(noLimit) + } + Queue.prototype.pop = function () { + return this.queue.pop() + } + Queue.prototype.shift = function () { + return this.queue.shift() + } + Queue.prototype.resetLimitState = function () { + this._handle() + } + Queue.prototype.clear = function () { + this.queue.length = 0 + } + Queue.prototype.get = function () { + return this.queue + } + Queue.prototype.set = function (value, noLimit) { + this.queue = value + this._handle(noLimit) + } + Object.defineProperty(Queue.prototype, 'length', { + get: function () { + return this.queue.length + }, + enumerable: false, + configurable: true, + }) + Queue.prototype._handle = function (noLimit) { + if (noLimit === void 0) { + noLimit = false + } + if (this.queue.length > this.itemLength && !noLimit) { + if (this.flow === 'leftToRight') { + this.queue.splice(this.itemLength, this.queue.length - this.itemLength) + } else { + this.queue.splice(0, this.queue.length - this.itemLength) + } + } + } + return Queue +})() +var QueueMap = /** @class */ (function () { + function QueueMap(itemLength, flow) { + if (itemLength === void 0) { + itemLength = 20 + } + if (flow === void 0) { + flow = 'rightToLeft' + } + this.itemLength = itemLength + this.flow = flow + this.map = new Map() + makeAutoObservable(this) + } + QueueMap.prototype.get = function (key) { + var _a + return (_a = this.map.get(key)) === null || _a === void 0 + ? void 0 + : _a.get() + } + QueueMap.prototype.set = function (key, value, noLimit) { + var queue = new Queue(this.itemLength, this.flow) + queue.set(value, noLimit) + this.map.set(key, queue) + } + QueueMap.prototype.delete = function (key) { + var _a + ;(_a = this.map.get(key)) === null || _a === void 0 ? void 0 : _a.clear() + return this.map.delete(key) + } + QueueMap.prototype.resetLimitState = function () { + this.map.forEach(function (item) { + return item.resetLimitState() + }) + } + QueueMap.prototype.clear = function () { + this.map.forEach(function (item) { + return item.clear() + }) + this.map.clear() + } + QueueMap.prototype.values = function () { + return __spreadArray([], __read(this.map.values()), false) + .map(function (item) { + return item.get() + }) + .flat() + } + return QueueMap +})() + +var PinMsgsMap = /** @class */ (function () { + function PinMsgsMap(limit) { + if (limit === void 0) { + limit = PIN_CONVERSATION_LIMIT + } + this.map = new Map() + this.pinConversationLimit = PIN_CONVERSATION_LIMIT + this.pinConversationLimit = limit + makeAutoObservable(this) + } + PinMsgsMap.prototype.set = function (conversationId, pinInfos) { + var map = this.map.get(conversationId) || new Map() + if (this.map.has(conversationId)) { + // 更新 LRU 队列 + this.map.delete(conversationId) + } + pinInfos.forEach(function (pinInfo) { + if (pinInfo.pinState !== 0) { + map.set(pinInfo.messageRefer.messageClientId, pinInfo) + } else { + // map 里面不维护 pinState 为 0 的 pin + map.delete(pinInfo.messageRefer.messageClientId) + } + }) + this.map.set(conversationId, map) + if (this.map.size > this.pinConversationLimit) { + var val = this.map.keys().next().value + // 最近最少用的出队 + if (val) this.map.delete(val) + } + } + PinMsgsMap.prototype.get = function (conversationId) { + var map = this.map.get(conversationId) + if (map) { + // 更新 LRU 队列 + this.map.delete(conversationId) + this.map.set(conversationId, map) + return map + } else { + return null + } + } + PinMsgsMap.prototype.delete = function (conversationId, messageClientIds) { + var curMap = this.map.get(conversationId) + if (curMap) { + // 更新 LRU 队列 + this.map.delete(conversationId) + messageClientIds.forEach(function (messageClientId) { + curMap.delete(messageClientId) + }) + this.map.set(conversationId, curMap) + } + } + PinMsgsMap.prototype.clear = function () { + if (this.map) { + this.map.forEach(function (map) { + map.clear() + }) + this.map.clear() + } + } + return PinMsgsMap +})() +var PinMsgsMap$1 = PinMsgsMap + +/**Mobx 可观察对象,负责管理会话消息的子 store */ +var MsgStore = /** @class */ (function () { + function MsgStore(rootStore, nim, localOptions) { + this.rootStore = rootStore + this.nim = nim + this.localOptions = localOptions + this.msgs = new QueueMap(HISTORY_LIMIT, 'rightToLeft') + /** 回复消息 */ + this.replyMsgs = new Map() + this.logger = null + /** pin 消息 */ + this.pinMsgs = new PinMsgsMap$1() + /** 收藏消息 */ + this.collectionMsgs = new Map() + makeAutoObservable(this) + this.logger = rootStore.logger + this._onReceiveMessages = this._onReceiveMessages.bind(this) + this._onClearHistoryNotifications = + this._onClearHistoryNotifications.bind(this) + this._onMessageDeletedNotifications = + this._onMessageDeletedNotifications.bind(this) + this._onMessagePinNotification = this._onMessagePinNotification.bind(this) + this._onMessageQuickCommentNotification = + this._onMessageQuickCommentNotification.bind(this) + this._onMessageRevokeNotifications = + this._onMessageRevokeNotifications.bind(this) + this._onReceiveP2PMessageReadReceipts = + this._onReceiveP2PMessageReadReceipts.bind(this) + this._onReceiveTeamMessageReadReceipts = + this._onReceiveTeamMessageReadReceipts.bind(this) + this._onReceiveMessagesModified = this._onReceiveMessagesModified.bind(this) + this.getTeamMsgReadsActive = batchRequest(this.getTeamMsgReadsActive, 50) + /** 收到消息 */ + nim.V2NIMMessageService.on('onReceiveMessages', this._onReceiveMessages) + /** 清空会话历史消息通知 */ + nim.V2NIMMessageService.on( + 'onClearHistoryNotifications', + this._onClearHistoryNotifications + ) + /** 消息被删除通知 */ + nim.V2NIMMessageService.on( + 'onMessageDeletedNotifications', + this._onMessageDeletedNotifications + ) + /** 收到消息 pin 状态更新 */ + nim.V2NIMMessageService.on( + 'onMessagePinNotification', + this._onMessagePinNotification + ) + /** 收到消息快捷评论更新 */ + nim.V2NIMMessageService.on( + 'onMessageQuickCommentNotification', + this._onMessageQuickCommentNotification + ) + /** 收到消息撤回通知 消息 */ + nim.V2NIMMessageService.on( + 'onMessageRevokeNotifications', + this._onMessageRevokeNotifications + ) + /** 收到点对点消息的已读回执 */ + nim.V2NIMMessageService.on( + 'onReceiveP2PMessageReadReceipts', + this._onReceiveP2PMessageReadReceipts + ) + /** 收到群消息的已读回执 */ + nim.V2NIMMessageService.on( + 'onReceiveTeamMessageReadReceipts', + this._onReceiveTeamMessageReadReceipts + ) + /** + * 收到消息更新事件 + * + * 1. 收到更新消息在线同步通知 + * 2. 收到更新消息多端同步通知 + * 3. 收到更新消息漫游通知 + */ + nim.V2NIMMessageService.on( + 'onReceiveMessagesModified', + this._onReceiveMessagesModified + ) + } + MsgStore.prototype.resetState = function () { + this.msgs.clear() + this.replyMsgs.clear() + this.pinMsgs.clear() + } + /** + * 销毁MsgStore,会取消消息相关事件监听 + */ + MsgStore.prototype.destroy = function () { + var _this = this + this.resetState() + this.nim.V2NIMMessageService.off( + 'onReceiveMessages', + this._onReceiveMessages + ) + this.nim.V2NIMMessageService.off( + 'onClearHistoryNotifications', + this._onClearHistoryNotifications + ) + this.nim.V2NIMMessageService.off( + 'onMessageDeletedNotifications', + this._onMessageDeletedNotifications + ) + this.nim.V2NIMMessageService.off( + 'onMessagePinNotification', + this._onMessagePinNotification + ) + this.nim.V2NIMMessageService.off( + 'onMessageQuickCommentNotification', + this._onMessageQuickCommentNotification + ) + this.nim.V2NIMMessageService.off( + 'onMessageRevokeNotifications', + this._onMessageRevokeNotifications + ) + this.nim.V2NIMMessageService.off( + 'onReceiveP2PMessageReadReceipts', + this._onReceiveP2PMessageReadReceipts + ) + this.nim.V2NIMMessageService.off( + 'onReceiveTeamMessageReadReceipts', + this._onReceiveTeamMessageReadReceipts + ) + this.getMsg().forEach(function (msg) { + _this._handleClearMsgTimer(msg) + }) + } + /** + * 回复消息 + * @param msg 消息对象 + */ + MsgStore.prototype.replyMsgActive = function (msg) { + if (msg === null || msg === void 0 ? void 0 : msg.conversationId) { + this.replyMsgs.set(msg.conversationId, msg) + } + } + /** + * 回复消息 + * @param msg 消息对象 + */ + MsgStore.prototype.removeReplyMsgActive = function (conversationId) { + this.replyMsgs.delete(conversationId) + } + /** + * 获取回复消息 + * @param conversationId + * @returns + */ + MsgStore.prototype.getReplyMsgActive = function (conversationId) { + var msg = this.replyMsgs.get(conversationId) + if (msg) { + return this.handleMsgForSDK(msg) + } + } + /** + * 撤回消息 + * @param msg 消息对象 + */ + MsgStore.prototype.reCallMsgActive = function (msg) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var recallMsg, error_1 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('reCallMsgActive', msg) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.revokeMessage( + this.handleMsgForSDK(msg) + ), + ] + case 1: + _d.sent() + this.removeMsg(msg.conversationId, [msg.messageClientId]) + recallMsg = this._createReCallMsg(msg) + this.addMsg(recallMsg.conversationId, [recallMsg]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('reCallMsgActive success', msg) + return [3 /*break*/, 3] + case 2: + error_1 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('reCallMsgActive failed: ', msg, error_1) + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 单向删除消息 + * @param msgs 消息对象数组 + */ + MsgStore.prototype.deleteMsgActive = function (msgs) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var conversationId, messageClientIds, error_2 + var _this = this + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('deleteMsgActive', msgs) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.deleteMessages( + msgs.map(function (item) { + return _this.handleMsgForSDK(item) + }) + ), + ] + case 1: + _d.sent() + conversationId = msgs[0].conversationId + if (conversationId) { + messageClientIds = msgs.map(function (item) { + return item.messageClientId + }) + this.removeMsg(conversationId, messageClientIds) + } + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('deleteMsgActive success', msgs) + return [3 /*break*/, 3] + case 2: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.warn( + 'deleteMsgActive failed, but delete msgs from memory: ', + msgs, + error_2 + ) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 回复消息 + * @param msgs 消息对象 + * @param repliedMessages 被回复的消息对象 + * @param conversationId 会话id + */ + MsgStore.prototype.replyMessageByThreadActive = function ( + message, + repliedMessage, + conversationId, + params + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var result, error_3 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('replyMessageByThreadActive', message, repliedMessage) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.replyMessage( + message, + repliedMessage, + params + ), + ] + case 1: + result = _d.sent() + this.removeReplyMsgActive(conversationId) + this._handleSendMsgSuccess(result.message) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'replyMessageByThreadActive success', + { message: message, repliedMessage: repliedMessage }, + result + ) + return [3 /*break*/, 3] + case 2: + error_3 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'replyMessageByThreadActive fail', + message, + repliedMessage + ) + message.threadReply = repliedMessage + this._handleSendMsgSuccess(message) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 发送消息 + * @param __namedParameters.msg - 消息对象 + * @param __namedParameters.conversationId - 会话id + * @param __namedParameters.conversationType - 会话类型 + * @param __namedParameters.progress - progress 进度回调 + * @param __namedParameters.sendBefore - sendBefore 进度回调 + * @param __namedParameters.serverExtension - 扩展字段 + * @param __namedParameters.previewImg - 预览图片,一般用于发送图片和视频消息 + * @param __namedParameters.onAISend - AI 单聊或 at AI 发送成功后的回调 + */ + MsgStore.prototype.sendMessageActive = function (params) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j + return __awaiter(this, void 0, void 0, function () { + var msg, + conversationId, + conversationType, + progress, + sendBefore, + serverExtension, + previewImg, + onAISend, + newMsg, + finalServerExtension, + sendMsgParams, + aiConfig, + finalAIConfig, + finalParams, + replyMsg, + message, + error_4 + var _this = this + return __generator(this, function (_k) { + switch (_k.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('sendMessageActive', params) + ;(msg = params.msg), + (conversationId = params.conversationId), + (conversationType = params.conversationType), + (progress = params.progress), + (sendBefore = params.sendBefore), + (serverExtension = params.serverExtension), + (previewImg = params.previewImg), + (onAISend = params.onAISend) + newMsg = __assign({}, msg) + finalServerExtension = {} + // @ts-ignore 发送回复消息旧模式,使用ext实现,有一系列缺点 + if ( + (_b = this.localOptions) === null || _b === void 0 + ? void 0 + : _b.sendReplyMsgByExt + ) { + finalServerExtension = this._formatExtField( + conversationId, + serverExtension || JSON.parse(newMsg.serverExtension || '{}') + ) + } else { + finalServerExtension = + serverExtension || JSON.parse(newMsg.serverExtension || '{}') + } + newMsg.serverExtension = Object.keys(finalServerExtension).length + ? JSON.stringify(finalServerExtension) + : void 0 + newMsg.senderId = this.rootStore.userStore.myUserInfo.accountId + newMsg.receiverId = + this.nim.V2NIMConversationIdUtil.parseConversationTargetId( + conversationId + ) + newMsg.conversationId = conversationId + if (conversationType !== void 0) { + newMsg.conversationType = conversationType + } + newMsg.sendingState = 3 /* V2NIMConst.V2NIMMessageSendingState.V2NIM_MESSAGE_SENDING_STATE_SENDING */ + if (previewImg) { + newMsg.previewImg = previewImg + } + if (progress) { + newMsg.uploadProgress = 0 + } + _k.label = 1 + case 1: + _k.trys.push([1, 6, , 7]) + return [ + 4 /*yield*/, + (_d = (_c = this.localOptions).sendMsgBefore) === null || + _d === void 0 + ? void 0 + : _d.call(_c, params), + ] + case 2: + sendMsgParams = _k.sent() + if (sendMsgParams === false) { + ;(_e = this.logger) === null || _e === void 0 + ? void 0 + : _e.log('sendMessageActive cancel', params, sendMsgParams) + return [2 /*return*/] + } + aiConfig = this._getAIConfig(newMsg) + // 先插入这条消息,快速让消息上屏 + this.addMsg(newMsg.conversationId, [newMsg]) + sendBefore === null || sendBefore === void 0 + ? void 0 + : sendBefore(newMsg) + finalAIConfig = + aiConfig || + (sendMsgParams === null || sendMsgParams === void 0 + ? void 0 + : sendMsgParams.aiConfig) + ? __assign( + __assign({}, aiConfig), + sendMsgParams === null || sendMsgParams === void 0 + ? void 0 + : sendMsgParams.aiConfig + ) + : void 0 + finalParams = __assign(__assign({}, sendMsgParams), { + pushConfig: + (sendMsgParams === null || sendMsgParams === void 0 + ? void 0 + : sendMsgParams.pushConfig) || + (( + finalServerExtension === null || + finalServerExtension === void 0 + ? void 0 + : finalServerExtension.yxAitMsg + ) + ? this._formatExtAitToPushInfo( + finalServerExtension.yxAitMsg, + newMsg.text || '' + ) + : void 0), + messageConfig: __assign( + { + // 需要开启已读回执 + readReceiptEnabled: true, + }, + sendMsgParams === null || sendMsgParams === void 0 + ? void 0 + : sendMsgParams.messageConfig + ), + aiConfig: finalAIConfig, + }) + ;(_f = this.logger) === null || _f === void 0 + ? void 0 + : _f.log( + 'sendMessageActive finalParams: ', + newMsg, + conversationId, + finalParams + ) + replyMsg = this.getReplyMsgActive(conversationId) + if ( + !( + replyMsg && + !((_g = this.localOptions) === null || _g === void 0 + ? void 0 + : _g.sendReplyMsgByExt) + ) + ) + return [3 /*break*/, 4] + newMsg.serverExtension = Object.keys(finalServerExtension).length + ? JSON.stringify(finalServerExtension) + : void 0 + return [ + 4 /*yield*/, + this.replyMessageByThreadActive( + newMsg, + replyMsg, + conversationId, + finalParams + ), + ] + case 3: + _k.sent() + sendBefore === null || sendBefore === void 0 + ? void 0 + : sendBefore(newMsg) + return [2 /*return*/] + case 4: + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.sendMessage( + newMsg, + conversationId, + finalParams, + function (percentage) { + var shouldContinue = + progress === null || progress === void 0 + ? void 0 + : progress(percentage) + if (shouldContinue) { + var _msg = _this.getMsg(conversationId, [ + newMsg.messageClientId, + ])[0] + if (_msg) { + _this.addMsg(conversationId, [ + __assign(__assign({}, _msg), { + uploadProgress: percentage, + }), + ]) + } + } + } + ), + ] + case 5: + message = _k.sent().message + if (finalAIConfig) { + onAISend === null || onAISend === void 0 + ? void 0 + : onAISend(message, finalAIConfig) + } + //uploadProgress 为UI层需要的字段,当sendMessage返回时,uploadProgress必为100 + if ( + msg.messageType === + 6 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_FILE */ || + msg.messageType === + 1 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_IMAGE */ || + msg.messageType === + 3 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_VIDEO */ + ) { + // @ts-expect-error + message.uploadProgress = 100 + } + this._handleSendMsgSuccess(message) + ;(_h = this.logger) === null || _h === void 0 + ? void 0 + : _h.log('sendMessageActive success', message) + if ( + newMsg.messageType === + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */ + ) { + this.removeReplyMsgActive(conversationId) + } + return [2 /*return*/, message] + case 6: + error_4 = _k.sent() + ;(_j = this.logger) === null || _j === void 0 + ? void 0 + : _j.error( + 'sendMessageActive failed: ', + error_4.toString(), + newMsg + ) + // 手动取消上传 + if (error_4.code === 191002) { + this.removeMsg(conversationId, [newMsg.messageClientId]) + } else { + this._handleSendMsgFail(newMsg, error_4.code) + } + if ( + newMsg.messageType === + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */ + ) { + this.removeReplyMsgActive(conversationId) + } + throw error_4 + case 7: + return [2 /*return*/] + } + }) + }) + } + /** + * 取消上传 + * @param msg 消息对象 + */ + MsgStore.prototype.cancelMessageAttachmentUploadActive = function (msg) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('cancelMessageAttachmentUploadActive', msg) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.cancelMessageAttachmentUpload( + this.handleMsgForSDK(msg) + ), + ] + case 1: + _d.sent() + this.removeMsg(msg.conversationId, [msg.messageClientId]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('cancelMessageAttachmentUploadActive success', msg) + return [3 /*break*/, 3] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'cancelMessageAttachmentUploadActive failed: ', + msg, + error_5 + ) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 发送 p2p 消息已读回执 + * @param msg 消息对象 + */ + MsgStore.prototype.sendMsgReceiptActive = function (msg) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_6 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('sendMsgReceiptActive', msg) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.sendP2PMessageReceipt( + this.handleMsgForSDK(msg) + ), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('sendMsgReceiptActive success', msg) + return [3 /*break*/, 3] + case 2: + error_6 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'sendMsgReceiptActive failed: ', + msg, + error_6.toString() + ) + throw error_6 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 添加一个收藏 + * @param params 添加收藏的相关参数 + */ + MsgStore.prototype.addCollectionActive = function (params) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_7 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('addCollectionActive', params) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.addCollection(params), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('addCollectionActive success', params) + return [3 /*break*/, 3] + case 2: + error_7 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'addCollectionActive failed: ', + params, + error_7.toString() + ) + throw error_7 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 移除相关收藏 + * @param collections 需要移除的相关收藏 + */ + MsgStore.prototype.removeCollectionsActive = function (collections) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_8 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('removeCollectionsActive', collections) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.removeCollections(collections), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('removeCollectionsActive success', collections) + return [3 /*break*/, 3] + case 2: + error_8 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'removeCollectionsActive failed: ', + collections, + error_8.toString() + ) + throw error_8 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取收藏列表 + * @param option 查询参数 + */ + MsgStore.prototype.getCollectionListByOptionActive = function (option) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_9 + var _this = this + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + res = [] + _d.label = 1 + case 1: + _d.trys.push([1, 3, , 4]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getCollectionListByOptionActive', option) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getCollectionListByOption(option), + ] + case 2: + res = _d.sent() + res.forEach(function (item) { + var collectionData = JSON.parse(item.collectionData) + // 反序列化 + var msg = _this.nim.V2NIMMessageConverter.messageDeserialization( + collectionData.message + ) + if (msg) { + _this.collectionMsgs.set(msg.messageClientId, msg) + } + }) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getCollectionListByOptionActive success', option) + return [3 /*break*/, 4] + case 3: + error_9 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getCollectionListByOptionActive failed: ', + option, + error_9.toString() + ) + throw error_9 + case 4: + return [2 /*return*/, res] + } + }) + }) + } + /** + * 发送群组消息已读回执 + * @param msgs 消息数组 + */ + MsgStore.prototype.sendTeamMsgReceiptActive = function (msgs) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var finalMsgs, error_10 + var _this = this + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 3, , 4]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('sendTeamMsgReceiptActive', msgs) + if (!msgs.length) return [3 /*break*/, 2] + finalMsgs = msgs.map(function (item) { + return _this.handleMsgForSDK(item) + }) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('sendTeamMsgReceiptActive finalParams: ', finalMsgs) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.sendTeamMessageReceipts(finalMsgs), + ] + case 1: + _e.sent() + _e.label = 2 + case 2: + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('sendTeamMsgReceiptActive success', msgs) + return [3 /*break*/, 4] + case 3: + error_10 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error( + 'sendTeamMsgReceiptActive failed: ', + msgs, + error_10.toString() + ) + throw error_10 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取群消息已读未读详情 + * @param message 消息 + */ + MsgStore.prototype.getTeamMessageReceiptDetailsActive = function ( + message, + memberAccountIds + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_11 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'getTeamMessageReceiptDetailsActive', + message, + memberAccountIds + ) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getTeamMessageReceiptDetail( + message, + memberAccountIds + ), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'getTeamMessageReceiptDetailsActive success:', + message, + memberAccountIds, + res + ) + return [2 /*return*/, res] + case 2: + error_11 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getTeamMessageReceiptDetailsActive failed: ', + message, + memberAccountIds, + error_11.toString() + ) + throw error_11 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取历史消息 + * @param options.conversationId - 消息所属的会话的ID + * @param options.endTime - 结束时间戳, 精确到 ms, 默认为服务器的当前时间 + * @param options.lastMsgId - 上次查询的最后一条消息的 messageServerId, 第一次不填 + * @param options.limit - 本次查询的消息数量限制, 最多 100 条, 默认 100 条 + */ + MsgStore.prototype.getHistoryMsgActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var conversationId, + endTime, + lastMsgId, + _d, + limit, + conversationType, + finalParams, + anchorMessage, + msgs, + myMsgs, + error_12 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 4, , 5]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getHistoryMsgActive', options) + ;(conversationId = options.conversationId), + (endTime = options.endTime), + (lastMsgId = options.lastMsgId), + (_d = options.limit), + (limit = _d === void 0 ? 100 : _d) + conversationType = + this.nim.V2NIMConversationIdUtil.parseConversationType( + conversationId + ) + finalParams = { + conversationId: conversationId, + endTime: endTime, + limit: limit, + } + if (lastMsgId) { + anchorMessage = this.getMsg(conversationId, [lastMsgId])[0] + if (anchorMessage) { + finalParams.anchorMessage = anchorMessage + } + } + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getMessageList(finalParams), + ] + case 1: + msgs = _e.sent() + this.addMsg(conversationId, msgs) + if ( + !( + conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ && + this.rootStore.localOptions.teamMsgReceiptVisible + ) + ) + return [3 /*break*/, 3] + myMsgs = msgs + .filter(function (item) { + return item.isSelf + }) + .filter(function (item) { + return ![ + 5 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION */, + 10 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TIPS */, + ].includes(item.messageType) + }) + return [ + 4 /*yield*/, + this.getTeamMsgReadsActive(myMsgs, conversationId), + ] + case 2: + _e.sent() + _e.label = 3 + case 3: + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'getHistoryMsgActive success', + options, + finalParams, + msgs + ) + return [2 /*return*/, msgs] + case 4: + error_12 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getHistoryMsgActive failed: ', + options, + error_12.toString() + ) + throw error_12 + case 5: + return [2 /*return*/] + } + }) + }) + } + /** + * 转发消息 + * @param msg - 消息对象 + * @param conversationId - 会话id + * @param comment - 评论 + */ + MsgStore.prototype.forwardMsgActive = function ( + msg, + conversationId, + comment + ) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var serverExtension, deleteKeys, finalMsg, forwardMsg, textMsg, error_13 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 5, , 6]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('forwardMsgActive', msg, conversationId, comment) + serverExtension = + msg === null || msg === void 0 ? void 0 : msg.serverExtension + if (serverExtension) { + try { + serverExtension = JSON.parse(serverExtension) + // @ts-ignore + delete serverExtension.yxReplyMsg + // @ts-ignore + delete serverExtension.yxAitMsg + serverExtension = JSON.stringify(serverExtension) + } catch (error) { + // + } + } + deleteKeys = ['canRecall', 'reCallTimer', 'yxUnread', 'yxRead'] + deleteKeys.forEach(function (key) { + delete msg[key] + }) + // 之前 IM2 sdk 有问题,这边先保留 + if ( + ((_b = msg.pushConfig) === null || _b === void 0 + ? void 0 + : _b.pushContent) === '' + ) { + delete msg.pushConfig.pushContent + } + finalMsg = this.handleMsgForSDK( + __assign(__assign({}, msg), { serverExtension: serverExtension }) + ) + forwardMsg = + this.nim.V2NIMMessageCreator.createForwardMessage(finalMsg) + if (!forwardMsg) return [3 /*break*/, 2] + return [ + 4 /*yield*/, + this.sendMessageActive({ + msg: forwardMsg, + conversationId: conversationId, + }), + ] + case 1: + _e.sent() + _e.label = 2 + case 2: + if (!comment) return [3 /*break*/, 4] + textMsg = this.nim.V2NIMMessageCreator.createTextMessage(comment) + return [ + 4 /*yield*/, + this.sendMessageActive({ + msg: textMsg, + conversationId: conversationId, + }), + ] + case 3: + _e.sent() + _e.label = 4 + case 4: + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('forwardMsgActive success', msg, conversationId, comment) + return [3 /*break*/, 6] + case 5: + error_13 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error('forwardMsgActive failed: ', error_13) + throw error_13 + case 6: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取群组消息已读未读数 + * @param msgs 消息数组 + * @param conversationId 会话id + */ + MsgStore.prototype.getTeamMsgReadsActive = function (msgs, conversationId) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var res, error_14, newMsgs + var _this = this + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamMsgReadsActive', msgs, conversationId) + res = [] + if (!msgs.length) return [3 /*break*/, 4] + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getTeamMessageReceipts( + msgs.map(function (item) { + return _this.handleMsgForSDK(item) + }) + ), + ] + case 2: + res = _c.sent() + return [3 /*break*/, 4] + case 3: + error_14 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'getTeamMsgReadsActive failed but continue: ', + error_14.toString() + ) + return [3 /*break*/, 4] + case 4: + newMsgs = msgs + .filter(function (msg) { + return res.some(function (status) { + return msg.messageClientId === status.messageClientId + }) + }) + .map(function (item) { + var teamMsgReceipt = res.find(function (j) { + return j.messageClientId === item.messageClientId + }) + if (teamMsgReceipt) { + return _this._updateReceiptMsg(item, { + unread: teamMsgReceipt.unreadCount, + read: teamMsgReceipt.readCount, + }) + } + return item + }) + this.addMsg(conversationId, newMsgs) + return [2 /*return*/] + } + }) + }) + } + /** + * pin 一条消息 + * @param message 需要被 pin 的消息体 + * @param serverExtension 扩展字段 + */ + MsgStore.prototype.pinMessageActive = function (message, serverExtension) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var error_15 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('pinMessageActive', message, serverExtension) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.pinMessage(message, serverExtension), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + error_15 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'pinMessageActive failed but continue: ', + error_15.toString() + ) + // 这里需要把错误抛出去,让 ui 层感知到 + throw error_15 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 取消一条Pin消息 + * @param messageRefer 需要被取消 pin 的消息摘要 + * @param serverExtension 扩展字段 + */ + MsgStore.prototype.unpinMessageActive = function ( + messageRefer, + serverExtension + ) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var error_16 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('uppinMessageActive', messageRefer, serverExtension) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.unpinMessage( + messageRefer, + serverExtension + ), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + error_16 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'uppinMessageActive failed but continue: ', + error_16.toString() + ) + // 这里需要把错误抛出去,让 ui 层感知到 + throw error_16 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 取消一条Pin消息 + * @param messageRefer 需要被取消 pin 的消息摘要 + * @param serverExtension 扩展字段 + */ + MsgStore.prototype.updatePinMessageActive = function ( + message, + serverExtension + ) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var error_17 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('updatePinMessageActive', message, serverExtension) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.updatePinMessage( + message, + serverExtension + ), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + error_17 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'updatePinMessageActive failed but continue: ', + error_17.toString() + ) + // 这里需要把错误抛出去,让 ui 层感知到 + throw error_17 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取 pin 消息列表 + * @param conversationId 会话id + */ + MsgStore.prototype.getPinnedMessageListActive = function (conversationId) { + return __awaiter(this, void 0, void 0, function () { + var curPinMsgsMap, pinInfos + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + curPinMsgsMap = this.pinMsgs.get(conversationId) + pinInfos = [] + if (!curPinMsgsMap) return [3 /*break*/, 1] + // 如果内存里面有,从内存里面获取 + pinInfos = __spreadArray([], __read(curPinMsgsMap.values()), false) + return [3 /*break*/, 3] + case 1: + return [ + 4 /*yield*/, + this._getPinnedMessageListByServer(conversationId), + ] + case 2: + // 这里不做 try catch,底层方法已处理 + // 如果内存里面没有,那么像服务器获取 + pinInfos = _a.sent() + _a.label = 3 + case 3: + return [ + 4 /*yield*/, + this.completePinnedMessageList(conversationId, pinInfos), + // 这里 + ] + case 4: + // 这里不做 try catch,底层方法已处理 + // 补全 pinInfos message 信息 + pinInfos = _a.sent() + // 这里 + pinInfos = pinInfos + .filter(function (pinInfo) { + return pinInfo.pinState > 0 && pinInfo.message + }) + .sort(function (a, b) { + return b.message.createTime - a.message.createTime + }) + return [2 /*return*/, pinInfos] + } + }) + }) + } + /** + * 停止流式输出 + * @param message 消息体 + * @param params 停止模式等入参 + */ + MsgStore.prototype.stopAIStreamMessageActive = function (message, params) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var error_18 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('stopAIStreamMessageActive', message) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.stopAIStreamMessage(message, params), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + error_18 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.error( + 'stopAIStreamMessageActive failed ', + error_18.toString() + ) + throw error_18 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 重新生成 ai 消息 + * + * 注: 若是流式消息, 必须等到流式分片输出完毕, 才允许调用此 API + * + * 此外他支持两种配置 + * + * 1. 更新,新消息覆盖老消息---只允许更新3天内的消息 + * 2. 新消息,产生一条新消息 + * + * @param message 需要重新输出的原始数字人消息 + * @param params 确定重新输出的操作类型 + */ + MsgStore.prototype.regenAIMessageActive = function (message, params) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var error_19 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('regenAIMessageActive', message) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.regenAIMessage(message, params), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + error_19 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.error('regenAIMessageActive failed ', error_19.toString()) + throw error_19 + case 4: + return [2 /*return*/] + } + }) + }) + } + MsgStore.prototype.voiceToTextActive = function (message) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var text, error_20 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + // 已经有转过的消息不要再次转 + if (message.textOfVoice) return [2 /*return*/] + // 判定如果没有附件, 或者附件不是语音类型的, 也 return + if (!message.attachment) return [2 /*return*/] + // 类型保护, 判定一定是音视频才能走入这段逻辑 + if (!('url' in message.attachment)) return [2 /*return*/] + // 经过了上面的类型保护后, 这一段直接访问 message.attachment.url 才不会 ts 提示说不存在 + if (!message.attachment.url) return [2 /*return*/] + if (!('duration' in message.attachment)) return [2 /*return*/] + if (!message.attachment.duration) return [2 /*return*/] + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('voiceToTextActive', message) + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.voiceToText({ + voiceUrl: message.attachment.url, + duration: message.attachment.duration, + sceneName: message.attachment.sceneName, + // 在群里与产品孙有军交流, 得知可以写死 aac 和 16000 + mimeType: 'aac', + sampleRate: '16000', + }), + ] + case 2: + text = _c.sent() + if (!text) throw new Error('voiceToText empty') + this.updateMsg(message.conversationId, message.messageClientId, { + textOfVoice: text, + }) + return [3 /*break*/, 4] + case 3: + error_20 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn('voiceToTextActive failed: ', error_20.toString()) + // 这里需要把错误抛出去,让 ui 层感知到 + throw error_20 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 往内存中添加消息 + * @param conversationId - 消息所属的会话的ID + * @param msgs- 消息对象数组 + */ + MsgStore.prototype.addMsg = function (conversationId, msgs) { + var _this = this + var sortFunc = function (a, b) { + return a.createTime - b.createTime + } + var _msgs = this.msgs.get(conversationId) || [] + // 获取当前会话的 pinMsgsMap + var curPinMsgsMap = this.pinMsgs.get(conversationId) + msgs + .filter(function (item) { + return !!item.messageClientId + }) + .map(function (item) { + // 这里做消息处理 + item = _this.handleReceiveAIMsg(item) + if (curPinMsgsMap) item = _this.handleMsgPinState(item, curPinMsgsMap) + return item + }) + .forEach(function (item) { + var newMsg = __assign({}, item) + var _msg = _msgs.find(function (msg) { + return msg.messageClientId === newMsg.messageClientId + }) + // SDK 可能会返回多条 messageClientId 相同的数据,此时取 createTime 最新的 + if (_msg) { + if ( + _msg.createTime <= newMsg.createTime || + _msg.sendingState === 3 /* V2NIMConst.V2NIMMessageSendingState + .V2NIM_MESSAGE_SENDING_STATE_SENDING */ + ) { + // 如果之前的消息有撤回相关字段,则更新时保留 + if (_msg.canRecall !== void 0 && _msg.reCallTimer !== void 0) { + newMsg.canRecall = _msg.canRecall + newMsg.reCallTimer = _msg.reCallTimer + } + // 如果之前已经请求过 voiceToText 语音转文字的结果, 那么更新时保留 + if (_msg.textOfVoice) { + newMsg.textOfVoice = _msg.textOfVoice + } + _msgs.splice(_msgs.indexOf(_msg), 1, newMsg) + } + } else { + _msgs.push(item) + } + }) + this.msgs.set( + conversationId, + __spreadArray([], __read(_msgs), false).sort(sortFunc), + this.rootStore.uiStore.selectedConversation === conversationId + ) + } + /** + * 从内存中删除消息 + * @param conversationId - 消息所属的会话的ID + * @param idClients - 端测生成的消息id数组 + */ + MsgStore.prototype.removeMsg = function (conversationId, idClients) { + var _this = this + if (!conversationId) { + this.getMsg().forEach(function (item) { + _this._handleClearMsgTimer(item) + }) + this.msgs.clear() + return + } + var msgs = this.msgs.get(conversationId) + if (!msgs) { + return + } + if (!idClients || !idClients.length) { + msgs.forEach(function (item) { + _this._handleClearMsgTimer(item) + }) + this.msgs.delete(conversationId) + return + } + this.msgs.set( + conversationId, + msgs.filter(function (msg) { + var isDelete = + idClients.includes(msg.messageClientId) && + // 无法删除撤回消息 + !( + msg.messageType === + 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */ && + msg.recallType === 'beReCallMsg' + ) + if (isDelete) { + _this._handleClearMsgTimer(msg) + } + return !isDelete + }), + this.rootStore.uiStore.selectedConversation === conversationId + ) + } + MsgStore.prototype.deletePinInfoByMessageClientId = function ( + conversationId, + messageClientIds + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'deletePinInfoByMessageClientId', + conversationId, + messageClientIds + ) + this.pinMsgs.delete(conversationId, messageClientIds) + } + /** + * 从内存中获取消息 + * @param conversationId - 消息所属的会话的ID + * @param idClients - 端测生成的消息id数组 + */ + MsgStore.prototype.getMsg = function (conversationId, idClients) { + if (!conversationId) { + return this.msgs.values() + } + var msgs = this.msgs.get(conversationId) || [] + if (!idClients || !idClients.length) { + return msgs + } + // 如果有 idClients,只返回 idClients 中的消息,新数组 + return msgs.filter(function (item) { + return idClients.includes(item.messageClientId) + }) + } + MsgStore.prototype.updateMsg = function ( + conversationId, + idClient, + updateParam + ) { + var msgs = this.msgs.get(conversationId) + if (!msgs) return + var msg = msgs.findIndex(function (item) { + return item.messageClientId === idClient + }) + if (!msg) return + this.msgs.set( + conversationId, + msgs.map(function (msg) { + if (msg.messageClientId === idClient) { + msg = __assign(__assign({}, msg), updateParam) + } + return msg + }), + this.rootStore.uiStore.selectedConversation === conversationId + ) + } + MsgStore.prototype.handleReceiveAIMsg = function (msg) { + var myAccountId = this.rootStore.userStore.myUserInfo.accountId + var aiConfig = msg.aiConfig + var senderId = aiConfig + ? aiConfig.aiStatus === 2 + ? aiConfig.accountId + : msg.senderId + : msg.senderId + var isSelf = senderId === myAccountId + return __assign(__assign({}, msg), { + __kit__isSelf: msg.isSelf, + __kit__senderId: msg.senderId, + isSelf: isSelf, + }) + } + /** 处理消息的 pinState */ + MsgStore.prototype.handleMsgPinState = function (msg, curPinMsgsMap) { + var pinInfo = curPinMsgsMap.get(msg.messageClientId) + if (pinInfo) { + msg.pinState = pinInfo.pinState + msg.operatorId = pinInfo.operatorId + } + return msg + } + MsgStore.prototype.handleMsgForSDK = function (msg) { + var __kit__isSelf = msg.__kit__isSelf, + __kit__senderId = msg.__kit__senderId, + rest = __rest(msg, ['__kit__isSelf', '__kit__senderId']) + var senderId = msg.senderId, + isSelf = msg.isSelf + if (__kit__isSelf) { + isSelf = __kit__isSelf + } + if (__kit__senderId) { + senderId = __kit__senderId + } + return __assign(__assign({}, rest), { senderId: senderId, isSelf: isSelf }) + } + MsgStore.prototype._getMessageListByRefer = function (messageRefers) { + var _a + return __awaiter(this, void 0, void 0, function () { + var res, error_21 + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + res = [] + _b.label = 1 + case 1: + _b.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getMessageListByRefers( + messageRefers + ), + ] + case 2: + res = _b.sent() + return [3 /*break*/, 4] + case 3: + error_21 = _b.sent() + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.warn( + '_getMessageListByRefer failed but continue: ', + error_21.toString() + ) + return [3 /*break*/, 4] + case 4: + return [2 /*return*/, res] + } + }) + }) + } + /** 从服务器拉 pin 消息列表 */ + MsgStore.prototype._getPinnedMessageListByServer = function (conversationId) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var res, pinInfos, error_22 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_getPinnedMessageListByServer', conversationId) + res = [] + pinInfos = [] + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.nim.V2NIMMessageService.getPinnedMessageList(conversationId), + ] + case 2: + res = _c.sent() + return [3 /*break*/, 4] + case 3: + error_22 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + '_getPinnedMessageListByServer failed but continue: ', + error_22.toString() + ) + return [3 /*break*/, 4] + case 4: + res.forEach(function (pin) { + pinInfos.push(__assign({ pinState: 1 }, pin)) + }) + this.pinMsgs.set(conversationId, pinInfos) + if (pinInfos.length) { + // 主动获取 pin 消息时需要更新 msg 的 pin 状态 + this._updateMsgsPinState(conversationId, pinInfos) + } + return [2 /*return*/, pinInfos] + } + }) + }) + } + /** 补全被 pin 的消息 */ + MsgStore.prototype.completePinnedMessageList = function ( + conversationId, + pinInfos + ) { + return __awaiter(this, void 0, void 0, function () { + var res, messageRefers + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + res = [] + if (!pinInfos.length) return [2 /*return*/, pinInfos] + messageRefers = [] + // 找出缺少 message 的 pinInfo,说明这个 pinInfo 没有补全消息 + pinInfos.forEach(function (pinInfo) { + if (!pinInfo.message) { + messageRefers.push(pinInfo.messageRefer) + } + }) + if (!messageRefers.length) + return [ + 2 /*return*/, + pinInfos, + // 这里不做 try catch,因为 _getMessageListByRefer 已经处理了 + // 这里全都从服务器获取补全的消息,不从内存中获取已有的补全消息 + ] + return [4 /*yield*/, this._getMessageListByRefer(messageRefers)] + case 1: + // 这里不做 try catch,因为 _getMessageListByRefer 已经处理了 + // 这里全都从服务器获取补全的消息,不从内存中获取已有的补全消息 + res = _a.sent() + if (res.length) { + pinInfos = pinInfos.map(function (pinInfo) { + var msg = res.find(function (item) { + return ( + item.messageClientId === + pinInfo.messageRefer.messageClientId + ) + }) + if (msg) { + pinInfo = __assign(__assign({}, pinInfo), { message: msg }) + } + return pinInfo + }) + this.pinMsgs.set(conversationId, pinInfos) + } + return [2 /*return*/, pinInfos] + } + }) + }) + } + MsgStore.prototype._handleSendMsgSuccess = function (msg) { + if (msg && msg.conversationId) { + // const canRecallMsg: V2NIMMessageForUI = { + // ...msg, + // canRecall: true, + // reCallTimer: setTimeout(() => { + // // 从内存中取最新的,因为中间可能有其他更新 + // const _msg = this.getMsg(msg.conversationId, [msg.messageClientId])[0] + // if (_msg) { + // delete _msg.canRecall + // delete _msg.reCallTimer + // this.addMsg(msg.conversationId, [_msg]) + // } + // }, RECALL_TIME) as unknown as number, + // } + // delete canRecallMsg.uploadProgress + // delete canRecallMsg.previewImg + // delete canRecallMsg.errorCode + this.addMsg(msg.conversationId, [msg]) + } + } + MsgStore.prototype._handleSendMsgFail = function (msg, errorCode) { + // 发送失败,拉黑的情况不能撤回、可以删除;网络情况不能撤回、不能删除 + // 因此删除那边做一下 try catch 处理,忽略错误消息 + // 先清除老消息的定时器,再更新消息 + if (msg && msg.conversationId) { + var oldMsg = this.getMsg(msg.conversationId, [msg.messageClientId])[0] + this._handleClearMsgTimer(oldMsg) + this.addMsg(msg.conversationId, [ + __assign(__assign(__assign({}, oldMsg), msg), { + messageStatus: { + errorCode: errorCode, + }, + uploadProgress: void 0, + sendingState: 2 /* V2NIMConst.V2NIMMessageSendingState + .V2NIM_MESSAGE_SENDING_STATE_FAILED */, + errorCode: errorCode, + }), + ]) + } + } + MsgStore.prototype._handleClearMsgTimer = function (msg) { + if (msg) { + clearTimeout(msg.canEditTimer) + clearTimeout(msg.reCallTimer) + } + } + MsgStore.prototype._onReceiveMessages = function (data) { + var _this = this + var _a, _b, _c, _d + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onReceiveMessages: ', data) + data.forEach(function (item) { + _this.addMsg(item.conversationId, [item]) + }) + if ( + (_b = this.rootStore.sdkOptions) === null || _b === void 0 + ? void 0 + : _b.enableV2CloudConversation + ) { + ;(_c = this.rootStore.conversationStore) === null || _c === void 0 + ? void 0 + : _c.handleConversationWithAit(data) + } else { + ;(_d = this.rootStore.localConversationStore) === null || _d === void 0 + ? void 0 + : _d.handleConversationWithAit(data) + } + } + MsgStore.prototype._onReceiveMessagesModified = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onReceiveMessagesModified: ', data) + data.forEach(function (item) { + _this.addMsg(item.conversationId, [item]) + }) + } + MsgStore.prototype._onClearHistoryNotifications = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onClearHistory: ', data) + data.forEach(function (item) { + _this.removeMsg(item.conversationId) + }) + } + MsgStore.prototype._onMessageDeletedNotifications = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onMessageDeletedNotifications: ', data) + var res = {} + data.forEach(function (item) { + var conversationId = item.messageRefer.conversationId + if (res[conversationId]) { + res[conversationId].push(item) + } else { + res[conversationId] = [item] + } + }) + Object.keys(res).forEach(function (conversationId) { + var messageClientIds = res[conversationId].map(function (item) { + return item.messageRefer.messageClientId + }) + _this.removeMsg(conversationId, messageClientIds) + _this.deletePinInfoByMessageClientId(conversationId, messageClientIds) + }) + } + MsgStore.prototype._onMessagePinNotification = function (data) { + var _this = this + var _a = data.pin, + operatorId = _a.operatorId, + messageRefer = _a.messageRefer, + serverExtension = _a.serverExtension, + createTime = _a.createTime, + updateTime = _a.updateTime + var curPinMsgsMap = this.pinMsgs.get(messageRefer.conversationId) + // 如果内存里面没有当前会话的 pin map,直接返回;等主动调用了 getPinnedMessageListActive 内存才会有 pin map,才处理相应的 _onMessagePinNotification + if (!curPinMsgsMap) return + var pinState = data.pinState + var pinInfo = + curPinMsgsMap === null || curPinMsgsMap === void 0 + ? void 0 + : curPinMsgsMap.get(messageRefer.messageClientId) + var newPinInfo = [ + { + pinState: pinState, + messageRefer: messageRefer, + operatorId: operatorId, + serverExtension: serverExtension, + // @ts-ignore + createTime: + (pinInfo === null || pinInfo === void 0 + ? void 0 + : pinInfo.createTime) || createTime, + updateTime: updateTime, + }, + ] + // 补全 message。咨询过产品,nim.V2NIMMessageService.getMessageListByRefers 这个接口不会有频控的问题,一个人1分钟可以调用几百次。所以这里可以实时补全 message + this.completePinnedMessageList( + messageRefer.conversationId, + newPinInfo + ).then(function (pinInfo) { + _this._updateMsgsPinState(messageRefer.conversationId, pinInfo) + }) + } + MsgStore.prototype._updateMsgsPinState = function (conversationId, pinInfos) { + // 获取会话内存中维护的所有消息 + var _msgs = this.getMsg(conversationId) || [] + var hasChange = false + pinInfos.forEach(function (pinInfo) { + // 找到需要更新 pin 状态的 msg + var msg = _msgs.find(function (msg) { + return msg.messageClientId === pinInfo.messageRefer.messageClientId + }) + // 如果内存里有对应的消息,再更新 pin 状态;没有,会在之后拉取到对应消息再更新 + if (msg && msg.pinState !== pinInfo.pinState) { + var newMsg = __assign({}, msg) + newMsg.pinState = pinInfo.pinState + newMsg.operatorId = pinInfo.operatorId + _msgs.splice(_msgs.indexOf(msg), 1, newMsg) + hasChange = true + } + }) + if (hasChange) { + this.msgs.set( + conversationId, + _msgs, + this.rootStore.uiStore.selectedConversation === conversationId + ) + } + } + MsgStore.prototype._onMessageQuickCommentNotification = function () { + // 暂不支持 + } + MsgStore.prototype._onMessageRevokeNotifications = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var _this = this + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onMessageRevokeNotifications: ', data) + data.forEach(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var oldMsg, + conversationId, + messageClientIds, + msg, + conversation, + aitMsgs, + messageClientId_1 + var _a, _b, _c, _d, _e, _f + return __generator(this, function (_g) { + oldMsg = this.getMsg(item.messageRefer.conversationId, [ + item.messageRefer.messageClientId, + ])[0] + // 这里只处理新的撤回消息,老的表示是自己主动撤回的,不处理。 + if (oldMsg && oldMsg.recallType) { + return [2 /*return*/] + } + conversationId = item.messageRefer.conversationId + messageClientIds = [item.messageRefer.messageClientId] + this.removeMsg(conversationId, messageClientIds) + this.deletePinInfoByMessageClientId( + conversationId, + messageClientIds + ) + msg = this._createBeReCallMsg(item) + this.addMsg(msg.conversationId, [msg]) + if ( + item.messageRefer.conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ + ) { + conversation = ( + (_a = this.rootStore.sdkOptions) === null || _a === void 0 + ? void 0 + : _a.enableV2CloudConversation + ) + ? (_b = this.rootStore.conversationStore) === null || + _b === void 0 + ? void 0 + : _b.conversations.get(conversationId) + : (_c = this.rootStore.localConversationStore) === null || + _c === void 0 + ? void 0 + : _c.conversations.get(conversationId) + if (conversation) { + aitMsgs = conversation.aitMsgs || [] + messageClientId_1 = item.messageRefer.messageClientId + if (aitMsgs.includes(messageClientId_1)) { + aitMsgs = aitMsgs.filter(function (item) { + return item !== messageClientId_1 + }) + if ( + (_d = this.rootStore.sdkOptions) === null || _d === void 0 + ? void 0 + : _d.enableV2CloudConversation + ) { + ;(_e = this.rootStore.conversationStore) === null || + _e === void 0 + ? void 0 + : _e.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: aitMsgs, + }), + ]) + } else { + ;(_f = this.rootStore.localConversationStore) === null || + _f === void 0 + ? void 0 + : _f.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: aitMsgs, + }), + ]) + } + } + } + } + return [2 /*return*/] + }) + }) + }) + return [2 /*return*/] + }) + }) + } + MsgStore.prototype._onReceiveP2PMessageReadReceipts = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onReceiveP2PMessageReadReceipts: ', data) + data.forEach(function (item) { + var _a, _b, _c, _d, _e, _f + var oldConversation = ( + (_a = _this.rootStore.sdkOptions) === null || _a === void 0 + ? void 0 + : _a.enableV2CloudConversation + ) + ? (_b = _this.rootStore.conversationStore) === null || _b === void 0 + ? void 0 + : _b.conversations.get(item.conversationId) + : (_c = _this.rootStore.localConversationStore) === null || + _c === void 0 + ? void 0 + : _c.conversations.get(item.conversationId) + if ( + oldConversation && + item.timestamp > (oldConversation.msgReceiptTime || 0) + ) { + if ( + (_d = _this.rootStore.sdkOptions) === null || _d === void 0 + ? void 0 + : _d.enableV2CloudConversation + ) { + ;(_e = _this.rootStore.conversationStore) === null || _e === void 0 + ? void 0 + : _e.updateConversation([ + __assign(__assign({}, oldConversation), { + msgReceiptTime: item.timestamp, + }), + ]) + } else { + ;(_f = _this.rootStore.localConversationStore) === null || + _f === void 0 + ? void 0 + : _f.updateConversation([ + __assign(__assign({}, oldConversation), { + msgReceiptTime: item.timestamp, + }), + ]) + } + } + }) + } + MsgStore.prototype._onReceiveTeamMessageReadReceipts = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onReceiveTeamMessageReadReceipts: ', data) + // 群消息中,同一条消息可能收到多条消息的回执,需要按照已读数量排序,服务端下发可能顺序不一致,端上排序,保证最后的已读未读情况覆盖之前的 + data.sort(function (a, b) { + return a.readCount - b.readCount + }) + data.forEach(function (msgReadReceipt) { + var conversationId = msgReadReceipt.conversationId + var msg = _this.getMsg(conversationId, [ + msgReadReceipt.messageClientId, + ])[0] + if (msg) { + var newMsg = _this._updateReceiptMsg(msg, { + unread: msgReadReceipt.unreadCount, + read: msgReadReceipt.readCount, + }) + _this.addMsg(conversationId, [newMsg]) + } + }) + } + MsgStore.prototype._formatExtField = function ( + conversationId, + serverExtension + ) { + var extObj = serverExtension || {} + // 有回复消息的情况,需要把回复消息的信息放到 serverExtension 中 + var replyMsg = this.getReplyMsgActive(conversationId) + if (replyMsg) { + extObj.yxReplyMsg = { + idClient: replyMsg.messageClientId, + scene: replyMsg.conversationType, + from: replyMsg.senderId, + receiverId: replyMsg.receiverId, + to: replyMsg.conversationId, + idServer: replyMsg.messageServerId, + time: replyMsg.createTime, + } + } + return extObj + } + MsgStore.prototype._updateReceiptMsg = function (originMsg, data) { + return __assign(__assign({}, originMsg), { + yxUnread: Number(data.unread), + yxRead: Number(data.read), + }) + } + MsgStore.prototype._formatExtAitToPushInfo = function (yxAitMsg, content) { + function getForcePushIDsList(obj) { + return Object.keys(obj).includes(AT_ALL_ACCOUNT) + ? void 0 + : Object.keys(obj) + } + var pushInfo = { + forcePushAccountIds: getForcePushIDsList(yxAitMsg), + forcePush: true, + forcePushContent: content, + } + return pushInfo + } + MsgStore.prototype._createReCallMsg = function (msg) { + var _this = this + var recallMsg = __assign(__assign({}, msg), { + isSelf: true, + sendingState: 1 /* V2NIMConst.V2NIMMessageSendingState + .V2NIM_MESSAGE_SENDING_STATE_SUCCEEDED */, + messageType: 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */, + recallType: 'reCallMsg', + messageClientId: 'recall-'.concat(msg.messageClientId), + }) + // 只有 type 为 custom 和 text 的消息可以被重新编辑 + if ( + [ + 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */, + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */, + ].includes(msg.messageType) + ) { + recallMsg.oldText = msg.text + recallMsg.canEdit = true + recallMsg.isRecallMsg = true + recallMsg.canEditTimer = setTimeout(function () { + var newMsg = _this.getMsg(recallMsg.conversationId, [ + recallMsg.messageClientId, + ])[0] + if (newMsg) { + _this.addMsg(newMsg.conversationId, [ + __assign(__assign({}, newMsg), { canEdit: false }), + ]) + } + }, RECALL_TIME) + } + return recallMsg + } + MsgStore.prototype._createBeReCallMsg = function (data) { + // @ts-ignore + return __assign(__assign({}, data.messageRefer), { + isSelf: + data.messageRefer.senderId === + this.rootStore.userStore.myUserInfo.accountId, + sendingState: 1 /* V2NIMConst.V2NIMMessageSendingState + .V2NIM_MESSAGE_SENDING_STATE_SUCCEEDED */, + messageType: 100 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM */, + recallType: 'beReCallMsg', + messageClientId: 'recall-'.concat(data.messageRefer.messageClientId), + }) + } + MsgStore.prototype._getAIConfig = function (msg) { + var _this = this + var _a + var serverExtension = msg.serverExtension, + conversationId = msg.conversationId, + receiverId = msg.receiverId, + messageType = msg.messageType, + _b = msg.text, + text = _b === void 0 ? '' : _b + var serverExt + try { + serverExt = JSON.parse(serverExtension || '{}') + } catch (error) { + serverExt = {} + } + // at 消息 + var yxAitMsg = serverExt.yxAitMsg || {} + // 回复消息 + var replyMsg = this.getReplyMsgActive(conversationId) + var relation = this.rootStore.uiStore.getRelation(receiverId).relation + var myAccountId = this.rootStore.userStore.myUserInfo.accountId + var aiConfig = void 0 + if (relation === 'ai') { + if ( + messageType === + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */ + ) { + // 取最近的30条文本会话 + var _msgs = (this.msgs.get(conversationId) || []) + .slice(-AI_MESSAGE_LIMIT) + .filter(function (item) { + return ( + item.messageType === + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */ + ) + }) + // 找到第一条自己发的消息,从此时开始作为真正的上下文 + var myIndex = _msgs.findIndex(function (item) { + return item.senderId === myAccountId + }) + _msgs = myIndex === -1 ? [] : _msgs.slice(myIndex) + aiConfig = { + accountId: receiverId, + content: { msg: text, type: 0 }, + // 取最后30条消息作为上下文 + messages: _msgs.map(function (item) { + var role = item.senderId === myAccountId ? 'user' : 'assistant' + return { + role: role, + msg: item.text || '', + type: 0, + } + }), + } + } else { + aiConfig = { + accountId: receiverId, + } + } + } + // 只保留 at 数字人的 yxAitMsg + var newYxAitMsg = {} + Object.keys(yxAitMsg).forEach(function (account) { + if (_this.rootStore.aiUserStore.aiUsers.has(account)) { + newYxAitMsg[account] = yxAitMsg[account] + } + }) + // 找到最早的 at 数字人 + var aiAtAccount = this._findMinStart(newYxAitMsg) + var aiAtMember = this.rootStore.aiUserStore.aiUsers.get(aiAtAccount || '') + // 表示 at 数字人 + if (aiAtMember) { + aiConfig = { + accountId: aiAtMember.accountId, + content: { msg: text, type: 0 }, + } + } + // 表示此时有回复消息 + if (replyMsg && aiConfig) { + // 只有回复的是文本消息需要带上下文,其他类型消息不用带上下文 + if ( + replyMsg.messageType === + 0 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT */ + ) { + aiConfig.messages = [ + { + role: 'user', + msg: replyMsg.text || '', + type: 0, + }, + ] + } else { + aiConfig.messages = void 0 + } + } + //@ts-ignore + aiConfig === null || aiConfig === void 0 + ? void 0 + : (aiConfig.aiStream = + (_a = this.localOptions) === null || _a === void 0 + ? void 0 + : _a.aiStream) + return aiConfig + } + MsgStore.prototype._findMinStart = function (data) { + var e_1, _a + var minStart = Number.MAX_VALUE + var minStartKey = void 0 + for (var key in data) { + var segments = data[key].segments + try { + for ( + var segments_1 = ((e_1 = void 0), __values(segments)), + segments_1_1 = segments_1.next(); + !segments_1_1.done; + segments_1_1 = segments_1.next() + ) { + var segment = segments_1_1.value + if (segment.start < minStart) { + minStart = segment.start + minStartKey = key + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (segments_1_1 && !segments_1_1.done && (_a = segments_1.return)) + _a.call(segments_1) + } finally { + if (e_1) throw e_1.error + } + } + } + return minStartKey + } + return MsgStore +})() + +/**Mobx 可观察对象,负责管理黑名单和静音列表的子store */ +var RelationStore = /** @class */ (function () { + function RelationStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.blacklist = [] + this.mutes = [] + this.logger = null + makeAutoObservable(this) + this.logger = rootStore.logger + this._onBlockListAdded = this._onBlockListAdded.bind(this) + this._onBlockListRemoved = this._onBlockListRemoved.bind(this) + this._onP2PMessageMuteModeChanged = + this._onP2PMessageMuteModeChanged.bind(this) + /** 黑名单新增用户回调,返回新加入黑名单的用户列表。当客户端本端添加用户到黑名单,或者其他端同步添加用户到黑名单时触发该回调 */ + nim.V2NIMUserService.on('onBlockListAdded', this._onBlockListAdded) + /** 黑名单移除用户回调,返回移出黑名单的用户列表。当客户端本端从黑名单移除用户,或者其他端同步从黑名单移除用户时触发该回调 */ + nim.V2NIMUserService.on('onBlockListRemoved', this._onBlockListRemoved) + /** 单聊消息免打扰模式变更事件 */ + nim.V2NIMSettingService.on( + 'onP2PMessageMuteModeChanged', + this._onP2PMessageMuteModeChanged + ) + } + RelationStore.prototype.resetState = function () { + this.blacklist = [] + this.mutes = [] + } + /** + * 销毁RelationStore,会取消相关事件监听 + */ + RelationStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMUserService.off('onBlockListAdded', this._onBlockListAdded) + this.nim.V2NIMUserService.off( + 'onBlockListRemoved', + this._onBlockListRemoved + ) + this.nim.V2NIMSettingService.off( + 'onP2PMessageMuteModeChanged', + this._onP2PMessageMuteModeChanged + ) + } + /** + * 内存中增加黑名单列表 + * @param accounts - 账号数组 + */ + RelationStore.prototype.addBlacklist = function (accounts) { + this.blacklist = __spreadArray( + [], + __read(new Set(this.blacklist.concat(accounts))), + false + ) + } + /** + * 内存中删除黑名单列表 + * @param accounts - 账号数组 + */ + RelationStore.prototype.removeBlacklist = function (accounts) { + this.blacklist = this.blacklist.filter(function (i) { + return accounts.every(function (j) { + return i !== j + }) + }) + } + /** + * 是否在黑名单列表 + */ + RelationStore.prototype.isInBlacklist = function (account) { + return this.blacklist.includes(account) + } + /** + * 内存中增加静音列表 + * @param accounts - 账号数组 + */ + RelationStore.prototype.addMutes = function (accounts) { + this.mutes = __spreadArray( + [], + __read(new Set(this.mutes.concat(accounts))), + false + ) + } + /** + * 内存中删除静音列表 + * @param accounts - 账号数组 + */ + RelationStore.prototype.removeMutes = function (accounts) { + this.mutes = this.mutes.filter(function (i) { + return accounts.every(function (j) { + return i !== j + }) + }) + } + // 获取黑名单列表 + RelationStore.prototype.getBlockListActive = function () { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var res, error_1 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getBlockListActive') + return [4 /*yield*/, this.nim.V2NIMUserService.getBlockList()] + case 1: + res = _c.sent() + this.addBlacklist(res) + return [2 /*return*/, res] + case 2: + error_1 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.error('getBlockListActive failed: ', error_1) + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } + // 获取P2P消息免打扰列表 + RelationStore.prototype.getP2PMuteListActive = function () { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var res, error_2 + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getP2PMuteListActive') + return [ + 4 /*yield*/, + this.nim.V2NIMSettingService.getP2PMessageMuteList(), + ] + case 1: + res = _c.sent() + this.addMutes(res) + return [2 /*return*/, res] + case 2: + error_2 = _c.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.error('getP2PMuteListActive failed: ', error_2) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 加入 黑名单 + * @param accountId 账号 + */ + RelationStore.prototype.addUserToBlockListActive = function (accountId) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_3 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('addUserToBlockListActive', accountId) + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.addUserToBlockList(accountId), + ] + case 1: + _d.sent() + this.addBlacklist([accountId]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('addUserToBlockListActive success', accountId) + return [3 /*break*/, 3] + case 2: + error_3 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'addUserToBlockListActive failed: ', + accountId, + error_3 + ) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 移除 黑名单 + * @param accountId 账号 + */ + RelationStore.prototype.removeUserFromBlockListActive = function (accountId) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('removeUserFromBlockListActive', accountId) + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.removeUserFromBlockList(accountId), + ] + case 1: + _d.sent() + this.removeBlacklist([accountId]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('removeUserFromBlockListActive success', accountId) + return [3 /*break*/, 3] + case 2: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'removeUserFromBlockListActive failed: ', + accountId, + error_4 + ) + throw error_4 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 设置/取消 单聊(点对点)消息免打扰模式 + * @param accountId 账号 + * @param muteMode 消息免打扰模式:免打扰开启或免打扰关闭 + */ + RelationStore.prototype.setP2PMessageMuteModeActive = function ( + accountId, + muteMode + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('setP2PMessageMuteModeActive', accountId, muteMode) + return [ + 4 /*yield*/, + this.nim.V2NIMSettingService.setP2PMessageMuteMode( + accountId, + muteMode + ), + ] + case 1: + _d.sent() + if ( + muteMode === + 1 /* V2NIMConst.V2NIMP2PMessageMuteMode.V2NIM_P2P_MESSAGE_MUTE_MODE_ON */ + ) { + this.addMutes([accountId]) + } else if ( + muteMode === + 0 /* V2NIMConst.V2NIMP2PMessageMuteMode.V2NIM_P2P_MESSAGE_MUTE_MODE_OFF */ + ) { + this.removeMutes([accountId]) + } + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('setP2PMessageMuteModeActive success', { + accountId: accountId, + muteMode: muteMode, + }) + return [3 /*break*/, 3] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'setP2PMessageMuteModeActive failed: ', + { accountId: accountId, muteMode: muteMode }, + error_5 + ) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 黑名单新增用户回调,返回新加入黑名单的用户列表。当客户端本端添加用户到黑名单,或者其他端同步添加用户到黑名单时触发该回调 + */ + RelationStore.prototype._onBlockListAdded = function (user) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onBlockListAdded', user) + this.addBlacklist([user.accountId]) + } + /** + * 黑名单移除用户回调,返回移出黑名单的用户列表。当客户端本端从黑名单移除用户,或者其他端同步从黑名单移除用户时触发该回调。 + */ + RelationStore.prototype._onBlockListRemoved = function (accountId) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onBlockListRemoved', accountId) + this.removeBlacklist([accountId]) + } + /** + * 单聊消息免打扰模式变更事件 + */ + RelationStore.prototype._onP2PMessageMuteModeChanged = function ( + accountId, + muteMode + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onP2PMessageMuteModeChanged', accountId, muteMode) + if ( + muteMode === + 1 /* V2NIMConst.V2NIMP2PMessageMuteMode.V2NIM_P2P_MESSAGE_MUTE_MODE_ON */ + ) { + this.addMutes([accountId]) + } else if ( + muteMode === + 0 /* V2NIMConst.V2NIMP2PMessageMuteMode.V2NIM_P2P_MESSAGE_MUTE_MODE_OFF */ + ) { + this.removeMutes([accountId]) + } + } + return RelationStore +})() + +/**Mobx 可观察对象,负责管理会话列表的子 store */ +var ConversationStore = /** @class */ (function () { + function ConversationStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.conversations = new Map() + this.totalUnreadCount = 0 + this.logger = null + makeAutoObservable(this) + this._onSyncStarted = this._onSyncStarted.bind(this) + this._onSyncFinished = this._onSyncFinished.bind(this) + this._onSyncFailed = this._onSyncFailed.bind(this) + this._onConversationCreated = this._onConversationCreated.bind(this) + this._onConversationDeleted = this._onConversationDeleted.bind(this) + this._onConversationChanged = this._onConversationChanged.bind(this) + this._onTotalUnreadCountChanged = this._onTotalUnreadCountChanged.bind(this) + this.logger = rootStore.logger + /** 数据同步开始 */ + nim.V2NIMConversationService.on('onSyncStarted', this._onSyncStarted) + /** 数据同步结束 */ + nim.V2NIMConversationService.on('onSyncFinished', this._onSyncFinished) + /** 数据同步失败 */ + nim.V2NIMConversationService.on('onSyncFailed', this._onSyncFailed) + /** 会话创建 */ + nim.V2NIMConversationService.on( + 'onConversationCreated', + this._onConversationCreated + ) + /** 会话删除 */ + nim.V2NIMConversationService.on( + 'onConversationDeleted', + this._onConversationDeleted + ) + /** 会话更新 */ + nim.V2NIMConversationService.on( + 'onConversationChanged', + this._onConversationChanged + ) + /** 会话总未读数变化 */ + nim.V2NIMConversationService.on( + 'onTotalUnreadCountChanged', + this._onTotalUnreadCountChanged + ) + } + ConversationStore.prototype.resetState = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('Conversation resetState') + this.conversations.clear() + this.totalUnreadCount = 0 + } + /** + * 销毁 + */ + ConversationStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMConversationService.off('onSyncStarted', this._onSyncStarted) + this.nim.V2NIMConversationService.off( + 'onSyncFinished', + this._onSyncFinished + ) + this.nim.V2NIMConversationService.off('onSyncFailed', this._onSyncFailed) + this.nim.V2NIMConversationService.off( + 'onConversationCreated', + this._onConversationCreated + ) + this.nim.V2NIMConversationService.off( + 'onConversationDeleted', + this._onConversationDeleted + ) + this.nim.V2NIMConversationService.off( + 'onConversationChanged', + this._onConversationChanged + ) + this.nim.V2NIMConversationService.off( + 'onTotalUnreadCountChanged', + this._onTotalUnreadCountChanged + ) + } + /** + * 添加内存中的会话 + * @param conversations 会话数组 + */ + ConversationStore.prototype.addConversation = function (conversations) { + var _this = this + conversations + .filter(function (item) { + return !!item.conversationId + }) + // 暂时仅支持 p2p 和 team + .filter(function (item) { + return [ + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */, + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */, + ].includes(item.type) + }) + .forEach(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var oldConversation + return __generator(this, function (_a) { + oldConversation = this.conversations.get(item.conversationId) + // 先更新一次 + this.conversations.set( + item.conversationId, + __assign(__assign({}, oldConversation), item) + ) + return [2 /*return*/] + }) + }) + }) + } + /** + * 更新内存中的会话 + * @param conversations 会话数组 + */ + ConversationStore.prototype.updateConversation = function (conversations) { + var _this = this + conversations + .filter(function (item) { + return !!item.conversationId + }) + // 暂时仅支持 p2p 和 team + .filter(function (item) { + return [ + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */, + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */, + ].includes(item.type) + }) + .forEach(function (item) { + var oldConversation = _this.conversations.get(item.conversationId) + _this.conversations.set( + item.conversationId, + __assign(__assign({}, oldConversation), item) + ) + }) + } + /** + * 移除内存中的会话 + * @param conversationId 会话ID + */ + ConversationStore.prototype.removeConversation = function (conversationIds) { + var _this = this + conversationIds.forEach(function (item) { + _this.conversations.delete(item) + if (_this.rootStore.uiStore.selectedConversation === item) { + _this.rootStore.uiStore.unselectConversation() + } + }) + } + /** + * 重置会话未读数 + * @param conversationId - 消息所属的会话的ID + */ + ConversationStore.prototype.resetConversation = function (conversationId) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var conversation, error_1 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('resetConversation', conversationId) + conversation = this.conversations.get(conversationId) + if (!conversation) { + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'resetConversation: conversation is not found.', + conversationId + ) + return [2 /*return*/] + } + _e.label = 1 + case 1: + _e.trys.push([1, 4, , 5]) + if (!conversation.unreadCount) return [3 /*break*/, 3] + // 请求前也清理一次会话未读数,fix http://jira.netease.com/browse/YYTX-34326 + this._resetMemoryConversationUnreadCount(conversation) + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.clearUnreadCountByIds([ + conversation.conversationId, + ]), + ] + case 2: + _e.sent() + this._resetMemoryConversationUnreadCount(conversation) + _e.label = 3 + case 3: + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('resetConversation success') + return [3 /*break*/, 5] + case 4: + error_1 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error('resetConversation failed: ', error_1) + throw error_1 + case 5: + return [2 /*return*/] + } + }) + }) + } + /** + * 插入一条会话记录 + * @param conversationType + * @param receiverId - 接收方, 对方帐号或者群id + * @param isSelected - 是否选中 + */ + ConversationStore.prototype.insertConversationActive = function ( + conversationType, + receiverId, + isSelected + ) { + var _a, _b, _c + if (isSelected === void 0) { + isSelected = true + } + return __awaiter(this, void 0, void 0, function () { + var conversationId, conversation, error_2 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 5, , 6]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('insertConversationActive', { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + }) + conversationId = '' + if ( + conversationType === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) { + conversationId = + this.nim.V2NIMConversationIdUtil.p2pConversationId(receiverId) + } else if ( + conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ + ) { + conversationId = + this.nim.V2NIMConversationIdUtil.teamConversationId(receiverId) + } else { + throw new Error('Unsupported conversation type') + } + if (!!this.conversations.has(conversationId)) + return [3 /*break*/, 2] + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.createConversation( + conversationId + ), + ] + case 1: + conversation = _d.sent() + this.addConversation([conversation]) + _d.label = 2 + case 2: + if (!isSelected) return [3 /*break*/, 4] + return [ + 4 /*yield*/, + this.rootStore.uiStore.selectConversation(conversationId), + ] + case 3: + _d.sent() + _d.label = 4 + case 4: + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('insertConversationActive success', { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + }) + return [3 /*break*/, 6] + case 5: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'insertConversationActive failed: ', + { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + }, + error_2 + ) + throw error_2 + case 6: + return [2 /*return*/] + } + }) + }) + } + /** + * 删除会话记录 + * @param conversationId - 消息所属的会话的ID + */ + ConversationStore.prototype.deleteConversationActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 6, , 7]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('deleteConversationActive', conversationId) + _d.label = 1 + case 1: + _d.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.stickTopConversationActive(conversationId, false), + ] + case 2: + _d.sent() + return [3 /*break*/, 4] + case 3: + _d.sent() + return [3 /*break*/, 4] + case 4: + // 先删除内存,防止删除失败导致一些问题 + this.removeConversation([conversationId]) + // 不删除历史消息,让表现跟线上一致,后续可根据需求调整 + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.deleteConversation( + conversationId, + false + ), + ] + case 5: + // 不删除历史消息,让表现跟线上一致,后续可根据需求调整 + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('deleteConversationActive success') + return [3 /*break*/, 7] + case 6: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.warn( + 'deleteConversationActive failed but continue: ', + error_4 + ) + return [3 /*break*/, 7] + case 7: + return [2 /*return*/] + } + }) + }) + } + /** + * 新增会话置顶 + * @param conversationId - 消息所属的会话的ID + * @param stickTop - 是否置顶 + */ + ConversationStore.prototype.stickTopConversationActive = function ( + conversationId, + stickTop + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('stickTopConversationActive', conversationId, stickTop) + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.stickTopConversation( + conversationId, + stickTop + ), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('stickTopConversationActive success') + return [3 /*break*/, 3] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('stickTopConversationActive failed: ', error_5) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取会话列表 + * @param offset 分页偏移量 + * @param limit 分页拉取数量 + */ + ConversationStore.prototype.getConversationListActive = function ( + offset, + limit + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_6 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 3, , 4]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getConversationListActive', offset, limit) + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.getConversationList( + offset, + limit + ), + ] + case 1: + res = _d.sent() + this.addConversation(res.conversationList) + return [ + 4 /*yield*/, + this.getP2PMessageReceipt( + res.conversationList + .filter(function (item) { + return ( + item.type === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) + }) + .map(function (item) { + return item.conversationId + }) + ), + ] + case 2: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getConversationListActive success', offset, limit, res) + return [2 /*return*/, res] + case 3: + error_6 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getConversationListActive failed: ', + error_6, + offset, + limit + ) + throw error_6 + case 4: + return [2 /*return*/] + } + }) + }) + } + ConversationStore.prototype.getP2PMessageReceipt = function ( + conversationIds + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, conversations, error_7 + var _this = this + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getP2PMessageReceipt', conversationIds) + return [ + 4 /*yield*/, + Promise.all( + conversationIds.map(function (item) { + return _this.nim.V2NIMMessageService.getP2PMessageReceipt( + item + ) + }) + ), + ] + case 1: + res = _d.sent() + conversations = res + .map(function (item) { + var conversation = _this.conversations.get(item.conversationId) + if (conversation) { + return __assign(__assign({}, conversation), { + msgReceiptTime: item.timestamp, + }) + } + }) + .filter(function (item) { + return !!item + }) + this.updateConversation(conversations) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getP2PMessageReceipt success', conversationIds, res) + return [2 /*return*/, res] + case 2: + error_7 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getP2PMessageReceipt failed: ', + error_7, + conversationIds + ) + throw error_7 + case 3: + return [2 /*return*/] + } + }) + }) + } + ConversationStore.prototype._resetMemoryConversationUnreadCount = function ( + conversation + ) { + var newConversation = this.conversations.get(conversation.conversationId) + if (newConversation) { + this.updateConversation([ + __assign(__assign({}, newConversation), { unreadCount: 0 }), + ]) + } + } + /** + * 获取会话已读时间戳。该时间包含多端已读时间戳 + */ + ConversationStore.prototype.getConversationReadTimeActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_8 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getConversationReadTimeActive', conversationId) + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.getConversationReadTime( + conversationId + ), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'getConversationReadTimeActive success', + conversationId, + res + ) + return [2 /*return*/, res] + case 2: + error_8 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getConversationReadTimeActive failed: ', + error_8, + conversationId + ) + throw error_8 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 标记会话已读时间戳 + * + * 注: 当该方法调用后,SDK 可能给多端账户抛出以下的事件 + * + * {@link V2NIMConversationListener.onConversationReadTimeUpdated | V2NIMConversationListener.onConversationReadTimeUpdated} + * + */ + ConversationStore.prototype.markConversationReadActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_9 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('markConversationReadActive', conversationId) + return [ + 4 /*yield*/, + this.nim.V2NIMConversationService.markConversationRead( + conversationId + ), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'markConversationReadActive success', + conversationId, + res + ) + return [2 /*return*/, res] + case 2: + error_9 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'markConversationReadActive failed: ', + error_9, + conversationId + ) + throw error_9 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 处理会话中的@ 消息 + */ + ConversationStore.prototype.handleConversationWithAit = function (msgs) { + var _this = this + msgs.map(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var hasAitMsg, + conversationReadTime, + isCurConversation, + isSendFromMe, + conversation, + aitMsgs + var _a + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if ( + !( + ( + item.conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ || + item.conversationType === 3 + ) /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_SUPER_TEAM */ + ) + ) + return [3 /*break*/, 2] + if ( + !(item === null || item === void 0 + ? void 0 + : item.serverExtension) + ) + return [3 /*break*/, 2] + hasAitMsg = this.hasAitMsg([item.serverExtension]) + return [ + 4 /*yield*/, + this.getConversationReadTimeActive(item.conversationId), + ] + case 1: + conversationReadTime = _b.sent() + isCurConversation = + item.conversationId == + this.rootStore.uiStore.selectedConversation + isSendFromMe = + item.senderId === + ((_a = this.rootStore.userStore.myUserInfo) === null || + _a === void 0 + ? void 0 + : _a.accountId) + // 当前通过_onReceiveMessages获取的新消息时间戳大于会话的最后已读时间戳,且有@消息,且没有选中当前该会话,则标记为已读 + if ( + item.createTime > conversationReadTime && + hasAitMsg && + !isCurConversation && + !isSendFromMe + ) { + conversation = this.conversations.get(item.conversationId) + // 如果此时conversation为空,则可能的情况为,该用户删除了该会话后,又收到了@消息(onReceiveMessages会先于onConversationCreated触发),此时需要在onConversationCreated处理@消息相关 + if (conversation) { + aitMsgs = conversation.aitMsgs || [] + if (aitMsgs.length === 0) { + this.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: [item.messageClientId], + }), + ]) + } else { + this.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: __spreadArray( + __spreadArray([], __read(aitMsgs), false), + [item.messageClientId], + false + ), + }), + ]) + } + } + } + _b.label = 2 + case 2: + return [2 /*return*/] + } + }) + }) + }) + } + /** + * 重置会话中的@ 消息 + */ + ConversationStore.prototype.resetConversationAit = function (conversationId) { + var conversation = this.conversations.get(conversationId) + if ( + (conversation === null || conversation === void 0 + ? void 0 + : conversation.type) === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ || + (conversation === null || conversation === void 0 + ? void 0 + : conversation.type) === + 3 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_SUPER_TEAM */ + ) { + this.updateConversation([ + __assign(__assign({}, conversation), { aitMsgs: [] }), + ]) + } + } + ConversationStore.prototype.hasAitMsg = function (serverExtensions) { + var _this = this + var flag = false + if ( + serverExtensions === null || serverExtensions === void 0 + ? void 0 + : serverExtensions.length + ) { + serverExtensions === null || serverExtensions === void 0 + ? void 0 + : serverExtensions.forEach(function (item) { + var _a, _b + try { + var extObj = JSON.parse(item || '{}') + var yxAitMsg = extObj.yxAitMsg + var account_1 = _this.rootStore.userStore.myUserInfo.accountId + if (yxAitMsg) { + ;(_a = Object.keys(yxAitMsg)) === null || _a === void 0 + ? void 0 + : _a.forEach(function (key) { + if (key === account_1 || key === AT_ALL_ACCOUNT) { + flag = true + } + }) + } + } catch (_c) { + ;(_b = _this.logger) === null || _b === void 0 + ? void 0 + : _b.error('parse serverExtension failed: ', item) + } + }) + } + return flag + } + ConversationStore.prototype._onSyncStarted = function () { + var _a, _b, _c + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onSyncStarted') + // 获取会话列表 + ;(_b = this.rootStore.conversationStore) === null || _b === void 0 + ? void 0 + : _b.getConversationListActive( + 0, + this.rootStore.localOptions.conversationLimit || 100 + ) + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('_onSyncFinished') + } + ConversationStore.prototype._onSyncFinished = function () { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_c) { + // 获取会话列表 + ;(_a = this.rootStore.conversationStore) === null || _a === void 0 + ? void 0 + : _a.getConversationListActive( + 0, + this.rootStore.localOptions.conversationLimit || 100 + ) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('_onSyncFinished') + return [2 /*return*/] + }) + }) + } + ConversationStore.prototype._onSyncFailed = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onSyncFailed', e) + } + ConversationStore.prototype._onConversationCreated = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onConversationCreated', data) + // 如果是创群,此时_onConversationCreated 返回的data可能没有avatar和name,需要getConversation + if ( + data.type === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ + ) { + this.nim.V2NIMConversationService.getConversation( + data.conversationId + ).then(function (conversation) { + _this.addConversation([conversation]) + // 处理@消息 情况为 + if (conversation.lastMessage) { + _this.handleConversationWithAit([ + __assign( + __assign({}, conversation.lastMessage), + conversation.lastMessage.messageRefer + ), + ]) + } + }) + } else { + this.addConversation([data]) + // 会话创建的时候,获取一下当前会话的最后已读时间,便于展示消息已读未读 + if ( + data.type === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) { + var conversationId_1 = data.conversationId + this.nim.V2NIMMessageService.getP2PMessageReceipt( + conversationId_1 + ).then(function (res) { + var conversation = _this.conversations.get(conversationId_1) + if (conversation) { + _this.updateConversation([ + __assign(__assign({}, conversation), { + msgReceiptTime: res.timestamp, + }), + ]) + } + }) + } + } + } + ConversationStore.prototype._onConversationDeleted = function ( + conversationIds + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onConversationDeleted', conversationIds) + this.removeConversation(conversationIds) + } + ConversationStore.prototype._onConversationChanged = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var _this = this + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onConversationChanged', data) + this.addConversation(data) + data.forEach(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var attachment, type + var _a, _b, _c, _d + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + attachment = + (_a = item.lastMessage) === null || _a === void 0 + ? void 0 + : _a.attachment + type = + attachment === null || attachment === void 0 + ? void 0 + : attachment.type + if ( + !( + ((_b = item.lastMessage) === null || _b === void 0 + ? void 0 + : _b.messageType) === + 5 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION */ && + ((type === 1 /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_KICK */ && + ((_c = + attachment === null || attachment === void 0 + ? void 0 + : attachment.targetIds) === null || _c === void 0 + ? void 0 + : _c.includes( + this.rootStore.userStore.myUserInfo.accountId + ))) || + (type === 2 /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LEAVE */ && + ((_d = item.lastMessage) === null || _d === void 0 + ? void 0 + : _d.messageRefer.senderId) === + this.rootStore.userStore.myUserInfo.accountId) || + type === 4) /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS */ + ) + ) + return [3 /*break*/, 2] + return [ + 4 /*yield*/, + this.deleteConversationActive(item.conversationId), + ] + case 1: + _e.sent() + return [3 /*break*/, 4] + case 2: + if ( + !( + this.rootStore.uiStore.selectedConversation === + item.conversationId + ) + ) + return [3 /*break*/, 4] + return [ + 4 /*yield*/, + this.resetConversation(item.conversationId), + ] + case 3: + _e.sent() + _e.label = 4 + case 4: + if ( + item.type === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ && + item.unreadCount == 0 + ) { + this.resetConversationAit(item.conversationId) + } + return [2 /*return*/] + } + }) + }) + }) + return [2 /*return*/] + }) + }) + } + ConversationStore.prototype._onTotalUnreadCountChanged = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onTotalUnreadCountChanged', data) + this.totalUnreadCount = data + } + return ConversationStore +})() + +/**Mobx 可观察对象,负责管理群组的子 store */ +var TeamStore = /** @class */ (function () { + function TeamStore(rootStore, nim, localOptions) { + this.rootStore = rootStore + this.nim = nim + this.localOptions = localOptions + this.teams = new Map() + this.logger = null + makeAutoObservable(this) + this.logger = rootStore.logger + this._onReceiveTeamJoinActionInfo = + this._onReceiveTeamJoinActionInfo.bind(this) + this._onSyncFailed = this._onSyncFailed.bind(this) + this._onSyncFinished = this._onSyncFinished.bind(this) + this._onSyncStarted = this._onSyncStarted.bind(this) + this._onTeamCreated = this._onTeamCreated.bind(this) + this._onTeamDismissed = this._onTeamDismissed.bind(this) + this._onTeamInfoUpdated = this._onTeamInfoUpdated.bind(this) + this._onTeamJoined = this._onTeamJoined.bind(this) + this._onTeamLeft = this._onTeamLeft.bind(this) + this._onTeamMemberInfoUpdated = this._onTeamMemberInfoUpdated.bind(this) + this._onTeamMemberJoined = this._onTeamMemberJoined.bind(this) + this._onTeamMemberKicked = this._onTeamMemberKicked.bind(this) + this._onTeamMemberLeft = this._onTeamMemberLeft.bind(this) + /** 群组申请动作回调 */ + nim.V2NIMTeamService.on( + 'onReceiveTeamJoinActionInfo', + this._onReceiveTeamJoinActionInfo + ) + /** 群组信息数据同步失败 */ + nim.V2NIMTeamService.on('onSyncFailed', this._onSyncFailed) + /** 群组信息数据同步完成 */ + nim.V2NIMTeamService.on('onSyncFinished', this._onSyncFinished) + /** 群组信息数据同步开始 */ + nim.V2NIMTeamService.on('onSyncStarted', this._onSyncStarted) + /** 创建群组回调 */ + nim.V2NIMTeamService.on('onTeamCreated', this._onTeamCreated) + /** 解散群组回调 */ + nim.V2NIMTeamService.on('onTeamDismissed', this._onTeamDismissed) + /** 更新群组信息回调 */ + nim.V2NIMTeamService.on('onTeamInfoUpdated', this._onTeamInfoUpdated) + /** 自己被邀请后接受邀请, 或申请通过,或直接被拉入群组回调 */ + nim.V2NIMTeamService.on('onTeamJoined', this._onTeamJoined) + /** 自己主动离开群组或被管理员踢出回调 */ + nim.V2NIMTeamService.on('onTeamLeft', this._onTeamLeft) + /** 群组成员信息更新回调 */ + nim.V2NIMTeamService.on( + 'onTeamMemberInfoUpdated', + this._onTeamMemberInfoUpdated + ) + /** 群组成员加入回调(非自己) */ + nim.V2NIMTeamService.on('onTeamMemberJoined', this._onTeamMemberJoined) + /** 群组成员被踢回调(非自己) */ + nim.V2NIMTeamService.on('onTeamMemberKicked', this._onTeamMemberKicked) + /** 群组成员离开回调(非自己) */ + nim.V2NIMTeamService.on('onTeamMemberLeft', this._onTeamMemberLeft) + /** 监听群消息免打扰模式变更事件 */ + nim.V2NIMSettingService.on( + 'onTeamMessageMuteModeChanged', + this._onTeamMessageMuteModeChanged + ) + } + TeamStore.prototype.resetState = function () { + this.teams.clear() + } + /** + * 销毁TeamStore,会取消群组相关事件监听 + */ + TeamStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMTeamService.off( + 'onReceiveTeamJoinActionInfo', + this._onReceiveTeamJoinActionInfo + ) + this.nim.V2NIMTeamService.off('onSyncFailed', this._onSyncFailed) + this.nim.V2NIMTeamService.off('onSyncFinished', this._onSyncFinished) + this.nim.V2NIMTeamService.off('onSyncStarted', this._onSyncStarted) + this.nim.V2NIMTeamService.off('onTeamCreated', this._onTeamCreated) + this.nim.V2NIMTeamService.off('onTeamDismissed', this._onTeamDismissed) + this.nim.V2NIMTeamService.off('onTeamInfoUpdated', this._onTeamInfoUpdated) + this.nim.V2NIMTeamService.off('onTeamJoined', this._onTeamJoined) + this.nim.V2NIMTeamService.off('onTeamLeft', this._onTeamLeft) + this.nim.V2NIMTeamService.off( + 'onTeamMemberInfoUpdated', + this._onTeamMemberInfoUpdated + ) + this.nim.V2NIMTeamService.off( + 'onTeamMemberJoined', + this._onTeamMemberJoined + ) + this.nim.V2NIMTeamService.off( + 'onTeamMemberKicked', + this._onTeamMemberKicked + ) + this.nim.V2NIMTeamService.off('onTeamMemberLeft', this._onTeamMemberLeft) + this.nim.V2NIMSettingService.off( + 'onTeamMessageMuteModeChanged', + this._onTeamMessageMuteModeChanged + ) + } + /** + * TeamStore 内存中增加群组 + * @param teams - 群组 + */ + TeamStore.prototype.addTeam = function (teams) { + var _this = this + teams + .filter(function (item) { + return !!item.isValidTeam + }) + .filter(function (item) { + return !!item.teamId + }) + .forEach(function (item) { + _this.teams.set(item.teamId, item) + }) + } + /** + * TeamStore 内存中移除群组 + * @param teamIds - 群id数组 + */ + TeamStore.prototype.removeTeam = function (teamIds) { + var _this = this + teamIds.forEach(function (item) { + _this.teams.delete(item) + }) + } + /** + * TeamStore 内存中更新群组 + * @param data - 群组信息 + */ + TeamStore.prototype.updateTeam = function (data) { + var _this = this + data + .filter(function (item) { + return !!item.teamId + }) + .forEach(function (item) { + var oldTeam = _this.teams.get(item.teamId) + if (oldTeam) { + var newTeam = __assign(__assign({}, oldTeam), item) + _this.teams.set(item.teamId, newTeam) + } + }) + } + /** + * 创建群 + * @param __namedParameters.accounts - 要拉进群的成员的帐号列表 + * @param __namedParameters.type - 群类型,默认高级群 + * @param __namedParameters.avatar - 群头像 + * @param __namedParameters.name - 群名称 + * @param __namedParameters.intro - 群简介 + * @param __namedParameters.serverExtension - 群扩展字段 + */ + TeamStore.prototype.createTeamActive = function (_a) { + var _b, _c, _d + var accounts = _a.accounts, + _e = _a.type, + type = + _e === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _e, + avatar = _a.avatar, + name = _a.name, + intro = _a.intro, + serverExtension = _a.serverExtension, + joinMode = _a.joinMode, + agreeMode = _a.agreeMode, + inviteMode = _a.inviteMode, + updateInfoMode = _a.updateInfoMode, + updateExtensionMode = _a.updateExtensionMode + return __awaiter(this, void 0, void 0, function () { + var team, error_1 + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + _f.trys.push([0, 2, , 3]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('createTeamActive', { + accounts: accounts, + type: type, + avatar: avatar, + name: name, + intro: intro, + serverExtension: serverExtension, + }) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.createTeam( + { + avatar: avatar, + teamType: type, + joinMode: joinMode || this.localOptions.teamJoinMode, + agreeMode: agreeMode || this.localOptions.teamAgreeMode, + inviteMode: inviteMode || this.localOptions.teamInviteMode, + updateInfoMode: + updateInfoMode || this.localOptions.teamUpdateTeamMode, + updateExtensionMode: + updateExtensionMode || this.localOptions.teamUpdateExtMode, + name: name, + intro: intro, + serverExtension: serverExtension, + }, + accounts, + '' + ), + ] + case 1: + team = _f.sent().team + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('createTeamActive success', team) + return [2 /*return*/, team] + case 2: + error_1 = _f.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error( + 'createTeamActive failed: ', + { + accounts: accounts, + type: type, + avatar: avatar, + name: name, + intro: intro, + serverExtension: serverExtension, + }, + error_1, + error_1.code, + error_1.detail + ) + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 申请入群 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + */ + TeamStore.prototype.applyTeamActive = function (teamId, type) { + var _a, _b, _c + if (type === void 0) { + type = 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + } + return __awaiter(this, void 0, void 0, function () { + var team, error_2 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('applyTeamActive', teamId) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.applyJoinTeam(teamId, type), + ] + case 1: + team = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('applyTeamActive success', teamId) + return [2 /*return*/, team] + case 2: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('applyTeamActive failed: ', teamId, error_2) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 主动退群 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + */ + TeamStore.prototype.leaveTeamActive = function (teamId, type) { + var _a, _b, _c + if (type === void 0) { + type = 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + } + return __awaiter(this, void 0, void 0, function () { + var error_3 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('leaveTeamActive', teamId) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.leaveTeam(teamId, type), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('leaveTeamActive success', teamId) + return [3 /*break*/, 3] + case 2: + error_3 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('leaveTeamActive failed: ', teamId, error_3) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 解散群 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + */ + TeamStore.prototype.dismissTeamActive = function (teamId, type) { + var _a, _b, _c + if (type === void 0) { + type = 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + } + return __awaiter(this, void 0, void 0, function () { + var error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('dismissTeamActive', teamId) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.dismissTeam(teamId, type), + // 会收到一条 onDissmiss 事件 + ] + case 1: + _d.sent() + // 会收到一条 onDissmiss 事件 + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('dismissTeamActive success', teamId) + return [3 /*break*/, 3] + case 2: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('dismissTeamActive failed: ', teamId, error_4) + throw error_4 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 转让群主 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + * @param account - 新群主帐号 + * @param leave - 是否同时退出群聊,默认 false + */ + TeamStore.prototype.transferTeamActive = function (_a) { + var _b, _c, _d + var teamId = _a.teamId, + _e = _a.type, + type = + _e === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _e, + account = _a.account, + leave = _a.leave + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_f) { + switch (_f.label) { + case 0: + _f.trys.push([0, 2, , 3]) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('transferTeamActive', { + teamId: teamId, + type: type, + account: account, + leave: leave, + }) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.transferTeamOwner( + teamId, + type, + account, + leave !== null && leave !== void 0 + ? leave + : this.localOptions.leaveOnTransfer + ), + ] + case 1: + _f.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('transferTeamActive success', { + teamId: teamId, + type: type, + account: account, + leave: leave, + }) + return [3 /*break*/, 3] + case 2: + error_5 = _f.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error( + 'transferTeamActive failed: ', + { + teamId: teamId, + type: type, + account: account, + leave: leave, + }, + error_5 + ) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 群禁言 + * @param options + * options.teamId - 群id + * options.type - 群类型,默认高级群 + * options.chatBannedMode - 禁言模式 + */ + TeamStore.prototype.setTeamChatBannedActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_6 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('muteTeamActive', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.setTeamChatBannedMode( + options.teamId, + options.type || + 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */, + options.chatBannedMode + ), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('muteTeamActive success', options) + return [3 /*break*/, 3] + case 2: + error_6 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('muteTeamActive failed: ', options, error_6) + throw error_6 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 更新群 + * @param options + * options.teamId - 群id + * options.type - 群类型,默认高级群 + * options.info - 群信息 + */ + TeamStore.prototype.updateTeamActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, _d, type, info, error_7 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('updateTeamActive', options) + ;(teamId = options.teamId), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d), + (info = options.info) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.updateTeamInfo(teamId, type, info), + // 后续在事件中处理 + ] + case 1: + _e.sent() + // 后续在事件中处理 + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('updateTeamActive success', options) + return [3 /*break*/, 3] + case 2: + error_7 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('updateTeamActive failed: ', options, error_7) + throw error_7 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 从内存中获取群信息 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + */ + TeamStore.prototype.getTeamActive = function (teamId, type) { + var _a + if (type === void 0) { + type = 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + } + return __awaiter(this, void 0, void 0, function () { + var team + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamActive: ', teamId) + team = this.teams.get(teamId) + if (team) { + return [2 /*return*/, team] + } + return [4 /*yield*/, this.getTeamForceActive(teamId, type)] + case 1: + team = _b.sent() + this.addTeam([team]) + return [2 /*return*/, team] + } + }) + }) + } + /** + * 从服务端获取群信息 + * @param teamId - 群id + * @param type - 群类型,默认高级群 + */ + TeamStore.prototype.getTeamForceActive = function (teamId, type) { + var _a, _b, _c + if (type === void 0) { + type = 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + } + return __awaiter(this, void 0, void 0, function () { + var res, error_8 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamForceActive: ', teamId) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.getTeamInfo(teamId, type), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getTeamForceActive success', res) + // 这里不能存入 teamStore,因为 teamStore 只有在群中的内容 + return [2 /*return*/, res] + case 2: + error_8 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getTeamForceActive failed: ', teamId, error_8) + throw error_8 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 设置群消息免打扰 + * @param teamId - 群id + * @param teamType - 群类型,默认高级群 + * @param muteMode - 消息免打扰模式 + */ + TeamStore.prototype.setTeamMessageMuteModeActive = function ( + teamId, + teamType, + muteMode + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_9 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('setTeamMessageMuteModeActive', { + teamId: teamId, + teamType: teamType, + muteMode: muteMode, + }) + return [ + 4 /*yield*/, + this.nim.V2NIMSettingService.setTeamMessageMuteMode( + teamId, + teamType, + muteMode + ), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('setTeamMessageMuteModeActive success', { + teamId: teamId, + teamType: teamType, + muteMode: muteMode, + }) + return [3 /*break*/, 3] + case 2: + error_9 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'setTeamMessageMuteModeActive failed: ', + { teamId: teamId, teamType: teamType, muteMode: muteMode }, + error_9 + ) + throw error_9 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 被邀请者接受入群邀请 + * @param options V2NIMTeamJoinActionInfo + */ + TeamStore.prototype.acceptTeamInviteActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_10 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('acceptTeamInviteActive: ', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.acceptInvitation(options), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('acceptTeamInviteActive success', options) + return [3 /*break*/, 3] + case 2: + error_10 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('acceptTeamInviteActive failed: ', options, error_10) + throw error_10 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 被邀请者拒绝入群邀请 + * @param options V2NIMTeamJoinActionInfo + */ + TeamStore.prototype.rejectTeamInviteActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_11 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('rejectTeamInviteActive: ', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.rejectInvitation(options), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('rejectTeamInviteActive success', options) + return [3 /*break*/, 3] + case 2: + error_11 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('rejectTeamInviteActive failed: ', options, error_11) + throw error_11 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 管理员通过入群申请 + * @param options V2NIMTeamJoinActionInfo + */ + TeamStore.prototype.acceptJoinApplicationActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_12 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('acceptJoinApplicationActive: ', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.acceptJoinApplication(options), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('acceptJoinApplicationActive success', options) + return [3 /*break*/, 3] + case 2: + error_12 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'acceptJoinApplicationActive failed: ', + options, + error_12 + ) + throw error_12 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 管理员拒绝入群申请 + * @param options V2NIMTeamJoinActionInfo + */ + TeamStore.prototype.rejectTeamApplyActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_13 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('rejectTeamApplyActive: ', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.rejectJoinApplication(options), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('rejectTeamApplyActive success', options) + return [3 /*break*/, 3] + case 2: + error_13 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('rejectTeamApplyActive failed: ', options, error_13) + throw error_13 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 设置成员角色 + * @param options + * options.teamId - 群id + * options.type - 群类型,默认高级群 + * options.accounts - 群管理员 accid + * options.role - 角色 + */ + TeamStore.prototype.updateTeamMemberRoleActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, _d, type, accounts, role, error_14 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('addTeamManagersActive: ', options) + ;(teamId = options.teamId), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d), + (accounts = options.accounts), + (role = options.role) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.updateTeamMemberRole( + teamId, + type, + accounts, + role + ), + ] + case 1: + _e.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('addTeamManagersActive success', options) + return [3 /*break*/, 3] + case 2: + error_14 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('addTeamManagersActive failed: ', options, error_14) + throw error_14 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** 获取群组申请动作信息 */ + TeamStore.prototype.getTeamJoinActionInfoListActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_15 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamJoinActionInfoListActive: ', options) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.getTeamJoinActionInfoList(options), + ] + case 1: + res = _d.sent() + this.rootStore.sysMsgStore.addTeamJoinActionMsg(res.infos) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getTeamJoinActionInfoListActive success', res) + return [2 /*return*/, res] + case 2: + error_15 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getTeamJoinActionInfoListActive failed: ', + options, + error_15 + ) + throw error_15 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** 获取已加入的群组列表 */ + TeamStore.prototype.getJoinedTeamListActive = function () { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teams, error_16 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getJoinedTeamListActive') + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.getJoinedTeamList([1]), + ] + case 1: + teams = _d.sent() + this.addTeam(teams) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getJoinedTeamListActive success', teams) + return [2 /*return*/, teams] + case 2: + error_16 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getJoinedTeamListActive failed: ', error_16) + throw error_16 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取群消息免打扰状态 + * @param teamId - 群id + * @param teamType - 群组类型,包括高级群和超大群。 + */ + TeamStore.prototype.getTeamMessageMuteModeActive = function ( + teamId, + teamType + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var muteMode, error_17 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamMessageMuteModeActive', teamId, teamType) + return [ + 4 /*yield*/, + this.nim.V2NIMSettingService.getTeamMessageMuteMode( + teamId, + teamType + ), + ] + case 1: + muteMode = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getTeamMessageMuteModeActive success', teamId, teamType) + return [2 /*return*/, muteMode] + case 2: + error_17 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getTeamMessageMuteModeActive failed: ', + teamId, + teamType, + error_17 + ) + throw error_17 + case 3: + return [2 /*return*/] + } + }) + }) + } + TeamStore.prototype._onReceiveTeamJoinActionInfo = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onReceiveTeamJoinActionInfo: ', data) + this.rootStore.sysMsgStore.addTeamJoinActionMsg([data]) + } + TeamStore.prototype._onSyncFailed = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onSyncFailed: ', data) + } + TeamStore.prototype._onSyncFinished = function () { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_c) { + // 获取会话列表 + ;(_a = this.rootStore.conversationStore) === null || _a === void 0 + ? void 0 + : _a.getConversationListActive( + 0, + this.rootStore.localOptions.conversationLimit || 100 + ) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('V2NIMTeamService _onSyncFinished') + return [2 /*return*/] + }) + }) + } + TeamStore.prototype._onSyncStarted = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onSyncStarted') + } + TeamStore.prototype._onTeamCreated = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamCreated: ', data) + this.addTeam([data]) + // 不用自己插入会话了,因为 SDK 会有会话创建回调 + } + TeamStore.prototype._onTeamDismissed = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamDismissed: ', data) + this._handleRemoveTeam(data.teamId) + } + TeamStore.prototype._onTeamInfoUpdated = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamInfoUpdated: ', data) + this.updateTeam([data]) + } + TeamStore.prototype._onTeamJoined = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamJoined: ', data) + this.addTeam([data]) + // 不用自己插入会话了,因为 SDK 会有会话创建回调 + } + TeamStore.prototype._onTeamLeft = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamLeft: ', data) + this._handleRemoveTeam(data.teamId) + return [2 /*return*/] + }) + }) + } + TeamStore.prototype._onTeamMemberInfoUpdated = function (data) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamMemberInfoUpdated: ', data) + var teamId = data[0].teamId + this.rootStore.teamMemberStore.updateTeamMember(teamId, data) + } + TeamStore.prototype._onTeamMemberJoined = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var teamId + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamMemberJoined: ', data) + teamId = data[0].teamId + this.rootStore.teamMemberStore.addTeamMember(teamId, data) + return [2 /*return*/] + }) + }) + } + TeamStore.prototype._onTeamMemberKicked = function (opeartorId, data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var teamId + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamMemberKicked: ', opeartorId, data) + teamId = data[0].teamId + this.rootStore.teamMemberStore.removeTeamMember( + teamId, + data.map(function (item) { + return item.accountId + }) + ) + return [2 /*return*/] + }) + }) + } + TeamStore.prototype._onTeamMemberLeft = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var teamId + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('V2NIMTeamService _onTeamMemberLeft: ', data) + teamId = data[0].teamId + this.rootStore.teamMemberStore.removeTeamMember( + teamId, + data.map(function (item) { + return item.accountId + }) + ) + return [2 /*return*/] + }) + }) + } + TeamStore.prototype._handleRemoveTeam = function (teamId) { + this.removeTeam([teamId]) + // 手动释放内存 + this.rootStore.teamMemberStore.removeTeamMember(teamId) + } + TeamStore.prototype._onTeamMessageMuteModeChanged = function ( + teamId, + teamType, + muteMode + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'V2NIMTeamService _onTeamMessageMuteModeChanged: ', + teamId, + teamType, + muteMode + ) + } + return TeamStore +})() + +/**Mobx 可观察对象,负责管理群组成员的子 store*/ +var TeamMemberStore = /** @class */ (function () { + function TeamMemberStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.teamMembers = new Map() + this.logger = null + makeAutoObservable(this) + this.logger = rootStore.logger + } + TeamMemberStore.prototype.resetState = function () { + this.teamMembers.clear() + } + /** + * 销毁TeamMemberStore,会取消相关事件监听 + */ + TeamMemberStore.prototype.destroy = function () { + this.resetState() + } + /** + * 拉人入群 + * @param options + * options.teamId - 群id + * options.type - 群类型, 默认高级群 + * options.accounts - 要拉进群的成员的帐号列表 + * options.ps - 邀请附言 + */ + TeamMemberStore.prototype.addTeamMemberActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, _d, type, accounts, ps, error_1 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('addTeamMemberActive', options) + ;(teamId = options.teamId), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d), + (accounts = options.accounts), + (ps = options.ps) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.inviteMember( + teamId, + type, + accounts, + ps + ), + // 事件中处理 + ] + case 1: + _e.sent() + // 事件中处理 + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('addTeamMemberActive success', options) + return [3 /*break*/, 3] + case 2: + error_1 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('addTeamMemberActive failed: ', options, error_1) + throw error_1 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 踢人出群 + * @param options + * options.teamId - 群id + * options.type - 群类型, 默认高级群 + * options.accounts - 要拉进群的成员的帐号列表 + */ + TeamMemberStore.prototype.removeTeamMemberActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, _d, type, accounts, error_2 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('removeTeamMemberActive', options) + ;(teamId = options.teamId), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d), + (accounts = options.accounts) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.kickMember(teamId, type, accounts), + // 事件中处理 + ] + case 1: + _e.sent() + // 事件中处理 + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('removeTeamMemberActive success', options) + return [3 /*break*/, 3] + case 2: + error_2 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('removeTeamMemberActive failed: ', options, error_2) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取群成员 + * @param options + * options.teamId - 群id + * options.queryOption - 查询选项 + * options.type - 群类型, 默认高级群 + */ + TeamMemberStore.prototype.getTeamMemberActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, queryOption, _d, type, res, error_3 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getTeamMemberActive', options) + ;(teamId = options.teamId), + (queryOption = options.queryOption), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.getTeamMemberList( + teamId, + type, + queryOption + ), + ] + case 1: + res = _e.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'getTeamMemberActive success: ', + teamId, + type, + queryOption, + res + ) + this.setTeamMembers(teamId, res.memberList) + return [2 /*return*/, res] + case 2: + error_3 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getTeamMemberActive failed: ', options, error_3) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 更新我在群中的信息 + * @param options + * options.teamId - 群id + * options.type - 群类型, 默认高级群 + * options.memberInfo - 更新的信息 + */ + TeamMemberStore.prototype.updateMyMemberInfoActive = function (options) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var teamId, _d, type, memberInfo, error_4 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('updateMyMemberInfo', options) + ;(teamId = options.teamId), + (_d = options.type), + (type = + _d === void 0 + ? 1 /* V2NIMConst.V2NIMTeamType.V2NIM_TEAM_TYPE_ADVANCED */ + : _d), + (memberInfo = options.memberInfo) + return [ + 4 /*yield*/, + this.nim.V2NIMTeamService.updateSelfTeamMemberInfo( + teamId, + type, + memberInfo + ), + ] + case 1: + _e.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('updateMyMemberInfo success: ', options) + return [3 /*break*/, 3] + case 2: + error_4 = _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('updateMyMemberInfo failed: ', options, error_4) + throw error_4 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 内存中设置群成员,会覆盖原有的成员 + * @param teamId - 群id + * @param members - 群成员 + */ + TeamMemberStore.prototype.setTeamMembers = function (teamId, members) { + var teamMembers = new Map() + members.forEach(function (item) { + teamMembers.set(item.accountId, item) + }) + this.teamMembers.set(teamId, teamMembers) + } + /** + * 内存中添加群成员 + * @param teamId - 群id + * @param members - 群成员 + */ + TeamMemberStore.prototype.addTeamMember = function (teamId, members) { + var teamMembers = this.teamMembers.get(teamId) + if (!teamMembers) { + teamMembers = new Map() + } + members + .filter(function (item) { + return !!item.inTeam + }) + .filter(function (item) { + return !!item.accountId + }) + .forEach(function (item) { + teamMembers.set(item.accountId, item) + }) + this.teamMembers.set(teamId, teamMembers) + } + /** + * 内存中移除群成员 + * @param teamId - 群id + * @param accounts - 群成员数组 + */ + TeamMemberStore.prototype.removeTeamMember = function (teamId, accounts) { + if (!accounts || !accounts.length) { + this.teamMembers.delete(teamId) + return + } + var teamMembers = this.teamMembers.get(teamId) + if (!teamMembers) { + return + } + accounts.forEach(function (item) { + teamMembers.delete(item) + }) + this.teamMembers.set(teamId, teamMembers) + } + /** + * 内存中更新群成员处理函数 + * @param teamId - 群id + * @param members - 群成员 + */ + TeamMemberStore.prototype.updateTeamMember = function (teamId, members) { + var teamMembers = this.teamMembers.get(teamId) + if (!teamMembers) { + return + } + members.forEach(function (item) { + var m = teamMembers.get(item.accountId) + if (m) { + m = __assign(__assign({}, m), item) + teamMembers.set(item.accountId, m) + } + }) + this.teamMembers.set(teamId, teamMembers) + } + /** + * 从内存中获取群成员信息 + * @param teamId - 群id + * @param accounts - 群成员数组 + */ + TeamMemberStore.prototype.getTeamMember = function (teamId, accounts) { + var _a + var teamMembers = __spreadArray( + [], + __read( + ((_a = this.teamMembers.get(teamId)) === null || _a === void 0 + ? void 0 + : _a.values()) || [] + ), + false + ) + if (!accounts || !accounts.length) { + return teamMembers + } + return teamMembers.filter(function (item) { + return accounts.some(function (j) { + return j === item.accountId + }) + }) + } + return TeamMemberStore +})() + +/**Mobx 可观察对象,负责管理系统消息的子 store */ +var SysMsgStore = /** @class */ (function () { + function SysMsgStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + /** 好友申请消息 */ + this.friendApplyMsg = new Map() + this.teamJoinActionMsg = new Map() + this.logger = null + makeAutoObservable(this) + this.logger = rootStore.logger + } + SysMsgStore.prototype.resetState = function () { + this.friendApplyMsg.clear() + this.teamJoinActionMsg.clear() + } + /** + * 销毁SysMsgStore,会取消系统消息事件监听 + */ + SysMsgStore.prototype.destroy = function () { + this.resetState() + } + Object.defineProperty(SysMsgStore.prototype, 'friendApplyMsgs', { + get: function () { + return Array.from(this.friendApplyMsg.values()).sort(function (a, b) { + return b.timestamp - a.timestamp + }) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(SysMsgStore.prototype, 'teamJoinActionMsgs', { + get: function () { + return Array.from(this.teamJoinActionMsg.values()).sort(function (a, b) { + return b.timestamp - a.timestamp + }) + }, + enumerable: false, + configurable: true, + }) + /** + * 增加内存中的好友申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.addFriendApplyMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createFriendApplyMsgKey(msg) + _this.friendApplyMsg.set(key, msg) + }) + } + /** + * 删除内存中的好友申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.deleteFriendApplyMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createFriendApplyMsgKey(msg) + _this.friendApplyMsg.delete(key) + }) + } + /** + * 更新内存中的好友申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.updateFriendApplyMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createFriendApplyMsgKey(msg) + var oldMsg = _this.friendApplyMsg.get(key) + if (oldMsg) { + _this.friendApplyMsg.set(key, __assign(__assign({}, oldMsg), msg)) + } + }) + } + /** + * 增加内存中的入群申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.addTeamJoinActionMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createTeamJoinActionMsgKey(msg) + _this.teamJoinActionMsg.set(key, msg) + }) + } + /** + * 删除内存中的入群申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.deleteTeamJoinActionMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createTeamJoinActionMsgKey(msg) + _this.teamJoinActionMsg.delete(key) + }) + } + /** + * 更新内存中的入群申请消息 + * @param msgs 系统消息对象数组 + */ + SysMsgStore.prototype.updateTeamJoinActionMsg = function (msgs) { + var _this = this + msgs.forEach(function (msg) { + var key = _this.createTeamJoinActionMsgKey(msg) + var oldMsg = _this.teamJoinActionMsg.get(key) + var newMsg = __assign(__assign({}, oldMsg), msg) + _this.teamJoinActionMsg.set(key, newMsg) + }) + } + /** 获取未读好友申请消息数量 */ + SysMsgStore.prototype.getUnreadFriendApplyMsgsCount = function () { + return this.friendApplyMsgs.filter(function (msg) { + return !msg.isRead + }).length + } + /** 获取未读入群申请消息数量 */ + SysMsgStore.prototype.getUnreadTeamJoinActionMsgsCount = function () { + return this.teamJoinActionMsgs.filter(function (msg) { + return !msg.isRead + }).length + } + /** 获取未读消息总数 */ + SysMsgStore.prototype.getTotalUnreadMsgsCount = function () { + return ( + this.getUnreadFriendApplyMsgsCount() + + this.getUnreadTeamJoinActionMsgsCount() + ) + } + /** 设置所有申请消息为已读 */ + SysMsgStore.prototype.setAllApplyMsgRead = function () { + this.updateFriendApplyMsg( + this.friendApplyMsgs.map(function (msg) { + return __assign(__assign({}, msg), { isRead: true }) + }) + ) + this.updateTeamJoinActionMsg( + this.teamJoinActionMsgs.map(function (msg) { + return __assign(__assign({}, msg), { isRead: true }) + }) + ) + } + /** 创建群组申请消息的 key */ + SysMsgStore.prototype.createTeamJoinActionMsgKey = function (msg) { + return '' + .concat(msg.teamId, '_') + .concat(msg.operatorAccountId, '_') + .concat(msg.actionType) + } + /** 创建好友申请消息的 key */ + SysMsgStore.prototype.createFriendApplyMsgKey = function (msg) { + return ''.concat(msg.applicantAccountId, '_').concat(msg.recipientAccountId) + } + return SysMsgStore +})() + +/**Mobx 可观察对象,负责管理用户信息(包含陌生人)的子 store */ +var UserStore = /** @class */ (function () { + function UserStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.users = new Map() + this.myUserInfo = { + accountId: this.nim.V2NIMLoginService.getLoginUser(), + name: '', + createTime: Date.now(), + updateTime: Date.now(), + } + this.logger = null + this._getUserInfo = frequencyControl(this._getUserInfos, 1000, 100) + makeAutoObservable(this) + this._onUserProfileChanged = this._onUserProfileChanged.bind(this) + this.logger = rootStore.logger + // 用户资料变更回调,返回变更的用户资料列表 + nim.V2NIMUserService.on('onUserProfileChanged', this._onUserProfileChanged) + } + UserStore.prototype.resetState = function () { + this.users.clear() + this.myUserInfo = { + accountId: this.nim.V2NIMLoginService.getLoginUser(), + name: '', + createTime: Date.now(), + updateTime: Date.now(), + } + } + /** + * 销毁UserStore,会取消相关事件监听 + */ + UserStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMUserService.off( + 'onUserProfileChanged', + this._onUserProfileChanged + ) + } + /** + * 内存中增加users + * @param users - users数组 + */ + UserStore.prototype.addUsers = function (users) { + var _this = this + users + .filter(function (item) { + return !!item.accountId + }) + .forEach(function (item) { + _this.users.set(item.accountId, item) + }) + } + /** + * 内存中删除users + * @param users - users数组 + */ + UserStore.prototype.removeUsers = function (accounts) { + var _this = this + accounts.forEach(function (item) { + _this.users.delete(item) + }) + } + /** + * 获取我自己的 serverExtension 字段 + */ + UserStore.prototype.getMyUserServerExt = function () { + var _a + var serverExt = {} + try { + serverExt = JSON.parse( + ((_a = this.myUserInfo) === null || _a === void 0 + ? void 0 + : _a.serverExtension) || '{}' + ) + } catch (error) { + // + } + return serverExt + } + /** + * 更新自己的用户资料 + * @param updateParams + * updateParams.nick - 昵称 + * updateParams.avatar - 头像 + * updateParams.sign - 签名 + * updateParams.gender - 性别 + * updateParams.email - 邮箱 + * updateParams.birth - 生日 + * updateParams.tel - 手机号 + * updateParams.serverExtension - 扩展字段 + * + * @param fileObj - 头像文件对象、或者在小程序中,文件路径 + */ + UserStore.prototype.updateSelfUserProfileActive = function ( + updateParams, + fileObj + ) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var task, avatarUrl, error_1, error_2 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 6, , 7]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('updateSelfUserProfileActive', updateParams, fileObj) + if (!fileObj) return [3 /*break*/, 4] + _e.label = 1 + case 1: + _e.trys.push([1, 3, , 4]) + task = this.nim.V2NIMStorageService.createUploadFileTask({ + fileObj: fileObj, + }) + return [ + 4 /*yield*/, + this.nim.V2NIMStorageService.uploadFile(task, function () { + /**/ + }), + ] + case 2: + avatarUrl = _e.sent() + updateParams.avatar = avatarUrl + return [3 /*break*/, 4] + case 3: + error_1 = _e.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn('upload avatar error and save continue.', error_1) + return [3 /*break*/, 4] + case 4: + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.updateSelfUserProfile(updateParams), + ] + case 5: + _e.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log( + 'updateSelfUserProfileActive success', + updateParams, + fileObj + ) + return [3 /*break*/, 7] + case 6: + error_2 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error( + 'updateSelfUserProfileActive failed:', + updateParams, + error_2, + fileObj + ) + throw error_2 + case 7: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取用户最新信息(如果内存中存在,就不去服务器取最新的了) + * @param accountIds - 账号id数组 + */ + UserStore.prototype.getUserActive = function (accountId) { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + var user + return __generator(this, function (_c) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getUserListActive', accountId) + user = this.users.get(accountId) + if (user) { + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getUserListActive success', user, accountId) + return [2 /*return*/, user] + } + return [2 /*return*/, this.getUserForceActive(accountId)] + }) + }) + } + /** + * 获取用户最新信息 + * @param accountIds - 账号id数组 + */ + UserStore.prototype.getUserForceActive = function (accountId) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var user, error_3 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getUserForceActive', accountId) + return [4 /*yield*/, this._getUserInfo(accountId)] + case 1: + user = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getUserForceActive success', user, accountId) + return [2 /*return*/, user] + case 2: + error_3 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getUserForceActive failed: ', accountId, error_3) + throw error_3 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取用户最新信息(始终从服务器取最新的,用于点开用户头像时) + * @param accountIds - 账号id数组 + */ + UserStore.prototype.getUserListFromCloudActive = function (accountIds) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var users, error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getUserListFromCloudActive', accountIds) + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.getUserListFromCloud(accountIds), + ] + case 1: + users = _d.sent() + this.addUsers(users) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getUserListFromCloudActive success', users, accountIds) + return [2 /*return*/, users] + case 2: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'getUserListFromCloudActive failed: ', + accountIds, + error_4 + ) + throw error_4 + case 3: + return [2 /*return*/] + } + }) + }) + } + // 获取自己的用户信息 + UserStore.prototype.getMyUserInfoActive = function () { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var myUserInfo, error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getMyUserInfoActive') + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.getUserList([ + this.nim.V2NIMLoginService.getLoginUser(), + ]), + ] + case 1: + myUserInfo = _d.sent() + this.myUserInfo = myUserInfo[0] + this.addUsers(myUserInfo) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getMyUserInfoActive success', myUserInfo) + return [2 /*return*/, myUserInfo[0]] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('getMyUserInfoActive failed: ', error_5) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + UserStore.prototype._getUserInfos = function (accountIds) { + return __awaiter(this, void 0, void 0, function () { + var users + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + return [ + 4 /*yield*/, + this.nim.V2NIMUserService.getUserList(accountIds), + ] + case 1: + users = _a.sent() + this.addUsers(users) + return [2 /*return*/, users] + } + }) + }) + } + UserStore.prototype._onUserProfileChanged = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onUserProfileChanged: ', data) + data.forEach(function (item) { + if (item.accountId === _this.myUserInfo.accountId) { + _this.myUserInfo = item + } + }) + this.addUsers(data) + } + return UserStore +})() + +var AIUserStore = /** @class */ (function () { + function AIUserStore(rootStore, nim, localOptions) { + this.rootStore = rootStore + this.nim = nim + this.localOptions = localOptions + this.aiUsers = new Map() + this.aiReqMsgs = [] + this.aiResMsgs = [] + this.logger = null + this.onSendAIProxyErrorHandler = function () { + // + } + this.requestIds = [] + this.proxyAccountId = '' + makeAutoObservable(this) + this.logger = rootStore.logger + this._onProxyAIModelCall = this._onProxyAIModelCall.bind(this) + this.nim.V2NIMAIService.on('onProxyAIModelCall', this._onProxyAIModelCall) + } + Object.defineProperty(AIUserStore.prototype, 'aiProxying', { + get: function () { + return this.aiReqMsgs.length > this.aiResMsgs.length + }, + enumerable: false, + configurable: true, + }) + AIUserStore.prototype.resetState = function () { + this.aiUsers.clear() + this.aiReqMsgs = [] + this.aiResMsgs = [] + } + /** + * 销毁 AIUserStore,会取消相关事件监听 + */ + AIUserStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMAIService.off('onProxyAIModelCall', this._onProxyAIModelCall) + } + /** 内存中增加 AIUsers */ + AIUserStore.prototype.addAIUsers = function (aiUsers) { + var _this = this + aiUsers + .filter(function (item) { + return !!item.accountId + }) + .forEach(function (item) { + _this.aiUsers.set(item.accountId, item) + }) + } + /** 内存中删除 AIUsers */ + AIUserStore.prototype.removeAIUsers = function (accounts) { + var _this = this + accounts.forEach(function (item) { + _this.aiUsers.delete(item) + }) + } + /** + * 获取 AIUsers + */ + AIUserStore.prototype.getAIUserList = function (accountIds) { + var aiUsers = __spreadArray([], __read(this.aiUsers.values()), false) + var sortHandler = function (a, b) { + return b.createTime - a.createTime + } + if (accountIds && accountIds.length) { + return aiUsers + .filter(function (item) { + return accountIds.includes(item.accountId) + }) + .sort(sortHandler) + } + return aiUsers.sort(sortHandler) + } + /** + * 获取 AI 划词数字人 + */ + AIUserStore.prototype.getAISearchUser = function () { + var _a, _b + var aiUsers = this.getAIUserList() + return (_b = + (_a = this.localOptions.aiUserAgentProvider) === null || _a === void 0 + ? void 0 + : _a.getAISearchUser) === null || _b === void 0 + ? void 0 + : _b.call(_a, aiUsers) + } + /** + * 获取 AI 翻译数字人 + */ + AIUserStore.prototype.getAITranslateUser = function () { + var _a, _b + var aiUsers = this.getAIUserList() + return (_b = + (_a = this.localOptions.aiUserAgentProvider) === null || _a === void 0 + ? void 0 + : _a.getAITranslateUser) === null || _b === void 0 + ? void 0 + : _b.call(_a, aiUsers) + } + /** + * 获取 AI 翻译语言 + */ + AIUserStore.prototype.getAITranslateLangs = function () { + var _a, _b + var aiUsers = this.getAIUserList() + return ( + ((_b = + (_a = this.localOptions.aiUserAgentProvider) === null || _a === void 0 + ? void 0 + : _a.getAITranslateLangs) === null || _b === void 0 + ? void 0 + : _b.call(_a, aiUsers)) || [] + ) + } + /** + * 获取 AI 数字人的 serverExtension + */ + AIUserStore.prototype.getAIUserServerExt = function (accountId) { + var aiUser = this.aiUsers.get(accountId) + if (!aiUser) { + return {} + } + try { + return JSON.parse(aiUser.serverExtension || '{}') + } catch (error) { + return {} + } + } + /** + * 获取 AI 聊数字人,AI 聊是指可以被 @ 的数字人 + */ + AIUserStore.prototype.getAIChatUser = function () { + var _this = this + var aiUsers = this.getAIUserList() + return aiUsers.filter(function (item) { + var serverExt = _this.getAIUserServerExt(item.accountId) + return serverExt.aiChat === 1 + }) + } + /** + * 获取配置过默认置顶的数字人,仅代表配置过,不代表当前置顶 + */ + AIUserStore.prototype.getAIPinDefaultUser = function () { + var _this = this + var aiUsers = this.getAIUserList() + return aiUsers.filter(function (item) { + var serverExt = _this.getAIUserServerExt(item.accountId) + return serverExt.pinDefault === 1 + }) + } + /** + * 获取当前置顶的数字人 + */ + AIUserStore.prototype.getAIPinUser = function () { + var myUserServerExt = this.rootStore.userStore.getMyUserServerExt() + return this.getAIPinDefaultUser().filter(function (item) { + var _a + return !((_a = myUserServerExt.unpinAIUsers) === null || _a === void 0 + ? void 0 + : _a.includes(item.accountId)) + }) + } + /** + * 判断一个数字人是否 pin 置顶 + */ + AIUserStore.prototype.isAIPinUser = function (accountId) { + return this.getAIPinUser().some(function (item) { + return item.accountId === accountId + }) + } + /** + * 判断是否正在 AI 划词中 + */ + AIUserStore.prototype.isAISearching = function () { + var _a + return ( + this.proxyAccountId === + ((_a = this.getAISearchUser()) === null || _a === void 0 + ? void 0 + : _a.accountId) + ) + } + /** + * 判断是否正在 AI 翻译中 + */ + AIUserStore.prototype.isAITranslating = function () { + var _a + return ( + this.proxyAccountId === + ((_a = this.getAITranslateUser()) === null || _a === void 0 + ? void 0 + : _a.accountId) + ) + } + /** + * 判断是否AI数字人 + */ + AIUserStore.prototype.isAIUser = function (accountId) { + return this.aiUsers.has(accountId) + } + /** + * 重置 AI 代理状态 + */ + AIUserStore.prototype.resetAIProxy = function () { + this.requestIds = [] + this.aiReqMsgs = [] + this.aiResMsgs = [] + this.proxyAccountId = '' + this.onSendAIProxyErrorHandler = function () { + // + } + } + /** + * 从 sdk 获取 AI 数字人列表并维护到内存中 + */ + AIUserStore.prototype.getAIUserListActive = function () { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var aiUsers, error_1 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('getAIUserListActive') + return [4 /*yield*/, this.nim.V2NIMAIService.getAIUserList()] + case 1: + aiUsers = _d.sent() + this.addAIUsers(aiUsers) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('getAIUserListActive success:', aiUsers) + return [3 /*break*/, 3] + case 2: + error_1 = _d.sent() + // 未开通ai聊功能的 此处不需要报错 + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('getAIUserListActive failed:', error_1) + return [3 /*break*/, 3] + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 发送 AI 代理请求 + * @params requestId 请求 ID,用于区分不同的请求,传就表示新的请求,不传表示继续上次的请求 + */ + AIUserStore.prototype.sendAIProxyActive = function (params) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var finalParams, error_2 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('sendAIProxyActive', params) + finalParams = __assign({}, params) + // 表示新的请求,重置 requestId、aiResMsgs、proxyAccountId + if (params.requestId) { + this.resetAIProxy() + this.requestIds.push(params.requestId) + this.proxyAccountId = params.accountId + } else { + finalParams.requestId = Math.random().toString(36).slice(2) + this.requestIds.push(finalParams.requestId) + } + if (params.onSendAIProxyErrorHandler) { + this.onSendAIProxyErrorHandler = params.onSendAIProxyErrorHandler + } + return [ + 4 /*yield*/, + this.nim.V2NIMAIService.proxyAIModelCall(finalParams), + ] + case 1: + _d.sent() + this.aiReqMsgs.push(params.content) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('sendAIProxyActive success:', params) + return [3 /*break*/, 3] + case 2: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error('sendAIProxyActive failed:', error_2.toString()) + this.onSendAIProxyErrorHandler(error_2.code) + throw error_2 + case 3: + return [2 /*return*/] + } + }) + }) + } + AIUserStore.prototype._onProxyAIModelCall = function (res) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('_onProxyAIModelCall', res) + if (this.requestIds.includes(res.requestId)) { + if (res.code === 200) { + this.aiResMsgs.push(res.content.msg) + } else { + this.aiReqMsgs.pop() + this.onSendAIProxyErrorHandler(res.code) + } + } + } + return AIUserStore +})() + +/** Mobx 可观察对象,负责 UI 会用到的属性的子 store */ +var UiStore = /** @class */ (function () { + function UiStore(rootStore) { + this.rootStore = rootStore + // 这边使用 undefined 会导致无法被注册成 observable,但是 demo 上没问题,不知道是为什么,很懵逼,但是先把这边附上默认值就可以解决 + this.selectedContactType = '' + /** + * 当前选中的会话 + */ + this.selectedConversation = '' + this.logger = null + makeAutoObservable(this) + this.logger = rootStore.logger + } + /** + * 重置状态 + */ + UiStore.prototype.resetState = function () { + this.selectedContactType = '' + this.selectedConversation = '' + } + /** + * 销毁UiStore,使UI重置 + */ + UiStore.prototype.destroy = function () { + this.resetState() + } + /** + * 通讯录选中类型 + * @param contactType - 导航类型 + */ + UiStore.prototype.selectContactType = function (contactType) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('selectContactType: ', contactType) + this.selectedContactType = contactType + } + /** + * 取消通讯录选中 + */ + UiStore.prototype.unselectContactType = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('unselectContactType') + this.selectedContactType = '' + } + /** + * 切换会话 + * @param conversationId - 会话ID + */ + UiStore.prototype.selectConversation = function (conversationId) { + var _a, _b, _c, _d, _e, _f + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_g) { + switch (_g.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('selectConversation: ', conversationId) + if (conversationId === this.selectedConversation) { + return [2 /*return*/] + } + this.rootStore.msgStore.msgs.resetLimitState() + this.selectedConversation = conversationId + if (!conversationId) return [3 /*break*/, 4] + if ( + !((_b = this.rootStore.sdkOptions) === null || _b === void 0 + ? void 0 + : _b.enableV2CloudConversation) + ) + return [3 /*break*/, 2] + ;(_c = this.rootStore.conversationStore) === null || _c === void 0 + ? void 0 + : _c.resetConversationAit(conversationId) + return [ + 4 /*yield*/, + (_d = this.rootStore.conversationStore) === null || _d === void 0 + ? void 0 + : _d.resetConversation(conversationId), + ] + case 1: + _g.sent() + return [3 /*break*/, 4] + case 2: + ;(_e = this.rootStore.localConversationStore) === null || + _e === void 0 + ? void 0 + : _e.resetConversationAit(conversationId) + return [ + 4 /*yield*/, + (_f = this.rootStore.localConversationStore) === null || + _f === void 0 + ? void 0 + : _f.resetConversation(conversationId), + ] + case 3: + _g.sent() + _g.label = 4 + case 4: + return [2 /*return*/] + } + }) + }) + } + /** + * 取消选中会话 + */ + UiStore.prototype.unselectConversation = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('unselectConversation') + this.selectedConversation = '' + this.rootStore.msgStore.msgs.resetLimitState() + } + /** + * 获取用户关系 + * @param account - 账号 + */ + UiStore.prototype.getRelation = function (account) { + var res = 'stranger' + if (this.rootStore.userStore.myUserInfo.accountId === account) { + res = 'myself' + } else if (this.rootStore.aiUserStore.aiUsers.has(account)) { + res = 'ai' + } else if (this.rootStore.friendStore.friends.has(account)) { + res = 'friend' + } else { + res = 'stranger' + } + // this.logger?.log('getRelation success', account, res) + return { + relation: res, + isInBlacklist: this.rootStore.relationStore.isInBlacklist(account), + } + } + /** + * 获取好友名片 + * * @param account - 账号 + */ + UiStore.prototype.getFriendWithUserNameCard = function (account) { + var friend = this.rootStore.friendStore.friends.get(account) || { + accountId: '', + serverExtension: '', + customerExtension: '', + } + var userCard = this.rootStore.userStore.users.get(account) || { + accountId: '', + name: '', + createTime: Date.now(), + } + return __assign(__assign({}, friend), userCard) + } + /** + * 查询用户称谓 + * 优先级按照 备注 > 群昵称 > 好友昵称 > 消息上的昵称 > 好友账号 返回,如果是机器人则优先返回机器人名字 + * * @param account - 账号 + * * @param teamId - 群号 + * * @param ignoreAlias - 是否忽略好友备注 + * * @param nickFromMsg - 消息上的昵称 + */ + UiStore.prototype.getAppellation = function (_a) { + var _b + var account = _a.account, + _c = _a.teamId, + teamId = _c === void 0 ? '' : _c, + _d = _a.ignoreAlias, + ignoreAlias = _d === void 0 ? false : _d, + _e = _a.nickFromMsg, + nickFromMsg = _e === void 0 ? '' : _e + var aiUser = this.rootStore.aiUserStore.aiUsers.get(account) + if (aiUser) { + return aiUser.name || account + } + var friend = this.rootStore.friendStore.friends.get(account) + var user = this.rootStore.userStore.users.get(account) + var teamMember = + (_b = this.rootStore.teamMemberStore.teamMembers.get(teamId)) === null || + _b === void 0 + ? void 0 + : _b.get(account) + return ( + (!ignoreAlias && + (friend === null || friend === void 0 ? void 0 : friend.alias)) || + (teamMember === null || teamMember === void 0 + ? void 0 + : teamMember.teamNick) || + (user === null || user === void 0 ? void 0 : user.name) || + nickFromMsg || + account + ) + } + Object.defineProperty(UiStore.prototype, 'friends', { + get: function () { + return __spreadArray( + [], + __read(this.rootStore.friendStore.friends.values()), + false + ) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(UiStore.prototype, 'conversations', { + get: function () { + var _a + return ( + (_a = this.rootStore.conversationStore) === null || _a === void 0 + ? void 0 + : _a.conversations.values() + ) + ? __spreadArray( + [], + __read(this.rootStore.conversationStore.conversations.values()), + false + ) + : [] + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(UiStore.prototype, 'localConversations', { + get: function () { + var _a + return ( + (_a = this.rootStore.localConversationStore) === null || _a === void 0 + ? void 0 + : _a.conversations.values() + ) + ? __spreadArray( + [], + __read( + this.rootStore.localConversationStore.conversations.values() + ), + false + ) + : [] + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(UiStore.prototype, 'users', { + get: function () { + return __spreadArray( + [], + __read(this.rootStore.userStore.users.values()), + false + ) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(UiStore.prototype, 'teamList', { + get: function () { + var teams = __spreadArray( + [], + __read(this.rootStore.teamStore.teams.values()), + false + ) + return teams + .filter(function (item) { + return item.isValidTeam + }) + .sort(function (a, b) { + return b.createTime - a.createTime + }) + }, + enumerable: false, + configurable: true, + }) + Object.defineProperty(UiStore.prototype, 'applyMsgs', { + get: function () { + return __spreadArray( + [], + __read(this.rootStore.sysMsgStore.friendApplyMsg.values()), + false + ) + }, + enumerable: false, + configurable: true, + }) + return UiStore +})() + +/**Mobx 可观察对象,负责管理文件存储的子 store */ +var StorageStore = /** @class */ (function () { + function StorageStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + makeAutoObservable(this) + } + /** + * 上传文件 + * @param fileObj - 文件对象或文件路径 + */ + StorageStore.prototype.uploadFileActive = function (fileObj) { + return __awaiter(this, void 0, void 0, function () { + var errorContent, avatarUrl, task, error_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + logger.log('uploadFileActive', fileObj) + if (!fileObj) { + errorContent = 'upload avatar error, no file or filepath' + logger.warn(errorContent) + throw new Error(errorContent) + } + avatarUrl = '' + _a.label = 1 + case 1: + _a.trys.push([1, 3, , 4]) + task = this.nim.V2NIMStorageService.createUploadFileTask({ + fileObj: fileObj, + }) + return [ + 4 /*yield*/, + this.nim.V2NIMStorageService.uploadFile(task, function () { + /**/ + }), + ] + case 2: + avatarUrl = _a.sent() + return [3 /*break*/, 4] + case 3: + error_1 = _a.sent() + logger.warn('upload avatar error ', error_1) + throw error_1 + case 4: + return [2 /*return*/, avatarUrl] + } + }) + }) + } + return StorageStore +})() + +var name = 'nim-web-sdk-ng' +var version = '10.9.10' +var sdk = { + version: 100910, + versionFormat: '10.9.10', +} +var description = 'Yunxin IM SDK next generation' +var main = './dist/v2/NIM_BROWSER_SDK.js' +var types = './dist/v2/NIM_BROWSER_SDK/index.d.ts' +var scripts = { + test: 'jest --maxWorkers 1 --silent', + lint: 'npx eslint ./src', + dev: 'cd pages/ && npm run dev', + clean: 'rm -rf ./dist', + emitTypes: + 'tsc --emitDeclarationOnly --declaration --declarationDir temp/types', + 'build:esm': 'npm run emitTypes && rollup --config ./build/esm.config.js', + build: + 'npm run clean && npm run emitTypes && node script/copyPlugin.js && rollup --config ./build/v1.config.js && rollup --config ./build/v2.config.js && rollup --config ./build/esm.config.js', + analyze: + 'npm run clean && npx rollup --config ./build/analyze.config.js && ls -lhR dist | grep ".js"', + 'pages:build': + 'cd pages/ && npm install && npm run build && cp -rf dist/ ../dist/', + api: 'npm run translate && node script/buildApi.js', + translate: + 'rm -rf ./apidocs && multilingual-tool convert --indir=src/typings --outdir=apidocs --includes=ts', + 'api-diff': + 'multilingual-tool diff --dir=src/typings --receiver=3070898 --exclude=DS_Store', + updateVerInNdp: 'node ./script/updateVerInNdp.js', +} +var repository = { + type: 'git', + url: 'ssh://git@g.hz.netease.com:22222/yunxin/im/sdk.git', +} +var keywords = ['im', 'sdk'] +var author = 'yunxin' +var license = 'ISC' +var eslintIgnore = ['dist/'] +var files = [ + 'README.md', + 'CHANGELOG.md', + 'dist/v1/NIM*', + 'dist/v1/CHATROOM*', + 'dist/v1/QCHAT*', + 'dist/v2/NIM*', + 'dist/v2/CHATROOM*', + 'dist/esm/*', +] +var devDependencies = { + '@babel/core': '^7.13.15', + '@babel/plugin-proposal-class-properties': '^7.13.0', + '@babel/plugin-transform-block-scoping': '^7.23.4', + '@babel/plugin-transform-runtime': '^7.13.15', + '@babel/preset-env': '^7.13.15', + '@babel/preset-typescript': '^7.13.0', + '@babel/runtime': '^7.13.10', + '@babel/runtime-corejs3': '^7.13.10', + '@microsoft/api-extractor': '^7.19.4', + '@rollup/plugin-babel': '^5.3.0', + '@rollup/plugin-commonjs': '^18.0.0', + '@rollup/plugin-json': '^4.1.0', + '@rollup/plugin-node-resolve': '^11.2.1', + '@rollup/plugin-replace': '^3.0.0', + '@rollup/plugin-typescript': '^8.3.0', + '@types/backo2': '^1.0.1', + '@types/jest': '^27.4.1', + '@types/lodash': '^4.14.177', + '@types/platform': '^1.3.3', + '@typescript-eslint/eslint-plugin': '^5.12.0', + '@typescript-eslint/parser': '^5.12.0', + '@yxfe/multilingual-tool': '^1.0.30', + '@yxfe/nim-log-reporter': '^1.0.6', + '@yxfe/nos-uploader': '^1.0.28', + '@yxfe/request': '^0.2.12', + backo2: '^1.0.2', + 'browser-md5-file': '^1.1.1', + 'core-js': '^3.10.1', + 'cross-env': '^7.0.3', + eslint: '^8.9.0', + 'eslint-config-prettier': '^8.5.0', + 'eslint-plugin-prettier': '^4.0.0', + eventemitter3: '^4.0.7', + husky: '^7.0.4', + jest: '^27.5.1', + 'lodash-es': '^4.17.21', + 'neroom-web-sdk': '1.7.0', + platform: '^1.3.6', + 'pre-commit': '^1.2.2', + prettier: '^2.6.1', + 'react-native': '^0.75.2', + rollup: '^2.45.2', + 'rollup-plugin-banner': '^0.2.1', + 'rollup-plugin-banner2': '^1.2.2', + 'rollup-plugin-copy': '^3.4.0', + 'rollup-plugin-insert': '^1.3.2', + 'rollup-plugin-terser': '^7.0.2', + 'rollup-plugin-visualizer': '^5.12.0', + 'ts-jest': '^27.1.4', + tslib: '^2.3.1', + typedoc: '^0.22.11', + typescript: '^4.5.4', +} +var sdkPkg = { + name: name, + version: version, + sdk: sdk, + description: description, + main: main, + types: types, + scripts: scripts, + repository: repository, + keywords: keywords, + author: author, + license: license, + eslintIgnore: eslintIgnore, + files: files, + devDependencies: devDependencies, +} + +/**Mobx 可观察对象,负责管理本地会话列表的子 store */ +var LocalConversationStore = /** @class */ (function () { + function LocalConversationStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.conversations = new Map() + this.totalUnreadCount = 0 + this.logger = null + makeAutoObservable(this) + this._onSyncStarted = this._onSyncStarted.bind(this) + this._onSyncFinished = this._onSyncFinished.bind(this) + this._onSyncFailed = this._onSyncFailed.bind(this) + this._onConversationCreated = this._onConversationCreated.bind(this) + this._onConversationDeleted = this._onConversationDeleted.bind(this) + this._onConversationChanged = this._onConversationChanged.bind(this) + this._onTotalUnreadCountChanged = this._onTotalUnreadCountChanged.bind(this) + this.logger = rootStore.logger + /** 数据同步开始 */ + nim.V2NIMLocalConversationService.on('onSyncStarted', this._onSyncStarted) + /** 数据同步结束 */ + nim.V2NIMLocalConversationService.on('onSyncFinished', this._onSyncFinished) + /** 数据同步失败 */ + nim.V2NIMLocalConversationService.on('onSyncFailed', this._onSyncFailed) + /** 会话创建 */ + nim.V2NIMLocalConversationService.on( + 'onConversationCreated', + this._onConversationCreated + ) + /** 会话删除 */ + nim.V2NIMLocalConversationService.on( + 'onConversationDeleted', + this._onConversationDeleted + ) + /** 会话更新 */ + nim.V2NIMLocalConversationService.on( + 'onConversationChanged', + this._onConversationChanged + ) + /** 会话总未读数变化 */ + nim.V2NIMLocalConversationService.on( + 'onTotalUnreadCountChanged', + this._onTotalUnreadCountChanged + ) + } + LocalConversationStore.prototype.resetState = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore Conversation resetState') + this.conversations.clear() + this.totalUnreadCount = 0 + } + /** + * 销毁 + */ + LocalConversationStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMLocalConversationService.off( + 'onSyncStarted', + this._onSyncStarted + ) + this.nim.V2NIMLocalConversationService.off( + 'onSyncFinished', + this._onSyncFinished + ) + this.nim.V2NIMLocalConversationService.off( + 'onSyncFailed', + this._onSyncFailed + ) + this.nim.V2NIMLocalConversationService.off( + 'onConversationCreated', + this._onConversationCreated + ) + this.nim.V2NIMLocalConversationService.off( + 'onConversationDeleted', + this._onConversationDeleted + ) + this.nim.V2NIMLocalConversationService.off( + 'onConversationChanged', + this._onConversationChanged + ) + this.nim.V2NIMLocalConversationService.off( + 'onTotalUnreadCountChanged', + this._onTotalUnreadCountChanged + ) + } + /** + * 添加内存中的会话 + * @param conversations 会话数组 + */ + LocalConversationStore.prototype.addConversation = function (conversations) { + var _this = this + conversations + .filter(function (item) { + return !!item.conversationId + }) + // 暂时仅支持 p2p 和 team + .filter(function (item) { + return [ + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */, + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */, + ].includes(item.type) + }) + .forEach(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var oldConversation + return __generator(this, function (_a) { + oldConversation = this.conversations.get(item.conversationId) + // 先更新一次 + this.conversations.set( + item.conversationId, + __assign(__assign({}, oldConversation), item) + ) + return [2 /*return*/] + }) + }) + }) + } + /** + * 更新内存中的会话 + * @param conversations 会话数组 + */ + LocalConversationStore.prototype.updateConversation = function ( + conversations + ) { + var _this = this + conversations + .filter(function (item) { + return !!item.conversationId + }) + // 暂时仅支持 p2p 和 team + .filter(function (item) { + return [ + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */, + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */, + ].includes(item.type) + }) + .forEach(function (item) { + var oldConversation = _this.conversations.get(item.conversationId) + _this.conversations.set( + item.conversationId, + __assign(__assign({}, oldConversation), item) + ) + }) + } + /** + * 移除内存中的会话 + * @param conversationId 会话ID + */ + LocalConversationStore.prototype.removeConversation = function ( + conversationIds + ) { + var _this = this + conversationIds.forEach(function (item) { + _this.conversations.delete(item) + if (_this.rootStore.uiStore.selectedConversation === item) { + _this.rootStore.uiStore.unselectConversation() + } + }) + } + /** + * 重置会话未读数 + * @param conversationId - 消息所属的会话的ID + */ + LocalConversationStore.prototype.resetConversation = function ( + conversationId + ) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var conversation, error_1 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore resetConversation', + conversationId + ) + conversation = this.conversations.get(conversationId) + if (!conversation) { + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'LocalConversationStore resetConversation: conversation is not found.', + conversationId + ) + return [2 /*return*/] + } + _e.label = 1 + case 1: + _e.trys.push([1, 4, , 5]) + if (!conversation.unreadCount) return [3 /*break*/, 3] + // 请求前也清理一次会话未读数,fix http://jira.netease.com/browse/YYTX-34326 + this._resetMemoryConversationUnreadCount(conversation) + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.clearUnreadCountByIds([ + conversation.conversationId, + ]), + ] + case 2: + _e.sent() + this._resetMemoryConversationUnreadCount(conversation) + _e.label = 3 + case 3: + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('LocalConversationStore resetConversation success') + return [3 /*break*/, 5] + case 4: + error_1 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error( + 'LocalConversationStore resetConversation failed: ', + error_1 + ) + throw error_1 + case 5: + return [2 /*return*/] + } + }) + }) + } + /** + * 插入一条会话记录 + * @param conversationType + * @param receiverId - 接收方, 对方帐号或者群id + * @param isSelected - 是否选中 + */ + LocalConversationStore.prototype.insertConversationActive = function ( + conversationType, + receiverId, + isSelected + ) { + var _a, _b, _c + if (isSelected === void 0) { + isSelected = true + } + return __awaiter(this, void 0, void 0, function () { + var conversationId, conversation, error_2 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 5, , 6]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore insertConversationActive', { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + }) + conversationId = '' + if ( + conversationType === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) { + conversationId = + this.nim.V2NIMConversationIdUtil.p2pConversationId(receiverId) + } else if ( + conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ + ) { + conversationId = + this.nim.V2NIMConversationIdUtil.teamConversationId(receiverId) + } else { + throw new Error('Unsupported conversation type') + } + if (!!this.conversations.has(conversationId)) + return [3 /*break*/, 2] + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.createConversation( + conversationId + ), + ] + case 1: + conversation = _d.sent() + this.addConversation([conversation]) + _d.label = 2 + case 2: + if (!isSelected) return [3 /*break*/, 4] + return [ + 4 /*yield*/, + this.rootStore.uiStore.selectConversation(conversationId), + ] + case 3: + _d.sent() + _d.label = 4 + case 4: + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore insertConversationActive success', + { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + } + ) + return [3 /*break*/, 6] + case 5: + error_2 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore insertConversationActive failed: ', + { + conversationType: conversationType, + receiverId: receiverId, + isSelected: isSelected, + }, + error_2 + ) + throw error_2 + case 6: + return [2 /*return*/] + } + }) + }) + } + /** + * 删除会话记录 + * @param conversationId - 消息所属的会话的ID + */ + LocalConversationStore.prototype.deleteConversationActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_4 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 6, , 7]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore deleteConversationActive', + conversationId + ) + _d.label = 1 + case 1: + _d.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + this.stickTopConversationActive(conversationId, false), + ] + case 2: + _d.sent() + return [3 /*break*/, 4] + case 3: + _d.sent() + return [3 /*break*/, 4] + case 4: + // 先删除内存,防止删除失败导致一些问题 + this.removeConversation([conversationId]) + // 不删除历史消息,让表现跟线上一致,后续可根据需求调整 + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.deleteConversation( + conversationId, + false + ), + ] + case 5: + // 不删除历史消息,让表现跟线上一致,后续可根据需求调整 + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore deleteConversationActive success' + ) + return [3 /*break*/, 7] + case 6: + error_4 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.warn( + 'LocalConversationStore deleteConversationActive failed but continue: ', + error_4 + ) + return [3 /*break*/, 7] + case 7: + return [2 /*return*/] + } + }) + }) + } + /** + * 新增会话置顶 + * @param conversationId - 消息所属的会话的ID + * @param stickTop - 是否置顶 + */ + LocalConversationStore.prototype.stickTopConversationActive = function ( + conversationId, + stickTop + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var error_5 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore stickTopConversationActive', + conversationId, + stickTop + ) + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.stickTopConversation( + conversationId, + stickTop + ), + ] + case 1: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore stickTopConversationActive success' + ) + return [3 /*break*/, 3] + case 2: + error_5 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore stickTopConversationActive failed: ', + error_5 + ) + throw error_5 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 获取会话列表 + * @param offset 分页偏移量 + * @param limit 分页拉取数量 + */ + LocalConversationStore.prototype.getConversationListActive = function ( + offset, + limit + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_6 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 3, , 4]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore getConversationListActive', + offset, + limit + ) + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.getConversationList( + offset, + limit + ), + ] + case 1: + res = _d.sent() + this.addConversation(res.conversationList) + return [ + 4 /*yield*/, + this.getP2PMessageReceipt( + res.conversationList + .filter(function (item) { + return ( + item.type === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) + }) + .map(function (item) { + return item.conversationId + }) + ), + ] + case 2: + _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore getConversationListActive success', + offset, + limit, + res + ) + return [2 /*return*/, res] + case 3: + error_6 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore getConversationListActive failed: ', + error_6, + offset, + limit + ) + throw error_6 + case 4: + return [2 /*return*/] + } + }) + }) + } + LocalConversationStore.prototype.getP2PMessageReceipt = function ( + conversationIds + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, conversations, error_7 + var _this = this + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore getP2PMessageReceipt', + conversationIds + ) + return [ + 4 /*yield*/, + Promise.all( + conversationIds.map(function (item) { + return _this.nim.V2NIMMessageService.getP2PMessageReceipt( + item + ) + }) + ), + ] + case 1: + res = _d.sent() + conversations = res + .map(function (item) { + var conversation = _this.conversations.get(item.conversationId) + if (conversation) { + return __assign(__assign({}, conversation), { + msgReceiptTime: item.timestamp, + }) + } + }) + .filter(function (item) { + return !!item + }) + this.updateConversation(conversations) + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore getP2PMessageReceipt success', + conversationIds, + res + ) + return [2 /*return*/, res] + case 2: + error_7 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore getP2PMessageReceipt failed: ', + error_7, + conversationIds + ) + throw error_7 + case 3: + return [2 /*return*/] + } + }) + }) + } + LocalConversationStore.prototype._resetMemoryConversationUnreadCount = + function (conversation) { + var newConversation = this.conversations.get(conversation.conversationId) + if (newConversation) { + this.updateConversation([ + __assign(__assign({}, newConversation), { unreadCount: 0 }), + ]) + } + } + /** + * 获取会话已读时间戳。该时间包含多端已读时间戳 + */ + LocalConversationStore.prototype.getConversationReadTimeActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_8 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore getConversationReadTimeActive', + conversationId + ) + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.getConversationReadTime( + conversationId + ), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore getConversationReadTimeActive success', + conversationId, + res + ) + return [2 /*return*/, res] + case 2: + error_8 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore getConversationReadTimeActive failed: ', + error_8, + conversationId + ) + throw error_8 + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 标记会话已读时间戳 + * + * 注: 当该方法调用后,SDK 可能给多端账户抛出以下的事件 + * + * {@link V2NIMConversationListener.onConversationReadTimeUpdated | V2NIMConversationListener.onConversationReadTimeUpdated} + * + */ + LocalConversationStore.prototype.markConversationReadActive = function ( + conversationId + ) { + var _a, _b, _c + return __awaiter(this, void 0, void 0, function () { + var res, error_9 + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + _d.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log( + 'LocalConversationStore markConversationReadActive', + conversationId + ) + return [ + 4 /*yield*/, + this.nim.V2NIMLocalConversationService.markConversationRead( + conversationId + ), + ] + case 1: + res = _d.sent() + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log( + 'LocalConversationStore markConversationReadActive success', + conversationId, + res + ) + return [2 /*return*/, res] + case 2: + error_9 = _d.sent() + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.error( + 'LocalConversationStore markConversationReadActive failed: ', + error_9, + conversationId + ) + throw error_9 + case 3: + return [2 /*return*/] + } + }) + }) + } + LocalConversationStore.prototype.handleConversationWithAit = function (msgs) { + var _this = this + msgs.map(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var hasAitMsg, + conversationReadTime, + isCurConversation, + isSendFromMe, + conversation, + aitMsgs + var _a + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if ( + !( + ( + item.conversationType === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ || + item.conversationType === 3 + ) /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_SUPER_TEAM */ + ) + ) + return [3 /*break*/, 2] + if ( + !(item === null || item === void 0 + ? void 0 + : item.serverExtension) + ) + return [3 /*break*/, 2] + hasAitMsg = this.hasAitMsg([item.serverExtension]) + return [ + 4 /*yield*/, + this.getConversationReadTimeActive(item.conversationId), + ] + case 1: + conversationReadTime = _b.sent() + isCurConversation = + item.conversationId == + this.rootStore.uiStore.selectedConversation + isSendFromMe = + item.senderId === + ((_a = this.rootStore.userStore.myUserInfo) === null || + _a === void 0 + ? void 0 + : _a.accountId) + // 当前通过_onReceiveMessages获取的新消息时间戳大于会话的最后已读时间戳,且有@消息,且没有选中当前该会话,则标记为已读 + if ( + item.createTime > conversationReadTime && + hasAitMsg && + !isCurConversation && + !isSendFromMe + ) { + conversation = this.conversations.get(item.conversationId) + // 如果此时conversation为空,则可能的情况为: + // 1.该用户删除了该会话后,又收到了 @消息(onReceiveMessages会先于onConversationCreated触发),此时需要在onConversationCreated处理 @消息相关 + // 2.im sdk初始化过程中,onReceiveMessages 会先于onSyncFinished(因为实在onSyncFinished中拉取会话列表) 触发,此时由于会话列表为空,上面的if判断会为false,则在else中先在内存中构造一个会话,带上aitMsg,后等会话列表拉取完成进行合并 + if (conversation) { + aitMsgs = conversation.aitMsgs || [] + if (aitMsgs.length === 0) { + this.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: [item.messageClientId], + }), + ]) + } else { + this.updateConversation([ + __assign(__assign({}, conversation), { + aitMsgs: __spreadArray( + __spreadArray([], __read(aitMsgs), false), + [item.messageClientId], + false + ), + }), + ]) + } + } else { + this.addConversation([ + //@ts-ignore + { + conversationId: item.conversationId, + type: item.conversationType, + aitMsgs: [item.messageClientId], + }, + ]) + } + } + _b.label = 2 + case 2: + return [2 /*return*/] + } + }) + }) + }) + } + LocalConversationStore.prototype.resetConversationAit = function ( + conversationId + ) { + var conversation = this.conversations.get(conversationId) + if ( + (conversation === null || conversation === void 0 + ? void 0 + : conversation.type) === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ || + (conversation === null || conversation === void 0 + ? void 0 + : conversation.type) === + 3 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_SUPER_TEAM */ + ) { + this.updateConversation([ + __assign(__assign({}, conversation), { aitMsgs: [] }), + ]) + } + } + LocalConversationStore.prototype.hasAitMsg = function (serverExtensions) { + var _this = this + var flag = false + if ( + serverExtensions === null || serverExtensions === void 0 + ? void 0 + : serverExtensions.length + ) { + serverExtensions === null || serverExtensions === void 0 + ? void 0 + : serverExtensions.forEach(function (item) { + var _a, _b + try { + var extObj = JSON.parse(item || '{}') + var yxAitMsg = extObj.yxAitMsg + var account_1 = _this.rootStore.userStore.myUserInfo.accountId + if (yxAitMsg) { + ;(_a = Object.keys(yxAitMsg)) === null || _a === void 0 + ? void 0 + : _a.forEach(function (key) { + if (key === account_1 || key === AT_ALL_ACCOUNT) { + flag = true + } + }) + } + } catch (_c) { + ;(_b = _this.logger) === null || _b === void 0 + ? void 0 + : _b.error( + 'LocalConversationStore parse serverExtension failed: ', + item + ) + } + }) + } + return flag + } + LocalConversationStore.prototype._onSyncStarted = function () { + var _a, _b + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onSyncStarted') + // 获取会话列表 + ;(_b = this.rootStore.localConversationStore) === null || _b === void 0 + ? void 0 + : _b.getConversationListActive( + 0, + this.rootStore.localOptions.conversationLimit || 100 + ) + } + LocalConversationStore.prototype._onSyncFinished = function () { + var _a, _b + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_c) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onSyncFinished') + // 获取会话列表 + ;(_b = this.rootStore.localConversationStore) === null || _b === void 0 + ? void 0 + : _b.getConversationListActive( + 0, + this.rootStore.localOptions.conversationLimit || 100 + ) + return [2 /*return*/] + }) + }) + } + LocalConversationStore.prototype._onSyncFailed = function (e) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onSyncFailed', e) + } + LocalConversationStore.prototype._onConversationCreated = function (data) { + var _this = this + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onConversationCreated', data) + // 如果是创群,此时_onConversationCreated 返回的data可能没有avatar和name,需要getConversation + if ( + data.type === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ + ) { + this.nim.V2NIMLocalConversationService.getConversation( + data.conversationId + ).then(function (conversation) { + _this.addConversation([conversation]) + // 处理@消息 情况为 + if (conversation.lastMessage) { + _this.handleConversationWithAit([ + __assign( + __assign({}, conversation.lastMessage), + conversation.lastMessage.messageRefer + ), + ]) + } + }) + } else { + this.addConversation([data]) + // 会话创建的时候,获取一下当前会话的最后已读时间,便于展示消息已读未读 + if ( + data.type === + 1 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P */ + ) { + var conversationId_1 = data.conversationId + this.nim.V2NIMMessageService.getP2PMessageReceipt( + conversationId_1 + ).then(function (res) { + var conversation = _this.conversations.get(conversationId_1) + if (conversation) { + _this.updateConversation([ + __assign(__assign({}, conversation), { + msgReceiptTime: res.timestamp, + }), + ]) + } + }) + } + } + } + LocalConversationStore.prototype._onConversationDeleted = function ( + conversationIds + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onConversationDeleted', conversationIds) + this.removeConversation(conversationIds) + } + LocalConversationStore.prototype._onConversationChanged = function (data) { + var _a + return __awaiter(this, void 0, void 0, function () { + var _this = this + return __generator(this, function (_b) { + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onConversationChanged', data) + this.addConversation(data) + data.forEach(function (item) { + return __awaiter(_this, void 0, void 0, function () { + var attachment, type + var _a, _b, _c, _d + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + attachment = + (_a = item.lastMessage) === null || _a === void 0 + ? void 0 + : _a.attachment + type = + attachment === null || attachment === void 0 + ? void 0 + : attachment.type + if ( + !( + ((_b = item.lastMessage) === null || _b === void 0 + ? void 0 + : _b.messageType) === + 5 /* V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION */ && + ((type === 1 /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_KICK */ && + ((_c = + attachment === null || attachment === void 0 + ? void 0 + : attachment.targetIds) === null || _c === void 0 + ? void 0 + : _c.includes( + this.rootStore.userStore.myUserInfo.accountId + ))) || + (type === 2 /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LEAVE */ && + ((_d = item.lastMessage) === null || _d === void 0 + ? void 0 + : _d.messageRefer.senderId) === + this.rootStore.userStore.myUserInfo.accountId) || + type === 4) /* V2NIMConst.V2NIMMessageNotificationType + .V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS */ + ) + ) + return [3 /*break*/, 2] + return [ + 4 /*yield*/, + this.deleteConversationActive(item.conversationId), + ] + case 1: + _e.sent() + return [3 /*break*/, 4] + case 2: + if ( + !( + this.rootStore.uiStore.selectedConversation === + item.conversationId + ) + ) + return [3 /*break*/, 4] + return [ + 4 /*yield*/, + this.resetConversation(item.conversationId), + ] + case 3: + _e.sent() + _e.label = 4 + case 4: + if ( + item.type === + 2 /* V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM */ && + item.unreadCount == 0 + ) { + this.resetConversationAit(item.conversationId) + } + return [2 /*return*/] + } + }) + }) + }) + return [2 /*return*/] + }) + }) + } + LocalConversationStore.prototype._onTotalUnreadCountChanged = function ( + data + ) { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('LocalConversationStore _onTotalUnreadCountChanged', data) + this.totalUnreadCount = data + } + return LocalConversationStore +})() + +/**Mobx 可观察对象,负责管理在线离线等事件订阅的子store */ +var SubscriptionStore = /** @class */ (function () { + function SubscriptionStore(rootStore, nim) { + this.rootStore = rootStore + this.nim = nim + this.stateMap = new Map() + this.logger = null + makeAutoObservable(this) + this._onUserStatusChanged = this._onUserStatusChanged.bind(this) + this.nim.V2NIMSubscriptionService.on( + 'onUserStatusChanged', + this._onUserStatusChanged + ) + this.logger = rootStore.logger + } + SubscriptionStore.prototype.resetState = function () { + var _a + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('SubscriptionStore resetState') + this.stateMap.clear() + } + /** + * 销毁SubscriptionStore,会取消相关事件监听 + */ + SubscriptionStore.prototype.destroy = function () { + this.resetState() + this.nim.V2NIMSubscriptionService.off( + 'onUserStatusChanged', + this._onUserStatusChanged + ) + } + /** 获取当前用户在线离线状态 + * @param accountId 用户ID + **/ + SubscriptionStore.prototype.getUserStatus = function (accountId) { + return this.stateMap.get(accountId) + } + /** 获取当前所有用户在线离线状态 + **/ + SubscriptionStore.prototype.getUserStatusList = function () { + return __spreadArray([], __read(this.stateMap.values()), false) + } + /** + * 订阅用户状态,包括在线状态或用户自定义的状态。 + * 成功订阅用户状态后,当订阅的用户状态有变更时,会触发 onUserStatusChanged 回调。 + * @param accountIds 要订阅的用户 ID 列表。 + */ + SubscriptionStore.prototype.subscribeUserStatusActive = function ( + accountIds + ) { + var _a, _b, _c, _d + return __awaiter(this, void 0, void 0, function () { + var failedAccounts, err_1 + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _e.trys.push([0, 2, , 3]) + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('subscribeUserStatusActive', accountIds) + return [ + 4 /*yield*/, + this.nim.V2NIMSubscriptionService.subscribeUserStatus({ + accountIds: accountIds, + duration: 3600 * 24 * 7, + immediateSync: true, + }), + ] + case 1: + failedAccounts = _e.sent() + if (failedAccounts.length > 0) { + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.warn( + 'subscribeUserStatusActive failed accounts', + failedAccounts + ) + return [2 /*return*/, failedAccounts] + } + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('subscribeUserStatusActive success') + return [3 /*break*/, 3] + case 2: + err_1 = _e.sent() + ;(_d = this.logger) === null || _d === void 0 + ? void 0 + : _d.error('subscribeUserStatusActive err', err_1) + return [3 /*break*/, 3] + case 3: + return [2 /*return*/] + } + }) + }) + } + /** + * 注册用户状态订阅相关监听。 + */ + SubscriptionStore.prototype._onUserStatusChanged = function (userStatusList) { + var e_1, _a + var _b + ;(_b = this.logger) === null || _b === void 0 + ? void 0 + : _b.log('_onUserStatusChanged', userStatusList) + try { + for ( + var userStatusList_1 = __values(userStatusList), + userStatusList_1_1 = userStatusList_1.next(); + !userStatusList_1_1.done; + userStatusList_1_1 = userStatusList_1.next() + ) { + var userStatus = userStatusList_1_1.value + this.stateMap.set(userStatus.accountId, userStatus) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if ( + userStatusList_1_1 && + !userStatusList_1_1.done && + (_a = userStatusList_1.return) + ) + _a.call(userStatusList_1) + } finally { + if (e_1) throw e_1.error + } + } + } + return SubscriptionStore +})() + +var RootStore = /** @class */ (function () { + function RootStore(nim, localOptions, platform) { + if (platform === void 0) { + platform = 'Web' + } + var _this = this + var _a, _b, _c, _d, _e + this.localOptions = { + addFriendNeedVerify: true, + teamJoinMode: 0 /* V2NIMConst.V2NIMTeamJoinMode.V2NIM_TEAM_JOIN_MODE_FREE */, + teamAgreeMode: 1 /* V2NIMConst.V2NIMTeamAgreeMode.V2NIM_TEAM_AGREE_MODE_NO_AUTH */, + teamInviteMode: 0 /* V2NIMConst.V2NIMTeamInviteMode.V2NIM_TEAM_INVITE_MODE_MANAGER */, + teamUpdateTeamMode: 0 /* V2NIMConst.V2NIMTeamUpdateInfoMode.V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER */, + teamUpdateExtMode: 1 /* V2NIMConst.V2NIMTeamUpdateExtensionMode + .V2NIM_TEAM_UPDATE_EXTENSION_MODE_ALL */, + enableTeam: true, + enableChangeTeamJoinMode: true, + enableChangeTeamAgreeMode: true, + leaveOnTransfer: false, + needMention: true, + p2pMsgReceiptVisible: false, + teamMsgReceiptVisible: false, + loginStateVisible: false, + allowTransferTeamOwner: false, + teamManagerVisible: false, + aiVisible: true, + teamManagerLimit: 10, + sendMsgBefore: function (options) { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, options] + }) + }) + }, + aiUserAgentProvider: {}, + conversationLimit: 100, + debug: 'debug', + aiStream: true, + iconfontUrl: [], + } + this.sdkOptions = {} + this.conversationStore = null + this.localConversationStore = null + this.logger = null + makeAutoObservable(this) + this.nim = nim + this.localOptions = __assign(__assign({}, this.localOptions), localOptions) + this.logger = + ((_a = this.localOptions) === null || _a === void 0 + ? void 0 + : _a.debug) == 'off' + ? null + : logDebug({ + level: + (_b = this.localOptions) === null || _b === void 0 + ? void 0 + : _b.debug, + version: packageJson.version, + appName: packageJson.name, + needStringify: false, + }) + ;(_c = this.logger) === null || _c === void 0 + ? void 0 + : _c.log('store init', { + localOptions: this.localOptions, + }) + this.sdkOptions = __assign( + {}, + (_d = this.nim) === null || _d === void 0 ? void 0 : _d.getOptions() + ) + this.connectStore = new ConnectStore(this, nim, this.localOptions) + this.friendStore = new FriendStore(this, nim) + this.msgStore = new MsgStore(this, nim, this.localOptions) + this.relationStore = new RelationStore(this, nim) + // 区分是本地会话还是云端会话 + if ( + (_e = this.sdkOptions) === null || _e === void 0 + ? void 0 + : _e.enableV2CloudConversation + ) { + this.conversationStore = new ConversationStore(this, nim) + } else { + this.localConversationStore = new LocalConversationStore(this, nim) + } + this.teamStore = new TeamStore(this, nim, this.localOptions) + this.teamMemberStore = new TeamMemberStore(this, nim) + this.sysMsgStore = new SysMsgStore(this, nim) + this.userStore = new UserStore(this, nim) + this.aiUserStore = new AIUserStore(this, nim, this.localOptions) + this.uiStore = new UiStore(this) + this.storageStore = new StorageStore(this, nim) + this.subscriptionStore = new SubscriptionStore(this, nim) + // 埋点上报 + var reportComponents = [ + 'ContactKit', + 'ConversationKit', + 'ChatKit', + 'SearchKit', + ] + reportComponents.forEach(function (item) { + var eventTracking = new EventTracking({ + appKey: _this.nim.options.appkey, + version: '10.0.0', + component: item, + imVersion: sdkPkg.version, + platform: platform, + }) + eventTracking.track('init', '') + }) + } + RootStore.prototype.resetState = function () { + var _a, _b, _c, _d + ;(_a = this.logger) === null || _a === void 0 + ? void 0 + : _a.log('store resetState') + this.friendStore.resetState() + this.msgStore.resetState() + this.relationStore.resetState() + if ( + (_b = this.sdkOptions) === null || _b === void 0 + ? void 0 + : _b.enableV2CloudConversation + ) { + ;(_c = this.conversationStore) === null || _c === void 0 + ? void 0 + : _c.resetState() + } else { + ;(_d = this.localConversationStore) === null || _d === void 0 + ? void 0 + : _d.resetState() + } + this.teamStore.resetState() + this.teamMemberStore.resetState() + this.sysMsgStore.resetState() + this.userStore.resetState() + this.aiUserStore.resetState() + this.uiStore.resetState() + this.subscriptionStore.resetState() + } + /** + * 销毁根store实例 + */ + RootStore.prototype.destroy = function () { + var _a, _b, _c + logger.log('store destroyed') + this.connectStore.destroy() + this.friendStore.destroy() + this.msgStore.destroy() + this.relationStore.destroy() + if ( + (_a = this.sdkOptions) === null || _a === void 0 + ? void 0 + : _a.enableV2CloudConversation + ) { + ;(_b = this.conversationStore) === null || _b === void 0 + ? void 0 + : _b.destroy() + } else { + ;(_c = this.localConversationStore) === null || _c === void 0 + ? void 0 + : _c.destroy() + } + this.teamStore.destroy() + this.teamMemberStore.destroy() + this.sysMsgStore.destroy() + this.userStore.destroy() + this.aiUserStore.destroy() + this.uiStore.destroy() + this.subscriptionStore.destroy() + } + /** + * 获取根store实例 + * @param nim NIM SDK 实例 + * @param t 国际化函数 + */ + RootStore.getInstance = function (nim, localOptions, platform) { + if (platform === void 0) { + platform = 'Web' + } + if (!this.ins) { + this.ins = new RootStore(nim, localOptions, platform) + } + return this.ins + } + return RootStore +})() +// export * as V2NIM from 'nim-web-sdk-ng/dist/esm/nim' + +export { + AIUserStore, + ConnectStore, + ConversationStore, + FriendStore, + LocalConversationStore, + MsgStore, + RelationStore, + RootStore, + StorageStore, + SubscriptionStore, + SysMsgStore, + TeamMemberStore, + TeamStore, + UiStore, + UserStore, + RootStore as default, + constant as storeConstants, + utils as storeUtils, +} diff --git a/styles/common.scss b/styles/common.scss new file mode 100644 index 0000000..ed37143 --- /dev/null +++ b/styles/common.scss @@ -0,0 +1,89 @@ +body, +div, +ul, +ol, +dl, +dt, +dd, +li, +dl, +h1, +h2, +h3, +h4, +p { + margin: 0; + padding: 0; + font-family: 'PingFang SC'; + font-style: normal; +} +ol, +ul, +li { + list-style: none; +} +img { + border: 0; + vertical-align: middle; +} +body { + color: #000000; + background: #fff; +} +.clear { + clear: both; + height: 1px; + width: 100%; + overflow: hidden; + margin-top: -1px; +} +a { + color: #000000; + text-decoration: none; +} +a:hover { + text-decoration: none; +} + +@keyframes loadingCircle { + 100% { + transform: rotate(360deg); + } +} + +.ok-btn { + background: #ffffff; + border-radius: 8px; + color: #5ca1e6; + padding: 10px; + font-size: 16px; + text-align: center; + position: fixed; + bottom: 20px; + height: 40px; + width: calc(100% - 40px); + border-radius: 8px; + box-sizing: border-box; + margin: 0px 20px; +} + +.button-box-mp { + display: flex; + align-items: center; + position: fixed; + z-index: 100; + bottom: 30px; + right: 30px; +} + +.button-box { + display: flex; + align-items: center; + position: relative; +} +.button-box, +.button-box-mp .button-icon { + width: 40px; + height: 40px; + margin-left: 20px; +} diff --git a/utils/IM.js b/utils/IM.js new file mode 100644 index 0000000..7324703 --- /dev/null +++ b/utils/IM.js @@ -0,0 +1,79 @@ +import { V2NIMConst, NIM } from '../dist/nim.js' +let appConfig = { + // 用户的appkey + // 用于在web demo中注册账号异步请求demo 服务器中使用 + test: { + appkey: 'fe416640c8e8a72734219e1847ad2547', + postUrl: 'https://apptest.netease.im' + }, + online: { + appkey: '885dea390870814acf3ba8558c717572',//885dea390870814acf3ba8558c717572 //45c6af3c98409b18a84451215d0bdd6e + postUrl: 'https://app.netease.im' + } +} + +const imLogin = async ()=>{ + let storage_token=''; + let storage_accid=''; + if (process.env.UNI_PLATFORM == "h5") { + if (window.location.href.indexOf('dev') > -1) { + storage_accid=uni.getetStorageSync('AUTH_YX_ACCID_App'); + storage_token=uni.setStorageSync('AUTH_YX_TOKEN_App'); + } else { + storage_accid=uni.getStorageSync('DEV_AUTH_YX_ACCID_App'); + storage_token=uni.getStorageSync('DEV_AUTH_YX_TOKEN_App'); + } + } else if(process.env.UNI_PLATFORM == "mp-weixin") { + const { + envVersion + } = uni.getAccountInfoSync().miniProgram; + if (envVersion == "release") { + storage_accid=uni.getetStorageSync('AUTH_YX_ACCID_App'); + storage_token=uni.setStorageSync('AUTH_YX_TOKEN_App'); + } else { + storage_accid=uni.getStorageSync('DEV_AUTH_YX_ACCID_App'); + storage_token=uni.getStorageSync('DEV_AUTH_YX_TOKEN_App'); + } + }else{ + if (BASE_URL.indexOf('dev') == -1) { + storage_accid=uni.getStorageSync('DEV_AUTH_YX_ACCID_App'); + storage_token=uni.getStorageSync('DEV_AUTH_YX_TOKEN_App'); + + } else { + storage_accid=uni.getetStorageSync('AUTH_YX_ACCID_App'); + storage_token=uni.setStorageSync('AUTH_YX_TOKEN_App'); + } + } + const account =storage_accid; + const token = storage_token; + const appkey = appConfig.online.appkey + const params1 = { + appkey: appkey, + debugLevel: 'log', + apiVersion: 'v2' + } + + console.log('NIM', NIM) + const nim = NIM.getInstance(params1) + console.log('V2NIMConst', V2NIMConst.V2NIMTeamUpdateInfoMode.V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER) + console.log('V2NIMConst', V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P) + + try { + console.log('正在 login...') + + await nim.V2NIMLoginService.login(account, token, { + retryCount: 3, + timeout: 60000, + forceMode: false, + authType: 0 + }) + + console.log('login 成功') + + + }catch(error){ + console.log('login 失败', error) +} + +} +export default imLogin \ No newline at end of file diff --git a/utils/im/constants.js b/utils/im/constants.js new file mode 100644 index 0000000..64e889d --- /dev/null +++ b/utils/im/constants.js @@ -0,0 +1,90 @@ +import { t } from './i18n' +import { V2NIMConst } from './nim' + +// 自定义的一些事件常量 +export const events = { + // 自己发出一条消息 + SEND_MSG: 'sendMsg', + // 发送消息失败 + SEND_MSG_FAILED: 'sendMsgFailed', + // 收到一条消息 + ON_MSG: 'onMsg', + // 加载更多 + ON_LOAD_MORE: 'onLoadMore', + // 首次进入聊天页并获取历史记录 + ON_CHAT_MOUNTED: 'onChatMounted', + // 重新编辑撤回消息 + ON_REEDIT_MSG: 'onReEditMsg', + // 页面触底 + ON_REACH_BOTTOM: 'onReachBottom', + // 页面触顶 + ON_REACH_TOP: 'onReactTop', + // 回复消息 + REPLY_MSG: 'replyMsg', + // input框聚焦 + ON_INPUT_FOCUS_CHANGE: 'onInputFocusChange', + // input框失焦 + ON_INPUT_BLUR: 'onInputBlur', + // 滚动到底部 + ON_SCROLL_BOTTOM: 'onScrollBottom', + // @群成员 + AIT_TEAM_MEMBER: 'aitTeamMember', + // 表情框弹起与收起变化 + EMOJI_AREA_CHANGE: 'emojiAreaChange', + // 获取历史消息 + GET_HISTORY_MSG: 'getHistoryMsg', + // 取消转发消息 + CANCEL_FORWARD_MSG: 'cancelForwardMsg', + // 确认转发消息 + CONFIRM_FORWARD_MSG: 'confirmForwardMsg', + // @消息 @群成员 + HANDLE_AIT_MEMBER: 'handleAitMember', + // 关闭@弹窗 + CLOSE_AIT_POPUP: 'closeAitPopup', + // 表情点击 + EMOJI_CLICK: 'emojiClick', + // 表情删除 + EMOJI_DELETE: 'emojiDelete', + // 表情发送 + EMOJI_SEND: 'emojiSend', + // 好友选择 + FRIEND_SELECT: 'friendSelect', + // 处理滚动穿透 + HANDLE_MOVE_THROUGH: 'handleMoveThrough', + // 关闭表情、语音面板 + CLOSE_PANEL: 'closePanel', + // 语音消息url改变 + AUDIO_URL_CHANGE: 'audioUrlChange', +} + +export const HISTORY_LIMIT = 15 + +export const MSG_ID_FLAG = 'message-item-' + +export const AT_ALL_ACCOUNT = 'ait_all' + +export const ALLOW_AT = 'yxAllowAt' + +export const REPLY_MSG_TYPE_MAP = { + [V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_IMAGE]: t('imgMsgText'), + [V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_AUDIO]: t('audioMsgText'), + [V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_VIDEO]: t('videoMsgText'), + [V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_FILE]: t('fileMsgText'), +} + +export const STORAGE_KEY = '__yx_im_options__' + +export const callTypeMap = { + audio: '1', + video: '2', +} + +export const g2StatusMap= { + 1: t('callDurationText'), + 2: t('callCancelText'), + 3: t('callRejectedText'), + 4: t('callTimeoutText'), + 5: t('callBusyText'), +} + +export const msgRecallTime = 2 * 60 * 1000 diff --git a/utils/im/customNavigate.js b/utils/im/customNavigate.js new file mode 100644 index 0000000..0db8874 --- /dev/null +++ b/utils/im/customNavigate.js @@ -0,0 +1,17 @@ +const preUrl = '' + +export function customNavigateTo(options) { + uni.navigateTo({ ...options, url: preUrl + options.url }) +} + +export function customRedirectTo(options) { + uni.redirectTo({ ...options, url: preUrl + options.url }) +} + +export function customSwitchTab(options) { + uni.switchTab({ ...options, url: preUrl + options.url }) +} + +export function customReLaunch(options) { + uni.reLaunch({ ...options, url: preUrl + options.url }) +} diff --git a/utils/im/date.js b/utils/im/date.js new file mode 100644 index 0000000..bc9cf61 --- /dev/null +++ b/utils/im/date.js @@ -0,0 +1,58 @@ +import { t } from './i18n' + +export function caculateTimeago(dateTimeStamp) { + const minute = 1000 * 60 // 把分,时,天,周,半个月,一个月用毫秒表示 + const hour = minute * 60 + const day = hour * 24 + const week = day * 7 + const now = new Date().getTime() // 获取当前时间毫秒 + const diffValue = now - dateTimeStamp // 时间差 + let result = '' + + if (diffValue < 0) { + return t('nowText') + } + const minC = Math.floor(diffValue / minute) // 计算时间差的分,时,天,周,月 + const hourC = Math.floor(diffValue / hour) + const dayC = Math.floor(diffValue / day) + const weekC = Math.floor(diffValue / week) + if (weekC >= 1 && weekC <= 4) { + result = ` ${weekC}${t('weekText')}` + } else if (dayC >= 1 && dayC <= 6) { + result = ` ${dayC}${t('dayText')}` + } else if (hourC >= 1 && hourC <= 23) { + result = ` ${hourC}${t('hourText')}` + } else if (minC >= 1 && minC <= 59) { + result = ` ${minC}${t('minuteText')}` + } else if (diffValue >= 0 && diffValue <= minute) { + result = t('nowText') + } else { + const datetime = new Date() + datetime.setTime(dateTimeStamp) + const Nyear = datetime.getFullYear() + const Nmonth = + datetime.getMonth() + 1 < 10 + ? `0${datetime.getMonth() + 1}` + : datetime.getMonth() + 1 + const Ndate = + datetime.getDate() < 10 ? `0${datetime.getDate()}` : datetime.getDate() + result = `${Nyear}-${Nmonth}-${Ndate}` + } + return result +} + +export const formatDateRange = (type) => { + const date = new Date() + let year = date.getFullYear() + let month= date.getMonth() + 1 + let day= date.getDate() + + if (type === 'start') { + year = year - 100 + } else if (type === 'end') { + year = year + } + month = month > 9 ? month : '0' + month + day = day > 9 ? day : '0' + day + return `${year}-${month}-${day}` +} diff --git a/utils/im/emoji.js b/utils/im/emoji.js new file mode 100644 index 0000000..6085f1c --- /dev/null +++ b/utils/im/emoji.js @@ -0,0 +1,160 @@ +import { t } from './i18n' + + +export const EMOJI_ICON_MAP_CONFIG = { + '[大笑]': 'icon-a-1', + '[开心]': 'icon-a-2', + '[色]': 'icon-a-3', + '[酷]': 'icon-a-4', + '[奸笑]': 'icon-a-5', + '[亲]': 'icon-a-6', + '[伸舌头]': 'icon-a-7', + '[眯眼]': 'icon-a-8', + '[可爱]': 'icon-a-9', + '[鬼脸]': 'icon-a-10', + '[偷笑]': 'icon-a-11', + '[喜悦]': 'icon-a-12', + '[狂喜]': 'icon-a-13', + '[惊讶]': 'icon-a-14', + '[流泪]': 'icon-a-15', + '[流汗]': 'icon-a-16', + '[天使]': 'icon-a-17', + '[笑哭]': 'icon-a-18', + '[尴尬]': 'icon-a-19', + '[惊恐]': 'icon-a-20', + '[大哭]': 'icon-a-21', + '[烦躁]': 'icon-a-22', + '[恐怖]': 'icon-a-23', + '[两眼冒星]': 'icon-a-24', + '[害羞]': 'icon-a-25', + '[睡着]': 'icon-a-26', + '[冒星]': 'icon-a-27', + '[口罩]': 'icon-a-28', + '[OK]': 'icon-a-29', + '[好吧]': 'icon-a-30', + '[鄙视]': 'icon-a-31', + '[难受]': 'icon-a-32', + '[不屑]': 'icon-a-33', + '[不舒服]': 'icon-a-34', + '[愤怒]': 'icon-a-35', + '[鬼怪]': 'icon-a-36', + '[发怒]': 'icon-a-37', + '[生气]': 'icon-a-38', + '[不高兴]': 'icon-a-39', + '[皱眉]': 'icon-a-40', + '[心碎]': 'icon-a-41', + '[心动]': 'icon-a-42', + '[好的]': 'icon-a-43', + '[低级]': 'icon-a-44', + '[赞]': 'icon-a-45', + '[鼓掌]': 'icon-a-46', + '[给力]': 'icon-a-47', + '[打你]': 'icon-a-48', + '[阿弥陀佛]': 'icon-a-49', + '[拜拜]': 'icon-a-50', + '[第一]': 'icon-a-51', + '[拳头]': 'icon-a-52', + '[手掌]': 'icon-a-53', + '[剪刀]': 'icon-a-54', + '[招手]': 'icon-a-55', + '[不要]': 'icon-a-56', + '[举着]': 'icon-a-57', + '[思考]': 'icon-a-58', + '[猪头]': 'icon-a-59', + '[不听]': 'icon-a-60', + '[不看]': 'icon-a-61', + '[不说]': 'icon-a-62', + '[猴子]': 'icon-a-63', + '[炸弹]': 'icon-a-64', + '[睡觉]': 'icon-a-65', + '[筋斗云]': 'icon-a-66', + '[火箭]': 'icon-a-67', + '[救护车]': 'icon-a-68', + '[便便]': 'icon-a-70', +} + +export const emojiMap = { + [t('Laugh')]: 'icon-a-1', + [t('Happy')]: 'icon-a-2', + [t('Sexy')]: 'icon-a-3', + [t('Cool')]: 'icon-a-4', + [t('Mischievous')]: 'icon-a-5', + [t('Kiss')]: 'icon-a-6', + [t('Spit')]: 'icon-a-7', + [t('Squint')]: 'icon-a-8', + [t('Cute')]: 'icon-a-9', + [t('Grimace')]: 'icon-a-10', + [t('Snicker')]: 'icon-a-11', + [t('Joy')]: 'icon-a-12', + [t('Ecstasy')]: 'icon-a-13', + [t('Surprise')]: 'icon-a-14', + [t('Tears')]: 'icon-a-15', + [t('Sweat')]: 'icon-a-16', + [t('Angle')]: 'icon-a-17', + [t('Funny')]: 'icon-a-18', + [t('Awkward')]: 'icon-a-19', + [t('Thrill')]: 'icon-a-20', + [t('Cry')]: 'icon-a-21', + [t('Fretting')]: 'icon-a-22', + [t('Terrorist')]: 'icon-a-23', + [t('Halo')]: 'icon-a-24', + [t('Shame')]: 'icon-a-25', + [t('Sleep')]: 'icon-a-26', + [t('Tired')]: 'icon-a-27', + [t('Mask')]: 'icon-a-28', + [t('ok')]: 'icon-a-29', + [t('AllRight')]: 'icon-a-30', + [t('Despise')]: 'icon-a-31', + [t('Uncomfortable')]: 'icon-a-32', + [t('Disdain')]: 'icon-a-33', + [t('ill')]: 'icon-a-34', + [t('Mad')]: 'icon-a-35', + [t('Ghost')]: 'icon-a-36', + [t('Angry')]: 'icon-a-37', + [t('Angry')]: 'icon-a-38', + [t('Unhappy')]: 'icon-a-39', + [t('Frown')]: 'icon-a-40', + [t('Broken')]: 'icon-a-41', + [t('Beckoning')]: 'icon-a-42', + [t('Ok')]: 'icon-a-43', + [t('Low')]: 'icon-a-44', + [t('Nice')]: 'icon-a-45', + [t('Applause')]: 'icon-a-46', + [t('GoodJob')]: 'icon-a-47', + [t('Hit')]: 'icon-a-48', + [t('Please')]: 'icon-a-49', + [t('Bye')]: 'icon-a-50', + [t('First')]: 'icon-a-51', + [t('Fist')]: 'icon-a-52', + [t('GiveMeFive')]: 'icon-a-53', + [t('Knife')]: 'icon-a-54', + [t('Hi')]: 'icon-a-55', + [t('No')]: 'icon-a-56', + [t('Hold')]: 'icon-a-57', + [t('Think')]: 'icon-a-58', + [t('Pig')]: 'icon-a-59', + [t('NoListen')]: 'icon-a-60', + [t('NoLook')]: 'icon-a-61', + [t('NoWords')]: 'icon-a-62', + [t('Monkey')]: 'icon-a-63', + [t('Bomb')]: 'icon-a-64', + [t('Sleep')]: 'icon-a-65', + [t('Cloud')]: 'icon-a-66', + [t('Rocket')]: 'icon-a-67', + [t('Ambulance')]: 'icon-a-68', + [t('Poop')]: 'icon-a-70', +} + +export const emojiRegExp = new RegExp( + '(' + + Object.keys(EMOJI_ICON_MAP_CONFIG) + .map((item) => { + const left = `\\${item.slice(0, 1)}` + const right = `\\${item.slice(-1)}` + const mid = item.slice(1, -1) + return `${left}${mid}${right}` + }) + .join('|') + + ')', + 'g' +) diff --git a/utils/im/encodeText.js b/utils/im/encodeText.js new file mode 100644 index 0000000..c7075e3 --- /dev/null +++ b/utils/im/encodeText.js @@ -0,0 +1,26 @@ +export default (data)=> { + let text = '' + for (let i = 0; i < data.length; i++) { + switch (data.charCodeAt(i)) { + case 34: // " + text += '"' + break + case 38: // & + text += '&' + break + case 39: // ' + text += ''' // modified from escape-html; used to be ''' + break + case 60: // < + text += '<' + break + case 62: // > + text += '>' + break + default: + text += data[i] + break + } + } + return text +} diff --git a/utils/im/friend.js b/utils/im/friend.js new file mode 100644 index 0000000..331fdb7 --- /dev/null +++ b/utils/im/friend.js @@ -0,0 +1,72 @@ +// #ifdef APP-PLUS +import pinyin from 'pinyin' +// #endif + +export const friendGroupByPy = ( + arr, + keys, + isLowerCase = true +) => { + const res = {} + const OTHER_TAG = '#' + + const add = (k, v) => { + const _k = isLowerCase ? k.toLowerCase() : k.toUpperCase() + if (!res[_k]) { + res[_k] = [v] + } else { + res[_k].push(v) + } + } + + arr.forEach((item) => { + const v = + item[keys.firstKey] || + item[keys.secondKey || ''] || + item[keys.thirdKey || ''] + if (!!v && typeof v === 'string') { + const str = v[0] + if (/^[a-zA-Z]$/.test(str)) { + add(str.toLowerCase(), item) + } else if (/^[\u4e00-\u9fa5]$/.test(str)) { + const en = '*abcdefghjklmnopqrstwxyz'.split('') + let resolvedK + // #ifdef APP-PLUS + // @ts-ignore + resolvedK = en.find((k) => { + const py = pinyin(str, { + style: 'FIRST_LETTER', + }) + return py[0][0] === k + }) + // #endif + // #ifndef APP-PLUS + const zh = '阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀'.split('') + // @ts-ignore + resolvedK = en.find( + (currentK, ki) => + (!zh[ki - 1] || zh[ki - 1].localeCompare(str, 'zh') <= 0) && + str.localeCompare(zh[ki], 'zh') == -1 + ) + // #endif + if (resolvedK && resolvedK !== '*') { + add(resolvedK, item) + } else { + add(OTHER_TAG, item) + } + } else { + add(OTHER_TAG, item) + } + } else { + add(OTHER_TAG, item) + } + }) + + const data = Object.keys(res).map((k) => ({ key: k, data: res[k] })) + const sortData = data + .filter((item) => item.key !== OTHER_TAG) + .sort((a, b) => a.key.localeCompare(b.key, 'en')) + const otherData = data.filter((item) => item.key === OTHER_TAG) + + return sortData.concat(otherData) +} diff --git a/utils/im/i18n.js b/utils/im/i18n.js new file mode 100644 index 0000000..f0b52bc --- /dev/null +++ b/utils/im/i18n.js @@ -0,0 +1,16 @@ +import en from '../../locale/en' +import zh from '../../locale/zh-Hans' +const i18nData = { + en, + zh, +} + +let currentLanguage= 'zh' + +export function setLanguage(language) { + currentLanguage = language +} + +export const t = (key) => { + return i18nData[currentLanguage][key] || key +} diff --git a/utils/im/index.js b/utils/im/index.js new file mode 100644 index 0000000..7282fc7 --- /dev/null +++ b/utils/im/index.js @@ -0,0 +1,442 @@ +import { events } from './constants' + +export const getUniPlatform = () => { + // @ts-ignore + return uni.getSystemInfoSync().uniPlatform +} + +export const getPlatform = () => { + // @ts-ignore + return uni.getSystemInfoSync().platform +} +// 是否是android app +export const isAndroidApp = + uni.getSystemInfoSync().platform == 'android' && + uni.getSystemInfoSync().uniPlatform == 'app' + +// 是否是Ios app +export const isIosApp = + uni.getSystemInfoSync().platform == 'ios' && + uni.getSystemInfoSync().uniPlatform == 'app' + +// 是否是鸿蒙app +export const isHarmonyOs = + uni.getSystemInfoSync().platform == 'harmonyos' && + uni.getSystemInfoSync().uniPlatform === 'app' + +// 是否是Android app 或者 Ios app +export const isAndroidOrIosApp = + uni.getSystemInfoSync().uniPlatform == 'app' && + (uni.getSystemInfoSync().platform == 'android' || + uni.getSystemInfoSync().platform == 'ios') + +// 是否是Ios web +export const isIosWeb = + uni.getSystemInfoSync().uniPlatform === 'web' && + uni.getSystemInfoSync().platform === 'ios' + +// 是否是App +export const isApp = uni.getSystemInfoSync().uniPlatform == 'app' + +// 是否是微信小程序 +export const isWxApp = uni.getSystemInfoSync().uniPlatform == 'mp-weixin' + +// 是否是web +export const isWeb = uni.getSystemInfoSync().uniPlatform === 'web' + +// @ts-ignore +export function deepClone(source, visited = new WeakMap()) { + if (source === null || typeof source !== 'object') { + return source + } + + if (visited.has(source)) { + return visited.get(source) + } + // @ts-ignore + let clone + + if (source instanceof Date) { + clone = new Date(source.getTime()) + } else if (source instanceof RegExp) { + clone = new RegExp(source) + } else if (source instanceof Map) { + clone = new Map() + visited.set(source, clone) + source.forEach((value, key) => { + // @ts-ignore + clone.set(key, deepClone(value, visited)) + }) + } else if (source instanceof Set) { + clone = new Set() + visited.set(source, clone) + source.forEach((value) => { + // @ts-ignore + clone.add(deepClone(value, visited)) + }) + } else if (Array.isArray(source)) { + clone = [] + // @ts-ignore + visited.set(source, clone) + for (let i = 0; i < source.length; i++) { + clone[i] = deepClone(source[i], visited) + } + } else { + clone = Object.create(Object.getPrototypeOf(source)) + visited.set(source, clone) + for (const prop in source) { + if (source.hasOwnProperty(prop)) { + clone[prop] = deepClone(source[prop], visited) + } + } + } + + return clone +} + +export function stopAllAudio() { + uni.$emit(events.AUDIO_URL_CHANGE, '') +} + +/** + * 秒转换为时分秒 + */ +export const convertSecondsToTime = (seconds)=> { + if (!seconds) { + return null + } + const hours = Math.floor(seconds / 3600) + const minutes = Math.floor((seconds - hours * 3600) / 60) + const remainingSeconds= seconds - hours * 3600 - minutes * 60 + + let timeString = '' + + const includeHours = seconds >= 3600 + if (includeHours) { + if (hours < 10) { + timeString += '0' + } + timeString += hours.toString() + ':' + } + + if (minutes < 10) { + timeString += '0' + } + timeString += minutes.toString() + ':' + + if (remainingSeconds < 10) { + timeString += '0' + } + timeString += remainingSeconds.toString() + + return timeString +} + +export const startCall = (options) => { + try { + // @ts-ignore + uni.$UIKitCallKit.toCallPage( + { + calledAccount: options.remoteUserAccid, + // currentUserAccid: options.currentUserAccid, + type: options.type, + calledShowName: options.remoteShowName, + }, + () => { + console.log('toCallPage: ', { + remoteUserAccid: options.remoteUserAccid, + currentUserAccid: options.currentUserAccid, + type: options.type, + remoteShowName: options.remoteShowName, + }) + } + ) + } catch (error) { + console.log('handleVideoCall error', error) + } +} + + +export const EMOJI_ICON_MAP_CONFIG= { + '[大笑]': 'icon-a-1', + '[开心]': 'icon-a-2', + '[色]': 'icon-a-3', + '[酷]': 'icon-a-4', + '[奸笑]': 'icon-a-5', + '[亲]': 'icon-a-6', + '[伸舌头]': 'icon-a-7', + '[眯眼]': 'icon-a-8', + '[可爱]': 'icon-a-9', + '[鬼脸]': 'icon-a-10', + '[偷笑]': 'icon-a-11', + '[喜悦]': 'icon-a-12', + '[狂喜]': 'icon-a-13', + '[惊讶]': 'icon-a-14', + '[流泪]': 'icon-a-15', + '[流汗]': 'icon-a-16', + '[天使]': 'icon-a-17', + '[笑哭]': 'icon-a-18', + '[尴尬]': 'icon-a-19', + '[惊恐]': 'icon-a-20', + '[大哭]': 'icon-a-21', + '[烦躁]': 'icon-a-22', + '[恐怖]': 'icon-a-23', + '[两眼冒星]': 'icon-a-24', + '[害羞]': 'icon-a-25', + '[睡着]': 'icon-a-26', + '[冒星]': 'icon-a-27', + '[口罩]': 'icon-a-28', + '[OK]': 'icon-a-29', + '[好吧]': 'icon-a-30', + '[鄙视]': 'icon-a-31', + '[难受]': 'icon-a-32', + '[不屑]': 'icon-a-33', + '[不舒服]': 'icon-a-34', + '[愤怒]': 'icon-a-35', + '[鬼怪]': 'icon-a-36', + '[发怒]': 'icon-a-37', + '[生气]': 'icon-a-38', + '[不高兴]': 'icon-a-39', + '[皱眉]': 'icon-a-40', + '[心碎]': 'icon-a-41', + '[心动]': 'icon-a-42', + '[好的]': 'icon-a-43', + '[低级]': 'icon-a-44', + '[赞]': 'icon-a-45', + '[鼓掌]': 'icon-a-46', + '[给力]': 'icon-a-47', + '[打你]': 'icon-a-48', + '[阿弥陀佛]': 'icon-a-49', + '[拜拜]': 'icon-a-50', + '[第一]': 'icon-a-51', + '[拳头]': 'icon-a-52', + '[手掌]': 'icon-a-53', + '[剪刀]': 'icon-a-54', + '[招手]': 'icon-a-55', + '[不要]': 'icon-a-56', + '[举着]': 'icon-a-57', + '[思考]': 'icon-a-58', + '[猪头]': 'icon-a-59', + '[不听]': 'icon-a-60', + '[不看]': 'icon-a-61', + '[不说]': 'icon-a-62', + '[猴子]': 'icon-a-63', + '[炸弹]': 'icon-a-64', + '[睡觉]': 'icon-a-65', + '[筋斗云]': 'icon-a-66', + '[火箭]': 'icon-a-67', + '[救护车]': 'icon-a-68', + '[便便]': 'icon-a-70', +} + +export function replaceEmoji(text, emojiMap) { + const defaultEmojiMap = { + '[Laugh]': '[大笑]', + '[Happy]': '[开心]', + '[Sexy]': '[色]', + '[Cool]': '[酷]', + '[Mischievous]': '[奸笑]', + '[Kiss]': '[亲]', + '[Spit]': '[伸舌头]', + '[Squint]': '[眯眼]', + '[Cute]': '[可爱]', + '[Grimace]': '[鬼脸]', + '[Snicker]': '[偷笑]', + '[Joy]': '[喜悦]', + '[Ecstasy]': '[狂喜]', + '[Surprise]': '[惊讶]', + '[Tears]': '[流泪]', + '[Sweat]': '[流汗]', + '[Angle]': '[天使]', + '[Funny]': '[笑哭]', + '[Awkward]': '[尴尬]', + '[Thrill]': '[惊恐]', + '[Cry]': '[大哭]', + '[Fretting]': '[烦躁]', + '[Terrorist]': '[恐怖]', + '[Halo]': '[两眼冒星]', + '[Shame]': '[害羞]', + '[Sleep]': '[睡着]', + '[Tired]': '[睡觉]', + '[Mask]': '[口罩]', + '[Ok]': '[OK]', + '[All right]': '[好吧]', + '[Despise]': '[鄙视]', + '[Uncomfortable]': '[难受]', + '[Disdain]': '[不屑]', + '[ill]': '[不舒服]', + '[Mad]': '[愤怒]', + '[Ghost]': '[鬼怪]', + '[Huff]': '[发怒]', + '[Angry]': '[生气]', + '[Unhappy]': '[不高兴]', + '[Frown]': '[皱眉]', + '[Broken]': '[心碎]', + '[Beckoning]': '[心动]', + '[Low]': '[低级]', + '[Nice]': '[赞]', + '[Applause]': '[鼓掌]', + '[Good job]': '[给力]', + '[Hit]': '[打你]', + '[Please]': '[阿弥陀佛]', + '[Bye]': '[拜拜]', + '[First]': '[第一]', + '[Fist]': '[拳头]', + '[Give me five]': '[招手]', + '[Knife]': '[剪刀]', + '[Hi]': '[招手]', + '[No]': '[不要]', + '[Hold]': '[举着]', + '[Think]': '[思考]', + '[Pig]': '[猪头]', + '[No listen]': '[不听]', + '[No look]': '[不看]', + '[No words]': '[不说]', + '[Monkey]': '[猴子]', + '[Bomb]': '[炸弹]', + '[Sleeping]': '[睡觉]', + '[Cloud]': '[筋斗云]', + '[Rocket]': '[火箭]', + '[Ambulance]': '[救护车]', + '[Poop]': '[便便]', + } + + const emojiMapConfig = emojiMap || defaultEmojiMap + const emojiMapRegex = new RegExp( + '(' + + Object.keys(emojiMapConfig) + .map((item) => { + const left = `\\${item.slice(0, 1)}` + const right = `\\${item.slice(-1)}` + const mid = item.slice(1, -1) + + return `${left}${mid}${right}` + }) + .join('|') + + ')', + 'g' + ) + + return text.replace(emojiMapRegex, function (matched) { + return emojiMapConfig[matched] + }) +} + +export const handleEmojiTranslate = (t) => { + const SHOW_EMOJI_ICON_MAP_CONFIG = { + [t('Laugh')]: 'icon-a-1', + [t('Happy')]: 'icon-a-2', + [t('Sexy')]: 'icon-a-3', + [t('Cool')]: 'icon-a-4', + [t('Mischievous')]: 'icon-a-5', + [t('Kiss')]: 'icon-a-6', + [t('Spit')]: 'icon-a-7', + [t('Squint')]: 'icon-a-8', + [t('Cute')]: 'icon-a-9', + [t('Grimace')]: 'icon-a-10', + [t('Snicker')]: 'icon-a-11', + [t('Joy')]: 'icon-a-12', + [t('Ecstasy')]: 'icon-a-13', + [t('Surprise')]: 'icon-a-14', + [t('Tears')]: 'icon-a-15', + [t('Sweat')]: 'icon-a-16', + [t('Angle')]: 'icon-a-17', + [t('Funny')]: 'icon-a-18', + [t('Awkward')]: 'icon-a-19', + [t('Thrill')]: 'icon-a-20', + [t('Cry')]: 'icon-a-21', + [t('Fretting')]: 'icon-a-22', + [t('Terrorist')]: 'icon-a-23', + [t('Halo')]: 'icon-a-24', + [t('Shame')]: 'icon-a-25', + [t('Sleep')]: 'icon-a-26', + [t('Tired')]: 'icon-a-27', + [t('Mask')]: 'icon-a-28', + [t('ok')]: 'icon-a-29', + [t('AllRight')]: 'icon-a-30', + [t('Despise')]: 'icon-a-31', + [t('Uncomfortable')]: 'icon-a-32', + [t('Disdain')]: 'icon-a-33', + [t('ill')]: 'icon-a-34', + [t('Mad')]: 'icon-a-35', + [t('Ghost')]: 'icon-a-36', + [t('huff')]: 'icon-a-37', + [t('Angry')]: 'icon-a-38', + [t('Unhappy')]: 'icon-a-39', + [t('Frown')]: 'icon-a-40', + [t('Broken')]: 'icon-a-41', + [t('Beckoning')]: 'icon-a-42', + [t('Ok')]: 'icon-a-43', + [t('Low')]: 'icon-a-44', + [t('Nice')]: 'icon-a-45', + [t('Applause')]: 'icon-a-46', + [t('GoodJob')]: 'icon-a-47', + [t('Hit')]: 'icon-a-48', + [t('Please')]: 'icon-a-49', + [t('Bye')]: 'icon-a-50', + [t('First')]: 'icon-a-51', + [t('Fist')]: 'icon-a-52', + [t('GiveMeFive')]: 'icon-a-53', + [t('Knife')]: 'icon-a-54', + [t('Hi')]: 'icon-a-55', + [t('No')]: 'icon-a-56', + [t('Hold')]: 'icon-a-57', + [t('Think')]: 'icon-a-58', + [t('Pig')]: 'icon-a-59', + [t('NoListen')]: 'icon-a-60', + [t('NoLook')]: 'icon-a-61', + [t('NoWords')]: 'icon-a-62', + [t('Monkey')]: 'icon-a-63', + [t('Bomb')]: 'icon-a-64', + [t('Sleeping')]: 'icon-a-65', + [t('Cloud')]: 'icon-a-66', + [t('Rocket')]: 'icon-a-67', + [t('Ambulance')]: 'icon-a-68', + [t('Poop')]: 'icon-a-70', + } + + const INPUT_EMOJI_SYMBOL_REG = new RegExp( + '(' + + Object.keys(EMOJI_ICON_MAP_CONFIG) + .map((item) => { + const left = `\\${item.slice(0, 1)}` + const right = `\\${item.slice(-1)}` + const mid = item.slice(1, -1) + + return `${left}${mid}${right}` + }) + .join('|') + + ')', + 'g' + ) + + return { + SHOW_EMOJI_ICON_MAP_CONFIG, + INPUT_EMOJI_SYMBOL_REG, + } +} + +// emoji正则 +export const emojiRegExp = new RegExp( + '(' + + Object.keys(EMOJI_ICON_MAP_CONFIG) + .map((item) => { + const left = `\\${item.slice(0, 1)}` + const right = `\\${item.slice(-1)}` + const mid = item.slice(1, -1) + return `${left}${mid}${right}` + }) + .join('|') + + ')', + 'g' +) + +/** 是否是讨论组 */ +export const isDiscussionFunc = (serverExtension) => { + try { + return JSON.parse(serverExtension || '{}').im_ui_kit_group + } catch (error) { + console.warn('parse serverExtension error', error) + return false + } +} diff --git a/utils/im/matrix.js b/utils/im/matrix.js new file mode 100644 index 0000000..6ecd718 --- /dev/null +++ b/utils/im/matrix.js @@ -0,0 +1,16 @@ +export const calculateMatrix =(arr, colNum)=> { + if (colNum < 1) { + throw Error('colNum cound not be smaller than 1') + } + const len = arr.length + const rowNum = Math.ceil(len / colNum) + let curIndex = 0 + let curRow = 0 + const res = [] + while (curIndex <= len && curRow < rowNum) { + res[curRow] = arr.slice(curIndex, curIndex + colNum) + curIndex += colNum + curRow++ + } + return res +} diff --git a/utils/im/msg.js b/utils/im/msg.js new file mode 100644 index 0000000..20ccaa9 --- /dev/null +++ b/utils/im/msg.js @@ -0,0 +1,123 @@ +import { V2NIMConst } from './nim' +import { t } from './i18n' + +const translate = (key)=> { + const text = + { + textMsgText: t('textMsgText'), + customMsgText: t('customMsgText'), + audioMsgText: t('audioMsgText'), + videoMsgText: t('videoMsgText'), + fileMsgText: t('fileMsgText'), + callMsgText: t('callMsgText'), + geoMsgText: t('geoMsgText'), + imgMsgText: t('imgMsgText'), + notiMsgText: t('notiMsgText'), + robotMsgText: t('robotMsgText'), + tipMsgText: t('tipMsgText'), + unknowMsgText: t('unknowMsgText'), + }[key] || '' + return `[${text}]` +} + +export const getMsgContentTipByType = (msg)=> { + const { messageType, text } = msg + switch (messageType) { + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TEXT: + return text || translate('textMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_FILE: + return translate('fileMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_IMAGE: + return translate('imgMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CUSTOM: + return text || translate('customMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_AUDIO: + return translate('audioMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_CALL: + return translate('callMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_LOCATION: + return translate('geoMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_NOTIFICATION: + return translate('notiMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_ROBOT: + return translate('robotMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_TIPS: + return translate('tipMsgText') + case V2NIMConst.V2NIMMessageType.V2NIM_MESSAGE_TYPE_VIDEO: + return translate('videoMsgText') + default: + return translate('unknowMsgText') + } +} + +export const setTabUnread = ()=> { + const routes = getCurrentPages() + const curRoute = routes[routes.length - 1].route + const tabPaths = [ + 'pages/User/my/index', + 'pages/Contact/index', + 'pages/Conversation/index', + ] + if (curRoute && !tabPaths.includes(curRoute)) { + // 不是首页和聊天页,不需要设置tabbar的badge + return + } + + const store = uni.$UIKitStore + /**是否是云端会话 */ + const enableV2CloudConversation = store?.sdkOptions?.enableV2CloudConversation + const unread = + (enableV2CloudConversation + ? store?.conversationStore?.totalUnreadCount + : store?.localConversationStore?.totalUnreadCount) || 0 + if (unread === 0) { + uni.hideTabBarRedDot({ + //隐藏数字 + index: 0, //tabbar下标 + }) + } else { + uni.showTabBarRedDot({ + index: 0, //tabbar下标 + }) + } + /** + * 此为展示tabbar的未读消息数字的写法 + if (unread === 0) { + uni.removeTabBarBadge({ + //隐藏数字 + index: 0, //tabbar下标 + }) + } else { + uni.setTabBarBadge({ + //显示数字 + index: 0, //tabbar下标 + text: unread > 99 ? '99+' : unread.toString(), //显示的数字 + }) + } + */ +} + +export const setContactTabUnread = ()=> { + const routes = getCurrentPages() + const curRoute = routes[routes.length - 1].route + const tabPaths = [ + 'pages/User/my/index', + 'pages/Contact/index', + 'pages/Conversation/index', + ] + if (curRoute && !tabPaths.includes(curRoute)) { + // 不是首页和聊天页,不需要设置tabbar的badge + return + } + const unread = uni.$UIKitStore?.sysMsgStore?.getTotalUnreadMsgsCount() + if (unread === 0) { + uni.hideTabBarRedDot({ + //隐藏数字 + index: 1, //tabbar下标 + }) + } else { + uni.showTabBarRedDot({ + index: 1, //tabbar下标 + }) + } +} diff --git a/utils/im/nim.js b/utils/im/nim.js new file mode 100644 index 0000000..56e0059 --- /dev/null +++ b/utils/im/nim.js @@ -0,0 +1,15 @@ +// 常规集成的V2NIMConst +import { V2NIMConst } from "nim-web-sdk-ng/dist/esm/nim"; + +// ESM 版本集成的V2NIMConst + +/** + * NIM SDK 默认导出 UMD(Universal Module Definition)格式的产物,这种格式的文件可以在多种环境中使用。 + * 当应用对包体积有更严格的要求,例如小程序应用,则可以使用 ESM(ECMAScript Module)格式的 SDK。ESM 是 JavaScript 的原生模块系统, + * 允许更细粒度的模块控制和更有效的打包。再配合 webpack 实现 tree-shaking(一种去除代码中未引用部分的方式),从而进一步降低 NIM SDK 产物体积。 + * 具体参考文档 https://doc.yunxin.163.com/messaging2/guide/DcyMjA1Njk?platform=client + */ +//@ts-ignore +// import { V2NIMConst } from '../esmNim.js' + +export { V2NIMConst }; diff --git a/utils/im/parseText.js b/utils/im/parseText.js new file mode 100644 index 0000000..84046d0 --- /dev/null +++ b/utils/im/parseText.js @@ -0,0 +1,160 @@ +import { emojiRegExp } from './emoji' + + + +/* eslint-disable vars-on-top, no-var, prefer-template */ +// @ts-nocheck +var isRegExp = function (re) { + return re instanceof RegExp +} +var escapeRegExp = function escapeRegExp(string) { + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source) + + return string && reHasRegExpChar.test(string) + ? string.replace(reRegExpChar, '\\$&') + : string +} +var isString = function (value) { + return typeof value === 'string' +} +var flatten = function (array) { + var newArray= [] + + array.forEach(function (item) { + if (Array.isArray(item)) { + newArray = newArray.concat(item) + } else { + newArray.push(item) + } + }) + + return newArray +} + +/** + * Given a string, replace every substring that is matched by the `match` regex + * with the result of calling `fn` on matched substring. The result will be an + * array with all odd indexed elements containing the replacements. The primary + * use case is similar to using String.prototype.replace except for React. + * + * React will happily render an array as children of a react element, which + * makes this approach very useful for tasks like surrounding certain text + * within a string with react elements. + * + * Example: + * matchReplace( + * 'Emphasize all phone numbers like 884-555-4443.', + * /([\d|-]+)/g, + * (number, i) => {number} + * ); + * // => ['Emphasize all phone numbers like ', 884-555-4443, '.' + * + * @param {string} str + * @param {RegExp|str} match Must contain a matching group + * @param {function} fn + * @return {array} + */ + +function replaceString(str, match, fn) { + var curCharStart = 0 + var curCharLen = 0 + + if (str === '') { + return str + } else if (!str || !isString(str)) { + throw new TypeError( + 'First argument to react-string-replace#replaceString must be a string' + ) + } + + var re = match + + if (!isRegExp(re)) { + // @ts-ignore + re = new RegExp('(' + escapeRegExp(re) + ')', 'gi') + } + // @ts-ignore + var result = str.split(re) + + // Apply fn to all odd elements + for (var i = 1, length = result.length; i < length; i += 2) { + /** @see {@link https://github.com/iansinnott/react-string-replace/issues/74} */ + if (result[i] === undefined || result[i - 1] === undefined) { + console.warn( + 'reactStringReplace: Encountered undefined value during string replacement. Your RegExp may not be working the way you expect.' + ) + continue + } + + curCharLen = result[i].length + curCharStart += result[i - 1].length + result[i] = fn(result[i], i, curCharStart) + curCharStart += curCharLen + } + + return result +} + +// 字符串替换 +function stringReplace(source, match, fn) { + if (!Array.isArray(source)) source = [source] + + return flatten( + source.map(function (x) { + return isString(x) ? replaceString(x, match, fn) : x + }) + ) +} + +export function parseText(text, ext){ + if (!text) return [] + const regexLink = /(https?:\/\/\S+)/gi + const yxAitMsg = ext ? JSON.parse(ext).yxAitMsg : null + const emojiArr = stringReplace(text, emojiRegExp, (item) => { + return { + type: 'emoji', + value: item, + } + }) + + const emojiAndLinkArr = stringReplace(emojiArr, regexLink, (item) => { + return { + type: 'link', + value: item, + } + }) + + let emojiAndLinkAndAitArr = emojiAndLinkArr + if (yxAitMsg) { + Object.keys(yxAitMsg)?.forEach((key) => { + const item = yxAitMsg[key] + emojiAndLinkAndAitArr = stringReplace( + emojiAndLinkAndAitArr, + item.text, + (item) => { + return { + type: 'Ait', + value: item, + } + } + ) + }) + } + + const result = emojiAndLinkAndAitArr.map((item, index) => { + if (typeof item == 'string') { + return { + type: 'text', + value: item, + key: index + 'text', + } + } else { + return { + ...item, + key: index + item.type, + } + } + }) + return result +} diff --git a/utils/im/permission.js b/utils/im/permission.js new file mode 100644 index 0000000..120b3c1 --- /dev/null +++ b/utils/im/permission.js @@ -0,0 +1,27 @@ +import { t } from './i18n' + +export const handleNoPermission = (res)=> { + if ( + uni.getSystemInfoSync().platform == 'android' || + uni.getSystemInfoSync().platform == 'ios' + ) { + const appAuthorizeSetting = uni.getAppAuthorizeSetting() + //点击取消时不出现弹窗 + const isCameraDenied = appAuthorizeSetting.cameraAuthorized === 'denied' + const isUserCancelled = + res.errMsg === 'chooseImage:fail User cancelled' || + res.errMsg === 'chooseImage:fail cancel' || + res.errMsg === 'chooseVideo:fail cancel' || + res.errMsg === 'chooseVideo:fail User cancelled' + if ( + (res.code === 11 && isCameraDenied && !isUserCancelled) || + (res.code === 12 && isCameraDenied && !isUserCancelled) || + (res.code === 2 && !isUserCancelled) + ) { + uni.showToast({ + icon: 'none', + title: t('addPermissionText'), + }) + } + } +} diff --git a/utils/im/reporter.js b/utils/im/reporter.js new file mode 100644 index 0000000..aea63f5 --- /dev/null +++ b/utils/im/reporter.js @@ -0,0 +1,23 @@ +import { EventTracking } from '@xkit-yx/utils/dist/uniapp' +//@ts-ignore +import imPkg from 'nim-web-sdk-ng/package.json' + +export const trackInit = ( + component +) => { + if (uni.$UIKitNIM?.options?.appkey) { + const eventTracking = new EventTracking({ + appKey: uni.$UIKitNIM.options.appkey, + version: '10.4.0', + component, + imVersion: imPkg.version, + platform: 'UniApp', + os: uni.getSystemInfoSync().platform.toUpperCase(), + framework: 'UniApp', + language: 'Vue3', + container: uni.getSystemInfoSync().uniPlatform.toUpperCase(), + }) + + eventTracking.track('init', '') + } +} diff --git a/utils/im/transformVue.js b/utils/im/transformVue.js new file mode 100644 index 0000000..287b2c0 --- /dev/null +++ b/utils/im/transformVue.js @@ -0,0 +1,12 @@ +let vueVersion +// #ifndef VUE3 +export * from '@vue/composition-api' +vueVersion = 2 +// #endif + +// #ifdef VUE3 +export * from 'vue' +vueVersion = 3 +// #endif +console.log(`vue version is ${vueVersion}`) +export { vueVersion } diff --git a/utils/im/uniapp.js b/utils/im/uniapp.js new file mode 100644 index 0000000..8880215 --- /dev/null +++ b/utils/im/uniapp.js @@ -0,0 +1,1808 @@ +import EventEmitter from 'eventemitter3' +import axios from 'axios' + +var request$1 = function (_a) { + var _b = _a.method, + method = _b === void 0 ? 'POST' : _b, + url = _a.url, + data = _a.data, + headers = _a.headers + return new Promise(function (resolve, reject) { + uni.request({ + url: url, + method: method, + data: data, + header: headers, + success: function (res) { + var data = res.data + if (data.code !== 200) { + return reject(data.msg) + } + resolve(data) + }, + fail: function (err) { + reject(err) + }, + }) + }) +} +var uniappRequestHelper = request$1 + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise, SuppressedError, Symbol */ + +var extendStatics = function (d, b) { + extendStatics = + Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (d, b) { + d.__proto__ = b + }) || + function (d, b) { + for (var p in b) + if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p] + } + return extendStatics(d, b) +} + +function __extends(d, b) { + if (typeof b !== 'function' && b !== null) + throw new TypeError( + 'Class extends value ' + String(b) + ' is not a constructor or null' + ) + extendStatics(d, b) + function __() { + this.constructor = d + } + d.prototype = + b === null ? Object.create(b) : ((__.prototype = b.prototype), new __()) +} + +var __assign = function () { + __assign = + Object.assign || + function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i] + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] + } + return t + } + return __assign.apply(this, arguments) +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value) + }) + } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) +} + +function __generator(thisArg, body) { + var _ = { + label: 0, + sent: function () { + if (t[0] & 1) throw t[1] + return t[1] + }, + trys: [], + ops: [], + }, + f, + y, + t, + g + return ( + (g = { next: verb(0), throw: verb(1), return: verb(2) }), + typeof Symbol === 'function' && + (g[Symbol.iterator] = function () { + return this + }), + g + ) + function verb(n) { + return function (v) { + return step([n, v]) + } + } + function step(op) { + if (f) throw new TypeError('Generator is already executing.') + while ((g && ((g = 0), op[0] && (_ = 0)), _)) + try { + if ( + ((f = 1), + y && + (t = + op[0] & 2 + ? y['return'] + : op[0] + ? y['throw'] || ((t = y['return']) && t.call(y), 0) + : y.next) && + !(t = t.call(y, op[1])).done) + ) + return t + if (((y = 0), t)) op = [op[0] & 2, t.value] + switch (op[0]) { + case 0: + case 1: + t = op + break + case 4: + _.label++ + return { value: op[1], done: false } + case 5: + _.label++ + y = op[1] + op = [0] + continue + case 7: + op = _.ops.pop() + _.trys.pop() + continue + default: + if ( + !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && + (op[0] === 6 || op[0] === 2) + ) { + _ = 0 + continue + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1] + break + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1] + t = op + break + } + if (t && _.label < t[2]) { + _.label = t[2] + _.ops.push(op) + break + } + if (t[2]) _.ops.pop() + _.trys.pop() + continue + } + op = body.call(thisArg, _) + } catch (e) { + op = [6, e] + y = 0 + } finally { + f = t = 0 + } + if (op[0] & 5) throw op[1] + return { value: op[0] ? op[1] : void 0, done: true } + } +} + +function __values(o) { + var s = typeof Symbol === 'function' && Symbol.iterator, + m = s && o[s], + i = 0 + if (m) return m.call(o) + if (o && typeof o.length === 'number') + return { + next: function () { + if (o && i >= o.length) o = void 0 + return { value: o && o[i++], done: !o } + }, + } + throw new TypeError( + s ? 'Object is not iterable.' : 'Symbol.iterator is not defined.' + ) +} + +function __read(o, n) { + var m = typeof Symbol === 'function' && o[Symbol.iterator] + if (!m) return o + var i = m.call(o), + r, + ar = [], + e + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value) + } catch (error) { + e = { error: error } + } finally { + try { + if (r && !r.done && (m = i['return'])) m.call(i) + } finally { + if (e) throw e.error + } + } + return ar +} + +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) + for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i) + ar[i] = from[i] + } + } + return to.concat(ar || Array.prototype.slice.call(from)) +} + +typeof SuppressedError === 'function' + ? SuppressedError + : function (error, suppressed, message) { + var e = new Error(message) + return ( + (e.name = 'SuppressedError'), + (e.error = error), + (e.suppressed = suppressed), + e + ) + } + +var request = uniappRequestHelper +var Storage = /** @class */ (function () { + function Storage(type, salt) { + this.store = new Map() + this.type = 'memory' + this.salt = '__salt__' + type && (this.type = type) + salt && (this.salt = salt) + } + Storage.prototype.get = function (key) { + var value + switch (this.type) { + case 'memory': + return this.store.get(key) + case 'localStorage': + case 'sessionStorage': + value = uni.getStorageSync(''.concat(this.salt).concat(key)) + return value + } + } + Storage.prototype.set = function (key, value) { + switch (this.type) { + case 'memory': + this.store.set(key, value) + break + case 'localStorage': + case 'sessionStorage': + uni.setStorageSync(''.concat(this.salt).concat(key), value) + break + } + } + Storage.prototype.remove = function (key) { + switch (this.type) { + case 'memory': + this.store.delete(key) + break + case 'localStorage': + case 'sessionStorage': + uni.removeStorageSync(''.concat(this.salt).concat(key)) + break + } + } + return Storage +})() +var uniappStorage = Storage + +var index = uniappStorage +var url$1 = 'https://statistic.live.126.net/statics/report/xkit/action' +var EventTracking = /** @class */ (function () { + function EventTracking(_a) { + var appKey = _a.appKey, + version = _a.version, + component = _a.component, + nertcVersion = _a.nertcVersion, + imVersion = _a.imVersion, + _b = _a.os, + os = _b === void 0 ? '' : _b, + _c = _a.framework, + framework = _c === void 0 ? '' : _c, + _d = _a.language, + language = _d === void 0 ? '' : _d, + _e = _a.container, + container = _e === void 0 ? '' : _e, + _f = _a.platform, + platform = _f === void 0 ? 'Web' : _f, + _g = _a.channel, + channel = _g === void 0 ? 'netease' : _g + this.platform = platform + this.appKey = appKey + this.version = version + this.component = component + this.nertcVersion = nertcVersion + this.imVersion = imVersion + this.channel = channel + this.os = os + this.framework = framework + this.language = language + this.container = container + } + EventTracking.prototype.track = function (reportType, data) { + return __awaiter(this, void 0, void 0, function () { + var _a, + appKey, + version, + component, + nertcVersion, + imVersion, + platform, + channel, + os, + framework, + language, + container, + timeStamp + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ;(_a = this), + (appKey = _a.appKey), + (version = _a.version), + (component = _a.component), + (nertcVersion = _a.nertcVersion), + (imVersion = _a.imVersion), + (platform = _a.platform), + (channel = _a.channel), + (os = _a.os), + (framework = _a.framework), + (language = _a.language), + (container = _a.container) + timeStamp = Date.now() + _c.label = 1 + case 1: + _c.trys.push([1, 3, , 4]) + return [ + 4 /*yield*/, + request({ + method: 'POST', + url: url$1, + data: { + appKey: appKey, + version: version, + component: component, + timeStamp: timeStamp, + nertcVersion: nertcVersion, + imVersion: imVersion, + platform: platform, + reportType: reportType, + data: data, + channel: channel, + os: os, + framework: framework, + language: language, + container: container, + }, + }), + ] + case 2: + _c.sent() + return [3 /*break*/, 4] + case 3: + _c.sent() + return [3 /*break*/, 4] + case 4: + return [2 /*return*/] + } + }) + }) + } + return EventTracking +})() +var EventTracking$1 = EventTracking + +/** + * 判断元素是否可见 + * 融合了 IntersectionObserver 与 visibilityChange 事件 + */ +var VisibilityObserver = /** @class */ (function (_super) { + __extends(VisibilityObserver, _super) + // 入参说明参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API + function VisibilityObserver(options) { + var _this = _super.call(this) || this + _this.visibilityState = document.visibilityState + _this.entries = [] + _this._visibilitychange = function () { + _this.visibilityState = document.visibilityState + _this._trigger() + } + _this.intersectionObserver = new IntersectionObserver( + _this._intersectionObserverHandler.bind(_this), + options + ) + document.addEventListener('visibilitychange', _this._visibilitychange) + return _this + } + VisibilityObserver.prototype.observe = function (target) { + return this.intersectionObserver.observe(target) + } + VisibilityObserver.prototype.unobserve = function (target) { + return this.intersectionObserver.unobserve(target) + } + VisibilityObserver.prototype.destroy = function () { + this.intersectionObserver.disconnect() + document.removeEventListener('visibilitychange', this._visibilitychange) + this.entries = [] + } + VisibilityObserver.prototype._intersectionObserverHandler = function ( + entries + ) { + this.entries = entries + this._trigger() + } + VisibilityObserver.prototype._trigger = function () { + var _this = this + this.entries.forEach(function (item) { + if (_this.visibilityState !== 'visible' || item.intersectionRatio <= 0) { + _this.emit('visibleChange', { + visible: false, + target: item.target, + }) + return + } + _this.emit('visibleChange', { + visible: true, + target: item.target, + }) + }) + } + return VisibilityObserver +})(EventEmitter) +var VisibilityObserver$1 = VisibilityObserver + +var commonjsGlobal = + typeof globalThis !== 'undefined' + ? globalThis + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : typeof self !== 'undefined' + ? self + : {} + +function createCommonjsModule(fn, module) { + return (module = { exports: {} }), fn(module, module.exports), module.exports +} + +var loglevel = createCommonjsModule(function (module) { + /* + * loglevel - https://github.com/pimterry/loglevel + * + * Copyright (c) 2013 Tim Perry + * Licensed under the MIT license. + */ + ;(function (root, definition) { + if (module.exports) { + module.exports = definition() + } else { + root.log = definition() + } + })(commonjsGlobal, function () { + // Slightly dubious tricks to cut down minimized file size + var noop = function () {} + var undefinedType = 'undefined' + var isIE = + typeof window !== undefinedType && + typeof window.navigator !== undefinedType && + /Trident\/|MSIE /.test(window.navigator.userAgent) + + var logMethods = ['trace', 'debug', 'info', 'warn', 'error'] + + var _loggersByName = {} + var defaultLogger = null + + // Cross-browser bind equivalent that works at least back to IE6 + function bindMethod(obj, methodName) { + var method = obj[methodName] + if (typeof method.bind === 'function') { + return method.bind(obj) + } else { + try { + return Function.prototype.bind.call(method, obj) + } catch (e) { + // Missing bind shim or IE8 + Modernizr, fallback to wrapping + return function () { + return Function.prototype.apply.apply(method, [obj, arguments]) + } + } + } + } + + // Trace() doesn't print the message in IE, so for that case we need to wrap it + function traceForIE() { + if (console.log) { + if (console.log.apply) { + console.log.apply(console, arguments) + } else { + // In old IE, native console methods themselves don't have apply(). + Function.prototype.apply.apply(console.log, [console, arguments]) + } + } + if (console.trace) console.trace() + } + + // Build the best logging method possible for this env + // Wherever possible we want to bind, not wrap, to preserve stack traces + function realMethod(methodName) { + if (methodName === 'debug') { + methodName = 'log' + } + + if (typeof console === undefinedType) { + return false // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives + } else if (methodName === 'trace' && isIE) { + return traceForIE + } else if (console[methodName] !== undefined) { + return bindMethod(console, methodName) + } else if (console.log !== undefined) { + return bindMethod(console, 'log') + } else { + return noop + } + } + + // These private functions always need `this` to be set properly + + function replaceLoggingMethods() { + /*jshint validthis:true */ + var level = this.getLevel() + + // Replace the actual methods. + for (var i = 0; i < logMethods.length; i++) { + var methodName = logMethods[i] + this[methodName] = + i < level ? noop : this.methodFactory(methodName, level, this.name) + } + + // Define log.log as an alias for log.debug + this.log = this.debug + + // Return any important warnings. + if (typeof console === undefinedType && level < this.levels.SILENT) { + return 'No console available for logging' + } + } + + // In old IE versions, the console isn't present until you first open it. + // We build realMethod() replacements here that regenerate logging methods + function enableLoggingWhenConsoleArrives(methodName) { + return function () { + if (typeof console !== undefinedType) { + replaceLoggingMethods.call(this) + this[methodName].apply(this, arguments) + } + } + } + + // By default, we use closely bound real methods wherever possible, and + // otherwise we wait for a console to appear, and then try again. + function defaultMethodFactory(methodName, _level, _loggerName) { + /*jshint validthis:true */ + return ( + realMethod(methodName) || + enableLoggingWhenConsoleArrives.apply(this, arguments) + ) + } + + function Logger(name, factory) { + // Private instance variables. + var self = this + /** + * The level inherited from a parent logger (or a global default). We + * cache this here rather than delegating to the parent so that it stays + * in sync with the actual logging methods that we have installed (the + * parent could change levels but we might not have rebuilt the loggers + * in this child yet). + * @type {number} + */ + var inheritedLevel + /** + * The default level for this logger, if any. If set, this overrides + * `inheritedLevel`. + * @type {number|null} + */ + var defaultLevel + /** + * A user-specific level for this logger. If set, this overrides + * `defaultLevel`. + * @type {number|null} + */ + var userLevel + + var storageKey = 'loglevel' + if (typeof name === 'string') { + storageKey += ':' + name + } else if (typeof name === 'symbol') { + storageKey = undefined + } + + function persistLevelIfPossible(levelNum) { + var levelName = (logMethods[levelNum] || 'silent').toUpperCase() + + if (typeof window === undefinedType || !storageKey) return + + // Use localStorage if available + try { + window.localStorage[storageKey] = levelName + return + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + '=' + levelName + ';' + } catch (ignore) {} + } + + function getPersistedLevel() { + var storedLevel + + if (typeof window === undefinedType || !storageKey) return + + try { + storedLevel = window.localStorage[storageKey] + } catch (ignore) {} + + // Fallback to cookies if local storage gives us nothing + if (typeof storedLevel === undefinedType) { + try { + var cookie = window.document.cookie + var cookieName = encodeURIComponent(storageKey) + var location = cookie.indexOf(cookieName + '=') + if (location !== -1) { + storedLevel = /^([^;]+)/.exec( + cookie.slice(location + cookieName.length + 1) + )[1] + } + } catch (ignore) {} + } + + // If the stored level is not valid, treat it as if nothing was stored. + if (self.levels[storedLevel] === undefined) { + storedLevel = undefined + } + + return storedLevel + } + + function clearPersistedLevel() { + if (typeof window === undefinedType || !storageKey) return + + // Use localStorage if available + try { + window.localStorage.removeItem(storageKey) + } catch (ignore) {} + + // Use session cookie as fallback + try { + window.document.cookie = + encodeURIComponent(storageKey) + + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC' + } catch (ignore) {} + } + + function normalizeLevel(input) { + var level = input + if ( + typeof level === 'string' && + self.levels[level.toUpperCase()] !== undefined + ) { + level = self.levels[level.toUpperCase()] + } + if ( + typeof level === 'number' && + level >= 0 && + level <= self.levels.SILENT + ) { + return level + } else { + throw new TypeError( + 'log.setLevel() called with invalid level: ' + input + ) + } + } + + /* + * + * Public logger API - see https://github.com/pimterry/loglevel for details + * + */ + + self.name = name + + self.levels = { + TRACE: 0, + DEBUG: 1, + INFO: 2, + WARN: 3, + ERROR: 4, + SILENT: 5, + } + + self.methodFactory = factory || defaultMethodFactory + + self.getLevel = function () { + if (userLevel != null) { + return userLevel + } else if (defaultLevel != null) { + return defaultLevel + } else { + return inheritedLevel + } + } + + self.setLevel = function (level, persist) { + userLevel = normalizeLevel(level) + if (persist !== false) { + // defaults to true + persistLevelIfPossible(userLevel) + } + + // NOTE: in v2, this should call rebuild(), which updates children. + return replaceLoggingMethods.call(self) + } + + self.setDefaultLevel = function (level) { + defaultLevel = normalizeLevel(level) + if (!getPersistedLevel()) { + self.setLevel(level, false) + } + } + + self.resetLevel = function () { + userLevel = null + clearPersistedLevel() + replaceLoggingMethods.call(self) + } + + self.enableAll = function (persist) { + self.setLevel(self.levels.TRACE, persist) + } + + self.disableAll = function (persist) { + self.setLevel(self.levels.SILENT, persist) + } + + self.rebuild = function () { + if (defaultLogger !== self) { + inheritedLevel = normalizeLevel(defaultLogger.getLevel()) + } + replaceLoggingMethods.call(self) + + if (defaultLogger === self) { + for (var childName in _loggersByName) { + _loggersByName[childName].rebuild() + } + } + } + + // Initialize all the internal levels. + inheritedLevel = normalizeLevel( + defaultLogger ? defaultLogger.getLevel() : 'WARN' + ) + var initialLevel = getPersistedLevel() + if (initialLevel != null) { + userLevel = normalizeLevel(initialLevel) + } + replaceLoggingMethods.call(self) + } + + /* + * + * Top-level API + * + */ + + defaultLogger = new Logger() + + defaultLogger.getLogger = function getLogger(name) { + if ( + (typeof name !== 'symbol' && typeof name !== 'string') || + name === '' + ) { + throw new TypeError('You must supply a name when creating a logger.') + } + + var logger = _loggersByName[name] + if (!logger) { + logger = _loggersByName[name] = new Logger( + name, + defaultLogger.methodFactory + ) + } + return logger + } + + // Grab the current global log variable in case of overwrite + var _log = typeof window !== undefinedType ? window.log : undefined + defaultLogger.noConflict = function () { + if (typeof window !== undefinedType && window.log === defaultLogger) { + window.log = _log + } + + return defaultLogger + } + + defaultLogger.getLoggers = function getLoggers() { + return _loggersByName + } + + // ES6 default export, for compatibility + defaultLogger['default'] = defaultLogger + + return defaultLogger + }) +}) + +var log = loglevel + +function createLoggerDecorator(MODULE_NAME, logger) { + return function (__, propKey, descriptor) { + var method = descriptor.value + descriptor.value = function () { + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + return __awaiter(this, void 0, void 0, function () { + var methodName, res, err_1 + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (!logger) { + // @ts-ignore + logger = this.logger + } + if ( + ['log', 'error'].some(function (item) { + return !logger[item] + }) + ) { + console.warn( + 'loggerDecorator warning: your logger is not complete' + ) + } + methodName = method.name || propKey || '' + _a.label = 1 + case 1: + _a.trys.push([1, 3, , 4]) + logger === null || logger === void 0 + ? void 0 + : logger.log.apply( + logger, + __spreadArray( + [MODULE_NAME, methodName], + __read(args), + false + ) + ) + return [4 /*yield*/, method.apply(this, args)] + case 2: + res = _a.sent() + logger === null || logger === void 0 + ? void 0 + : logger.log( + MODULE_NAME, + ''.concat(methodName, ' success: '), + res + ) + return [2 /*return*/, res] + case 3: + err_1 = _a.sent() + logger === null || logger === void 0 + ? void 0 + : logger.error( + MODULE_NAME, + ''.concat(methodName, ' failed: '), + err_1 + ) + throw err_1 + case 4: + return [2 /*return*/] + } + }) + }) + } + } +} + +function sensitiveInfoFilter(content) { + var regexs = [ + 'scene/apps/[a-z0-9]{32}/', + '"rtcKey":"[a-z0-9]{32}"', + '"imKey":"[a-z0-9]{32}"', + '"appkey":"[a-z0-9]{32}"', + '"appkey": "[a-z0-9]{32}"', + 'appkey:"[a-z0-9]{32}"', + 'appkey: "[a-z0-9]{32}"', + '"appkey":[a-z0-9]{32}', + '"appkey": [a-z0-9]{32}', + 'appkey:[a-z0-9]{32}', + 'appkey: [a-z0-9]{32}', + ] + var templates = [ + 'scene/apps/***/', + '"rtcKey":"***"', + '"imKey":"***"', + '"appkey":"***"', + '"appkey": "***"', + 'appkey:"***"', + 'appkey: "***"', + '"appkey":***', + '"appkey": ***', + 'appkey:***', + 'appkey: ***', + ] + regexs.forEach(function (regex, index) { + var reg = new RegExp(regex, 'gi') + content = content.replace(reg, templates[index]) + }) + return content +} +var logDebug = function (_a) { + var _b = + _a === void 0 + ? { + appName: '', + version: '', + storeWindow: false, + needStringify: true, + } + : _a, + level = _b.level, + _c = _b.appName, + appName = _c === void 0 ? '' : _c, + _d = _b.storeWindow, + storeWindow = _d === void 0 ? false : _d, + _e = _b.needStringify, + needStringify = _e === void 0 ? true : _e + var genTime = function () { + var now = new Date() + var year = now.getFullYear() + var month = now.getMonth() + 1 + var day = now.getDate() + var hour = now.getHours() < 10 ? '0'.concat(now.getHours()) : now.getHours() + var min = + now.getMinutes() < 10 ? '0'.concat(now.getMinutes()) : now.getMinutes() + var s = + now.getSeconds() < 10 ? '0'.concat(now.getSeconds()) : now.getSeconds() + var nowString = '' + .concat(year, '-') + .concat(month, '-') + .concat(day, ' ') + .concat(hour, ':') + .concat(min, ':') + .concat(s) + return nowString + } + var genUserAgent = function () { + try { + var ua = navigator.userAgent.toLocaleLowerCase() + var re = /(msie|firefox|chrome|opera|version).*?([\d.]+)/ + var m = ua.match(re) || [] + var browser = m[1].replace(/version/, 'safari') + var ver = m[2] + return { + browser: browser, + ver: ver, + } + } catch (error) { + return null + } + } + var proxyLog = function () { + var _log = new Proxy(log, { + get: function (target, prop) { + var _a, _b + if (!(prop in target)) { + return + } + var func = target[prop] + if ( + !['log', 'info', 'warn', 'error', 'trace', 'debug'].includes(prop) + ) { + return func + } + var prefix = genTime() + if (genUserAgent()) { + prefix += '[' + .concat( + (_a = genUserAgent()) === null || _a === void 0 + ? void 0 + : _a.browser, + ' ' + ) + .concat( + (_b = genUserAgent()) === null || _b === void 0 ? void 0 : _b.ver, + ']' + ) + } + prefix += + '['.concat( + { + log: 'L', + info: 'I', + warn: 'W', + error: 'E', + trace: 'E', + debug: 'D', + }[prop], + ']' + ) + + '['.concat(appName, ']') + + ':' + // eslint-disable-next-line @typescript-eslint/no-this-alias + var that = this + return function () { + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + if (needStringify) { + for (var i = 0; i < args.length; i++) { + if (typeof args[i] === 'object') { + try { + args[i] = JSON.stringify(args[i]) + } catch (_a) { + console.warn('[日志打印对象无法序列化]', args[i]) + } + } + if (typeof args[i] === 'string') { + args[i] = sensitiveInfoFilter(args[i]) + } + } + } + return func.apply(that, __spreadArray([prefix], __read(args), false)) + } + }, + }) + return _log + } + var logger = proxyLog() + if (level) { + logger.setLevel(level) + } + if (storeWindow) { + // @ts-ignore + window.__LOGGER__ = logger + } + return logger +} +var logDebug$1 = logDebug + +var EventPriority +;(function (EventPriority) { + EventPriority[(EventPriority['LOW'] = 0)] = 'LOW' + EventPriority[(EventPriority['NORMAL'] = 1)] = 'NORMAL' + EventPriority[(EventPriority['HIGH'] = 2)] = 'HIGH' +})(EventPriority || (EventPriority = {})) +var ReportEvent = /** @class */ (function () { + // private _report: XKitReporter + function ReportEvent(options) { + // static appInfo: AppInfo + this.appKey = '' + this.component = '' + this.data = {} + this.framework = '' + this.version = '' + this.startTime = 0 + this.endTime = 0 + this.duration = 0 + this.data.startTime = new Date().getTime() + this.data.timeStamp = this.data.startTime + this.eventId = options.eventId + this.priority = options.priority + } + ReportEvent.prototype.end = function () { + // 如果已经end过 不再end + if (this.data.endTime && this.data.duration) { + return + } + this.data.endTime = this.data.endTime || new Date().getTime() + this.data.duration = + this.data.duration || this.data.endTime - this.data.startTime + } + ReportEvent.prototype.setAppInfo = function (appInfo) { + this.appKey = appInfo.appKey + this.component = appInfo.component + this.version = appInfo.version + if (appInfo.framework) { + this.framework = appInfo.framework + } + } + ReportEvent.prototype.endWith = function (data) { + var code = data.code, + msg = data.msg, + requestId = data.requestId, + serverCost = data.serverCost + // 过滤code非number类型 + if (typeof code != 'number') { + this.data.code = -2 + } else { + this.data.code = code + } + this.data.message = msg + this.data.requestId = requestId + this.data.serverCost = serverCost + this.end() + } + ReportEvent.prototype.endWithSuccess = function (data) { + if (data) { + var requestId = data.requestId, + serverCost = data.serverCost + this.data.requestId = requestId + this.data.serverCost = serverCost + } + this.data.code = 0 + this.data.message = 'success' + this.end() + } + ReportEvent.prototype.endWithFailure = function (data) { + if (data) { + var requestId = data.requestId, + serverCost = data.serverCost + this.data.requestId = requestId + this.data.serverCost = serverCost + } + this.data.code = -1 + this.data.message = 'failure' + this.end() + } + ReportEvent.prototype.setParams = function (params) { + this.data.params = __assign({}, params) + return this + } + ReportEvent.prototype.addParams = function (params) { + this.data.params = __assign(__assign({}, this.data.params), params) + return this + } + ReportEvent.prototype.setData = function (data) { + this.data = __assign(__assign({}, this.data), data) + } + ReportEvent.prototype.setUserId = function (userId) { + this.data.userId = userId + } + return ReportEvent +})() +var EventStep = /** @class */ (function (_super) { + __extends(EventStep, _super) + function EventStep(options) { + return _super.call(this, options) || this + } + return EventStep +})(ReportEvent) +var IntervalEvent = /** @class */ (function (_super) { + __extends(IntervalEvent, _super) + function IntervalEvent(options) { + var _this = _super.call(this, options) || this + _this._stepMap = new Map() + return _this + } + IntervalEvent.prototype.beginStep = function (name) { + if (this._stepMap.has(name)) { + return this._stepMap[name] + } + var step = new EventStep({ eventId: name, priority: this.priority }) + step.setData({ step: name }) + this._stepMap.set(name, step) + return step + } + IntervalEvent.prototype.addStep = function (data) { + this._stepMap.set(data.eventId, data) + } + IntervalEvent.prototype.removeStep = function (eventId) { + this._stepMap.delete(eventId) + } + IntervalEvent.prototype.endWith = function (data) { + _super.prototype.endWith.call(this, data) + this.end() + } + IntervalEvent.prototype.endWithSuccess = function (data) { + _super.prototype.endWithSuccess.call(this, data) + this.end() + } + IntervalEvent.prototype.endWithFailure = function (data) { + _super.prototype.endWithFailure.call(this, data) + this.end() + } + IntervalEvent.prototype.end = function () { + var e_1, _a + var steps = [] + _super.prototype.end.call(this) + try { + for ( + var _b = __values(this._stepMap.values()), _c = _b.next(); + !_c.done; + _c = _b.next() + ) { + var step = _c.value + // step.end() + step.data.index = steps.length + steps.push(step.data) + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b) + } finally { + if (e_1) throw e_1.error + } + } + if (steps.length > 0) { + this.data.steps = steps + } + } + return IntervalEvent +})(EventStep) + +/** + * 异步频率控制 + * 一段时间内只请求一次,多余的用这一次执行的结果做为结果 + * @param fn + * @param delay + */ +var frequencyControl = function (fn, delay) { + var queue = [] + var last = 0 + var timer + return function () { + var _this = this + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + return new Promise(function (resolve, reject) { + queue.push({ resolve: resolve, reject: reject }) + var cur = Date.now() + var consumer = function (success, res) { + while (queue.length) { + var _a = queue.shift(), + resolve_1 = _a.resolve, + reject_1 = _a.reject + success ? resolve_1(res) : reject_1(res) + } + } + var excute = function () { + last = cur + if (!queue.length) return + // @ts-ignore + fn.apply(_this, args).then( + function (res) { + consumer(true, res) + }, + function (err) { + consumer(false, err) + } + ) + } + if (cur - last > delay) { + excute() + } else { + clearTimeout(timer) + timer = setTimeout(function () { + excute() + }, delay) + } + }) + } +} +function getFileType(filename) { + var fileMap = { + img: /(png|gif|jpg)/i, + pdf: /pdf$/i, + word: /(doc|docx)$/i, + excel: /(xls|xlsx)$/i, + ppt: /(ppt|pptx)$/i, + zip: /(zip|rar|7z)$/i, + audio: /(mp3|wav|wmv)$/i, + video: /(mp4|mkv|rmvb|wmv|avi|flv|mov)$/i, + } + return ( + Object.keys(fileMap).find(function (type) { + return fileMap[type].test(filename) + }) || '' + ) +} +/** + * 解析输入的文件大小 + * @param size 文件大小,单位b + * @param level 递归等级,对应fileSizeMap + */ +var parseFileSize = function (size, level) { + if (level === void 0) { + level = 0 + } + var fileSizeMap = { + 0: 'B', + 1: 'KB', + 2: 'MB', + 3: 'GB', + 4: 'TB', + } + var handler = function (size, level) { + if (level >= Object.keys(fileSizeMap).length) { + return 'the file is too big' + } + if (size < 1024) { + return ''.concat(size).concat(fileSizeMap[level]) + } + return handler(Math.round(size / 1024), level + 1) + } + return handler(size, level) +} +var addUrlSearch = function (url, search) { + var urlObj = new URL(url) + urlObj.search += (urlObj.search.startsWith('?') ? '&' : '?') + search + return urlObj.href +} +function debounce(fn, wait) { + var timer = null + return function () { + var _this = this + var args = [] + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i] + } + if (timer) { + clearTimeout(timer) + timer = null + } + timer = setTimeout(function () { + // @ts-ignore + fn.apply(_this, args) + }, wait) + } +} +function getOperatingSystem() { + try { + var userAgent = navigator.userAgent + if (userAgent.includes('Windows')) { + return 'Windows' + } else if (userAgent.includes('Mac OS')) { + return 'Mac OS' + } else if (userAgent.includes('Linux')) { + return 'Linux' + } else if (userAgent.includes('Android')) { + return 'Android' + } else if (userAgent.includes('iOS')) { + return 'iOS' + } else { + return 'Unknown' + } + } catch (_a) { + return 'Unknown' + } +} +function getBrowserInfo() { + var browserName = 'Unknown' + var browserVersion = '' + try { + var userAgent = navigator.userAgent + // 判断是否为Chrome浏览器 + if (userAgent.indexOf('Chrome') !== -1) { + browserName = 'Chrome' + var start = userAgent.indexOf('Chrome') + 7 + var end = userAgent.indexOf(' ', start) + browserVersion = userAgent.substring(start, end) + } + // 判断是否为Firefox浏览器 + else if (userAgent.indexOf('Firefox') !== -1) { + browserName = 'Firefox' + var start = userAgent.indexOf('Firefox') + 8 + browserVersion = userAgent.substring(start) + } + // 判断是否为Safari浏览器 + else if (userAgent.indexOf('Safari') !== -1) { + browserName = 'Safari' + var start = userAgent.indexOf('Version') + 8 + var end = userAgent.indexOf(' ', start) + browserVersion = userAgent.substring(start, end) + } + // 判断是否为Edge浏览器 + else if (userAgent.indexOf('Edg') !== -1) { + browserName = 'Edge' + var start = userAgent.indexOf('Edg') + 4 + browserVersion = userAgent.substring(start) + } + // 判断是否为IE浏览器(IE11及以下版本) + else if (userAgent.indexOf('MSIE') !== -1) { + browserName = 'Internet Explorer' + var start = userAgent.indexOf('MSIE') + 5 + var end = userAgent.indexOf(';', start) + browserVersion = userAgent.substring(start, end) + } + } catch (error) { + console.error('getBrowserInfo error:', error) + } + return { + name: browserName, + version: browserVersion, + } +} + +var url = 'https://statistic.live.126.net/statics/report/common/form' +var HEADER_VALUE_SDK_TYPE = 'NEXKitStatistics' +var HEADER_VALUE_REPORTER_VERSION = '1.0.0' +var HEADER_VALUE_CONTENT_TYPE = 'application/json;charset=utf-8' +var EVENT_REPORT_INTERVAL = 5000 +var MAX_EVENT_CACHE_SIZE = 100 +var LOW_PRIORITY_RETRY = 0 +var NORMAL_PRIORITY_RETRY = 2 +var HIGH_PRIORITY_RETRY = 5 +var MAX_RETRY_COUNT = 3 +var XKitReporter = /** @class */ (function () { + function XKitReporter(options) { + this._eventsCache = [] + this._noReport = false // 是否上报数据 + this._configMap = new Map() + this._retryCount = 0 + var browserInfo = getBrowserInfo() + var appInfo = window.__XKitReporter__ + var userAgent = '' + try { + userAgent = navigator.userAgent + } catch (_a) { + console.log('navigator is not defined') + } + this.common = { + imVersion: options.imVersion, + nertcVersion: options.nertcVersion, + platform: 'Web', + osVer: browserInfo.version, + userAgent: userAgent, + manufacturer: '', + model: browserInfo.name, + packageId: + (appInfo === null || appInfo === void 0 ? void 0 : appInfo.packageId) || + '', + appVer: + (appInfo === null || appInfo === void 0 ? void 0 : appInfo.appVer) || + '', + appName: + (appInfo === null || appInfo === void 0 ? void 0 : appInfo.appName) || + '', + deviceId: options.deviceId, + } + this._logger = logDebug$1({ + level: 'debug', + appName: 'XKitReporter', + version: '2.0.0', + }) + } + XKitReporter.prototype.getConfig = function (appKey) { + return __awaiter(this, void 0, void 0, function () { + var _this = this + return __generator(this, function (_a) { + return [ + 2 /*return*/, + axios({ + method: 'GET', + url: 'https://yiyong.netease.im/report_conf', + headers: { + platform: 'web', + appKey: appKey, + }, + }) + .then(function (res) { + _this._configMap.set(appKey, res.data) + }) + .catch(function () { + _this._retryCount += 1 + if (_this._retryCount > MAX_RETRY_COUNT) { + _this._retryCount = 0 + return + } + _this.getConfig(appKey) + }), + ] + }) + }) + } + XKitReporter.prototype.setNoReport = function (noReport) { + this._noReport = noReport + } + XKitReporter.prototype.reportEvent = function (event, options) { + // 如果禁止上包则返回 + if (this._noReport) { + return + } + if (this._eventsCache.length >= MAX_EVENT_CACHE_SIZE) { + this._evictEvent(event) + } else { + this._eventsCache.push(event) + } + this._scheduleReportEventsTask( + options === null || options === void 0 ? void 0 : options.immediate + ) + } + XKitReporter.prototype._evictEvent = function (event) { + var index = this._eventsCache.findIndex(function (item) { + return item.priority < event.priority + }) + this._eventsCache.push(event) + if (index !== -1) { + this._evictEvent(this._eventsCache[index]) + } else { + this._logger.debug('Full event cache, evict event:', event) + this._eventsCache = this._eventsCache.filter(function (item) { + return item !== event + }) + } + } + XKitReporter.prototype._scheduleReportEventsTask = function (immediate) { + var _this = this + if (immediate === void 0) { + immediate = false + } + var execute = function () { + return __awaiter(_this, void 0, void 0, function () { + var groupByAppKey, _a, _b, _i, appKey, config + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + groupByAppKey = this._eventsCache.reduce(function (acc, obj) { + var key = obj.appKey + if (!acc[key]) { + acc[key] = [] + } + acc[key].push(obj) + return acc + }, {}) + _a = [] + for (_b in groupByAppKey) _a.push(_b) + _i = 0 + _c.label = 1 + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 5] + appKey = _a[_i] + if (!!this._configMap.has(appKey)) return [3 /*break*/, 3] + return [4 /*yield*/, this.getConfig(appKey)] + case 2: + _c.sent() + _c.label = 3 + case 3: + if (this._configMap.has(appKey)) { + config = this._configMap.get(appKey) + if ( + !(config === null || config === void 0 + ? void 0 + : config.enabled) + ) { + return [2 /*return*/] + } + } + this._reportEventsToServer(appKey, groupByAppKey[appKey]) + _c.label = 4 + case 4: + _i++ + return [3 /*break*/, 1] + case 5: + this._eventsCache = [] + return [2 /*return*/] + } + }) + }) + } + if (immediate) { + execute() + } + if (this._queueTimer) { + return + } + this._queueTimer = setInterval(function () { + if (_this._eventsCache.length === 0) { + _this._queueTimer && clearInterval(_this._queueTimer) + _this._queueTimer = undefined + return + } + execute() + }, EVENT_REPORT_INTERVAL) + } + XKitReporter.prototype._determineMaxRetry = function (events) { + var e_1, _a + var retry = LOW_PRIORITY_RETRY + try { + for ( + var events_1 = __values(events), events_1_1 = events_1.next(); + !events_1_1.done; + events_1_1 = events_1.next() + ) { + var event_1 = events_1_1.value + if (event_1.priority === EventPriority.HIGH) { + retry = HIGH_PRIORITY_RETRY + break + } + if (event_1.priority === EventPriority.NORMAL) { + retry = NORMAL_PRIORITY_RETRY + } + } + } catch (e_1_1) { + e_1 = { error: e_1_1 } + } finally { + try { + if (events_1_1 && !events_1_1.done && (_a = events_1.return)) + _a.call(events_1) + } finally { + if (e_1) throw e_1.error + } + } + return retry + } + XKitReporter.prototype._reportEventsToServer = function (appKey, events) { + return __awaiter(this, void 0, void 0, function () { + var config, groupByEventId, maxRetry, retry, data, networkRequest + var _this = this + return __generator(this, function (_a) { + if (!this._configMap.has(appKey)) { + return [2 /*return*/] + } + config = this._configMap.get(appKey) + groupByEventId = events.reduce(function (acc, obj) { + var _a, _b, _c, _d + if ( + ((_a = + config === null || config === void 0 + ? void 0 + : config.blacklist) === null || _a === void 0 + ? void 0 + : _a.length) > 0 && + ((_b = + config === null || config === void 0 + ? void 0 + : config.blacklist) === null || _b === void 0 + ? void 0 + : _b.includes(obj.component)) + ) { + return acc + } + //blacklist 不包含A,whitelist 为空 : 允许 A 上报 + if ( + ((_c = + config === null || config === void 0 + ? void 0 + : config.whitelist) === null || _c === void 0 + ? void 0 + : _c.length) > 0 && + !((_d = + config === null || config === void 0 + ? void 0 + : config.whitelist) === null || _d === void 0 + ? void 0 + : _d.includes(obj.component)) + ) { + return acc + } + var key = obj.eventId + if (!acc[key]) { + acc[key] = [] + } + acc[key].push( + __assign(__assign({}, obj.data), { + appKey: obj.appKey, + component: obj.component, + version: obj.version, + framework: obj.framework, + }) + ) + return acc + }, {}) + maxRetry = this._determineMaxRetry(events) + retry = 0 + data = { + common: this.common, + event: groupByEventId, + } + networkRequest = function () { + request({ + method: 'POST', + url: url, + headers: { + appkey: appKey, + sdktype: HEADER_VALUE_SDK_TYPE, + ver: HEADER_VALUE_REPORTER_VERSION, + 'Content-Type': HEADER_VALUE_CONTENT_TYPE, + }, + data: data, + }).catch(function () { + if (retry <= maxRetry) { + setTimeout(networkRequest, 2000 * retry) + } else { + _this._logger.debug( + 'Failed to report events to server after '.concat( + retry, + ' retries.' + ), + data + ) + } + retry++ + }) + } + networkRequest() + return [2 /*return*/] + }) + }) + } + XKitReporter.setAppInfo = function (info) { + window.__XKitReporter__ = { + packageId: info === null || info === void 0 ? void 0 : info.packageId, + appName: info === null || info === void 0 ? void 0 : info.appName, + appVer: info === null || info === void 0 ? void 0 : info.appVer, + } + } + XKitReporter.getInstance = function (options) { + if (!options) { + if (!this.instance) { + throw new Error('XKitReporter not initialized') + } + return this.instance + } + if (!this.instance) { + this.instance = new XKitReporter(options) + } + return this.instance + } + return XKitReporter +})() +var XKitReporter$1 = XKitReporter + +export { + EventPriority, + EventStep, + EventTracking$1 as EventTracking, + IntervalEvent, + ReportEvent, + index as Storage, + VisibilityObserver$1 as VisibilityObserver, + XKitReporter$1 as XKitReporter, + addUrlSearch, + createLoggerDecorator, + debounce, + frequencyControl, + getBrowserInfo, + getFileType, + getOperatingSystem, + logDebug$1 as logDebug, + parseFileSize, + request, +}