@realsee/live 0.5.2-dev.3 → 0.5.2-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,17 @@
1
- import JSBridge from '@realsee/jsbridge-x';
2
1
  import TRTC from 'trtc-js-sdk';
3
2
  import { DefaultModality, ConsoleLogger, LogLevel as LogLevel$1, DefaultDeviceController, MeetingSessionConfiguration, DefaultMeetingSession, MeetingSessionStatusCode } from 'amazon-chime-sdk-js';
4
3
  import React, { createContext } from 'react';
5
4
 
6
- const EVENT_SYMBOL = Symbol('$$REALSEE_LIVE_EVENT$$');
7
- function __generateEventIfNotExisted(instance) {
8
- if (!instance[EVENT_SYMBOL]) {
9
- instance[EVENT_SYMBOL] = {};
5
+ const EVENT_SYMBOL$1 = Symbol('$$REALSEE_LIVE_EVENT$$');
6
+ function __generateEventIfNotExisted$1(instance) {
7
+ if (!instance[EVENT_SYMBOL$1]) {
8
+ instance[EVENT_SYMBOL$1] = {};
10
9
  }
11
- return instance[EVENT_SYMBOL];
10
+ return instance[EVENT_SYMBOL$1];
12
11
  }
13
- function __removeEventIfNotExisted(instance) {
14
- if (!instance[EVENT_SYMBOL]) {
15
- delete instance[EVENT_SYMBOL];
12
+ function __removeEventIfNotExisted$1(instance) {
13
+ if (!instance[EVENT_SYMBOL$1]) {
14
+ delete instance[EVENT_SYMBOL$1];
16
15
  }
17
16
  }
18
17
  /**
@@ -26,13 +25,13 @@ function __removeEventIfNotExisted(instance) {
26
25
  * }>()
27
26
  * ```
28
27
  */
29
- class Subscribe {
28
+ class Subscribe$1 {
30
29
  /**
31
30
  * 判断是否注册了事件
32
31
  * @param name 事件类型
33
32
  */
34
33
  hasListener(name) {
35
- const events = __generateEventIfNotExisted(this);
34
+ const events = __generateEventIfNotExisted$1(this);
36
35
  return events && events[name] && events[name].length > 0;
37
36
  }
38
37
  /**
@@ -45,7 +44,7 @@ class Subscribe {
45
44
  * @template C 回调函数函数上下文
46
45
  */
47
46
  on(name, callback, once) {
48
- const events = __generateEventIfNotExisted(this);
47
+ const events = __generateEventIfNotExisted$1(this);
49
48
  if (!events[name])
50
49
  events[name] = [];
51
50
  events[name].push([callback, once || false]);
@@ -73,10 +72,10 @@ class Subscribe {
73
72
  */
74
73
  off(name, callback) {
75
74
  if (name === undefined) {
76
- __removeEventIfNotExisted(this);
75
+ __removeEventIfNotExisted$1(this);
77
76
  return;
78
77
  }
79
- const events = __generateEventIfNotExisted(this);
78
+ const events = __generateEventIfNotExisted$1(this);
80
79
  if (!events[name])
81
80
  events[name] = [];
82
81
  if (callback === undefined) {
@@ -101,7 +100,7 @@ class Subscribe {
101
100
  */
102
101
  emit(name, ...data) {
103
102
  let canceled = false;
104
- const events = __generateEventIfNotExisted(this);
103
+ const events = __generateEventIfNotExisted$1(this);
105
104
  const event = events[name] || [];
106
105
  for (let one of event.slice()) {
107
106
  const [callback, once = false] = one;
@@ -118,7 +117,7 @@ class Subscribe {
118
117
  /**
119
118
  * rtc 基础抽象类
120
119
  */
121
- class CoreRTC extends Subscribe {
120
+ class CoreRTC extends Subscribe$1 {
122
121
  }
123
122
 
124
123
  /******************************************************************************
@@ -136,7 +135,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
136
135
  PERFORMANCE OF THIS SOFTWARE.
137
136
  ***************************************************************************** */
138
137
 
139
- function __awaiter(thisArg, _arguments, P, generator) {
138
+ function __awaiter$1(thisArg, _arguments, P, generator) {
140
139
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
141
140
  return new (P || (P = Promise))(function (resolve, reject) {
142
141
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -210,26 +209,26 @@ const logger = {
210
209
  var logger$1 = logger;
211
210
 
212
211
  // uuid
213
- function S4() {
212
+ function S4$1() {
214
213
  return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
215
214
  }
216
215
  /**
217
216
  * 基于伪随机数生成 **uuid**。
218
217
  */
219
- function uuid() {
218
+ function uuid$1() {
220
219
  // then to call it, plus stitch in '4' in the third group
221
- return (S4() +
222
- S4() +
220
+ return (S4$1() +
221
+ S4$1() +
223
222
  '-' +
224
- S4() +
223
+ S4$1() +
225
224
  '-4' +
226
- S4().substr(0, 3) +
225
+ S4$1().substr(0, 3) +
227
226
  '-' +
228
- S4() +
227
+ S4$1() +
229
228
  '-' +
230
- S4() +
231
- S4() +
232
- S4()).toLowerCase();
229
+ S4$1() +
230
+ S4$1() +
231
+ S4$1()).toLowerCase();
233
232
  }
234
233
 
235
234
  class BrowserRTC extends CoreRTC {
@@ -248,7 +247,7 @@ class BrowserRTC extends CoreRTC {
248
247
  client: null,
249
248
  stream: null,
250
249
  };
251
- this.join = (options) => __awaiter(this, void 0, void 0, function* () {
250
+ this.join = (options) => __awaiter$1(this, void 0, void 0, function* () {
252
251
  var _a;
253
252
  this.emit('joinWillStart');
254
253
  const createClientOptions = yield this._getVoiceSign({
@@ -312,12 +311,12 @@ class BrowserRTC extends CoreRTC {
312
311
  this._initParentDom();
313
312
  }
314
313
  _initParentDom() {
315
- this.$dom.id = `rs-rtc-${uuid()}`;
314
+ this.$dom.id = `rs-rtc-${uuid$1()}`;
316
315
  this.$dom.style.display = 'none';
317
316
  document.body.appendChild(this.$dom);
318
317
  }
319
318
  quit() {
320
- return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
319
+ return new Promise((resolve) => __awaiter$1(this, void 0, void 0, function* () {
321
320
  var _a, _b;
322
321
  this.joined = false;
323
322
  if (this._trtc.stream) {
@@ -327,6 +326,7 @@ class BrowserRTC extends CoreRTC {
327
326
  this._trtc.stream = null;
328
327
  }
329
328
  (_b = this._trtc.client) === null || _b === void 0 ? void 0 : _b.leave().then(() => (this._trtc.client = null)).then(() => resolve(true)).catch(() => resolve(false));
329
+ resolve(true);
330
330
  }));
331
331
  }
332
332
  detectMicro() {
@@ -390,8 +390,8 @@ class BrowserRTC4Chime extends CoreRTC {
390
390
  * 对audio标签初始化
391
391
  */
392
392
  this._initDom = () => {
393
- this.$audio.id = `rs-rtc-${uuid()}`;
394
- this.$dom.id = `rs-rtc-${uuid()}`;
393
+ this.$audio.id = `rs-rtc-${uuid$1()}`;
394
+ this.$dom.id = `rs-rtc-${uuid$1()}`;
395
395
  this.$dom.appendChild(this.$audio);
396
396
  document.body.appendChild(this.$dom);
397
397
  };
@@ -504,8 +504,8 @@ class BrowserRTC4Chime extends CoreRTC {
504
504
  * @returns
505
505
  */
506
506
  join(options) {
507
- return __awaiter(this, void 0, void 0, function* () {
508
- return new Promise((success, fail) => __awaiter(this, void 0, void 0, function* () {
507
+ return __awaiter$1(this, void 0, void 0, function* () {
508
+ return new Promise((success, fail) => __awaiter$1(this, void 0, void 0, function* () {
509
509
  var _a;
510
510
  this.emit('joinWillStart');
511
511
  try {
@@ -591,7 +591,7 @@ class BrowserRTC4Chime extends CoreRTC {
591
591
  });
592
592
  }
593
593
  detectMicro() {
594
- return __awaiter(this, void 0, void 0, function* () {
594
+ return __awaiter$1(this, void 0, void 0, function* () {
595
595
  return new Promise((resolve) => {
596
596
  const rule = { audio: true, video: false };
597
597
  try {
@@ -609,7 +609,7 @@ class BrowserRTC4Chime extends CoreRTC {
609
609
  }
610
610
  toggleMicro(flag) {
611
611
  var _a, _b, _c;
612
- return __awaiter(this, void 0, void 0, function* () {
612
+ return __awaiter$1(this, void 0, void 0, function* () {
613
613
  if (flag) {
614
614
  (_a = this.meetingSession) === null || _a === void 0 ? void 0 : _a.audioVideo.realtimeUnmuteLocalAudio();
615
615
  }
@@ -676,7 +676,7 @@ class VRWebViewRTC extends CoreRTC {
676
676
  });
677
677
  }
678
678
  join(options) {
679
- return __awaiter(this, void 0, void 0, function* () {
679
+ return __awaiter$1(this, void 0, void 0, function* () {
680
680
  try {
681
681
  this.emit('joinWillStart');
682
682
  const { sdkAppId, userId, userSig } = yield this.options.getVoiceSign(options);
@@ -711,7 +711,7 @@ class VRWebViewRTC extends CoreRTC {
711
711
  });
712
712
  }
713
713
  quit() {
714
- return __awaiter(this, void 0, void 0, function* () {
714
+ return __awaiter$1(this, void 0, void 0, function* () {
715
715
  const [res, error] = yield this.jsBridge.callAndBackfeed('live/quit');
716
716
  if (res === null) {
717
717
  this.emit('error', error ? error : new Error('退出房间失败:未知异常。'));
@@ -721,7 +721,7 @@ class VRWebViewRTC extends CoreRTC {
721
721
  });
722
722
  }
723
723
  detectMicro() {
724
- return __awaiter(this, void 0, void 0, function* () {
724
+ return __awaiter$1(this, void 0, void 0, function* () {
725
725
  const [res, error] = yield this.jsBridge.detectMicro();
726
726
  if (res === null) {
727
727
  this.emit('error', error ? error : new Error('麦克风监测异常!'));
@@ -731,7 +731,7 @@ class VRWebViewRTC extends CoreRTC {
731
731
  });
732
732
  }
733
733
  toggleMicro(flag) {
734
- return __awaiter(this, void 0, void 0, function* () {
734
+ return __awaiter$1(this, void 0, void 0, function* () {
735
735
  const [res, error] = yield this.jsBridge.callAndBackfeed(`live/toggleMicro?flag=${!!flag ? 1 : 0}`);
736
736
  if (res === null) {
737
737
  this.emit('error', error ? error : new Error('麦克风监测异常!'));
@@ -847,156 +847,1813 @@ function parseLiveMsg(jsonTxt) {
847
847
  }
848
848
  return resMsg;
849
849
  }
850
- catch (error) {
851
- // notcare? 过滤掉所有不符合规范的数据
852
- return false;
850
+ catch (error) {
851
+ // notcare? 过滤掉所有不符合规范的数据
852
+ return false;
853
+ }
854
+ }
855
+
856
+ var LiveState;
857
+ (function (LiveState) {
858
+ LiveState[LiveState["NOTINITIALIZED"] = -1] = "NOTINITIALIZED";
859
+ /**
860
+ * 正在链接中
861
+ */
862
+ LiveState[LiveState["CONNECTING"] = 0] = "CONNECTING";
863
+ /**
864
+ * 已经链接并且可以通讯
865
+ */
866
+ LiveState[LiveState["OPEN"] = 1] = "OPEN";
867
+ /**
868
+ * 连接已关闭或者链接失败
869
+ */
870
+ LiveState[LiveState["CLOSED"] = 3] = "CLOSED";
871
+ })(LiveState || (LiveState = {}));
872
+
873
+ /**
874
+ * 用户当前状态枚举。
875
+ */
876
+ var UserStatus;
877
+ (function (UserStatus) {
878
+ /**
879
+ * 正常
880
+ */
881
+ UserStatus[UserStatus["Normal"] = 0] = "Normal";
882
+ /**
883
+ * 被移除
884
+ */
885
+ UserStatus[UserStatus["Removed"] = 1] = "Removed";
886
+ /**
887
+ * 被替换
888
+ */
889
+ UserStatus[UserStatus["Replaced"] = 2] = "Replaced";
890
+ })(UserStatus || (UserStatus = {}));
891
+ var MemUserStatus;
892
+ (function (MemUserStatus) {
893
+ MemUserStatus["WAIT_ENTER"] = "WAIT_ENTER";
894
+ MemUserStatus["ONLINE"] = "ONLINE";
895
+ MemUserStatus["LEAVE"] = "LEAVE";
896
+ MemUserStatus["KICK_OUT"] = "KICK_OUT";
897
+ MemUserStatus["BE_REPLACE"] = "BE_REPLACE";
898
+ MemUserStatus["EXCEPTION"] = "EXCEPTION";
899
+ })(MemUserStatus || (MemUserStatus = {}));
900
+
901
+ /**
902
+ * WebSocket 连接状态枚举
903
+ */
904
+ var WebSocketState;
905
+ (function (WebSocketState) {
906
+ /**
907
+ * 尚未初始化
908
+ */
909
+ WebSocketState[WebSocketState["NOTINITIALIZED"] = -1] = "NOTINITIALIZED";
910
+ /**
911
+ * 正在链接中
912
+ */
913
+ WebSocketState[WebSocketState["CONNECTING"] = 0] = "CONNECTING";
914
+ /**
915
+ * 已经链接并且可以通讯
916
+ */
917
+ WebSocketState[WebSocketState["OPEN"] = 1] = "OPEN";
918
+ /**
919
+ * 连接正在关闭
920
+ */
921
+ WebSocketState[WebSocketState["CLOSING"] = 2] = "CLOSING";
922
+ /**
923
+ * 连接已关闭或者没有链接成功
924
+ */
925
+ WebSocketState[WebSocketState["CLOSED"] = 3] = "CLOSED";
926
+ })(WebSocketState || (WebSocketState = {}));
927
+ var WebSocketErrorType;
928
+ (function (WebSocketErrorType) {
929
+ WebSocketErrorType["Error"] = "Error";
930
+ WebSocketErrorType["Close"] = "Close";
931
+ WebSocketErrorType["MicroAuth"] = "MicroAuth";
932
+ WebSocketErrorType["DuplicateConnect"] = "DuplicateConnect";
933
+ WebSocketErrorType["IllegalURL"] = "IllegalURL";
934
+ WebSocketErrorType["Unknown"] = "Unknown";
935
+ WebSocketErrorType["IllegalArgs"] = "IllegalArgs";
936
+ })(WebSocketErrorType || (WebSocketErrorType = {}));
937
+ /**
938
+ * WebSocket 异常关闭枚举:https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent。
939
+ */
940
+ var WebSocketCloseError;
941
+ (function (WebSocketCloseError) {
942
+ /**
943
+ * 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开。
944
+ */
945
+ WebSocketCloseError["Err_1001"] = "CLOSE_GOING_AWAY";
946
+ /**
947
+ * 由于协议错误而中断连接。
948
+ */
949
+ WebSocketCloseError["Err_1002"] = "CLOSE_PROTOCOL_ERROR";
950
+ /**
951
+ * 由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据)。
952
+ */
953
+ WebSocketCloseError["Err_1003"] = "CLOSE_UNSUPPORTED";
954
+ /**
955
+ * 安全因素或WebSocket连接次数达到上限。
956
+ */
957
+ WebSocketCloseError["Err_1006"] = "CLOSE_ABNORMAL";
958
+ /**
959
+ * 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据)。
960
+ */
961
+ WebSocketCloseError["Err_1007"] = "Unsupported Data";
962
+ /**
963
+ * 由于收到不符合约定的数据而断开连接。
964
+ */
965
+ WebSocketCloseError["Err_1008"] = "Policy Violation";
966
+ /**
967
+ * 由于收到过大的数据帧而断开连接。
968
+ */
969
+ WebSocketCloseError["Err_1009"] = "CLOSE_TOO_LARGE";
970
+ /**
971
+ * 未知错误。
972
+ */
973
+ WebSocketCloseError["Err_unknown"] = "unknown";
974
+ })(WebSocketCloseError || (WebSocketCloseError = {}));
975
+ function parseWSClsErr(code) {
976
+ switch (code) {
977
+ case 1001: {
978
+ return WebSocketCloseError.Err_1001;
979
+ }
980
+ case 1002: {
981
+ return WebSocketCloseError.Err_1002;
982
+ }
983
+ case 1003: {
984
+ return WebSocketCloseError.Err_1003;
985
+ }
986
+ case 1006: {
987
+ return WebSocketCloseError.Err_1006;
988
+ }
989
+ case 1007: {
990
+ return WebSocketCloseError.Err_1007;
991
+ }
992
+ case 1008: {
993
+ return WebSocketCloseError.Err_1008;
994
+ }
995
+ case 1009: {
996
+ return WebSocketCloseError.Err_1009;
997
+ }
998
+ }
999
+ return WebSocketCloseError.Err_unknown;
1000
+ }
1001
+
1002
+ /******************************************************************************
1003
+ Copyright (c) Microsoft Corporation.
1004
+
1005
+ Permission to use, copy, modify, and/or distribute this software for any
1006
+ purpose with or without fee is hereby granted.
1007
+
1008
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1009
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1010
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1011
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1012
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1013
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1014
+ PERFORMANCE OF THIS SOFTWARE.
1015
+ ***************************************************************************** */
1016
+
1017
+ function __awaiter(thisArg, _arguments, P, generator) {
1018
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1019
+ return new (P || (P = Promise))(function (resolve, reject) {
1020
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
1021
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
1022
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
1023
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
1024
+ });
1025
+ }
1026
+
1027
+ const cache = {};
1028
+ function registerGlobalValue(scheme, callback, once = true) {
1029
+ if (!cache[scheme]) {
1030
+ const uuid = '$jsBridgeFn_' + Date.now().toString(16).toUpperCase() + '_' + Math.ceil(Math.random() * 10000).toString(16).toUpperCase();
1031
+ cache[scheme] = {
1032
+ uuid,
1033
+ queue: [{ once, callback }],
1034
+ };
1035
+ }
1036
+ else {
1037
+ cache[scheme].queue.push({ once, callback });
1038
+ }
1039
+ Object.assign(window, {
1040
+ [cache[scheme].uuid]: (data) => {
1041
+ cache[scheme].queue = cache[scheme].queue.reduce((accu, curr) => {
1042
+ const { once, callback } = curr;
1043
+ if (!once) {
1044
+ accu.push(curr);
1045
+ }
1046
+ callback(data);
1047
+ return accu;
1048
+ }, []);
1049
+ }
1050
+ });
1051
+ return cache[scheme].uuid;
1052
+ }
1053
+
1054
+ class BaseController {
1055
+ checkReady(timeout) {
1056
+ return Promise.resolve([false, null]);
1057
+ }
1058
+ callAndBackfeed(scheme) {
1059
+ return Promise.resolve([false, null]);
1060
+ }
1061
+ callAndListen(scheme, callback) {
1062
+ return Promise.resolve([false, null]);
1063
+ }
1064
+ }
1065
+
1066
+ const HYBRID_BRIDGE_NAME = 'HybridBridgeLJ';
1067
+ const $window$1 = window;
1068
+ class WebViewController extends BaseController {
1069
+ constructor() {
1070
+ super();
1071
+ Promise.resolve().then(() => __awaiter(this, void 0, void 0, function* () {
1072
+ try {
1073
+ yield this.checkBridgeReady();
1074
+ }
1075
+ catch (error) {
1076
+ console.warn(error);
1077
+ }
1078
+ }));
1079
+ }
1080
+ checkBridgeReady(timeout = 6000) {
1081
+ if (this.hybridBridge)
1082
+ return true;
1083
+ const start = performance.now();
1084
+ return new Promise((resolve, reject) => {
1085
+ const check = () => {
1086
+ if (this.hybridBridge)
1087
+ return resolve(true);
1088
+ if ($window$1.HybridBridgeLJ) {
1089
+ const hybridBridge = $window$1[HYBRID_BRIDGE_NAME];
1090
+ hybridBridge === null || hybridBridge === void 0 ? void 0 : hybridBridge.getStaticData(registerGlobalValue('HYBRID_BRIDGE_NAME', (data) => {
1091
+ this.deviceInfo = JSON.parse(data);
1092
+ this.hybridBridge = hybridBridge;
1093
+ return resolve(true);
1094
+ }));
1095
+ }
1096
+ if (performance.now() - start > (timeout || 6000)) {
1097
+ return reject(new Error('HybridBridge 初始化超时~'));
1098
+ }
1099
+ requestAnimationFrame(check);
1100
+ };
1101
+ check();
1102
+ });
1103
+ }
1104
+ checkReady(timeout = 6000) {
1105
+ return __awaiter(this, void 0, void 0, function* () {
1106
+ const res = [null, null];
1107
+ if (this.hybridBridge) {
1108
+ res[0] = true;
1109
+ return res;
1110
+ }
1111
+ try {
1112
+ res[0] = yield this.checkBridgeReady(timeout);
1113
+ }
1114
+ catch (error) {
1115
+ res[0] = false;
1116
+ res[1] = error;
1117
+ }
1118
+ return res;
1119
+ });
1120
+ }
1121
+ get ready() {
1122
+ return !!this.hybridBridge;
1123
+ }
1124
+ get scheme() {
1125
+ var _a;
1126
+ return ((_a = this.deviceInfo) === null || _a === void 0 ? void 0 : _a.scheme) || '';
1127
+ }
1128
+ createSchemeLink(schemeUrl) {
1129
+ if (schemeUrl.startsWith(this.scheme)) {
1130
+ return schemeUrl;
1131
+ }
1132
+ return this.scheme + '://' + schemeUrl;
1133
+ }
1134
+ callAndBackfeed(scheme) {
1135
+ return __awaiter(this, void 0, void 0, function* () {
1136
+ const res = [false, null];
1137
+ const [ready, readyError] = yield this.checkReady();
1138
+ if (!ready) {
1139
+ res[0] = false;
1140
+ res[1] = readyError;
1141
+ return res;
1142
+ }
1143
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
1144
+ const actionUrl = this.createSchemeLink(scheme);
1145
+ const msg = JSON.stringify({
1146
+ actionUrl,
1147
+ functionName: registerGlobalValue(this.createSchemeLink(scheme), (data) => {
1148
+ const d = (() => {
1149
+ try {
1150
+ return JSON.parse(data);
1151
+ }
1152
+ catch (e) {
1153
+ return data;
1154
+ }
1155
+ })();
1156
+ res[0] = (() => {
1157
+ if (d === 1)
1158
+ return true;
1159
+ if (d === 0)
1160
+ return false;
1161
+ return d;
1162
+ })();
1163
+ resolve(res);
1164
+ }),
1165
+ });
1166
+ this.hybridBridge.callAndBackfeed(msg);
1167
+ }));
1168
+ });
1169
+ }
1170
+ callAndListen(scheme, callback) {
1171
+ return __awaiter(this, void 0, void 0, function* () {
1172
+ const res = [false, null];
1173
+ const [ready, readyError] = yield this.checkReady();
1174
+ if (!ready) {
1175
+ res[0] = false;
1176
+ res[1] = readyError;
1177
+ return res;
1178
+ }
1179
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
1180
+ const actionUrl = this.createSchemeLink(scheme);
1181
+ const _callback = (data) => {
1182
+ const d = (() => {
1183
+ try {
1184
+ return JSON.parse(data);
1185
+ }
1186
+ catch (e) {
1187
+ return data;
1188
+ }
1189
+ })();
1190
+ const callbackParam = (() => {
1191
+ if (d === 1)
1192
+ return true;
1193
+ if (d === 0)
1194
+ return false;
1195
+ return d;
1196
+ })();
1197
+ callback(callbackParam);
1198
+ res[0] = () => {
1199
+ const callbacks = cache[actionUrl];
1200
+ if (!callbacks)
1201
+ return;
1202
+ const idx = callbacks.queue.findIndex((func) => func.callback === _callback);
1203
+ if (idx !== -1) {
1204
+ callbacks.queue.splice(idx, 1);
1205
+ }
1206
+ };
1207
+ resolve(res);
1208
+ };
1209
+ const msg = JSON.stringify({
1210
+ actionUrl,
1211
+ functionName: registerGlobalValue(actionUrl, _callback, false),
1212
+ });
1213
+ this.hybridBridge.callAndListen(msg);
1214
+ }));
1215
+ });
1216
+ }
1217
+ }
1218
+
1219
+ var CallTypeEnum;
1220
+ (function (CallTypeEnum) {
1221
+ CallTypeEnum["callAndBackfeed"] = "callAndBack";
1222
+ CallTypeEnum["callAndListen"] = "callAndListen";
1223
+ })(CallTypeEnum || (CallTypeEnum = {}));
1224
+ const $window = window;
1225
+ class WKWebViewController {
1226
+ constructor() {
1227
+ this.checkBridgeReady();
1228
+ }
1229
+ checkBridgeReady(timeout = 6000) {
1230
+ if (this.worker)
1231
+ return true;
1232
+ const start = performance.now();
1233
+ return new Promise((resolve, reject) => {
1234
+ const check = () => {
1235
+ if (this.worker)
1236
+ return resolve(true);
1237
+ if ($window.webkit &&
1238
+ $window.webkit.messageHandlers &&
1239
+ $window.webkit.messageHandlers.realsee) {
1240
+ const worker = $window.webkit.messageHandlers.realsee;
1241
+ worker.postMessage(JSON.stringify({
1242
+ type: 'getStaticData',
1243
+ param: JSON.stringify({
1244
+ functionName: registerGlobalValue('HYBRID_BRIDGE_NAME', (data) => {
1245
+ this.deviceInfo = JSON.parse(data);
1246
+ this.worker = worker;
1247
+ return resolve(true);
1248
+ }),
1249
+ }),
1250
+ }));
1251
+ return;
1252
+ }
1253
+ if (performance.now() - start > (timeout || 6000)) {
1254
+ return reject(new Error('HybridBridge 初始化超时~'));
1255
+ }
1256
+ requestAnimationFrame(check);
1257
+ };
1258
+ check();
1259
+ });
1260
+ }
1261
+ checkReady(timeout = 6000) {
1262
+ return __awaiter(this, void 0, void 0, function* () {
1263
+ const res = [null, null];
1264
+ if (this.worker) {
1265
+ res[0] = true;
1266
+ return res;
1267
+ }
1268
+ try {
1269
+ res[0] = yield this.checkBridgeReady(timeout);
1270
+ }
1271
+ catch (error) {
1272
+ res[0] = false;
1273
+ res[1] = error;
1274
+ }
1275
+ return res;
1276
+ });
1277
+ }
1278
+ get ready() {
1279
+ return !!this.worker;
1280
+ }
1281
+ get scheme() {
1282
+ var _a;
1283
+ return ((_a = this.deviceInfo) === null || _a === void 0 ? void 0 : _a.scheme) || '';
1284
+ }
1285
+ createSchemeLink(schemeUrl) {
1286
+ if (schemeUrl.startsWith(this.scheme)) {
1287
+ return schemeUrl;
1288
+ }
1289
+ return this.scheme + '://' + schemeUrl;
1290
+ }
1291
+ callAndBackfeed(scheme) {
1292
+ return __awaiter(this, void 0, void 0, function* () {
1293
+ const res = [false, null];
1294
+ const [ready, readyError] = yield this.checkReady();
1295
+ if (!ready) {
1296
+ res[0] = false;
1297
+ res[1] = readyError;
1298
+ return res;
1299
+ }
1300
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
1301
+ const actionUrl = this.createSchemeLink(scheme);
1302
+ const msg = JSON.stringify({
1303
+ actionUrl,
1304
+ functionName: registerGlobalValue(this.createSchemeLink(scheme), (data) => {
1305
+ const d = (() => {
1306
+ try {
1307
+ return JSON.parse(data);
1308
+ }
1309
+ catch (e) {
1310
+ return data;
1311
+ }
1312
+ })();
1313
+ res[0] = (() => {
1314
+ if (d === 1)
1315
+ return true;
1316
+ if (d === 0)
1317
+ return false;
1318
+ return d;
1319
+ })();
1320
+ resolve(res);
1321
+ }),
1322
+ });
1323
+ this.worker.postMessage(JSON.stringify({
1324
+ type: 'callAndBackfeed',
1325
+ param: msg,
1326
+ }));
1327
+ }));
1328
+ });
1329
+ }
1330
+ callAndListen(scheme, callback) {
1331
+ return __awaiter(this, void 0, void 0, function* () {
1332
+ const res = [false, null];
1333
+ const [ready, readyError] = yield this.checkReady();
1334
+ if (!ready) {
1335
+ res[0] = false;
1336
+ res[1] = readyError;
1337
+ return res;
1338
+ }
1339
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
1340
+ const actionUrl = this.createSchemeLink(scheme);
1341
+ const _callback = (data) => {
1342
+ const d = (() => {
1343
+ try {
1344
+ return JSON.parse(data);
1345
+ }
1346
+ catch (e) {
1347
+ return data;
1348
+ }
1349
+ })();
1350
+ const callbackParam = (() => {
1351
+ if (d === 1)
1352
+ return true;
1353
+ if (d === 0)
1354
+ return false;
1355
+ return d;
1356
+ })();
1357
+ callback(callbackParam);
1358
+ res[0] = () => {
1359
+ const callbacks = cache[actionUrl];
1360
+ if (!callbacks)
1361
+ return;
1362
+ const idx = callbacks.queue.findIndex((func) => func.callback === _callback);
1363
+ if (idx !== -1) {
1364
+ callbacks.queue.splice(idx, 1);
1365
+ }
1366
+ };
1367
+ resolve(res);
1368
+ };
1369
+ const msg = JSON.stringify({
1370
+ actionUrl,
1371
+ functionName: registerGlobalValue(actionUrl, _callback, false),
1372
+ });
1373
+ this.worker.postMessage(JSON.stringify({
1374
+ type: 'callAndListen',
1375
+ param: msg,
1376
+ }));
1377
+ }));
1378
+ });
1379
+ }
1380
+ }
1381
+
1382
+ function S4() {
1383
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
1384
+ }
1385
+ function uuid() {
1386
+ return (S4() + S4() + '-' + S4() + '-4' + S4().substr(0, 3) +
1387
+ '-' + S4() + '-' + S4() + S4() + S4()).toLowerCase();
1388
+ }
1389
+
1390
+ var WeappBridgeMessage;
1391
+ (function (WeappBridgeMessage) {
1392
+ WeappBridgeMessage["isReady"] = "Are You OK?";
1393
+ WeappBridgeMessage["ready"] = "I`m OK!";
1394
+ WeappBridgeMessage["ping"] = "ping";
1395
+ WeappBridgeMessage["pong"] = "pong";
1396
+ WeappBridgeMessage["alive"] = "I`m alive!";
1397
+ })(WeappBridgeMessage || (WeappBridgeMessage = {}));
1398
+
1399
+ const endpoint = 'wss://ws.realsee.com';
1400
+ var defaultWsEndpoint = endpoint;
1401
+
1402
+ const generateWssUrl = (tpl, params) => {
1403
+ const url = Object.keys(params).reduce((res, curr) => res.replace(`{{${curr}}}`, `${params[curr]}`), tpl);
1404
+ return encodeURI(url);
1405
+ };
1406
+ var generateWssUrl$1 = generateWssUrl;
1407
+
1408
+ const isValidKey = (key, object) => key in object;
1409
+ var isValidKey$1 = isValidKey;
1410
+
1411
+ const parseQuery = (query = '') => query
1412
+ .replace('?', '')
1413
+ .split('&')
1414
+ .map((qs) => {
1415
+ const [k, v] = qs.split('=');
1416
+ return { [k]: decodeURIComponent(v) };
1417
+ })
1418
+ .reduce((result, curr) => (Object.assign(Object.assign({}, result), curr)), {});
1419
+ var parseQuery$1 = parseQuery;
1420
+
1421
+ const EVENT_SYMBOL = '$$REALSEE_JSBRIDGE_EVENT$$';
1422
+ function __generateEventIfNotExisted(instance) {
1423
+ if (!instance[EVENT_SYMBOL]) {
1424
+ instance[EVENT_SYMBOL] = {};
1425
+ }
1426
+ return instance[EVENT_SYMBOL];
1427
+ }
1428
+ function __removeEventIfNotExisted(instance) {
1429
+ if (!instance[EVENT_SYMBOL]) {
1430
+ delete instance[EVENT_SYMBOL];
1431
+ }
1432
+ }
1433
+ class Subscribe {
1434
+ hasListener(name) {
1435
+ const events = __generateEventIfNotExisted(this);
1436
+ return events && events[name] && events[name].length > 0;
1437
+ }
1438
+ on(name, callback, once) {
1439
+ const events = __generateEventIfNotExisted(this);
1440
+ if (!events[name])
1441
+ events[name] = [];
1442
+ events[name].push([callback, once || false]);
1443
+ return () => this.off(name, callback);
1444
+ }
1445
+ once(name, callback) {
1446
+ return this.on(name, callback, true);
1447
+ }
1448
+ off(name, callback) {
1449
+ if (name === undefined) {
1450
+ __removeEventIfNotExisted(this);
1451
+ return;
1452
+ }
1453
+ const events = __generateEventIfNotExisted(this);
1454
+ if (!events[name])
1455
+ events[name] = [];
1456
+ if (callback === undefined) {
1457
+ events[name].length = 0;
1458
+ return;
1459
+ }
1460
+ let index = 0;
1461
+ for (; index < events[name].length; index++) {
1462
+ if (events[name][index][0] === callback)
1463
+ break;
1464
+ }
1465
+ if (index < events[name].length) {
1466
+ events[name].splice(index, 1);
1467
+ }
1468
+ }
1469
+ emit(name, ...data) {
1470
+ let canceled = false;
1471
+ const events = __generateEventIfNotExisted(this);
1472
+ const event = events[name] || [];
1473
+ for (const one of event.slice()) {
1474
+ const [callback, once = false] = one;
1475
+ const result = callback(...data);
1476
+ if (once)
1477
+ this.off(name, callback);
1478
+ if (result === false)
1479
+ canceled = true;
1480
+ }
1481
+ return canceled;
1482
+ }
1483
+ }
1484
+
1485
+ class RobustWebSocket$1 extends Subscribe {
1486
+ get attempts() {
1487
+ return this._attempts;
1488
+ }
1489
+ constructor(options) {
1490
+ super();
1491
+ this._options = {
1492
+ timeout: 10000,
1493
+ shouldReconnect: (event, ws) => {
1494
+ if (event.code === 1008 || event.code === 1011)
1495
+ return;
1496
+ return [0, 3000, 10000][ws.attempts];
1497
+ },
1498
+ should1000Reconnect: false,
1499
+ ignoreConnectivityEvents: false,
1500
+ automaticOpen: false,
1501
+ };
1502
+ this._attempts = 0;
1503
+ this._reconnects = -1;
1504
+ this._reconnectWhenOnlineAgain = false;
1505
+ this._explicitlyClosed = false;
1506
+ this._connectivityEventsAttached = false;
1507
+ this._clearPendingReconnectIfNeeded = () => {
1508
+ if (this._pendingReconnect) {
1509
+ clearTimeout(this._pendingReconnect);
1510
+ this._pendingReconnect = undefined;
1511
+ }
1512
+ };
1513
+ this._online = (event) => {
1514
+ if (this._reconnectWhenOnlineAgain) {
1515
+ this._clearPendingReconnectIfNeeded();
1516
+ this._reconnect(event);
1517
+ }
1518
+ };
1519
+ this._offline = () => {
1520
+ var _a;
1521
+ this._reconnectWhenOnlineAgain = true;
1522
+ (_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.close(1000);
1523
+ };
1524
+ this._detachConnectivityEvents = () => {
1525
+ if (this._connectivityEventsAttached) {
1526
+ globalThis === null || globalThis === void 0 ? void 0 : globalThis.removeEventListener('online', this._online);
1527
+ globalThis === null || globalThis === void 0 ? void 0 : globalThis.removeEventListener('offline', this._offline);
1528
+ this._connectivityEventsAttached = false;
1529
+ }
1530
+ };
1531
+ this._attachConnectivityEvents = () => {
1532
+ if (!this._connectivityEventsAttached) {
1533
+ globalThis === null || globalThis === void 0 ? void 0 : globalThis.addEventListener('online', this._online);
1534
+ globalThis === null || globalThis === void 0 ? void 0 : globalThis.addEventListener('offline', this._offline);
1535
+ this._connectivityEventsAttached = true;
1536
+ }
1537
+ };
1538
+ this.send = (data) => {
1539
+ var _a, _b, _c;
1540
+ if (((_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.readyState) === ((_b = this._realWebSocket) === null || _b === void 0 ? void 0 : _b.OPEN)) {
1541
+ (_c = this._realWebSocket) === null || _c === void 0 ? void 0 : _c.send(data);
1542
+ }
1543
+ };
1544
+ this.close = (code, reason) => {
1545
+ var _a;
1546
+ if (typeof code !== 'number') {
1547
+ reason = code;
1548
+ code = 1000;
1549
+ }
1550
+ this._clearPendingReconnectIfNeeded();
1551
+ this._reconnectWhenOnlineAgain = false;
1552
+ this._explicitlyClosed = true;
1553
+ this._detachConnectivityEvents();
1554
+ return (_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.close(code, reason);
1555
+ };
1556
+ this.open = (url) => {
1557
+ var _a, _b;
1558
+ if (url) {
1559
+ this._url = url;
1560
+ }
1561
+ if (((_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.readyState) !== WebSocket.OPEN &&
1562
+ ((_b = this._realWebSocket) === null || _b === void 0 ? void 0 : _b.readyState) !== WebSocket.CONNECTING) {
1563
+ this._clearPendingReconnectIfNeeded();
1564
+ this._reconnectWhenOnlineAgain = false;
1565
+ this._explicitlyClosed = false;
1566
+ this._createWebSocket();
1567
+ }
1568
+ };
1569
+ this._createWebSocket = () => {
1570
+ var _a, _b, _c;
1571
+ const newUrl = typeof this._url === 'string' ? this._url : (_a = this._url) === null || _a === void 0 ? void 0 : _a.call(this, this);
1572
+ if (!newUrl)
1573
+ return;
1574
+ this._pendingReconnect = undefined;
1575
+ this._removeWebSocketEvent();
1576
+ this._realWebSocket = new WebSocket(newUrl, this._protocols || undefined);
1577
+ this._attempts = this._attempts + 1;
1578
+ this.emit('connecting', new CustomEvent('connecting', {
1579
+ detail: { attempts: this._attempts, reconnects: this._reconnects },
1580
+ }));
1581
+ const timeoutCallback = () => {
1582
+ this._connectTimeout = undefined;
1583
+ this._detachConnectivityEvents();
1584
+ this.emit('timeout', new CustomEvent('connecting', {
1585
+ detail: {
1586
+ attempts: this._attempts,
1587
+ reconnects: this._reconnects,
1588
+ },
1589
+ }));
1590
+ };
1591
+ this._connectTimeout = setTimeout(timeoutCallback, (_b = this._options) === null || _b === void 0 ? void 0 : _b.timeout);
1592
+ this._dispatchWebSocketEvent();
1593
+ if (!((_c = this._options) === null || _c === void 0 ? void 0 : _c.ignoreConnectivityEvents)) {
1594
+ this._attachConnectivityEvents();
1595
+ }
1596
+ };
1597
+ this._removeWebSocketEvent = () => {
1598
+ var _a, _b, _c, _d;
1599
+ (_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.removeEventListener('open', this._webSocketOpenHandler);
1600
+ (_b = this._realWebSocket) === null || _b === void 0 ? void 0 : _b.removeEventListener('close', this._webSocketCloseHandler);
1601
+ (_c = this._realWebSocket) === null || _c === void 0 ? void 0 : _c.removeEventListener('error', this._webSocketErrorHandler);
1602
+ (_d = this._realWebSocket) === null || _d === void 0 ? void 0 : _d.removeEventListener('message', this._webSocketMessageHandler);
1603
+ };
1604
+ this._dispatchWebSocketEvent = () => {
1605
+ var _a, _b, _c, _d;
1606
+ (_a = this._realWebSocket) === null || _a === void 0 ? void 0 : _a.addEventListener('open', this._webSocketOpenHandler);
1607
+ (_b = this._realWebSocket) === null || _b === void 0 ? void 0 : _b.addEventListener('close', this._webSocketCloseHandler);
1608
+ (_c = this._realWebSocket) === null || _c === void 0 ? void 0 : _c.addEventListener('error', this._webSocketErrorHandler);
1609
+ (_d = this._realWebSocket) === null || _d === void 0 ? void 0 : _d.addEventListener('message', this._webSocketMessageHandler);
1610
+ };
1611
+ this._webSocketOpenHandler = (event) => {
1612
+ if (this._connectTimeout) {
1613
+ clearTimeout(this._connectTimeout);
1614
+ this._connectTimeout = undefined;
1615
+ }
1616
+ const reconnects = ++this._reconnects;
1617
+ const attempts = this._attempts;
1618
+ this._attempts = 0;
1619
+ this._reconnectWhenOnlineAgain = false;
1620
+ return this.emit('open', Object.assign(event, { detail: { reconnects, attempts } }));
1621
+ };
1622
+ this._webSocketCloseHandler = (event) => {
1623
+ this._reconnect(event);
1624
+ return this.emit('close', event);
1625
+ };
1626
+ this._webSocketErrorHandler = (event) => {
1627
+ return this.emit('error', new CustomEvent('error', { detail: { error: event } }));
1628
+ };
1629
+ this._webSocketMessageHandler = (event) => {
1630
+ return this.emit('message', event);
1631
+ };
1632
+ if (options) {
1633
+ this.setOptions(options);
1634
+ }
1635
+ }
1636
+ setOptions(options) {
1637
+ if (!options)
1638
+ return;
1639
+ this._url = options.url;
1640
+ this._protocols = options.protocols;
1641
+ const opts = Object.assign(this._options, options.robustOptions || {});
1642
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.timeout) !== 'number') {
1643
+ throw new Error('timeout must be the number of milliseconds to timeout a connection attempt');
1644
+ }
1645
+ if (typeof (opts === null || opts === void 0 ? void 0 : opts.shouldReconnect) !== 'function') {
1646
+ throw new Error('shouldReconnect must be a function that returns the number of milliseconds to wait for a reconnect attempt, or null or undefined to not reconnect.');
1647
+ }
1648
+ this._options = opts;
1649
+ if (this._options.automaticOpen) {
1650
+ this._createWebSocket();
1651
+ }
1652
+ }
1653
+ _reconnect(event) {
1654
+ var _a, _b, _c, _d;
1655
+ if ((!((_a = this._options) === null || _a === void 0 ? void 0 : _a.should1000Reconnect) && event.code === 1000) ||
1656
+ this._explicitlyClosed) {
1657
+ this._attempts = 0;
1658
+ return;
1659
+ }
1660
+ if (((_b = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _b === void 0 ? void 0 : _b.onLine) === false) {
1661
+ this._reconnectWhenOnlineAgain = true;
1662
+ return;
1663
+ }
1664
+ const delay = (_d = (_c = this._options) === null || _c === void 0 ? void 0 : _c.shouldReconnect) === null || _d === void 0 ? void 0 : _d.call(_c, event, this);
1665
+ if (typeof delay === 'number') {
1666
+ this._pendingReconnect = setTimeout(this._createWebSocket, delay);
1667
+ }
1668
+ }
1669
+ }
1670
+
1671
+ class HybridBridge {
1672
+ get isReady() {
1673
+ return this._readyState === 'open';
1674
+ }
1675
+ constructor() {
1676
+ var _a, _b;
1677
+ this._rsWeappBridgeMethodAdapter = {};
1678
+ this._ws = new RobustWebSocket$1();
1679
+ this._readyState = 'close';
1680
+ this.initialize = (timeout = 6000) => __awaiter(this, void 0, void 0, function* () {
1681
+ const res = [false, null];
1682
+ const { wssid, wstsp, wssig, wsmnt = defaultWsEndpoint, } = parseQuery$1(globalThis.location.search);
1683
+ if (!(wssid && wstsp && wssig && wsmnt)) {
1684
+ res[1] = new Error('HybridBridge 参数缺失,初始化失败~');
1685
+ return res;
1686
+ }
1687
+ const url = generateWssUrl$1('{{origin}}/{{endpoint}}/{{uuid}}/{{member}}/{{ak}}/{{ts}}/{{sign}}', {
1688
+ origin: wsmnt,
1689
+ endpoint: 'proxy',
1690
+ uuid: wssid,
1691
+ member: 'webview',
1692
+ ak: 'vr_live_miniapp',
1693
+ ts: wstsp,
1694
+ sign: wssig,
1695
+ });
1696
+ try {
1697
+ const result = yield this._open(url);
1698
+ if (result) {
1699
+ this.initBuiltInHandlers();
1700
+ res[0] = yield this.waitReady(timeout);
1701
+ }
1702
+ else {
1703
+ res[1] = new Error('HybridBridge ws未连接,初始化失败~');
1704
+ }
1705
+ }
1706
+ catch (e) {
1707
+ res[1] = e;
1708
+ }
1709
+ return res;
1710
+ });
1711
+ this.initBuiltInHandlers = () => {
1712
+ this._registerLifecycleHandler();
1713
+ this._registerHeartbeatHandler();
1714
+ this._registerMessageHandler();
1715
+ this._registerBridgeRequestHandler();
1716
+ this._registerReadyHandler();
1717
+ };
1718
+ this._open = (url) => new Promise((resolve) => {
1719
+ const handleOpen = () => {
1720
+ this._receivedMessage(WeappBridgeMessage.ready, () => resolve(true), true);
1721
+ this._ws.once('timeout', () => resolve(false));
1722
+ this.send(WeappBridgeMessage.isReady);
1723
+ };
1724
+ this._ws.once('open', handleOpen);
1725
+ this._ws.open(url);
1726
+ });
1727
+ this._registerLifecycleHandler = () => {
1728
+ this._ws.on('connecting', () => {
1729
+ console.log('RsWeappBridge connecting');
1730
+ this._readyState = 'connecting';
1731
+ });
1732
+ this._ws.on('open', () => {
1733
+ console.log('RsWeappBridge open');
1734
+ this._readyState = 'open';
1735
+ });
1736
+ this._ws.on('close', () => {
1737
+ this._readyState = 'close';
1738
+ });
1739
+ this._ws.on('error', () => {
1740
+ console.log('RsWeappBridge error');
1741
+ this._readyState = 'close';
1742
+ });
1743
+ this._ws.on('timeout', () => {
1744
+ console.log('RsWeappBridge timeout');
1745
+ this._readyState = 'close';
1746
+ });
1747
+ };
1748
+ this._registerHeartbeatHandler = () => {
1749
+ this._receivedMessage(WeappBridgeMessage.ping, () => setTimeout(() => this._ws.send(WeappBridgeMessage.pong), 500));
1750
+ this._receivedMessage(WeappBridgeMessage.pong, () => setTimeout(() => this._ws.send(WeappBridgeMessage.ping), 1000));
1751
+ };
1752
+ this._receivedMessage = (targetMessage, handler, once) => {
1753
+ const msgHandler = (evnet) => {
1754
+ if (evnet.data === targetMessage) {
1755
+ handler();
1756
+ if (once) {
1757
+ this._ws.off('message', msgHandler);
1758
+ }
1759
+ }
1760
+ };
1761
+ this._ws.on('message', msgHandler);
1762
+ };
1763
+ this._registerReadyHandler = () => {
1764
+ this._receivedMessage(WeappBridgeMessage.isReady, () => this._ws.send(WeappBridgeMessage.ready));
1765
+ };
1766
+ this.send = (data) => {
1767
+ this._ws.send(data);
1768
+ };
1769
+ this.waitReady = (timeout = 6000) => {
1770
+ return new Promise((resolve, reject) => {
1771
+ this._receivedMessage(WeappBridgeMessage.ready, () => resolve(true));
1772
+ this.send(WeappBridgeMessage.isReady);
1773
+ setTimeout(() => reject('HybridBridge 初始化超时~'), timeout);
1774
+ });
1775
+ };
1776
+ this._parseMessage = (event) => {
1777
+ try {
1778
+ return JSON.parse(event.data);
1779
+ }
1780
+ catch (e) {
1781
+ return event.data;
1782
+ }
1783
+ };
1784
+ this._registerMessageHandler = () => {
1785
+ this._ws.on('message', (event) => {
1786
+ const message = this._parseMessage(event);
1787
+ if (typeof message === 'object') {
1788
+ const { id, command, data } = message;
1789
+ if (command === 'message' &&
1790
+ typeof this._rsWeappBridgeMethodAdapter.bindMessage === 'function') {
1791
+ this._rsWeappBridgeMethodAdapter.bindMessage({ id, data });
1792
+ }
1793
+ }
1794
+ });
1795
+ };
1796
+ this.getStaticData = (callbackFunctionName) => {
1797
+ this.callAndBackfeed(JSON.stringify({
1798
+ actionUrl: 'common/staticData',
1799
+ functionName: callbackFunctionName,
1800
+ }));
1801
+ };
1802
+ this.callAndBackfeed = (msg) => {
1803
+ const { actionUrl = '', functionName = '' } = JSON.parse(msg);
1804
+ if (!actionUrl)
1805
+ throw new Error('callAndBackfeed actionUrl is empty!');
1806
+ if (!functionName)
1807
+ throw new Error('callAndBackfeed functionName is empty!');
1808
+ const callback = (result) => {
1809
+ if (typeof globalThis[functionName] === 'function') {
1810
+ globalThis[functionName](result);
1811
+ }
1812
+ };
1813
+ this._callAndBackfeed(actionUrl, callback);
1814
+ };
1815
+ this.callAndListen = (msg) => {
1816
+ const { actionUrl, functionName } = JSON.parse(msg);
1817
+ if (!actionUrl)
1818
+ throw new Error('callAndListen actionUrl is empty!');
1819
+ if (!functionName)
1820
+ throw new Error('callAndListen functionName is empty!');
1821
+ const callback = (result) => {
1822
+ if (typeof globalThis[functionName] === 'function') {
1823
+ globalThis[functionName](result);
1824
+ }
1825
+ };
1826
+ try {
1827
+ this._callAndListen(actionUrl, callback);
1828
+ }
1829
+ catch (e) {
1830
+ console.warn(e);
1831
+ callback(false);
1832
+ }
1833
+ };
1834
+ this.execute = (method, args) => __awaiter(this, void 0, void 0, function* () { return yield this._invokeBridgeMethod(method, args); });
1835
+ this._invokeBridgeMethod = (method, args) => new Promise((success, fail) => {
1836
+ const id = uuid();
1837
+ const wsBridgeResponsehandler = (event) => {
1838
+ const result = this._parseMessage(event);
1839
+ if (typeof result === 'object') {
1840
+ if (result.method === method && result.id === id) {
1841
+ this._ws.off('message', wsBridgeResponsehandler);
1842
+ result.error ? fail(result.error) : success(result.data);
1843
+ }
1844
+ }
1845
+ };
1846
+ this._ws.on('message', wsBridgeResponsehandler);
1847
+ this.send(JSON.stringify({ method, args, id }));
1848
+ });
1849
+ if (((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.window) === null || _a === void 0 ? void 0 : _a.__Realsee_WxMini_HybridBridge__) instanceof HybridBridge) {
1850
+ return (_b = globalThis === null || globalThis === void 0 ? void 0 : globalThis.window) === null || _b === void 0 ? void 0 : _b.__Realsee_WxMini_HybridBridge__;
1851
+ }
1852
+ if (globalThis === null || globalThis === void 0 ? void 0 : globalThis.window) {
1853
+ globalThis.window.__Realsee_WxMini_HybridBridge__ = this;
1854
+ this.initBuiltInHandlers();
1855
+ }
1856
+ }
1857
+ _registerBridgeRequestHandler() {
1858
+ this._ws.on('message', (event) => __awaiter(this, void 0, void 0, function* () {
1859
+ const request = this._parseMessage(event);
1860
+ if (typeof request === 'object') {
1861
+ const { id, method, args, command } = request;
1862
+ if (command === 'request') {
1863
+ if (method) {
1864
+ let result = null;
1865
+ let error = null;
1866
+ let _method = null;
1867
+ if (typeof this._rsWeappBridgeMethodAdapter[method] === 'function') {
1868
+ _method = this._rsWeappBridgeMethodAdapter[method];
1869
+ }
1870
+ else if (globalThis && isValidKey$1(method, globalThis)) {
1871
+ _method = globalThis[method];
1872
+ }
1873
+ if (typeof _method === 'function') {
1874
+ try {
1875
+ result = yield _method(args);
1876
+ }
1877
+ catch (e) {
1878
+ error = e.message || e;
1879
+ }
1880
+ }
1881
+ else {
1882
+ error = 'Method not implemented.';
1883
+ }
1884
+ this.send(JSON.stringify({
1885
+ id,
1886
+ method,
1887
+ result,
1888
+ error,
1889
+ command: 'response',
1890
+ }));
1891
+ }
1892
+ }
1893
+ }
1894
+ }));
1895
+ }
1896
+ _callAndBackfeed(actionUrl, backfeed) {
1897
+ const reqId = uuid();
1898
+ const data = JSON.stringify({
1899
+ id: reqId,
1900
+ actionUrl,
1901
+ command: 'rsSchemeRequest',
1902
+ type: 'callAndBackfeed',
1903
+ });
1904
+ let timer = null;
1905
+ const callback = (event) => {
1906
+ const message = this._parseMessage(event);
1907
+ if (typeof message === 'object') {
1908
+ const { id, result, errmsg, command } = message;
1909
+ if (command === 'rsSchemeResponse' && id === reqId) {
1910
+ this._ws.off('message', callback);
1911
+ if (timer)
1912
+ clearTimeout(timer);
1913
+ if (errmsg) {
1914
+ console.warn(errmsg);
1915
+ backfeed(0);
1916
+ }
1917
+ else {
1918
+ backfeed(result);
1919
+ }
1920
+ }
1921
+ }
1922
+ };
1923
+ this._ws.on('message', callback);
1924
+ this.send(data);
1925
+ timer = globalThis.setTimeout(() => {
1926
+ console.warn('callAndBackfeed timeout');
1927
+ backfeed(0);
1928
+ }, 30000);
1929
+ }
1930
+ _callAndListen(actionUrl, fn) {
1931
+ const reqId = uuid();
1932
+ const data = JSON.stringify({
1933
+ id: reqId,
1934
+ actionUrl,
1935
+ command: 'rsSchemeRequest',
1936
+ type: 'callAndListen',
1937
+ });
1938
+ const callback = (event) => {
1939
+ const message = this._parseMessage(event);
1940
+ if (typeof message === 'object') {
1941
+ const { id, result, errmsg, command } = message;
1942
+ if (command === 'rsSchemeResponse' && id === reqId) {
1943
+ if (errmsg) {
1944
+ console.warn(errmsg);
1945
+ fn(false);
1946
+ }
1947
+ else {
1948
+ fn(result);
1949
+ }
1950
+ }
1951
+ }
1952
+ };
1953
+ this._ws.on('message', callback);
1954
+ this.send(data);
1955
+ }
1956
+ invoke(method, args) {
1957
+ return __awaiter(this, void 0, void 0, function* () {
1958
+ return new Promise((success, fail) => {
1959
+ const reqId = uuid();
1960
+ const data = JSON.stringify({
1961
+ id: reqId,
1962
+ method,
1963
+ args,
1964
+ command: 'request',
1965
+ });
1966
+ let timer = null;
1967
+ const callback = (event) => {
1968
+ const message = this._parseMessage(event);
1969
+ if (typeof message === 'object') {
1970
+ const { id, result, error, command } = message;
1971
+ if (command === 'response' &&
1972
+ id === reqId &&
1973
+ message.method === method) {
1974
+ this._ws.off('message', callback);
1975
+ if (timer)
1976
+ clearTimeout(timer);
1977
+ if (error) {
1978
+ fail(error);
1979
+ }
1980
+ else {
1981
+ success(result);
1982
+ }
1983
+ }
1984
+ }
1985
+ };
1986
+ this._ws.on('message', callback);
1987
+ this.send(data);
1988
+ timer = setTimeout(() => fail('method invoke timeout'), 30000);
1989
+ });
1990
+ });
1991
+ }
1992
+ }
1993
+
1994
+ class WxMiniprogramController extends BaseController {
1995
+ constructor() {
1996
+ super(...arguments);
1997
+ this._hybridBridge = new HybridBridge();
1998
+ this.initializing = false;
1999
+ }
2000
+ get hybridBridge() {
2001
+ return this._hybridBridge;
2002
+ }
2003
+ checkBridgeReady(timeout = 60000) {
2004
+ if (this.ready)
2005
+ return true;
2006
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
2007
+ if (this.ready)
2008
+ return resolve(true);
2009
+ if (this.initializing) {
2010
+ const check = () => {
2011
+ if (this.ready)
2012
+ return resolve(true);
2013
+ requestAnimationFrame(check);
2014
+ };
2015
+ check();
2016
+ }
2017
+ else {
2018
+ this.initializing = true;
2019
+ const [res, error] = yield this._hybridBridge.initialize(timeout);
2020
+ if (!res || error) {
2021
+ throw error || new Error('HybridBridge 初始化失败~');
2022
+ }
2023
+ this._hybridBridge.getStaticData(registerGlobalValue('HYBRID_BRIDGE_NAME', (data) => {
2024
+ this.deviceInfo = (() => {
2025
+ try {
2026
+ return JSON.parse(data);
2027
+ }
2028
+ catch (e) {
2029
+ return data;
2030
+ }
2031
+ })();
2032
+ }));
2033
+ this.initializing = false;
2034
+ return resolve(true);
2035
+ }
2036
+ }));
2037
+ }
2038
+ checkReady(timeout = 60000) {
2039
+ return __awaiter(this, void 0, void 0, function* () {
2040
+ const res = [null, null];
2041
+ if (this.ready) {
2042
+ res[0] = true;
2043
+ return res;
2044
+ }
2045
+ try {
2046
+ res[0] = yield this.checkBridgeReady(timeout);
2047
+ }
2048
+ catch (error) {
2049
+ res[0] = false;
2050
+ res[1] = error;
2051
+ }
2052
+ return res;
2053
+ });
2054
+ }
2055
+ get ready() {
2056
+ return !!this._hybridBridge.isReady;
2057
+ }
2058
+ get scheme() {
2059
+ var _a;
2060
+ return ((_a = this.deviceInfo) === null || _a === void 0 ? void 0 : _a.scheme) || '';
2061
+ }
2062
+ createSchemeLink(schemeUrl) {
2063
+ if (schemeUrl.startsWith(this.scheme)) {
2064
+ return schemeUrl;
2065
+ }
2066
+ return this.scheme + '://' + schemeUrl;
2067
+ }
2068
+ callAndBackfeed(scheme) {
2069
+ return __awaiter(this, void 0, void 0, function* () {
2070
+ const res = [false, null];
2071
+ const [ready, readyError] = yield this.checkReady();
2072
+ if (!ready) {
2073
+ res[0] = false;
2074
+ res[1] = readyError;
2075
+ return res;
2076
+ }
2077
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
2078
+ const actionUrl = this.createSchemeLink(scheme);
2079
+ const msg = JSON.stringify({
2080
+ actionUrl,
2081
+ functionName: registerGlobalValue(this.createSchemeLink(scheme), (data) => {
2082
+ let d = data;
2083
+ try {
2084
+ d = JSON.parse(data);
2085
+ }
2086
+ catch (e) {
2087
+ }
2088
+ res[0] = (() => {
2089
+ if (d === 1)
2090
+ return true;
2091
+ if (d === 0)
2092
+ return false;
2093
+ return d;
2094
+ })();
2095
+ resolve(res);
2096
+ }),
2097
+ });
2098
+ this._hybridBridge.callAndBackfeed(msg);
2099
+ }));
2100
+ });
2101
+ }
2102
+ callAndListen(scheme, callback) {
2103
+ return __awaiter(this, void 0, void 0, function* () {
2104
+ const res = [false, null];
2105
+ const [ready, readyError] = yield this.checkReady();
2106
+ if (!ready) {
2107
+ res[0] = false;
2108
+ res[1] = readyError;
2109
+ return res;
2110
+ }
2111
+ return yield new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
2112
+ const actionUrl = this.createSchemeLink(scheme);
2113
+ const _callback = (data) => {
2114
+ let d = data;
2115
+ try {
2116
+ d = JSON.parse(data);
2117
+ }
2118
+ catch (e) {
2119
+ }
2120
+ const callbackParam = (() => {
2121
+ if (d === 1)
2122
+ return true;
2123
+ if (d === 0)
2124
+ return false;
2125
+ return d;
2126
+ })();
2127
+ callback(callbackParam);
2128
+ res[0] = () => {
2129
+ const callbacks = cache[actionUrl];
2130
+ if (!callbacks)
2131
+ return;
2132
+ const idx = callbacks.queue.findIndex((func) => func.callback === _callback);
2133
+ if (idx !== -1) {
2134
+ callbacks.queue.splice(idx, 1);
2135
+ }
2136
+ };
2137
+ resolve(res);
2138
+ };
2139
+ const msg = JSON.stringify({
2140
+ actionUrl,
2141
+ functionName: registerGlobalValue(actionUrl, _callback, false),
2142
+ });
2143
+ this._hybridBridge.callAndListen(msg);
2144
+ }));
2145
+ });
2146
+ }
2147
+ invoke(method, data) {
2148
+ var _a, _b;
2149
+ return __awaiter(this, void 0, void 0, function* () {
2150
+ const [ready, readyError] = yield this.checkReady();
2151
+ if (!ready) {
2152
+ throw readyError;
2153
+ }
2154
+ else {
2155
+ return (yield ((_b = (_a = this._hybridBridge).invoke) === null || _b === void 0 ? void 0 : _b.call(_a, method, data)));
2156
+ }
2157
+ });
2158
+ }
2159
+ }
2160
+
2161
+ var WebViewTypeEnum;
2162
+ (function (WebViewTypeEnum) {
2163
+ WebViewTypeEnum["WebView"] = "WebKit";
2164
+ WebViewTypeEnum["WKWebview"] = "WKWebview";
2165
+ WebViewTypeEnum["UIWebview"] = "UIWebview";
2166
+ WebViewTypeEnum["Browser"] = "Browser";
2167
+ WebViewTypeEnum["WeChatMPWebView"] = "WxMiniProgramWebView";
2168
+ WebViewTypeEnum["Unsupported"] = "Unsupported";
2169
+ })(WebViewTypeEnum || (WebViewTypeEnum = {}));
2170
+
2171
+ class JSBridgeCore extends Subscribe {
2172
+ constructor() {
2173
+ super(...arguments);
2174
+ this.webViewType = WebViewTypeEnum.Unsupported;
2175
+ }
2176
+ }
2177
+
2178
+ const userAgent$1 = globalThis.navigator.userAgent;
2179
+ const isAndroid$1 = /android/gi.test(userAgent$1);
2180
+ const isIOS$1 = /iPhone|iPad\s+OS/gi.test(userAgent$1);
2181
+ const isWxMiniProgram$1 = /MicroMessenger/gi.test(userAgent$1) && /miniProgram/gi.test(userAgent$1);
2182
+ const isRealseeVRWebview$1 = /realsee/gi.test(userAgent$1);
2183
+
2184
+ const defaultOptions$1 = {
2185
+ timeout: 6000,
2186
+ };
2187
+ class JSBridgeApp extends JSBridgeCore {
2188
+ constructor(options = {}) {
2189
+ super();
2190
+ this.options = Object.assign(defaultOptions$1, options);
2191
+ if (!isRealseeVRWebview$1) {
2192
+ console.warn('未知容器:此版本 `jsBridge` 不支持当前 WebView 容器 ... ');
2193
+ }
2194
+ this.webViewType = (() => {
2195
+ if (isAndroid$1)
2196
+ return WebViewTypeEnum.WebView;
2197
+ if (isIOS$1)
2198
+ return WebViewTypeEnum.WKWebview;
2199
+ return WebViewTypeEnum.Browser;
2200
+ })();
2201
+ this._controller = (() => {
2202
+ if (isAndroid$1)
2203
+ return new WebViewController();
2204
+ if (isIOS$1)
2205
+ return new WKWebViewController();
2206
+ return new BaseController();
2207
+ })();
2208
+ this.callAndListen('common/webViewState', (webviewState) => {
2209
+ this.emit('webViewStateChange', webviewState);
2210
+ });
2211
+ this.callAndListen('common/webViewError', (errorInfo) => {
2212
+ this.emit('error', errorInfo);
2213
+ });
2214
+ }
2215
+ ready() {
2216
+ return __awaiter(this, void 0, void 0, function* () {
2217
+ return yield this._controller.checkReady(this.options.timeout);
2218
+ });
2219
+ }
2220
+ callAndBackfeed(schemeUrl) {
2221
+ return __awaiter(this, void 0, void 0, function* () {
2222
+ return yield this._controller.callAndBackfeed(schemeUrl);
2223
+ });
2224
+ }
2225
+ callAndListen(schemeUrl, callback) {
2226
+ var _a;
2227
+ return __awaiter(this, void 0, void 0, function* () {
2228
+ return yield ((_a = this._controller) === null || _a === void 0 ? void 0 : _a.callAndListen(schemeUrl, callback));
2229
+ });
2230
+ }
2231
+ setLeftTopBackButton(enable) {
2232
+ return __awaiter(this, void 0, void 0, function* () {
2233
+ if (this.webViewType === WebViewTypeEnum.WebView) {
2234
+ return [true, null];
2235
+ }
2236
+ return yield this.callAndBackfeed(`common/setLeftTopBackButton?enable=${enable ? 1 : 0}`);
2237
+ });
2238
+ }
2239
+ getBangsHeight() {
2240
+ return __awaiter(this, void 0, void 0, function* () {
2241
+ return yield this.callAndBackfeed('common/getBangsHeight');
2242
+ });
2243
+ }
2244
+ shock(duration = 4) {
2245
+ return __awaiter(this, void 0, void 0, function* () {
2246
+ return yield this.callAndBackfeed(`common/shock?duration=${duration}`);
2247
+ });
2248
+ }
2249
+ minimize() {
2250
+ return __awaiter(this, void 0, void 0, function* () {
2251
+ return yield this.callAndBackfeed(`common/minimize`);
2252
+ });
2253
+ }
2254
+ loadProgress(progress) {
2255
+ return __awaiter(this, void 0, void 0, function* () {
2256
+ progress = progress < 0 ? 0 : progress > 100 ? 100 : progress;
2257
+ return yield this.callAndBackfeed(`common/loadProgress?progress=${progress}`);
2258
+ });
2259
+ }
2260
+ closeLoading() {
2261
+ return __awaiter(this, void 0, void 0, function* () {
2262
+ return yield this.callAndBackfeed(`common/closeLoading`);
2263
+ });
2264
+ }
2265
+ setOrientation(orientation) {
2266
+ return __awaiter(this, void 0, void 0, function* () {
2267
+ return yield this.callAndBackfeed(`common/setOrientation?orientation=${orientation}`);
2268
+ });
2269
+ }
2270
+ keepScreenLight(enable) {
2271
+ return __awaiter(this, void 0, void 0, function* () {
2272
+ return yield this.callAndBackfeed(`common/keepScreenLight?enable=${enable ? 1 : 0}`);
2273
+ });
2274
+ }
2275
+ closeWebView() {
2276
+ return __awaiter(this, void 0, void 0, function* () {
2277
+ return yield this.callAndBackfeed(`common/closeWebView`);
2278
+ });
2279
+ }
2280
+ openWebView(url, way) {
2281
+ return __awaiter(this, void 0, void 0, function* () {
2282
+ return yield this.callAndBackfeed(`common/openWebView?way=${way}&url=${encodeURIComponent(url)}`);
2283
+ });
2284
+ }
2285
+ saveImage2Album(base64) {
2286
+ return __awaiter(this, void 0, void 0, function* () {
2287
+ return yield this.callAndBackfeed(`common/saveImage2Album?base64=${base64}`);
2288
+ });
2289
+ }
2290
+ actionShare(shareConfig) {
2291
+ return __awaiter(this, void 0, void 0, function* () {
2292
+ return yield this.callAndBackfeed(`common/actionShare?json=${JSON.stringify(shareConfig)}`);
2293
+ });
2294
+ }
2295
+ getDeviceInfo() {
2296
+ return __awaiter(this, void 0, void 0, function* () {
2297
+ return yield this.callAndBackfeed(`common/getDeviceInfo`);
2298
+ });
2299
+ }
2300
+ getUserInfo() {
2301
+ return __awaiter(this, void 0, void 0, function* () {
2302
+ return yield this.callAndBackfeed(`common/getUserInfo`);
2303
+ });
2304
+ }
2305
+ getWebViewState() {
2306
+ return __awaiter(this, void 0, void 0, function* () {
2307
+ return yield this.callAndBackfeed(`common/getWebViewState`);
2308
+ });
2309
+ }
2310
+ login() {
2311
+ return __awaiter(this, void 0, void 0, function* () {
2312
+ const res = yield this.callAndBackfeed(`common/login`);
2313
+ if (res[0]) {
2314
+ return yield this.getUserInfo();
2315
+ }
2316
+ return res;
2317
+ });
2318
+ }
2319
+ logout() {
2320
+ return __awaiter(this, void 0, void 0, function* () {
2321
+ return yield this.callAndBackfeed(`common/logout`);
2322
+ });
2323
+ }
2324
+ detectMicro() {
2325
+ return __awaiter(this, void 0, void 0, function* () {
2326
+ return yield this.callAndBackfeed(`common/detectMicro`);
2327
+ });
2328
+ }
2329
+ preload(urls) {
2330
+ return __awaiter(this, void 0, void 0, function* () {
2331
+ urls = urls.map((url) => {
2332
+ if (url.startsWith('//')) {
2333
+ return 'https:' + url;
2334
+ }
2335
+ return url;
2336
+ });
2337
+ return yield this.callAndBackfeed(`common/preload?urls=${JSON.stringify(urls)}`);
2338
+ });
2339
+ }
2340
+ createCacheProxyUrl(urls) {
2341
+ urls = Array.isArray(urls) ? urls : [urls];
2342
+ const userAgent = window.navigator.userAgent;
2343
+ if (!/supportCache/i.test(userAgent)) {
2344
+ return urls;
2345
+ }
2346
+ const proxyCache = (url) => {
2347
+ if (this.webViewType === WebViewTypeEnum.WKWebview) {
2348
+ return url.replace(/https*:/, '').replace(/\/\//, 'realseeproxycache://');
2349
+ }
2350
+ else if (this.webViewType === WebViewTypeEnum.WebView) {
2351
+ return url + (url.indexOf('?') !== -1 ? '&' : '?') + 'realseeproxycache=1';
2352
+ }
2353
+ return url;
2354
+ };
2355
+ return urls.map(proxyCache);
2356
+ }
2357
+ }
2358
+
2359
+ var OpenWebViewEnum;
2360
+ (function (OpenWebViewEnum) {
2361
+ OpenWebViewEnum["Append"] = "Append";
2362
+ OpenWebViewEnum["Replace"] = "Replace";
2363
+ OpenWebViewEnum["Single"] = "Single";
2364
+ })(OpenWebViewEnum || (OpenWebViewEnum = {}));
2365
+
2366
+ class JSBridgeBrowser extends JSBridgeCore {
2367
+ constructor() {
2368
+ super(...arguments);
2369
+ this.webViewType = WebViewTypeEnum.Browser;
2370
+ }
2371
+ ready() {
2372
+ return Promise.resolve([true, null]);
2373
+ }
2374
+ callAndBackfeed(schemeUrl) {
2375
+ return Promise.resolve([false, null]);
2376
+ }
2377
+ callAndListen(schemeUrl, callback) {
2378
+ return Promise.resolve([() => void 0, null]);
2379
+ }
2380
+ loadProgress(progress) {
2381
+ return Promise.resolve([true, null]);
2382
+ }
2383
+ closeLoading() {
2384
+ return Promise.resolve([true, null]);
2385
+ }
2386
+ getDeviceInfo() {
2387
+ return Promise.resolve([false, null]);
2388
+ }
2389
+ getWebViewState() {
2390
+ return Promise.resolve([false, null]);
2391
+ }
2392
+ setLeftTopBackButton(enable) {
2393
+ return Promise.resolve([false, null]);
2394
+ }
2395
+ login() {
2396
+ return Promise.resolve([false, null]);
2397
+ }
2398
+ logout() {
2399
+ return Promise.resolve([false, null]);
2400
+ }
2401
+ getUserInfo() {
2402
+ return Promise.resolve([false, null]);
2403
+ }
2404
+ openWebView(url, way) {
2405
+ switch (way) {
2406
+ case OpenWebViewEnum.Replace:
2407
+ case OpenWebViewEnum.Single: {
2408
+ setTimeout(() => globalThis.location.replace(url), 200);
2409
+ break;
2410
+ }
2411
+ case OpenWebViewEnum.Append:
2412
+ default: {
2413
+ setTimeout(() => (globalThis.location.href = url), 200);
2414
+ break;
2415
+ }
2416
+ }
2417
+ return Promise.resolve([true, null]);
2418
+ }
2419
+ closeWebView() {
2420
+ globalThis.close();
2421
+ return Promise.resolve([true, null]);
2422
+ }
2423
+ getBangsHeight() {
2424
+ return Promise.resolve([0, null]);
2425
+ }
2426
+ setOrientation(orientation) {
2427
+ return Promise.resolve([false, null]);
2428
+ }
2429
+ keepScreenLight(enable) {
2430
+ return Promise.resolve([false, null]);
2431
+ }
2432
+ shock(duration) {
2433
+ return Promise.resolve([false, null]);
2434
+ }
2435
+ minimize() {
2436
+ return Promise.resolve([false, null]);
2437
+ }
2438
+ saveImage2Album(base64) {
2439
+ return Promise.resolve([false, null]);
2440
+ }
2441
+ detectMicro() {
2442
+ return new Promise((resolve) => {
2443
+ const rule = { audio: true, video: false };
2444
+ try {
2445
+ globalThis.navigator.mediaDevices
2446
+ .getUserMedia(rule)
2447
+ .then(() => resolve([true, null]))
2448
+ .catch((e) => resolve([false, e]));
2449
+ }
2450
+ catch (e) {
2451
+ console.error(e);
2452
+ resolve([false, e]);
2453
+ }
2454
+ });
2455
+ }
2456
+ actionShare(shareConfig) {
2457
+ return Promise.resolve([false, null]);
2458
+ }
2459
+ preload(urls) {
2460
+ return Promise.resolve([false, null]);
2461
+ }
2462
+ createCacheProxyUrl(urls) {
2463
+ return [];
853
2464
  }
854
2465
  }
855
2466
 
856
- var LiveState;
857
- (function (LiveState) {
858
- LiveState[LiveState["NOTINITIALIZED"] = -1] = "NOTINITIALIZED";
859
- /**
860
- * 正在链接中
861
- */
862
- LiveState[LiveState["CONNECTING"] = 0] = "CONNECTING";
863
- /**
864
- * 已经链接并且可以通讯
865
- */
866
- LiveState[LiveState["OPEN"] = 1] = "OPEN";
867
- /**
868
- * 连接已关闭或者链接失败
869
- */
870
- LiveState[LiveState["CLOSED"] = 3] = "CLOSED";
871
- })(LiveState || (LiveState = {}));
872
-
873
- /**
874
- * 用户当前状态枚举。
875
- */
876
- var UserStatus;
877
- (function (UserStatus) {
878
- /**
879
- * 正常
880
- */
881
- UserStatus[UserStatus["Normal"] = 0] = "Normal";
882
- /**
883
- * 被移除
884
- */
885
- UserStatus[UserStatus["Removed"] = 1] = "Removed";
886
- /**
887
- * 被替换
888
- */
889
- UserStatus[UserStatus["Replaced"] = 2] = "Replaced";
890
- })(UserStatus || (UserStatus = {}));
891
- var MemUserStatus;
892
- (function (MemUserStatus) {
893
- MemUserStatus["WAIT_ENTER"] = "WAIT_ENTER";
894
- MemUserStatus["ONLINE"] = "ONLINE";
895
- MemUserStatus["LEAVE"] = "LEAVE";
896
- MemUserStatus["KICK_OUT"] = "KICK_OUT";
897
- MemUserStatus["BE_REPLACE"] = "BE_REPLACE";
898
- MemUserStatus["EXCEPTION"] = "EXCEPTION";
899
- })(MemUserStatus || (MemUserStatus = {}));
900
-
901
- /**
902
- * WebSocket 连接状态枚举
903
- */
904
- var WebSocketState;
905
- (function (WebSocketState) {
906
- /**
907
- * 尚未初始化
908
- */
909
- WebSocketState[WebSocketState["NOTINITIALIZED"] = -1] = "NOTINITIALIZED";
910
- /**
911
- * 正在链接中
912
- */
913
- WebSocketState[WebSocketState["CONNECTING"] = 0] = "CONNECTING";
914
- /**
915
- * 已经链接并且可以通讯
916
- */
917
- WebSocketState[WebSocketState["OPEN"] = 1] = "OPEN";
918
- /**
919
- * 连接正在关闭
920
- */
921
- WebSocketState[WebSocketState["CLOSING"] = 2] = "CLOSING";
922
- /**
923
- * 连接已关闭或者没有链接成功
924
- */
925
- WebSocketState[WebSocketState["CLOSED"] = 3] = "CLOSED";
926
- })(WebSocketState || (WebSocketState = {}));
927
- var WebSocketErrorType;
928
- (function (WebSocketErrorType) {
929
- WebSocketErrorType["Error"] = "Error";
930
- WebSocketErrorType["Close"] = "Close";
931
- WebSocketErrorType["MicroAuth"] = "MicroAuth";
932
- WebSocketErrorType["DuplicateConnect"] = "DuplicateConnect";
933
- WebSocketErrorType["IllegalURL"] = "IllegalURL";
934
- WebSocketErrorType["Unknown"] = "Unknown";
935
- WebSocketErrorType["IllegalArgs"] = "IllegalArgs";
936
- })(WebSocketErrorType || (WebSocketErrorType = {}));
937
- /**
938
- * WebSocket 异常关闭枚举:https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent。
939
- */
940
- var WebSocketCloseError;
941
- (function (WebSocketCloseError) {
942
- /**
943
- * 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开。
944
- */
945
- WebSocketCloseError["Err_1001"] = "CLOSE_GOING_AWAY";
946
- /**
947
- * 由于协议错误而中断连接。
948
- */
949
- WebSocketCloseError["Err_1002"] = "CLOSE_PROTOCOL_ERROR";
950
- /**
951
- * 由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据)。
952
- */
953
- WebSocketCloseError["Err_1003"] = "CLOSE_UNSUPPORTED";
954
- /**
955
- * 安全因素或WebSocket连接次数达到上限。
956
- */
957
- WebSocketCloseError["Err_1006"] = "CLOSE_ABNORMAL";
958
- /**
959
- * 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据)。
960
- */
961
- WebSocketCloseError["Err_1007"] = "Unsupported Data";
962
- /**
963
- * 由于收到不符合约定的数据而断开连接。
964
- */
965
- WebSocketCloseError["Err_1008"] = "Policy Violation";
966
- /**
967
- * 由于收到过大的数据帧而断开连接。
968
- */
969
- WebSocketCloseError["Err_1009"] = "CLOSE_TOO_LARGE";
970
- /**
971
- * 未知错误。
972
- */
973
- WebSocketCloseError["Err_unknown"] = "unknown";
974
- })(WebSocketCloseError || (WebSocketCloseError = {}));
975
- function parseWSClsErr(code) {
976
- switch (code) {
977
- case 1001: {
978
- return WebSocketCloseError.Err_1001;
979
- }
980
- case 1002: {
981
- return WebSocketCloseError.Err_1002;
982
- }
983
- case 1003: {
984
- return WebSocketCloseError.Err_1003;
985
- }
986
- case 1006: {
987
- return WebSocketCloseError.Err_1006;
988
- }
989
- case 1007: {
990
- return WebSocketCloseError.Err_1007;
991
- }
992
- case 1008: {
993
- return WebSocketCloseError.Err_1008;
2467
+ const defaultOptions = {
2468
+ timeout: 60000,
2469
+ };
2470
+ class JSBridgeMiniprogram extends JSBridgeCore {
2471
+ constructor(options = {}) {
2472
+ super();
2473
+ this._controller = new WxMiniprogramController();
2474
+ this.options = Object.assign(defaultOptions, options);
2475
+ if (!isWxMiniProgram$1) {
2476
+ console.warn('未知容器:此版本 `jsBridge` 不支持当前 WebView 容器 ... ');
994
2477
  }
995
- case 1009: {
996
- return WebSocketCloseError.Err_1009;
2478
+ this.webViewType = WebViewTypeEnum.WeChatMPWebView;
2479
+ this.callAndListen('common/webViewState', (webviewState) => {
2480
+ this.emit('webViewStateChange', webviewState);
2481
+ });
2482
+ this.callAndListen('common/webViewError', (errorInfo) => {
2483
+ this.emit('error', errorInfo);
2484
+ });
2485
+ }
2486
+ ready() {
2487
+ return __awaiter(this, void 0, void 0, function* () {
2488
+ return yield this._controller.checkReady(this.options.timeout);
2489
+ });
2490
+ }
2491
+ callAndBackfeed(schemeUrl) {
2492
+ return __awaiter(this, void 0, void 0, function* () {
2493
+ return yield this._controller.callAndBackfeed(schemeUrl);
2494
+ });
2495
+ }
2496
+ callAndListen(schemeUrl, callback) {
2497
+ return __awaiter(this, void 0, void 0, function* () {
2498
+ return yield this._controller.callAndListen(schemeUrl, callback);
2499
+ });
2500
+ }
2501
+ setLeftTopBackButton(enable) {
2502
+ return __awaiter(this, void 0, void 0, function* () {
2503
+ if (this.webViewType === WebViewTypeEnum.WebView) {
2504
+ return [true, null];
2505
+ }
2506
+ return yield this.callAndBackfeed(`common/setLeftTopBackButton?enable=${enable ? 1 : 0}`);
2507
+ });
2508
+ }
2509
+ getBangsHeight() {
2510
+ return __awaiter(this, void 0, void 0, function* () {
2511
+ return yield this.callAndBackfeed('common/getBangsHeight');
2512
+ });
2513
+ }
2514
+ shock(duration = 4) {
2515
+ return __awaiter(this, void 0, void 0, function* () {
2516
+ return yield this.callAndBackfeed(`common/shock?duration=${duration}`);
2517
+ });
2518
+ }
2519
+ minimize() {
2520
+ return __awaiter(this, void 0, void 0, function* () {
2521
+ return yield this.callAndBackfeed(`common/minimize`);
2522
+ });
2523
+ }
2524
+ loadProgress(progress) {
2525
+ return __awaiter(this, void 0, void 0, function* () {
2526
+ progress = progress < 0 ? 0 : progress > 100 ? 100 : progress;
2527
+ return yield this.callAndBackfeed(`common/loadProgress?progress=${progress}`);
2528
+ });
2529
+ }
2530
+ closeLoading() {
2531
+ return __awaiter(this, void 0, void 0, function* () {
2532
+ return yield this.callAndBackfeed(`common/closeLoading`);
2533
+ });
2534
+ }
2535
+ setOrientation(orientation) {
2536
+ return __awaiter(this, void 0, void 0, function* () {
2537
+ return yield this.callAndBackfeed(`common/setOrientation?orientation=${orientation}`);
2538
+ });
2539
+ }
2540
+ keepScreenLight(enable) {
2541
+ return __awaiter(this, void 0, void 0, function* () {
2542
+ return yield this.callAndBackfeed(`common/keepScreenLight?enable=${enable ? 1 : 0}`);
2543
+ });
2544
+ }
2545
+ closeWebView() {
2546
+ return __awaiter(this, void 0, void 0, function* () {
2547
+ return yield this.callAndBackfeed(`common/closeWebView`);
2548
+ });
2549
+ }
2550
+ openWebView(url, way) {
2551
+ return __awaiter(this, void 0, void 0, function* () {
2552
+ return yield this.callAndBackfeed(`common/openWebView?way=${way}&url=${encodeURIComponent(url)}`);
2553
+ });
2554
+ }
2555
+ saveImage2Album(base64) {
2556
+ return __awaiter(this, void 0, void 0, function* () {
2557
+ return yield this.callAndBackfeed(`common/saveImage2Album?base64=${base64}`);
2558
+ });
2559
+ }
2560
+ actionShare(shareConfig) {
2561
+ var _a, _b, _c;
2562
+ return __awaiter(this, void 0, void 0, function* () {
2563
+ const config = {
2564
+ path: (_a = shareConfig.miniprogram) === null || _a === void 0 ? void 0 : _a[0].path,
2565
+ title: (_b = shareConfig.miniprogram) === null || _b === void 0 ? void 0 : _b[0].title,
2566
+ imageUrl: (_c = shareConfig.miniprogram) === null || _c === void 0 ? void 0 : _c[0].hdImageData,
2567
+ };
2568
+ return yield this.callAndBackfeed(`common/actionShare?json=${JSON.stringify(config)}`);
2569
+ });
2570
+ }
2571
+ getDeviceInfo() {
2572
+ return __awaiter(this, void 0, void 0, function* () {
2573
+ return yield this.callAndBackfeed(`common/getDeviceInfo`);
2574
+ });
2575
+ }
2576
+ getUserInfo() {
2577
+ return __awaiter(this, void 0, void 0, function* () {
2578
+ return yield this.callAndBackfeed(`common/getUserInfo`);
2579
+ });
2580
+ }
2581
+ getWebViewState() {
2582
+ return __awaiter(this, void 0, void 0, function* () {
2583
+ return yield this.callAndBackfeed(`common/getWebViewState`);
2584
+ });
2585
+ }
2586
+ login() {
2587
+ return __awaiter(this, void 0, void 0, function* () {
2588
+ const res = yield this.callAndBackfeed(`common/login`);
2589
+ if (res[0]) {
2590
+ return yield this.getUserInfo();
2591
+ }
2592
+ return res;
2593
+ });
2594
+ }
2595
+ logout() {
2596
+ return __awaiter(this, void 0, void 0, function* () {
2597
+ return yield this.callAndBackfeed(`common/logout`);
2598
+ });
2599
+ }
2600
+ detectMicro() {
2601
+ return __awaiter(this, void 0, void 0, function* () {
2602
+ return yield this.callAndBackfeed(`common/detectMicro`);
2603
+ });
2604
+ }
2605
+ preload(urls) {
2606
+ return __awaiter(this, void 0, void 0, function* () {
2607
+ urls = urls.map((url) => {
2608
+ if (url.startsWith('//')) {
2609
+ return 'https:' + url;
2610
+ }
2611
+ return url;
2612
+ });
2613
+ return yield this.callAndBackfeed(`common/preload?urls=${JSON.stringify(urls)}`);
2614
+ });
2615
+ }
2616
+ createCacheProxyUrl(urls) {
2617
+ urls = Array.isArray(urls) ? urls : [urls];
2618
+ const userAgent = window.navigator.userAgent;
2619
+ if (!/supportCache/i.test(userAgent)) {
2620
+ return urls;
997
2621
  }
2622
+ const proxyCache = (url) => {
2623
+ if (this.webViewType === WebViewTypeEnum.WKWebview) {
2624
+ return url
2625
+ .replace(/https*:/, '')
2626
+ .replace(/\/\//, 'realseeproxycache://');
2627
+ }
2628
+ else if (this.webViewType === WebViewTypeEnum.WebView) {
2629
+ return (url + (url.indexOf('?') !== -1 ? '&' : '?') + 'realseeproxycache=1');
2630
+ }
2631
+ return url;
2632
+ };
2633
+ return urls.map(proxyCache);
2634
+ }
2635
+ invokeNativeApi(method, data) {
2636
+ return __awaiter(this, void 0, void 0, function* () {
2637
+ return yield this._controller.invoke(method, data);
2638
+ });
2639
+ }
2640
+ execute(method, args) {
2641
+ var _a, _b, _c;
2642
+ return __awaiter(this, void 0, void 0, function* () {
2643
+ return yield ((_c = (_b = (_a = this._controller) === null || _a === void 0 ? void 0 : _a.hybridBridge) === null || _b === void 0 ? void 0 : _b.execute) === null || _c === void 0 ? void 0 : _c.call(_b, method, args));
2644
+ });
2645
+ }
2646
+ }
2647
+
2648
+ class JSBridge extends JSBridgeCore {
2649
+ constructor(options = {}) {
2650
+ super();
2651
+ if (isRealseeVRWebview$1 && (isAndroid$1 || isIOS$1))
2652
+ return new JSBridgeApp(options);
2653
+ if (isWxMiniProgram$1)
2654
+ return new JSBridgeMiniprogram(options);
2655
+ return new JSBridgeBrowser();
998
2656
  }
999
- return WebSocketCloseError.Err_unknown;
1000
2657
  }
1001
2658
 
1002
2659
  function getDefaultExportFromCjs (x) {
@@ -1176,7 +2833,7 @@ function equal(value, other, opt = { deep: false }) {
1176
2833
  * 1、自动重连
1177
2834
  * 2、可根据网络情况进行重连
1178
2835
  */
1179
- class RobustWebSocket extends Subscribe {
2836
+ class RobustWebSocket extends Subscribe$1 {
1180
2837
  get attempts() {
1181
2838
  return this._attempts;
1182
2839
  }
@@ -1203,7 +2860,7 @@ class RobustWebSocket extends Subscribe {
1203
2860
  /**
1204
2861
  * 做一个健康检查
1205
2862
  */
1206
- this._healthCheck = () => __awaiter(this, void 0, void 0, function* () {
2863
+ this._healthCheck = () => __awaiter$1(this, void 0, void 0, function* () {
1207
2864
  if (this._realWebSocket &&
1208
2865
  this._realWebSocket.readyState !== this._readyState) {
1209
2866
  this._readyState = this._realWebSocket.readyState;
@@ -1467,7 +3124,7 @@ class RobustWebSocket extends Subscribe {
1467
3124
  }
1468
3125
  }
1469
3126
 
1470
- class LiveController extends Subscribe {
3127
+ class LiveController extends Subscribe$1 {
1471
3128
  set state(state) {
1472
3129
  const prevState = JSON.parse(JSON.stringify(this._state));
1473
3130
  this._state = state;
@@ -1584,7 +3241,7 @@ class LiveController extends Subscribe {
1584
3241
  * 释放资源,释放之后需要重新实例化
1585
3242
  * @returns
1586
3243
  */
1587
- this.dispose = () => __awaiter(this, void 0, void 0, function* () {
3244
+ this.dispose = () => __awaiter$1(this, void 0, void 0, function* () {
1588
3245
  this._removeWebSocketEventListeners();
1589
3246
  return yield this.close('live room close by controller disposed!');
1590
3247
  });
@@ -1625,7 +3282,7 @@ class LiveController extends Subscribe {
1625
3282
  const unimplementedGetVoiceSign = (params) => Promise.reject('unimplemented method GetVoiceSign');
1626
3283
  const createLiveMsg = (command, data = {}, toUserIds = []) => ({
1627
3284
  command,
1628
- front_request_id: uuid(),
3285
+ front_request_id: uuid$1(),
1629
3286
  data: Object.assign(Object.assign({}, data), { to_user_ids: Array.isArray(toUserIds) ? toUserIds : [toUserIds] }),
1630
3287
  });
1631
3288
  const _clearLiveInstanceIfNeed = () => {
@@ -1635,7 +3292,7 @@ const _clearLiveInstanceIfNeed = () => {
1635
3292
  window.__Realsee_Live__ = null;
1636
3293
  }
1637
3294
  };
1638
- class Live extends Subscribe {
3295
+ class Live extends Subscribe$1 {
1639
3296
  get options() {
1640
3297
  return Object.freeze(this._options || {});
1641
3298
  }
@@ -1705,7 +3362,7 @@ class Live extends Subscribe {
1705
3362
  /**
1706
3363
  * 帧数据监听
1707
3364
  */
1708
- this.keyframes = new Subscribe();
3365
+ this.keyframes = new Subscribe$1();
1709
3366
  /**
1710
3367
  * 内置的一些数据
1711
3368
  */
@@ -1766,7 +3423,7 @@ class Live extends Subscribe {
1766
3423
  * 消息接收
1767
3424
  * @param liveMsg
1768
3425
  */
1769
- this._handleMessage = (liveMsg) => __awaiter(this, void 0, void 0, function* () {
3426
+ this._handleMessage = (liveMsg) => __awaiter$1(this, void 0, void 0, function* () {
1770
3427
  var _b, _c, _d, _e, _f;
1771
3428
  if (typeof liveMsg === 'object') {
1772
3429
  const { command, data = {}, frontRequestId, code, message } = liveMsg;
@@ -1920,7 +3577,7 @@ class Live extends Subscribe {
1920
3577
  * @param options
1921
3578
  * @returns
1922
3579
  */
1923
- this.connect = (options = {}) => __awaiter(this, void 0, void 0, function* () {
3580
+ this.connect = (options = {}) => __awaiter$1(this, void 0, void 0, function* () {
1924
3581
  var _g, _h, _j, _k;
1925
3582
  // 检查 url 和 票据获取接口实现
1926
3583
  this._options.url = (_h = (_g = options.url) !== null && _g !== void 0 ? _g : this._options.url) !== null && _h !== void 0 ? _h : '';
@@ -1974,9 +3631,11 @@ class Live extends Subscribe {
1974
3631
  * 退出带看
1975
3632
  * @returns
1976
3633
  */
1977
- this.exit = () => __awaiter(this, void 0, void 0, function* () {
3634
+ this.exit = () => __awaiter$1(this, void 0, void 0, function* () {
1978
3635
  var _l;
1979
3636
  this._clearLiveData();
3637
+ if (this.state !== LiveState.OPEN)
3638
+ return true;
1980
3639
  try {
1981
3640
  /** 退出强制关闭语音 */
1982
3641
  (_l = this.$RTC) === null || _l === void 0 ? void 0 : _l.quit();
@@ -1991,7 +3650,7 @@ class Live extends Subscribe {
1991
3650
  * 销毁带看
1992
3651
  * @returns
1993
3652
  */
1994
- this.dispose = () => __awaiter(this, void 0, void 0, function* () {
3653
+ this.dispose = () => __awaiter$1(this, void 0, void 0, function* () {
1995
3654
  this._removeLiveControllerEventListeners();
1996
3655
  this._clearLiveData();
1997
3656
  return yield this._controller.dispose();
@@ -2001,11 +3660,11 @@ class Live extends Subscribe {
2001
3660
  * @param userInfo
2002
3661
  * @returns
2003
3662
  */
2004
- this.setSelfInfo = (userInfo) => __awaiter(this, void 0, void 0, function* () {
3663
+ this.setSelfInfo = (userInfo) => __awaiter$1(this, void 0, void 0, function* () {
2005
3664
  return yield this.updateStatus(BuiltinEventType.UserChange, BuiltinActionType.UserInfo, userInfo);
2006
3665
  });
2007
3666
  // 仅用于用户自己的麦克风控制
2008
- this.toggleMicro = (microStatus) => __awaiter(this, void 0, void 0, function* () {
3667
+ this.toggleMicro = (microStatus) => __awaiter$1(this, void 0, void 0, function* () {
2009
3668
  var _m, _o, _p;
2010
3669
  if (!((_o = (_m = this.selfInfo) === null || _m === void 0 ? void 0 : _m.permission) === null || _o === void 0 ? void 0 : _o.control_own_micro))
2011
3670
  return false;
@@ -2023,7 +3682,7 @@ class Live extends Subscribe {
2023
3682
  * @param toUserIds
2024
3683
  * @returns
2025
3684
  */
2026
- this.forbidMicro = (microStatus, toUserIds) => __awaiter(this, void 0, void 0, function* () {
3685
+ this.forbidMicro = (microStatus, toUserIds) => __awaiter$1(this, void 0, void 0, function* () {
2027
3686
  var _q, _r;
2028
3687
  if (typeof this._options.canForbidUserMicro === 'function' &&
2029
3688
  !this._options.canForbidUserMicro(toUserIds)) {
@@ -2042,7 +3701,7 @@ class Live extends Subscribe {
2042
3701
  * @param toUserIds
2043
3702
  * @returns
2044
3703
  */
2045
- this.forbidSync = (sync, toUserIds) => __awaiter(this, void 0, void 0, function* () {
3704
+ this.forbidSync = (sync, toUserIds) => __awaiter$1(this, void 0, void 0, function* () {
2046
3705
  var _s, _t;
2047
3706
  if (typeof this._options.canForbidUserSync === 'function' &&
2048
3707
  !this._options.canForbidUserSync(toUserIds)) {
@@ -2058,7 +3717,7 @@ class Live extends Subscribe {
2058
3717
  * @param toUserIds
2059
3718
  * @returns
2060
3719
  */
2061
- this.kick = (toUserIds) => __awaiter(this, void 0, void 0, function* () {
3720
+ this.kick = (toUserIds) => __awaiter$1(this, void 0, void 0, function* () {
2062
3721
  var _u, _v;
2063
3722
  if (typeof this._options.canForbidUserKick === 'function' &&
2064
3723
  !this._options.canForbidUserKick(toUserIds)) {
@@ -2174,7 +3833,7 @@ class Live extends Subscribe {
2174
3833
  * @returns
2175
3834
  */
2176
3835
  updateStatus(evtType, atnType, status, toUserIds) {
2177
- return __awaiter(this, void 0, void 0, function* () {
3836
+ return __awaiter$1(this, void 0, void 0, function* () {
2178
3837
  if (this.state !== LiveState.OPEN)
2179
3838
  return false;
2180
3839
  const data = Object.assign({ event_type: evtType, action: atnType }, { data: status });
@@ -2274,7 +3933,7 @@ function createLiveReact(options) {
2274
3933
  /**
2275
3934
  * 带看连接操作
2276
3935
  */
2277
- const useConnect = () => (options) => __awaiter(this, void 0, void 0, function* () { return yield live.connect(options); });
3936
+ const useConnect = () => (options) => __awaiter$1(this, void 0, void 0, function* () { return yield live.connect(options); });
2278
3937
  /**
2279
3938
  *
2280
3939
  * @param name
@@ -2298,12 +3957,12 @@ function createLiveReact(options) {
2298
3957
  */
2299
3958
  function useLiveAction() {
2300
3959
  const live = useLiveInstance();
2301
- const connect = (options) => __awaiter(this, void 0, void 0, function* () { return yield live.connect(options); });
3960
+ const connect = (options) => __awaiter$1(this, void 0, void 0, function* () { return yield live.connect(options); });
2302
3961
  const toggleMicro = (microStatus) => live.toggleMicro(microStatus);
2303
- const broadcast = (data, toUserIds, timeout = 0) => __awaiter(this, void 0, void 0, function* () { return yield live.broadcast(data, toUserIds, timeout); });
2304
- const exit = () => __awaiter(this, void 0, void 0, function* () { return yield live.exit(); });
2305
- const kick = (toUserIds) => __awaiter(this, void 0, void 0, function* () { return yield live.kick(toUserIds); });
2306
- const forbidMicro = (micro, toUserIds = []) => __awaiter(this, void 0, void 0, function* () { return yield live.forbidMicro(micro, toUserIds); });
3962
+ const broadcast = (data, toUserIds, timeout = 0) => __awaiter$1(this, void 0, void 0, function* () { return yield live.broadcast(data, toUserIds, timeout); });
3963
+ const exit = () => __awaiter$1(this, void 0, void 0, function* () { return yield live.exit(); });
3964
+ const kick = (toUserIds) => __awaiter$1(this, void 0, void 0, function* () { return yield live.kick(toUserIds); });
3965
+ const forbidMicro = (micro, toUserIds = []) => __awaiter$1(this, void 0, void 0, function* () { return yield live.forbidMicro(micro, toUserIds); });
2307
3966
  const forbidSync = (sync, toUserIds = []) => live.forbidSync(sync, toUserIds);
2308
3967
  const getFramesByKey = (key) => live.getFramesByKey(key);
2309
3968
  const sendKeyframe = (key, frame) => live.sendKeyframe(key, frame);
@@ -2393,7 +4052,7 @@ function createLiveReact(options) {
2393
4052
  live.on('selfInfoUpdate', selfInfoUpdate);
2394
4053
  return () => live.off('selfInfoUpdate', selfInfoUpdate);
2395
4054
  }, [live]);
2396
- const setState = React.useCallback((userInfo) => __awaiter(this, void 0, void 0, function* () {
4055
+ const setState = React.useCallback((userInfo) => __awaiter$1(this, void 0, void 0, function* () {
2397
4056
  return yield live.setSelfInfo(userInfo);
2398
4057
  }), [live]);
2399
4058
  return [state, setState];