im-rtc-call-engine 1.0.0 → 2.0.0

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.
Files changed (144) hide show
  1. package/dist/browserSignals.d.ts +27 -0
  2. package/dist/browserSignals.d.ts.map +1 -0
  3. package/dist/browserSignals.js +34 -0
  4. package/dist/browserSignals.js.map +1 -0
  5. package/dist/callGuards.d.ts +35 -0
  6. package/dist/callGuards.d.ts.map +1 -0
  7. package/dist/callGuards.js +66 -0
  8. package/dist/callGuards.js.map +1 -0
  9. package/dist/callHistory.d.ts +50 -0
  10. package/dist/callHistory.d.ts.map +1 -0
  11. package/dist/callHistory.js +100 -0
  12. package/dist/callHistory.js.map +1 -0
  13. package/dist/callOptions.d.ts +14 -0
  14. package/dist/callOptions.d.ts.map +1 -1
  15. package/dist/callOptions.js +21 -0
  16. package/dist/callOptions.js.map +1 -1
  17. package/dist/debugToken.d.ts +29 -0
  18. package/dist/debugToken.d.ts.map +1 -0
  19. package/dist/debugToken.js +73 -0
  20. package/dist/debugToken.js.map +1 -0
  21. package/dist/engine.d.ts +88 -60
  22. package/dist/engine.d.ts.map +1 -1
  23. package/dist/engine.js +141 -178
  24. package/dist/engine.js.map +1 -1
  25. package/dist/engineBus.d.ts.map +1 -1
  26. package/dist/engineBus.js +1 -0
  27. package/dist/engineBus.js.map +1 -1
  28. package/dist/engineSession.d.ts +49 -0
  29. package/dist/engineSession.d.ts.map +1 -0
  30. package/dist/engineSession.js +97 -0
  31. package/dist/engineSession.js.map +1 -0
  32. package/dist/events.d.ts +48 -0
  33. package/dist/events.d.ts.map +1 -1
  34. package/dist/events.js +2 -0
  35. package/dist/events.js.map +1 -1
  36. package/dist/frameLoop.d.ts +48 -5
  37. package/dist/frameLoop.d.ts.map +1 -1
  38. package/dist/frameLoop.js +205 -29
  39. package/dist/frameLoop.js.map +1 -1
  40. package/dist/index.d.ts +6 -3
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +3 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/media/captureStream.d.ts +9 -0
  45. package/dist/media/captureStream.d.ts.map +1 -0
  46. package/dist/media/captureStream.js +20 -0
  47. package/dist/media/captureStream.js.map +1 -0
  48. package/dist/media/engineMediaApi.d.ts +24 -3
  49. package/dist/media/engineMediaApi.d.ts.map +1 -1
  50. package/dist/media/engineMediaApi.js +63 -27
  51. package/dist/media/engineMediaApi.js.map +1 -1
  52. package/dist/media/mediaBridge.d.ts +6 -1
  53. package/dist/media/mediaBridge.d.ts.map +1 -1
  54. package/dist/media/mediaBridge.js +18 -1
  55. package/dist/media/mediaBridge.js.map +1 -1
  56. package/dist/media/remoteAudio.d.ts +65 -0
  57. package/dist/media/remoteAudio.d.ts.map +1 -0
  58. package/dist/media/remoteAudio.js +83 -0
  59. package/dist/media/remoteAudio.js.map +1 -0
  60. package/dist/media/videoSender.d.ts +21 -0
  61. package/dist/media/videoSender.d.ts.map +1 -0
  62. package/dist/media/videoSender.js +74 -0
  63. package/dist/media/videoSender.js.map +1 -0
  64. package/dist/media/viewRegistry.d.ts +11 -3
  65. package/dist/media/viewRegistry.d.ts.map +1 -1
  66. package/dist/media/viewRegistry.js +35 -5
  67. package/dist/media/viewRegistry.js.map +1 -1
  68. package/dist/media/webrtcAdapter.d.ts +0 -31
  69. package/dist/media/webrtcAdapter.d.ts.map +1 -1
  70. package/dist/media/webrtcAdapter.js +10 -88
  71. package/dist/media/webrtcAdapter.js.map +1 -1
  72. package/dist/signaling/connection.d.ts +36 -0
  73. package/dist/signaling/connection.d.ts.map +1 -1
  74. package/dist/signaling/connection.js +89 -2
  75. package/dist/signaling/connection.js.map +1 -1
  76. package/dist/signaling/enums.d.ts +15 -0
  77. package/dist/signaling/enums.d.ts.map +1 -1
  78. package/dist/signaling/enums.js +17 -0
  79. package/dist/signaling/enums.js.map +1 -1
  80. package/dist/signaling/envelope.d.ts +13 -1
  81. package/dist/signaling/envelope.d.ts.map +1 -1
  82. package/dist/signaling/envelope.js +15 -3
  83. package/dist/signaling/envelope.js.map +1 -1
  84. package/dist/signaling/frames.call.d.ts +14 -0
  85. package/dist/signaling/frames.call.d.ts.map +1 -1
  86. package/dist/signaling/frames.call.js +8 -0
  87. package/dist/signaling/frames.call.js.map +1 -1
  88. package/dist/signaling/frames.room.d.ts +6 -4
  89. package/dist/signaling/frames.room.d.ts.map +1 -1
  90. package/dist/signaling/frames.room.js +10 -4
  91. package/dist/signaling/frames.room.js.map +1 -1
  92. package/dist/signaling/frames.sys.d.ts +5 -1
  93. package/dist/signaling/frames.sys.d.ts.map +1 -1
  94. package/dist/signaling/frames.sys.js +5 -1
  95. package/dist/signaling/frames.sys.js.map +1 -1
  96. package/dist/signaling/heartbeat.js +1 -1
  97. package/dist/signaling/heartbeat.js.map +1 -1
  98. package/dist/signaling/networkProbe.d.ts +31 -0
  99. package/dist/signaling/networkProbe.d.ts.map +1 -0
  100. package/dist/signaling/networkProbe.js +47 -0
  101. package/dist/signaling/networkProbe.js.map +1 -0
  102. package/dist/signaling/oneShotTimer.d.ts +30 -0
  103. package/dist/signaling/oneShotTimer.d.ts.map +1 -0
  104. package/dist/signaling/oneShotTimer.js +44 -0
  105. package/dist/signaling/oneShotTimer.js.map +1 -0
  106. package/dist/signaling/reconnector.d.ts +17 -1
  107. package/dist/signaling/reconnector.d.ts.map +1 -1
  108. package/dist/signaling/reconnector.js +48 -14
  109. package/dist/signaling/reconnector.js.map +1 -1
  110. package/dist/signaling/resumeDeadline.d.ts +1 -1
  111. package/dist/signaling/resumeDeadline.d.ts.map +1 -1
  112. package/dist/signaling/resumeDeadline.js +7 -10
  113. package/dist/signaling/resumeDeadline.js.map +1 -1
  114. package/dist/state/callMachine.d.ts +7 -0
  115. package/dist/state/callMachine.d.ts.map +1 -1
  116. package/dist/state/callMachine.js +16 -7
  117. package/dist/state/callMachine.js.map +1 -1
  118. package/dist/state/callRecv.d.ts.map +1 -1
  119. package/dist/state/callRecv.js +9 -1
  120. package/dist/state/callRecv.js.map +1 -1
  121. package/dist/state/engineMachine.d.ts.map +1 -1
  122. package/dist/state/engineMachine.js +26 -6
  123. package/dist/state/engineMachine.js.map +1 -1
  124. package/dist/state/roomMachine.d.ts +10 -2
  125. package/dist/state/roomMachine.d.ts.map +1 -1
  126. package/dist/state/roomMachine.js +87 -15
  127. package/dist/state/roomMachine.js.map +1 -1
  128. package/dist/state/roomPaging.d.ts +81 -0
  129. package/dist/state/roomPaging.d.ts.map +1 -0
  130. package/dist/state/roomPaging.js +202 -0
  131. package/dist/state/roomPaging.js.map +1 -0
  132. package/dist/state/roomRecv.d.ts.map +1 -1
  133. package/dist/state/roomRecv.js +17 -7
  134. package/dist/state/roomRecv.js.map +1 -1
  135. package/dist/state/types.d.ts +12 -0
  136. package/dist/state/types.d.ts.map +1 -1
  137. package/dist/state/types.js.map +1 -1
  138. package/dist/state/unsubscribeTimers.d.ts +29 -0
  139. package/dist/state/unsubscribeTimers.d.ts.map +1 -0
  140. package/dist/state/unsubscribeTimers.js +55 -0
  141. package/dist/state/unsubscribeTimers.js.map +1 -0
  142. package/dist/version.d.ts +1 -1
  143. package/dist/version.js +1 -1
  144. package/package.json +1 -1
package/dist/engine.js CHANGED
@@ -1,47 +1,55 @@
1
- import { byteLength } from './bytes.js';
2
- import { violatesCallOptionLimits } from './callOptions.js';
1
+ import { fetchCallHistory } from './callHistory.js';
2
+ import { emitLocallyRejectedCall, rejectsBadCallOptions, rejectsSelf } from './callGuards.js';
3
+ import { toCallRequest } from './callOptions.js';
3
4
  import { EngineBus } from './engineBus.js';
4
- import { engineConnectionHandlers, engineMediaDeps } from './engineWiring.js';
5
+ import { engineMediaDeps } from './engineWiring.js';
6
+ import { EngineSession } from './engineSession.js';
5
7
  import { ErrorCode, RtcError } from './errors.js';
6
8
  import { FrameLoop } from './frameLoop.js';
7
- import { logger } from './logger.js';
8
9
  import { checkDeviceId, checkRoomId } from './protocolId.js';
9
- import { CallEndReason } from './reasons.js';
10
- import { probeCamera, probeMicrophone, publishCamera, publishMicrophone, setMuted, setRemoteLayer, } from './media/engineMediaApi.js';
10
+ import { closeLocal, openLocal, probeCamera, probeMicrophone, publishCamera, publishMicrophone, setMuted, setRemoteLayer, } from './media/engineMediaApi.js';
11
11
  import { MediaBridge } from './media/mediaBridge.js';
12
- import { mediaEvents } from './media/mediaPlane.js';
13
12
  import { WebRTCAdapter } from './media/webrtcAdapter.js';
14
- import { createConnection } from './signaling/connectionFactory.js';
15
13
  import { FrameSender } from './signaling/frameSender.js';
16
- /** CallEngine 是宿主唯一需要接触的类型。 */
14
+ /**
15
+ * CallEngine 是宿主唯一需要接触的类型。
16
+ *
17
+ * # 方法的结果回给调用方(2.0.0)
18
+ *
19
+ * 发请求的方法(`login` / `call` / `joinCall` / `accept` / `reject` / `cancel` / `hangup` /
20
+ * `inviteMore` / `joinRoom` / `leaveRoom` / `publish*` / `open*` / `setMuted`)返回的 Promise
21
+ * **在这次调用直接发出的那一帧收到应答时 resolve**,被本地拒绝、被服务端拒绝、超时、没连接时
22
+ * **reject 一个 `RtcError`**——这个错误**不再**同时发 `error` 事件。引擎随后自动发的连锁帧
23
+ * (接听之后的进房等)失败找不到调用方,才走 `error` 事件。
24
+ *
25
+ * 通话 / 房间因此收场时 `callEnd(error)` / `roomLeft` 照发:**界面收起靠事件,catch 里只做提示**。
26
+ * 退出类(`reject` / `cancel` / `hangup` / `leaveRoom`)失败时本地照样收场,错误只供日志。
27
+ * 规则全文见 server `docs/design/ACTION_RESULT_DESIGN.md`。
28
+ */
17
29
  export class CallEngine {
18
30
  bus = new EngineBus();
19
31
  bridge;
20
32
  media;
21
- options;
33
+ session;
22
34
  sender;
23
- connection = null;
24
- /** 握手拿到的自己的 uid。用来挡「呼叫自己」,也供宿主读。 */
25
- myUid = '';
26
35
  loop;
27
- /** 最近一次 hello.ok 喂进状态机的那个 promise,`login()` 要等它。 */
28
- helloApplied = Promise.resolve();
29
36
  /** 终态销毁标记。见 {@link destroy}。 */
30
37
  destroyed = false;
31
38
  constructor(options) {
32
39
  // 与 Android 的 `Config.init` 对齐:构造时就拦,不等宿主取完票走到 login()。
33
40
  checkDeviceId(options.deviceId);
34
- this.options = options;
35
41
  this.media = options.media ?? new WebRTCAdapter(undefined, options.videoProfile);
36
42
  this.bridge = new MediaBridge(this.media);
43
+ this.session = new EngineSession(options, this.bridge, () => this.wiring());
37
44
  this.sender = new FrameSender(this.media);
38
45
  this.loop = new FrameLoop({
39
46
  bus: this.bus,
40
47
  bridge: this.bridge,
41
48
  media: this.media,
42
49
  sender: this.sender,
43
- connection: () => this.connection,
50
+ connection: () => this.session.connection,
44
51
  mediaDeps: () => engineMediaDeps(this.wiring()),
52
+ selfUid: () => this.session.uid,
45
53
  });
46
54
  }
47
55
  /** on 订阅事件,返回退订函数。事件表见 events.ts(= 设计文档 §7.5)。 */
@@ -50,7 +58,7 @@ export class CallEngine {
50
58
  }
51
59
  /** uid 是当前登录的用户。未登录时是空串。 */
52
60
  get uid() {
53
- return this.myUid;
61
+ return this.session.uid;
54
62
  }
55
63
  /** state 返回当前的通话与房间状态,供 UI 渲染。 */
56
64
  get state() {
@@ -79,40 +87,7 @@ export class CallEngine {
79
87
  */
80
88
  async login(token) {
81
89
  this.assertNotDestroyed();
82
- if (this.connection !== null) {
83
- throw new RtcError(ErrorCode.invalidState, {
84
- cause: new Error('已经登录了:换账号或换票请先 logout()'),
85
- });
86
- }
87
- const connection = createConnection({
88
- url: this.options.url,
89
- token,
90
- deviceId: this.options.deviceId,
91
- ...(this.options.webSocketFactory === undefined
92
- ? {}
93
- : { webSocketFactory: this.options.webSocketFactory }),
94
- }, engineConnectionHandlers(this.wiring(), (applied) => {
95
- this.helloApplied = applied;
96
- }));
97
- this.connection = connection;
98
- this.bridge.open(mediaEvents(engineMediaDeps(this.wiring())));
99
- let hello;
100
- try {
101
- hello = await connection.connect();
102
- }
103
- catch (err) {
104
- // 收摊:不收的话上面那道「已经登录了」的门会把重试也挡掉。
105
- connection.close();
106
- this.bridge.close();
107
- if (this.connection === connection)
108
- this.connection = null;
109
- throw err;
110
- }
111
- this.myUid = hello.uid;
112
- // 首次登录要等状态机吃完 hello.ok 再返回:宿主拿到 login 的返回值时,
113
- // engine 的状态应该已经是最终的了。(重连那些不需要等——没人在 await 它们。)
114
- await this.helloApplied;
115
- return hello;
90
+ return this.session.open(token);
116
91
  }
117
92
  /**
118
93
  * updateToken 换一枚新的接入票。**下一次重连时生效,不打断当前连接。**
@@ -132,12 +107,37 @@ export class CallEngine {
132
107
  * 连上着的时候调它也是安全的(比如票快过期了提前换)——当前连接不受影响。
133
108
  */
134
109
  updateToken(token, expiresAtMs) {
135
- this.connection?.updateToken(token, expiresAtMs);
110
+ this.session.updateToken(token, expiresAtMs);
111
+ }
112
+ /**
113
+ * fetchCallHistory 查自己的通话记录,按发起时间倒序,**游标翻页**。
114
+ *
115
+ * **必须已登录**(用登录那枚票),否则 reject `2007`;票被拒 `1101`;网络不通 `2003`。
116
+ * 返回的 `nextCursor` 为 `null` 表示已到底,否则传给下一次的 `cursor`。
117
+ * 服务端只返回本人参与过的通话,所以没有 `uid` 参数。宿主也可以不用它,自己拿 `callEnd` 存。
118
+ */
119
+ async fetchCallHistory(options) {
120
+ this.assertNotDestroyed();
121
+ const rest = this.session.rest;
122
+ if (rest === null) {
123
+ throw new RtcError(ErrorCode.notLoggedIn, { cause: new Error('fetchCallHistory:请先 login') });
124
+ }
125
+ return fetchCallHistory(rest.url, rest.token, options);
126
+ }
127
+ /**
128
+ * setAppForeground / notifyNetworkChanged:告诉 engine 页面回到前台、网络变了——断线后**不再按退避白等**
129
+ * (正等着重连的立刻连、连着的探 3 秒)。**浏览器里不用调**:登录后 engine 自己听 `visibilitychange` /
130
+ * `online` / `navigator.connection`(`browserSignals.ts`)。给 WebView 宿主等拿得到原生信号的场景用。提示类,销毁后空操作。
131
+ */
132
+ setAppForeground(foreground) {
133
+ this.session.setAppForeground(foreground);
134
+ }
135
+ notifyNetworkChanged() {
136
+ this.session.notifyNetworkChanged();
136
137
  }
137
138
  /** logout 关掉连接与媒体。 */
138
139
  logout() {
139
- this.connection?.close();
140
- this.connection = null;
140
+ this.session.close();
141
141
  this.bridge.close();
142
142
  this.loop.reset();
143
143
  }
@@ -148,15 +148,16 @@ export class CallEngine {
148
148
  * # 之后再调别的方法
149
149
  *
150
150
  * 会发起动作的方法(`login` / `call` / `accept` / … / `publishMicrophone` / `openCamera` 等,
151
- * 经 {@link act} 或 {@link mediaApi} 转发的那一批)一律**抛 `2005 invalid_state`**,
151
+ * 经 {@link act} 或 {@link mediaApi} 转发的那一批)一律**reject `2005 invalid_state`**,
152
152
  * 不是静默空操作:事件订阅已经清空,静默的话宿主的 `hangup()` 之类调用会石沉大海——
153
153
  * 不抛错也不会有任何事件把原因告诉它,界面只会永远停在转圈。与 `login()` 拦
154
154
  * 「已经登录了」同一个理由:让宿主一调就知道错在哪,不用猜。
155
155
  *
156
- * `logout()` / `forceEnd()` / `on()` / `uid` / `state`,以及读或清理类的方法
157
- * (`attachView` 传 `null`、`attachLocalView` 传 `null`、`localTrack`、`stopLocalPreview`、
158
- * `updateToken`)**不受影响**,销毁后调用仍然安全——宿主卸载时经常无脑清理这几个,
159
- * 不该因为清理顺序先后而报错。
156
+ * `logout()` / `forceEnd()` / `on()` / `uid` / `state`,以及读、清理、提示类的方法
157
+ * (`attachView` / `attachLocalView`、`localTrack`、`stopLocalPreview`、`closeMicrophone` /
158
+ * `closeCamera`、`updateToken`、`setAppForeground` / `notifyNetworkChanged`、`setRemoteLayer`)**不受影响**,销毁后调用仍然安全——宿主卸载时经常无脑清理这几个,
159
+ * 不该因为清理顺序先后而报错。逐个方法的归类由 `test/destroyContract.test.ts` 钉住,
160
+ * 新增公开方法不归类那张表就红;与 iOS / Android 的对照见 server `docs/CLIENT_PARITY.md`。
160
161
  */
161
162
  destroy() {
162
163
  if (this.destroyed)
@@ -174,82 +175,74 @@ export class CallEngine {
174
175
  }
175
176
  }
176
177
  /**
177
- * act 是「发一个业务动作、等状态机处理完」的公共外壳:`call` / `accept` / `reject` / `cancel` /
178
+ * act 是「发一个业务动作、等这次调用的结果」的公共外壳:`call` / `accept` / `reject` / `cancel` /
178
179
  * `hangup` / `inviteMore` / `joinCall` / `joinRoom` / `leaveRoom` 共用,唯一的区别只是
179
180
  * op 名与参数。抽出来顺带把 {@link assertNotDestroyed} 的检查收在一处。
181
+ * 结算规则见 `FrameLoop.request`。
180
182
  */
181
183
  async act(op, args) {
182
184
  this.assertNotDestroyed();
183
- await this.loop.dispatch(args === undefined ? { kind: 'act', op } : { kind: 'act', op, args });
185
+ return this.loop.request(args === undefined ? { kind: 'act', op } : { kind: 'act', op, args });
184
186
  }
185
187
  /**
186
- * call 发起通话。**名单里不能有自己**,见 {@link rejectsSelf}。
188
+ * call 发起通话,**resolve 服务端分配的 `callId`**(取自 `call.invite.ok`)。
189
+ * **名单里不能有自己**,见 `callGuards.ts` 的 `rejectsSelf`。
187
190
  *
188
191
  * `options` 传布尔值等同旧的 `isGroup` 参数(三参数签名保持兼容);传 {@link CallOptions}
189
192
  * 可以带上群号 / user_data / 振铃超时(HOST_INTEGRATION_DESIGN §3.3)。
193
+ * 群号 / user_data 超限同样本地拒掉(reject `1004`),见 `callGuards.ts`。
194
+ *
195
+ * 被拒(本地 `1004` / 服务端拒绝 / 超时)时 reject,**并且照发一次 `callEnd(error)`**——
196
+ * 界面在调用之前就切到了「正在呼叫…」,收起它靠那个事件。
197
+ *
198
+ * 这两道本地关卡**只在 `idle` 时**抢在状态机前面拦:`callEnd(error)` 假定界面刚乐观地进了
199
+ * 「正在呼叫…」。不是 `idle`(这通 `call()` 其实是在另一通电话进行中时误调的,比如名单里
200
+ * 误含自己)时抢先 reject 只会给**正在进行的**那通电话发一条假的 `callEnd`,把它错杀——
201
+ * 让状态机去拒,按 §5.1 正常收成 `2005`,不碰当前那通。
190
202
  */
191
203
  async call(calleeIds, mediaType, options) {
192
204
  this.assertNotDestroyed();
193
- const opts = typeof options === 'boolean' ? { isGroup: options } : (options ?? {});
194
- const isGroup = opts.isGroup ?? false;
195
- const chatGroupId = opts.chatGroupId ?? '';
196
- const userData = opts.userData ?? '';
197
- if (this.rejectsSelf(calleeIds, '呼叫') || this.rejectsBadCallOptions(chatGroupId, userData)) {
198
- /*
199
- **本地拒掉也要给界面一个出口。**
200
-
201
- 调用方(uikit / 宿主)在调 `call()` 之前就已经切到「正在呼叫…」了——
202
- 这是对的,不然按下去几百毫秒没反应。但只抛一个 error 事件,
203
- 界面不知道该退回哪儿:实测三人测试里 carol 卡在「正在呼叫…」,
204
- 连点五次挂断收到五个 2005(状态机是 idle,没有 call 可挂),
205
- 除了刷新页面没有别的出路。
206
-
207
- `callEnd` 是所有结束分支的唯一出口(设计 §7.5),
208
- 这一条与「服务端拒了 invite」(call_failed)走同一个出口,界面只认它。
209
- chatGroupId / userData 超限走同一个出口——不上线路,理由同上。
210
- */
211
- this.bus.emit('callEnd', {
212
- callId: '',
213
- reason: CallEndReason.error,
214
- durationSec: 0,
215
- endedBy: '',
216
- });
217
- return;
205
+ const req = toCallRequest(calleeIds, mediaType, options);
206
+ const rejected = this.state.call.state === 'idle'
207
+ ? (rejectsSelf(this.session.uid, calleeIds, '呼叫', 'call.invite') ??
208
+ rejectsBadCallOptions(req.chatGroupId, req.userData))
209
+ : null;
210
+ if (rejected !== null) {
211
+ // 本地拒掉也要给界面一个出口,理由见 emitLocallyRejectedCall。
212
+ emitLocallyRejectedCall(this.bus);
213
+ throw rejected;
218
214
  }
219
- const args = { callee_ids: calleeIds, media_type: mediaType, is_group: isGroup };
220
- // 省略表达「没传」,见 callMachine.ts startCall 的同一条注释。
221
- if (chatGroupId !== '')
222
- args['chat_group_id'] = chatGroupId;
223
- if (userData !== '')
224
- args['user_data'] = userData;
225
- if (opts.timeoutSec !== undefined)
226
- args['timeout_sec'] = opts.timeoutSec;
227
- await this.act('call', args);
215
+ const reply = await this.act('call', req.args);
216
+ const callId = reply['call_id'];
217
+ return typeof callId === 'string' ? callId : '';
228
218
  }
229
219
  /**
230
220
  * joinCall 是「群成员看到『进行中』主动加入」(协议 §4.1 `call.join`)。
231
221
  *
232
222
  * **「怎么知道有通话在进行中」不是 engine 的事**——宿主拿 webhook `call.started`
233
223
  * 或后台 `GET /v1/calls?chat_group_id=...&active=1` 自己判断、自己摆横幅。
234
- * 服务端拒绝(不存在 / 已结束 / 满员 / 本人已在通话中 / 宿主邀请鉴权回调拒绝 1409)
235
- * 时与 `call()` 被拒同一个出口:`onError` + `onCallEnd(error)`。
224
+ * **resolve = 服务端受理了(`call.join.ok`)**,接通事件随后到。服务端拒绝(`1401` 不存在 /
225
+ * `1402` 已结束 / `1202` 满员 / `1408` 本人已在通话中 / `1409` 宿主邀请鉴权回调拒绝)时 reject 那个码,
226
+ * 同时照发 `callEnd(error)`(状态机已经进了 `accepting`,界面收起靠它)。
236
227
  */
237
228
  async joinCall(callId) {
238
229
  await this.act('join_call', { call_id: callId });
239
230
  }
240
231
  /** accept 接听。 */
241
232
  async accept() {
233
+ // 接听是一次用户手势,顺手把远端音频的自动播放解锁(见 RemoteAudioPlayer.unlock)。
234
+ this.bridge.unlockRemoteAudio();
242
235
  await this.act('accept');
243
236
  }
244
- /** reject 拒接。 */
237
+ /** reject 拒接。失败(通话已结束等)时本地照样收场,错误只供日志。 */
245
238
  async reject() {
246
239
  await this.act('reject');
247
240
  }
248
- /** cancel 取消呼出(**仅接通前**;接通后用 hangup)。 */
241
+ /** cancel 取消呼出(**仅接通前**;接通后用 hangup)。失败时本地照样收场,错误只供日志。 */
249
242
  async cancel() {
250
243
  await this.act('cancel');
251
244
  }
252
- /** hangup 挂断(接通后,主被叫都用它)。 */
245
+ /** hangup 挂断(接通后,主被叫都用它)。失败时本地照样收场(`callEnd` 照发),错误只供日志。 */
253
246
  async hangup() {
254
247
  await this.act('hangup');
255
248
  }
@@ -276,21 +269,23 @@ export class CallEngine {
276
269
  }
277
270
  /**
278
271
  * inviteMore 往进行中的群通话里再拉人(协议 §4.1 `call.invite_more`)。
279
- * 名单里同样不能有自己,见 {@link rejectsSelf}。
272
+ * 名单里同样不能有自己,见 `callGuards.ts` 的 `rejectsSelf`。
280
273
  *
281
274
  * **通话里的任何人都能发**(2026-09-15 起,原先仅主叫);还在响铃 / 已离场的人发会被服务端拒成
282
275
  * `1407 not_call_owner`(交互稿 §05)。房间满了回 `1202 room_full`;离场的发起人也能被重新邀请。
276
+ * 这些都 reject 给调用方,通话本身不受影响。
283
277
  */
284
278
  async inviteMore(calleeIds) {
285
279
  this.assertNotDestroyed();
286
- if (this.rejectsSelf(calleeIds, '加人'))
287
- return;
280
+ const rejected = rejectsSelf(this.session.uid, calleeIds, '加人', 'call.invite_more');
281
+ if (rejected !== null)
282
+ throw rejected;
288
283
  await this.act('invite_more', { callee_ids: calleeIds });
289
284
  }
290
285
  /**
291
286
  * probeMicrophone 在拨出 / 接听**之前**探一下麦克风权限(交互稿 §01)。
292
287
  *
293
- * 拿到就放掉,不占设备;被拒抛 `2001`、没设备抛 `2002`。
288
+ * 拿到就放掉,不占设备;被拒 reject `2001`、没设备 reject `2002`(不发 `error` 事件)。
294
289
  */
295
290
  async probeMicrophone() {
296
291
  await probeMicrophone(this.mediaApi());
@@ -304,14 +299,25 @@ export class CallEngine {
304
299
  async probeCamera() {
305
300
  await probeCamera(this.mediaApi());
306
301
  }
307
- /** joinRoom 直接进一个会议房(不走振铃)。 */
308
- async joinRoom(roomId, roomToken, autoSubscribe = true) {
302
+ /**
303
+ * joinRoom 直接进一个会议房(不走振铃)。
304
+ *
305
+ * `autoSubscribe` 是服务端替你自动订多少(协议 §3.1,2.0.0 起是三档):
306
+ * - `'all'`(默认)音视频全自动订上,通话房与小会议用它;
307
+ * - `'audio'` **会议分页画廊用这一档**:音频照旧自动订上(页外的人说话也听得见),
308
+ * 视频一条都不自动订,由 `setRemoteLayer(uid, layer)` 按当前页订与退
309
+ * (`none` = 五秒后退订,见 MEETING_ROOM_DESIGN §4.3);
310
+ * - `'none'` 一条都不自动订,全部由宿主自己订。
311
+ */
312
+ async joinRoom(roomId, roomToken, autoSubscribe = 'all') {
309
313
  this.assertNotDestroyed();
310
314
  // 宿主指定的房间号同属 §2.5,不拦的话又是一条「1004 但不说为什么」。
311
315
  checkRoomId(roomId);
316
+ // 「加入会议」也是一次用户手势,同 accept。
317
+ this.bridge.unlockRemoteAudio();
312
318
  await this.act('join', { room_id: roomId, room_token: roomToken, auto_subscribe: autoSubscribe });
313
319
  }
314
- /** leaveRoom 离房。 */
320
+ /** leaveRoom 离房。失败时本地照样收场(`roomLeft` 照发),错误只供日志。 */
315
321
  async leaveRoom() {
316
322
  await this.act('leave');
317
323
  }
@@ -322,30 +328,23 @@ export class CallEngine {
322
328
  /**
323
329
  * openMicrophone 是麦克风开关的**按类型**便捷接口(与腾讯 TUICallEngine 同名)。
324
330
  *
325
- * 这条轨道还没发布过就发布(等价 `publishMicrophone()`);已经发布了就取消静音,
326
- * **不会重新发布**——重复发布同一路麦克风会在 pub PC 上多挂一条 sender。
327
- *
328
- * 「发没发布过」问的是**媒体适配器自己的账**(`media.publishedMicrophoneCid()`),
329
- * 不在门面另开一份:宿主先直接调 `publishMicrophone()` 发布过、再调这个方法的话,
330
- * 门面自己那份账不知道已经发布过,会误判成「没发布」再发一次(2026-09-15 iOS 踩过)。
331
+ * 还没发布过就发布(等价 `publishMicrophone()`);已经发布了就取消静音,**不会重新发布**。
332
+ * 「发布过没有」问媒体适配器自己的账,与先调过 `publishMicrophone()` 混用也不会发两次。
331
333
  * `publishMicrophone()` / `setMuted(cid)` 仍然保留,给需要自己管 cid 的宿主用。
332
334
  */
333
335
  async openMicrophone() {
334
- const cid = this.media.publishedMicrophoneCid();
335
- if (cid !== null) {
336
- await this.setMuted(cid, false);
337
- return;
338
- }
339
- await this.publishMicrophone();
336
+ await openLocal(this.mediaApi(), 'microphone');
340
337
  }
341
338
  /**
342
339
  * closeMicrophone 关麦克风:对已发布的那条轨道 `setMuted(cid, true)`——**不 unpublish**,
343
- * 协商保留。没发布过是空操作。
340
+ * 协商保留。没发布过、或 engine 已销毁,是空操作(清理类,见 {@link destroy})。
341
+ *
342
+ * **永不 reject**:本端立即静音;`room.mute` 帧被拒不回滚本端(隐私优先),错误走 `error` 事件。
344
343
  */
345
344
  async closeMicrophone() {
346
- const cid = this.media.publishedMicrophoneCid();
347
- if (cid !== null)
348
- await this.setMuted(cid, true);
345
+ if (this.destroyed)
346
+ return;
347
+ await closeLocal(this.mediaApi(), 'microphone');
349
348
  }
350
349
  /**
351
350
  * startLocalPreview 只起本端采集,**不发布**(设计文档 §7.5,四端同名)。
@@ -374,26 +373,21 @@ export class CallEngine {
374
373
  return publishCamera(this.mediaApi(), simulcast);
375
374
  }
376
375
  /**
377
- * openCamera 是摄像头开关的**按类型**便捷接口。还没发布就发布(有本端预览时复用它,
378
- * 同 `publishCamera()` 现有逻辑);已发布就取消静音——通话中开关摄像头走的是
379
- * `setMuted` 既有的「关停采集、开重新采集换 sender」语义,不重新协商。
380
- *
381
- * 「发没发布过」同样问媒体适配器自己的账(`media.publishedCameraCid()`),
382
- * 理由见 {@link openMicrophone}。
376
+ * openCamera 是摄像头开关的**按类型**便捷接口。还没发布就发布(有本端预览时复用它);
377
+ * 已发布就取消静音——走 `setMuted` 的「关停采集、开重新采集换 sender」语义,不重新协商。
378
+ * 不会重复发布,理由同 {@link openMicrophone}。
383
379
  */
384
380
  async openCamera() {
385
- const cid = this.media.publishedCameraCid();
386
- if (cid !== null) {
387
- await this.setMuted(cid, false);
388
- return;
389
- }
390
- await this.publishCamera();
381
+ await openLocal(this.mediaApi(), 'camera');
391
382
  }
392
- /** closeCamera 关摄像头:`setMuted(cid, true)`(停采集,指示灯灭;不 unpublish)。没发布过是空操作。 */
383
+ /**
384
+ * closeCamera 关摄像头:`setMuted(cid, true)`(停采集,指示灯灭;不 unpublish)。
385
+ * 没发布过、或 engine 已销毁,是空操作。永不 reject,理由同 {@link closeMicrophone}。
386
+ */
393
387
  async closeCamera() {
394
- const cid = this.media.publishedCameraCid();
395
- if (cid !== null)
396
- await this.setMuted(cid, true);
388
+ if (this.destroyed)
389
+ return;
390
+ await closeLocal(this.mediaApi(), 'camera');
397
391
  }
398
392
  /**
399
393
  * setMuted 开关本端某条轨道。**不是 unpublish**,协商保留。
@@ -402,7 +396,6 @@ export class CallEngine {
402
396
  */
403
397
  async setMuted(cid, muted) {
404
398
  await setMuted(this.mediaApi(), cid, muted);
405
- this.bridge.refreshLocalViews();
406
399
  }
407
400
  /** localTrack 取本端轨道做预览。 */
408
401
  localTrack(cid) {
@@ -426,49 +419,19 @@ export class CallEngine {
426
419
  *
427
420
  * 九宫格缩略图报 `l`、双击放大报 `h`。**不触发重协商**,也不保证立刻切——
428
421
  * 服务端要等目标层的关键帧,还会再按带宽估计压一次。
422
+ *
423
+ * 提示类:**永不 reject**,失败走 `error` 事件;engine 已销毁时是空操作。
429
424
  */
430
425
  async setRemoteLayer(uid, layer) {
426
+ if (this.destroyed)
427
+ return;
431
428
  await setRemoteLayer(this.mediaApi(), uid, layer);
432
429
  }
433
430
  // ── 内部 ──────────────────────────────────────────────
434
- /**
435
- * rejectsSelf 挡住「名单里有自己」,就地报错并返回 true。
436
- *
437
- * 服务端会以 `1004 bad_params` 拒掉("callee_ids 不能含主叫自己"),但那条链路上的
438
- * 失败很难看懂:界面已经乐观地进了「正在呼叫…」,而错误只是一条没头没尾的 1004。
439
- * (实测撞过:Demo 的群呼默认名单里正好有登录的那个人。)
440
- *
441
- * **一份实现供 call 与 inviteMore 共用**——两处各写一遍的话,改了一处忘了另一处,
442
- * 就又是一个「同一条规则在一处成立、另一处不成立」。
443
- */
444
- rejectsSelf(calleeIds, what) {
445
- if (this.myUid === '' || !calleeIds.includes(this.myUid))
446
- return false;
447
- logger.warn(`${what}名单里含自己,已就地拒掉`, { uid: this.myUid });
448
- this.bus.emitError(new RtcError(ErrorCode.badParams));
449
- return true;
450
- }
451
- /**
452
- * rejectsBadCallOptions 挡住超限的 `chatGroupId` / `userData`,就地报错并返回 true。
453
- *
454
- * 服务端会以 `1004 bad_params` 拒掉,但那条链路上主叫已经乐观地进了「正在呼叫…」,
455
- * 错误只是一条没头没尾的 1004——与 {@link rejectsSelf} 同一个理由,本地先拦,
456
- * 走同一个出口(HOST_INTEGRATION_DESIGN §3.3)。判断本身在 `callOptions.ts`
457
- * (纯函数,直接单测);这里只管日志与出口这两件带副作用的事。
458
- */
459
- rejectsBadCallOptions(chatGroupId, userData) {
460
- if (!violatesCallOptionLimits(chatGroupId, userData))
461
- return false;
462
- logger.warn('chatGroupId / userData 超限,已就地拒掉', {
463
- chatGroupId, userDataBytes: byteLength(userData),
464
- });
465
- this.bus.emitError(new RtcError(ErrorCode.badParams));
466
- return true;
467
- }
468
431
  /** mediaApi 是交给 media/engineMediaApi 那几个编排函数的一把依赖。 */
469
432
  mediaApi() {
470
433
  this.assertNotDestroyed();
471
- return { media: this.media, loop: this.loop, bus: this.bus };
434
+ return { media: this.media, loop: this.loop, bus: this.bus, bridge: this.bridge };
472
435
  }
473
436
  /**
474
437
  * wiring 是交给 engineWiring 那两个装配函数的一把依赖。
@@ -482,7 +445,7 @@ export class CallEngine {
482
445
  bridge: this.bridge,
483
446
  sender: this.sender,
484
447
  loop: this.loop,
485
- connection: () => this.connection,
448
+ connection: () => this.session.connection,
486
449
  };
487
450
  }
488
451
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engineBus.d.ts","sourceRoot":"","sources":["../src/engineBus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuBrD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IAEtC,sBAAsB;IACtB,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIlF,4BAA4B;IAC5B,IAAI,CAAC,CAAC,SAAS,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAMxE,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAmBtC,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAS7B,gEAAgE;IAChE,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"engineBus.d.ts","sourceRoot":"","sources":["../src/engineBus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAuBrD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IAEtC,sBAAsB;IACtB,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIlF,4BAA4B;IAC5B,IAAI,CAAC,CAAC,SAAS,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAMxE,0DAA0D;IAC1D,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAmBtC,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAU7B,gEAAgE;IAChE,KAAK,IAAI,IAAI;CAGd"}
package/dist/engineBus.js CHANGED
@@ -63,6 +63,7 @@ export class EngineBus {
63
63
  code: error.code,
64
64
  name: errorName(error.code),
65
65
  message: error.message,
66
+ forType: error.forType,
66
67
  });
67
68
  }
68
69
  /** clear 清空全部订阅。给 `CallEngine.destroy()` 用——终态销毁,之后不会再抛任何事件。 */
@@ -1 +1 @@
1
- {"version":3,"file":"engineBus.js","sourceRoot":"","sources":["../src/engineBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,eAAe,GAAiC,IAAI,GAAG,CAAC;IAC5D,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,OAAO,SAAS;IACH,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAEtC,sBAAsB;IACtB,EAAE,CAA4B,IAAO,EAAE,OAA8B;QACnE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAA4B,IAAO,EAAE,OAAwB;QAC/D,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;YAC3E,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,0DAA0D;IAC1D,WAAW,CAAC,KAAmB;QAC7B,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC;;;;UAIE;QACF,IAAI,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAa,CAAC,CAAC;IACjC,CAAC;IAED,mCAAmC;IACnC,SAAS,CAAC,GAAY;QACpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,OAAgB;IAChC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/D,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,GAAG,CAAC;YACN,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"engineBus.js","sourceRoot":"","sources":["../src/engineBus.ts"],"names":[],"mappings":"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"}