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.
- package/dist/browserSignals.d.ts +27 -0
- package/dist/browserSignals.d.ts.map +1 -0
- package/dist/browserSignals.js +34 -0
- package/dist/browserSignals.js.map +1 -0
- package/dist/callGuards.d.ts +35 -0
- package/dist/callGuards.d.ts.map +1 -0
- package/dist/callGuards.js +66 -0
- package/dist/callGuards.js.map +1 -0
- package/dist/callHistory.d.ts +50 -0
- package/dist/callHistory.d.ts.map +1 -0
- package/dist/callHistory.js +100 -0
- package/dist/callHistory.js.map +1 -0
- package/dist/callOptions.d.ts +14 -0
- package/dist/callOptions.d.ts.map +1 -1
- package/dist/callOptions.js +21 -0
- package/dist/callOptions.js.map +1 -1
- package/dist/debugToken.d.ts +29 -0
- package/dist/debugToken.d.ts.map +1 -0
- package/dist/debugToken.js +73 -0
- package/dist/debugToken.js.map +1 -0
- package/dist/engine.d.ts +88 -60
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +141 -178
- package/dist/engine.js.map +1 -1
- package/dist/engineBus.d.ts.map +1 -1
- package/dist/engineBus.js +1 -0
- package/dist/engineBus.js.map +1 -1
- package/dist/engineSession.d.ts +49 -0
- package/dist/engineSession.d.ts.map +1 -0
- package/dist/engineSession.js +97 -0
- package/dist/engineSession.js.map +1 -0
- package/dist/events.d.ts +48 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -1
- package/dist/frameLoop.d.ts +48 -5
- package/dist/frameLoop.d.ts.map +1 -1
- package/dist/frameLoop.js +205 -29
- package/dist/frameLoop.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/media/captureStream.d.ts +9 -0
- package/dist/media/captureStream.d.ts.map +1 -0
- package/dist/media/captureStream.js +20 -0
- package/dist/media/captureStream.js.map +1 -0
- package/dist/media/engineMediaApi.d.ts +24 -3
- package/dist/media/engineMediaApi.d.ts.map +1 -1
- package/dist/media/engineMediaApi.js +63 -27
- package/dist/media/engineMediaApi.js.map +1 -1
- package/dist/media/mediaBridge.d.ts +6 -1
- package/dist/media/mediaBridge.d.ts.map +1 -1
- package/dist/media/mediaBridge.js +18 -1
- package/dist/media/mediaBridge.js.map +1 -1
- package/dist/media/remoteAudio.d.ts +65 -0
- package/dist/media/remoteAudio.d.ts.map +1 -0
- package/dist/media/remoteAudio.js +83 -0
- package/dist/media/remoteAudio.js.map +1 -0
- package/dist/media/videoSender.d.ts +21 -0
- package/dist/media/videoSender.d.ts.map +1 -0
- package/dist/media/videoSender.js +74 -0
- package/dist/media/videoSender.js.map +1 -0
- package/dist/media/viewRegistry.d.ts +11 -3
- package/dist/media/viewRegistry.d.ts.map +1 -1
- package/dist/media/viewRegistry.js +35 -5
- package/dist/media/viewRegistry.js.map +1 -1
- package/dist/media/webrtcAdapter.d.ts +0 -31
- package/dist/media/webrtcAdapter.d.ts.map +1 -1
- package/dist/media/webrtcAdapter.js +10 -88
- package/dist/media/webrtcAdapter.js.map +1 -1
- package/dist/signaling/connection.d.ts +36 -0
- package/dist/signaling/connection.d.ts.map +1 -1
- package/dist/signaling/connection.js +89 -2
- package/dist/signaling/connection.js.map +1 -1
- package/dist/signaling/enums.d.ts +15 -0
- package/dist/signaling/enums.d.ts.map +1 -1
- package/dist/signaling/enums.js +17 -0
- package/dist/signaling/enums.js.map +1 -1
- package/dist/signaling/envelope.d.ts +13 -1
- package/dist/signaling/envelope.d.ts.map +1 -1
- package/dist/signaling/envelope.js +15 -3
- package/dist/signaling/envelope.js.map +1 -1
- package/dist/signaling/frames.call.d.ts +14 -0
- package/dist/signaling/frames.call.d.ts.map +1 -1
- package/dist/signaling/frames.call.js +8 -0
- package/dist/signaling/frames.call.js.map +1 -1
- package/dist/signaling/frames.room.d.ts +6 -4
- package/dist/signaling/frames.room.d.ts.map +1 -1
- package/dist/signaling/frames.room.js +10 -4
- package/dist/signaling/frames.room.js.map +1 -1
- package/dist/signaling/frames.sys.d.ts +5 -1
- package/dist/signaling/frames.sys.d.ts.map +1 -1
- package/dist/signaling/frames.sys.js +5 -1
- package/dist/signaling/frames.sys.js.map +1 -1
- package/dist/signaling/heartbeat.js +1 -1
- package/dist/signaling/heartbeat.js.map +1 -1
- package/dist/signaling/networkProbe.d.ts +31 -0
- package/dist/signaling/networkProbe.d.ts.map +1 -0
- package/dist/signaling/networkProbe.js +47 -0
- package/dist/signaling/networkProbe.js.map +1 -0
- package/dist/signaling/oneShotTimer.d.ts +30 -0
- package/dist/signaling/oneShotTimer.d.ts.map +1 -0
- package/dist/signaling/oneShotTimer.js +44 -0
- package/dist/signaling/oneShotTimer.js.map +1 -0
- package/dist/signaling/reconnector.d.ts +17 -1
- package/dist/signaling/reconnector.d.ts.map +1 -1
- package/dist/signaling/reconnector.js +48 -14
- package/dist/signaling/reconnector.js.map +1 -1
- package/dist/signaling/resumeDeadline.d.ts +1 -1
- package/dist/signaling/resumeDeadline.d.ts.map +1 -1
- package/dist/signaling/resumeDeadline.js +7 -10
- package/dist/signaling/resumeDeadline.js.map +1 -1
- package/dist/state/callMachine.d.ts +7 -0
- package/dist/state/callMachine.d.ts.map +1 -1
- package/dist/state/callMachine.js +16 -7
- package/dist/state/callMachine.js.map +1 -1
- package/dist/state/callRecv.d.ts.map +1 -1
- package/dist/state/callRecv.js +9 -1
- package/dist/state/callRecv.js.map +1 -1
- package/dist/state/engineMachine.d.ts.map +1 -1
- package/dist/state/engineMachine.js +26 -6
- package/dist/state/engineMachine.js.map +1 -1
- package/dist/state/roomMachine.d.ts +10 -2
- package/dist/state/roomMachine.d.ts.map +1 -1
- package/dist/state/roomMachine.js +87 -15
- package/dist/state/roomMachine.js.map +1 -1
- package/dist/state/roomPaging.d.ts +81 -0
- package/dist/state/roomPaging.d.ts.map +1 -0
- package/dist/state/roomPaging.js +202 -0
- package/dist/state/roomPaging.js.map +1 -0
- package/dist/state/roomRecv.d.ts.map +1 -1
- package/dist/state/roomRecv.js +17 -7
- package/dist/state/roomRecv.js.map +1 -1
- package/dist/state/types.d.ts +12 -0
- package/dist/state/types.d.ts.map +1 -1
- package/dist/state/types.js.map +1 -1
- package/dist/state/unsubscribeTimers.d.ts +29 -0
- package/dist/state/unsubscribeTimers.d.ts.map +1 -0
- package/dist/state/unsubscribeTimers.js +55 -0
- package/dist/state/unsubscribeTimers.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { EngineWiring } from './engineWiring.js';
|
|
2
|
+
import type { MediaBridge } from './media/mediaBridge.js';
|
|
3
|
+
import type { Connection, HelloOk } from './signaling/connection.js';
|
|
4
|
+
import type { WebSocketFactory } from './signaling/webSocket.js';
|
|
5
|
+
/** SessionOptions 是建连要用的那几项,取自 `EngineOptions`。 */
|
|
6
|
+
export interface SessionOptions {
|
|
7
|
+
readonly url: string;
|
|
8
|
+
readonly deviceId: string;
|
|
9
|
+
readonly webSocketFactory?: WebSocketFactory;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* EngineSession 管「当前这条信令连接」:建连握手、换票、关连接,以及握手拿到的 uid。
|
|
13
|
+
*
|
|
14
|
+
* 从 `CallEngine` 里单拎出来:`login` / `updateToken` / `logout` 的**公开签名与文档**留在门面上
|
|
15
|
+
* (那是宿主读的东西),搬过来的是它们背后的三份状态与收摊逻辑——门面自己不再持有连接。
|
|
16
|
+
* 「为什么重复 login 要拒」「失败为什么要收摊」这些理由写在 `CallEngine.login` 上,这里不重复。
|
|
17
|
+
*/
|
|
18
|
+
export declare class EngineSession {
|
|
19
|
+
private readonly options;
|
|
20
|
+
private readonly bridge;
|
|
21
|
+
private readonly wiring;
|
|
22
|
+
private conn;
|
|
23
|
+
/** 当前在用的接入票(含 `updateToken` 换过的)。没登录为空串;给同一身份的 REST 调用用。 */
|
|
24
|
+
private ticket;
|
|
25
|
+
/** 握手拿到的自己的 uid。用来挡「呼叫自己」,也供宿主读。登出不清。 */
|
|
26
|
+
private myUid;
|
|
27
|
+
/** 最近一次 hello.ok 喂进状态机的那个 promise,`open()` 要等它。 */
|
|
28
|
+
private helloApplied;
|
|
29
|
+
/** 摘掉浏览器前后台 / 网络事件的监听(见 `browserSignals.ts`)。登录挂、登出摘。 */
|
|
30
|
+
private unwatch;
|
|
31
|
+
/** `wiring` 取成函数:门面的接线里要回读本会话的 `connection`,构造时还拿不到。 */
|
|
32
|
+
constructor(options: SessionOptions, bridge: MediaBridge, wiring: () => EngineWiring);
|
|
33
|
+
/** 当前连接。会随登录 / 登出换对象,别存下来。 */
|
|
34
|
+
get connection(): Connection | null;
|
|
35
|
+
get uid(): string;
|
|
36
|
+
/** REST 调用要用的地址与票;没登录返回 `null`。 */
|
|
37
|
+
get rest(): {
|
|
38
|
+
url: string;
|
|
39
|
+
token: string;
|
|
40
|
+
} | null;
|
|
41
|
+
/** open 建连并完成握手,等状态机吃完 hello.ok 再返回。已有连接时抛 `2005`。 */
|
|
42
|
+
open(token: string): Promise<HelloOk>;
|
|
43
|
+
updateToken(token: string, expiresAtMs?: number): void;
|
|
44
|
+
setAppForeground(foreground: boolean): void;
|
|
45
|
+
notifyNetworkChanged(): void;
|
|
46
|
+
/** close 关掉当前连接。媒体与状态机由门面的 `logout()` 一并收。 */
|
|
47
|
+
close(): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=engineSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineSession.d.ts","sourceRoot":"","sources":["../src/engineSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IAatB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,OAAO,CAAC,IAAI,CAA2B;IACvC,4DAA4D;IAC5D,OAAO,CAAC,MAAM,CAAM;IACpB,yCAAyC;IACzC,OAAO,CAAC,KAAK,CAAM;IACnB,mDAAmD;IACnD,OAAO,CAAC,YAAY,CAAoC;IACxD,yDAAyD;IACzD,OAAO,CAAC,OAAO,CAA+B;IAE9C,wDAAwD;gBAErC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,YAAY;IAG7C,8BAA8B;IAC9B,IAAI,UAAU,IAAI,UAAU,GAAG,IAAI,CAElC;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,mCAAmC;IACnC,IAAI,IAAI,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAEhD;IAED,sDAAsD;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtD,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAI3C,oBAAoB,IAAI,IAAI;IAI5B,8CAA8C;IAC9C,KAAK,IAAI,IAAI;CAMd"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { watchBrowserSignals } from './browserSignals.js';
|
|
2
|
+
import { engineConnectionHandlers, engineMediaDeps } from './engineWiring.js';
|
|
3
|
+
import { ErrorCode, RtcError } from './errors.js';
|
|
4
|
+
import { mediaEvents } from './media/mediaPlane.js';
|
|
5
|
+
import { createConnection } from './signaling/connectionFactory.js';
|
|
6
|
+
/**
|
|
7
|
+
* EngineSession 管「当前这条信令连接」:建连握手、换票、关连接,以及握手拿到的 uid。
|
|
8
|
+
*
|
|
9
|
+
* 从 `CallEngine` 里单拎出来:`login` / `updateToken` / `logout` 的**公开签名与文档**留在门面上
|
|
10
|
+
* (那是宿主读的东西),搬过来的是它们背后的三份状态与收摊逻辑——门面自己不再持有连接。
|
|
11
|
+
* 「为什么重复 login 要拒」「失败为什么要收摊」这些理由写在 `CallEngine.login` 上,这里不重复。
|
|
12
|
+
*/
|
|
13
|
+
export class EngineSession {
|
|
14
|
+
options;
|
|
15
|
+
bridge;
|
|
16
|
+
wiring;
|
|
17
|
+
conn = null;
|
|
18
|
+
/** 当前在用的接入票(含 `updateToken` 换过的)。没登录为空串;给同一身份的 REST 调用用。 */
|
|
19
|
+
ticket = '';
|
|
20
|
+
/** 握手拿到的自己的 uid。用来挡「呼叫自己」,也供宿主读。登出不清。 */
|
|
21
|
+
myUid = '';
|
|
22
|
+
/** 最近一次 hello.ok 喂进状态机的那个 promise,`open()` 要等它。 */
|
|
23
|
+
helloApplied = Promise.resolve();
|
|
24
|
+
/** 摘掉浏览器前后台 / 网络事件的监听(见 `browserSignals.ts`)。登录挂、登出摘。 */
|
|
25
|
+
unwatch = () => undefined;
|
|
26
|
+
/** `wiring` 取成函数:门面的接线里要回读本会话的 `connection`,构造时还拿不到。 */
|
|
27
|
+
constructor(options, bridge, wiring) {
|
|
28
|
+
this.options = options;
|
|
29
|
+
this.bridge = bridge;
|
|
30
|
+
this.wiring = wiring;
|
|
31
|
+
}
|
|
32
|
+
/** 当前连接。会随登录 / 登出换对象,别存下来。 */
|
|
33
|
+
get connection() {
|
|
34
|
+
return this.conn;
|
|
35
|
+
}
|
|
36
|
+
get uid() {
|
|
37
|
+
return this.myUid;
|
|
38
|
+
}
|
|
39
|
+
/** REST 调用要用的地址与票;没登录返回 `null`。 */
|
|
40
|
+
get rest() {
|
|
41
|
+
return this.conn === null || this.ticket === '' ? null : { url: this.options.url, token: this.ticket };
|
|
42
|
+
}
|
|
43
|
+
/** open 建连并完成握手,等状态机吃完 hello.ok 再返回。已有连接时抛 `2005`。 */
|
|
44
|
+
async open(token) {
|
|
45
|
+
if (this.conn !== null) {
|
|
46
|
+
throw new RtcError(ErrorCode.invalidState, {
|
|
47
|
+
cause: new Error('已经登录了:换账号或换票请先 logout()'),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const { url, deviceId, webSocketFactory } = this.options;
|
|
51
|
+
const connection = createConnection({ url, token, deviceId, ...(webSocketFactory === undefined ? {} : { webSocketFactory }) }, engineConnectionHandlers(this.wiring(), (applied) => {
|
|
52
|
+
this.helloApplied = applied;
|
|
53
|
+
}));
|
|
54
|
+
this.conn = connection;
|
|
55
|
+
this.ticket = token;
|
|
56
|
+
this.unwatch = watchBrowserSignals(connection);
|
|
57
|
+
this.bridge.open(mediaEvents(engineMediaDeps(this.wiring())));
|
|
58
|
+
let hello;
|
|
59
|
+
try {
|
|
60
|
+
hello = await connection.connect();
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
// 收摊:不收的话上面那道「已经登录了」的门会把重试也挡掉。
|
|
64
|
+
connection.close();
|
|
65
|
+
this.bridge.close();
|
|
66
|
+
if (this.conn === connection) {
|
|
67
|
+
this.unwatch();
|
|
68
|
+
this.conn = null;
|
|
69
|
+
this.ticket = '';
|
|
70
|
+
}
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
this.myUid = hello.uid;
|
|
74
|
+
// 宿主拿到 login 的返回值时,engine 的状态应该已经是最终的了。(重连那些不需要等——没人在 await 它们。)
|
|
75
|
+
await this.helloApplied;
|
|
76
|
+
return hello;
|
|
77
|
+
}
|
|
78
|
+
updateToken(token, expiresAtMs) {
|
|
79
|
+
if (this.conn !== null)
|
|
80
|
+
this.ticket = token;
|
|
81
|
+
this.conn?.updateToken(token, expiresAtMs);
|
|
82
|
+
}
|
|
83
|
+
setAppForeground(foreground) {
|
|
84
|
+
this.conn?.setAppForeground(foreground);
|
|
85
|
+
}
|
|
86
|
+
notifyNetworkChanged() {
|
|
87
|
+
this.conn?.notifyNetworkChanged();
|
|
88
|
+
}
|
|
89
|
+
/** close 关掉当前连接。媒体与状态机由门面的 `logout()` 一并收。 */
|
|
90
|
+
close() {
|
|
91
|
+
this.unwatch();
|
|
92
|
+
this.conn?.close();
|
|
93
|
+
this.conn = null;
|
|
94
|
+
this.ticket = '';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=engineSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engineSession.js","sourceRoot":"","sources":["../src/engineSession.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
CHANGED
|
@@ -56,10 +56,19 @@ export interface EngineEvents {
|
|
|
56
56
|
tokenWillExpire: {
|
|
57
57
|
expiresAtMs: number;
|
|
58
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* **找不到调用方**的错误(2.0.0 起):断线后放弃重连、服务端主动推的 `sys.error`、媒体层自发故障、
|
|
61
|
+
* 引擎随后自动发的连锁帧失败(例如接听之后的 `room.join`)。
|
|
62
|
+
*
|
|
63
|
+
* 宿主调方法失败**不在这里**——那个错误由方法本身的 Promise reject(server
|
|
64
|
+
* `docs/design/ACTION_RESULT_DESIGN.md` R3:一次失败只从一个出口报)。
|
|
65
|
+
* `forType` 是出错的请求帧类型,没有对应请求时为 `''`。
|
|
66
|
+
*/
|
|
59
67
|
error: {
|
|
60
68
|
code: number;
|
|
61
69
|
name: string;
|
|
62
70
|
message: string;
|
|
71
|
+
forType: string;
|
|
63
72
|
};
|
|
64
73
|
callReceived: {
|
|
65
74
|
callId: string;
|
|
@@ -79,6 +88,11 @@ export interface EngineEvents {
|
|
|
79
88
|
* 被叫这边只有两格,同一通电话两种样子。
|
|
80
89
|
*/
|
|
81
90
|
calleeIds: string[];
|
|
91
|
+
/**
|
|
92
|
+
* **此刻已经在通话里的人**(不含自己;发起人没离场就在里面)。展开页据此把他们摆成正常格子,
|
|
93
|
+
* `calleeIds` 里不在其中的才是「呼叫中…」。旧服务端不带 = 空数组,回落成只有 `caller` 在通话里。
|
|
94
|
+
*/
|
|
95
|
+
joinedIds: string[];
|
|
82
96
|
mediaType: MediaType;
|
|
83
97
|
isGroup: boolean;
|
|
84
98
|
/** 宿主自己的群号,`call()` 的选项里没给就是空串(HOST_INTEGRATION_DESIGN §3.2)。 */
|
|
@@ -112,6 +126,27 @@ export interface EngineEvents {
|
|
|
112
126
|
durationSec: number;
|
|
113
127
|
endedBy: string;
|
|
114
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* 这通电话的事实一次给齐(通话记录设计 §4)。**紧跟 `callEnd`、每通拿到 call_id 的电话恰好一次**;
|
|
131
|
+
* 未接通、被拒、`*_elsewhere` 也来(看 `reason`)。宿主要发通话记录消息的话,
|
|
132
|
+
* 只在 `role === 'caller'` 时发,不用自己比对 uid。本地就地拒掉 / 发不出去的 `call()` 不触发。
|
|
133
|
+
*/
|
|
134
|
+
callSummary: {
|
|
135
|
+
callId: string;
|
|
136
|
+
reason: CallEndReasonValue;
|
|
137
|
+
/** 服务端给的秒数,未接通恒 0。 */
|
|
138
|
+
durationSec: number;
|
|
139
|
+
endedBy: string;
|
|
140
|
+
mediaType: 'audio' | 'video';
|
|
141
|
+
isGroup: boolean;
|
|
142
|
+
chatGroupId: string;
|
|
143
|
+
caller: string;
|
|
144
|
+
role: 'caller' | 'callee';
|
|
145
|
+
/** 1v1 的对端 uid;群通话为空串。 */
|
|
146
|
+
peer: string;
|
|
147
|
+
/** 主叫拨号时透传的宿主私有字符串,原样返回。 */
|
|
148
|
+
userData: string;
|
|
149
|
+
};
|
|
115
150
|
/** 以下四个是**便利事件**,只在 1v1 抛;随后必有 callEnd。 */
|
|
116
151
|
callCancelled: {
|
|
117
152
|
uid: string;
|
|
@@ -147,6 +182,14 @@ export interface EngineEvents {
|
|
|
147
182
|
userLeave: {
|
|
148
183
|
uid: string;
|
|
149
184
|
};
|
|
185
|
+
/**
|
|
186
|
+
* 某人的设备开始响铃(协议 `call.ringing`)。**通话里的人都收到**,不含正在响铃的人自己——
|
|
187
|
+
* 群通话里别人加了人,你也能给他摆「呼叫中」占位格,随后由 `userAccept` / `userReject` /
|
|
188
|
+
* `userNoResponse` 收掉。1v1 主叫也会收到(可据此把「正在呼叫…」改成「等待对方接听」)。
|
|
189
|
+
*/
|
|
190
|
+
userRinging: {
|
|
191
|
+
uid: string;
|
|
192
|
+
};
|
|
150
193
|
userAccept: {
|
|
151
194
|
uid: string;
|
|
152
195
|
};
|
|
@@ -194,8 +237,13 @@ export interface EngineEvents {
|
|
|
194
237
|
trackId: string;
|
|
195
238
|
track: MediaStreamTrack;
|
|
196
239
|
};
|
|
240
|
+
/**
|
|
241
|
+
* 进房成功(会议与通话都抛)。`uids` 是进房这一刻房里已有的人(快照,不含自己),之后进出的人走
|
|
242
|
+
* `userEnter` / `userLeave`。**响铃阶段就摆好的成员名单要拿它对账**:那段时间不在房里,别人离场收不到通知。
|
|
243
|
+
*/
|
|
197
244
|
roomJoined: {
|
|
198
245
|
roomId: string;
|
|
246
|
+
uids: string[];
|
|
199
247
|
};
|
|
200
248
|
roomLeft: {
|
|
201
249
|
roomId: string;
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;GAMG;AAEH,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;AAEpD,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAE3B,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD;;;;;;;;;OASG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD;;;;;;;;;OASG;IACH,SAAS,EAAE;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;IACvC;;;;;;;;;OASG;IACH,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;GAMG;AAEH,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;AAEpD,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAE3B,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnD;;;;;;;;;OASG;IACH,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD;;;;;;;;;OASG;IACH,SAAS,EAAE;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;IACvC;;;;;;;;;OASG;IACH,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC;;;;;;;OAOG;IACH,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAGxE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf;;;;;WAKG;QACH,OAAO,EAAE,MAAM,CAAC;QAChB;;;;;WAKG;QACH,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB;;;WAGG;QACH,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,iEAAiE;QACjE,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,2BAA2B;IAC3B,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,YAAY,CAAC;QACnB;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;QACf;;;;WAIG;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sCAAsC;IACtC,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,kBAAkB,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;;OAIG;IACH,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,kBAAkB,CAAC;QAC3B,sBAAsB;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;QAC7B,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC1B,0BAA0B;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,4BAA4B;QAC5B,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,2CAA2C;IAC3C,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B;;;;;OAKG;IACH,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,sBAAsB;IACtB,oBAAoB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAGzD,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B;;;;OAIG;IACH,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,cAAc,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,kBAAkB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACxD,kBAAkB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAGxD,qCAAqC;IACrC,cAAc,EAAE;QAAE,QAAQ,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAChE,yBAAyB;IACzB,cAAc,EAAE;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAC9D;;;;;;OAMG;IACH,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,+BAA+B;IAC/B,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAG1D;;;OAGG;IACH,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/C,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAED,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AAEjD,qCAAqC;AACrC,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAE/F;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CA4BzE,CAAC"}
|
package/dist/events.js
CHANGED
|
@@ -13,6 +13,7 @@ export const MACHINE_EVENT_NAMES = {
|
|
|
13
13
|
onCallReceived: 'callReceived',
|
|
14
14
|
onCallBegin: 'callBegin',
|
|
15
15
|
onCallEnd: 'callEnd',
|
|
16
|
+
onCallSummary: 'callSummary',
|
|
16
17
|
onCallCancelled: 'callCancelled',
|
|
17
18
|
onCallRejected: 'callRejected',
|
|
18
19
|
onCallBusy: 'callBusy',
|
|
@@ -21,6 +22,7 @@ export const MACHINE_EVENT_NAMES = {
|
|
|
21
22
|
onHandledOnOtherDevice: 'handledOnOtherDevice',
|
|
22
23
|
onUserEnter: 'userEnter',
|
|
23
24
|
onUserLeave: 'userLeave',
|
|
25
|
+
onUserRinging: 'userRinging',
|
|
24
26
|
onUserAccept: 'userAccept',
|
|
25
27
|
onUserReject: 'userReject',
|
|
26
28
|
onUserNoResponse: 'userNoResponse',
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AA0MA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA8C;IAC5E,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,WAAW;IACxB,OAAO,EAAE,OAAO;IAChB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,SAAS;IACpB,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,cAAc;IAC9B,YAAY,EAAE,YAAY;IAC1B,sBAAsB,EAAE,sBAAsB;IAC9C,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,WAAW;IACxB,aAAa,EAAE,aAAa;IAC5B,YAAY,EAAE,YAAY;IAC1B,YAAY,EAAE,YAAY;IAC1B,gBAAgB,EAAE,gBAAgB;IAClC,oBAAoB,EAAE,oBAAoB;IAC1C,oBAAoB,EAAE,oBAAoB;IAC1C,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,YAAY,EAAE,YAAY;IAC1B,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,YAAY;CAC3B,CAAC"}
|
package/dist/frameLoop.d.ts
CHANGED
|
@@ -5,8 +5,15 @@ import type { MediaPlaneDeps } from './media/mediaPlane.js';
|
|
|
5
5
|
import type { CallEndReasonValue } from './reasons.js';
|
|
6
6
|
import type { Connection } from './signaling/connection.js';
|
|
7
7
|
import type { FrameSender } from './signaling/frameSender.js';
|
|
8
|
+
import type { CallContext } from './state/callMachine.js';
|
|
8
9
|
import type { EngineContext } from './state/engineMachine.js';
|
|
9
10
|
import type { EmittedEvent, MachineInput } from './state/types.js';
|
|
11
|
+
/** ActInput 是宿主调用触发的那种输入。 */
|
|
12
|
+
export type ActInput = Extract<MachineInput, {
|
|
13
|
+
kind: 'act';
|
|
14
|
+
}>;
|
|
15
|
+
/** ReplyData 是请求成功时 `xxx.ok` 的 data(线路形状,snake_case)。 */
|
|
16
|
+
export type ReplyData = Readonly<Record<string, unknown>>;
|
|
10
17
|
/** FrameLoopDeps 是这个循环要用到的全部东西。 */
|
|
11
18
|
export interface FrameLoopDeps {
|
|
12
19
|
readonly bus: EngineBus;
|
|
@@ -17,11 +24,15 @@ export interface FrameLoopDeps {
|
|
|
17
24
|
connection: () => Connection | null;
|
|
18
25
|
/** 媒体接线的依赖袋(见 media/mediaPlane.ts)。 */
|
|
19
26
|
mediaDeps: () => MediaPlaneDeps;
|
|
27
|
+
/** 自己的 uid,只给 `callSummary.caller` 用:主叫在接通前结束时状态机还不知道发起人是谁。 */
|
|
28
|
+
selfUid?: () => string;
|
|
20
29
|
}
|
|
21
30
|
/** FrameLoop 持有状态机快照,并驱动它。 */
|
|
22
31
|
export declare class FrameLoop {
|
|
23
32
|
private readonly deps;
|
|
24
33
|
private ctx;
|
|
34
|
+
/** 会议房翻页退订的五秒迟滞(`state/roomPaging.ts`)。到点喂一个内部事件回状态机。 */
|
|
35
|
+
private readonly unsubscribeTimers;
|
|
25
36
|
constructor(deps: FrameLoopDeps);
|
|
26
37
|
/** state 是状态机的当前快照,供门面转给 UI。 */
|
|
27
38
|
get state(): EngineContext;
|
|
@@ -35,8 +46,21 @@ export declare class FrameLoop {
|
|
|
35
46
|
* 随后的 publish 全被 R1「只有 joined 才允许发布」本地拒掉。
|
|
36
47
|
*/
|
|
37
48
|
handleIncoming(type: string, data: Record<string, unknown>): Promise<void>;
|
|
38
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* dispatch 把一个**找不到调用方**的输入喂进状态机(下行帧、内部事件、engine 自己发起的动作),
|
|
51
|
+
* 然后抛事件、发帧。**永不 reject**:帧失败转成 `error` 事件。
|
|
52
|
+
*/
|
|
39
53
|
dispatch(input: MachineInput): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* request 把一次**宿主调用**喂进状态机,并把结果交回调用方(ACTION_RESULT_DESIGN R1)。
|
|
56
|
+
*
|
|
57
|
+
* - 状态机就地拒绝 → reject 那个码(`2005` 等),不抛事件、不发帧;
|
|
58
|
+
* - 本步直接产出的帧被拒 / 超时 / 没连接 → reject 那个错误,**不再**发 `error` 事件(R3),
|
|
59
|
+
* 回滚照做——`onCallEnd(error)` 之类的状态事件照发(R4);
|
|
60
|
+
* - 否则 resolve 最后一帧的应答 data(`call` 从里面取 `call_id`)。本步没发帧(意图被缓存、
|
|
61
|
+
* 拨出中挂起的 cancel)时 resolve 空对象:调用已受理,之后的连锁帧失败走 `error` 事件(R2)。
|
|
62
|
+
*/
|
|
63
|
+
request(input: ActInput): Promise<ReplyData>;
|
|
40
64
|
/**
|
|
41
65
|
* forceEnd 强制收掉当前这一场:**先把结束帧直接交给信令连接,再在本地收场**(`CallEngine.forceEnd`)。
|
|
42
66
|
*
|
|
@@ -54,6 +78,8 @@ export declare class FrameLoop {
|
|
|
54
78
|
* 那条 invite.ok 迟到时由通话机的 idle 分支补发(`callRecv.ts` 的 `handleLateFrame`)。
|
|
55
79
|
*/
|
|
56
80
|
forceEnd(nowMs?: number, reason?: CallEndReasonValue): void;
|
|
81
|
+
/** endLocally 按此刻状态本地收场(通话或会议),不发帧。已经收干净时什么都不做。 */
|
|
82
|
+
private endLocally;
|
|
57
83
|
/** fireFrames 把结束帧直接交给信令连接,不等应答。 */
|
|
58
84
|
private fireFrames;
|
|
59
85
|
/**
|
|
@@ -62,8 +88,15 @@ export declare class FrameLoop {
|
|
|
62
88
|
* **发帧之前的部分都是同步的**——`forceEnd` 靠这一点在调用返回前就把事件抛完。
|
|
63
89
|
*/
|
|
64
90
|
private apply;
|
|
65
|
-
/**
|
|
91
|
+
/**
|
|
92
|
+
* sendFrame 发一帧,并把应答喂回状态机。
|
|
93
|
+
*
|
|
94
|
+
* `settlement` 不为 null 时这一帧是宿主调用直接发出的:失败记进去交给调用方,不发 `error` 事件。
|
|
95
|
+
* 同一次调用发了几帧的,调用方拿第一个失败,其余的照旧走 `error` 事件——一个错误只报一次。
|
|
96
|
+
*/
|
|
66
97
|
private sendFrame;
|
|
98
|
+
/** settleFailure 把一帧的失败交给调用方;没有调用方、或调用方已经拿到一个失败时发 error 事件。 */
|
|
99
|
+
private settleFailure;
|
|
67
100
|
/**
|
|
68
101
|
* rollback 把「这一帧没送到」翻译成状态机能收场的内部事件。
|
|
69
102
|
*
|
|
@@ -71,17 +104,20 @@ export declare class FrameLoop {
|
|
|
71
104
|
* 而之后每一个动作都被不变量本地拒成 2005,宿主只看到一串没头没尾的 2005,
|
|
72
105
|
* 真正的原因早淹在上一条 error 里了。四端同一张表(Android 的
|
|
73
106
|
* `IMCallEngine.onRequestFailed`、iOS 的 `IMFrameLoop.sendFrame`)。
|
|
107
|
+
*
|
|
108
|
+
* `error` 是这一帧失败的真实原因,只有 `room.publish` 那一支要看它——
|
|
109
|
+
* 分清「服务端真回了拒绝」与「没等到应答」(见下面 `UNANSWERED_CODES`)。
|
|
74
110
|
*/
|
|
75
111
|
private rollback;
|
|
76
112
|
/**
|
|
77
113
|
* logLocalReject 把「状态机本地拒掉了一个动作」记成一条**说得清的**日志。
|
|
78
114
|
*
|
|
79
|
-
*
|
|
115
|
+
* 宿主拿到的错误只有 `code=2005 / invalid_state`——**哪个动作、当时什么状态,
|
|
80
116
|
* 一个字都没有**。三人会议那次排查就卡在这里:日志里十几条一模一样的 2005,
|
|
81
117
|
* 要读代码才能推出「点的是挂断、而会议里没有 call」。
|
|
82
118
|
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
119
|
+
* 不把这些塞进错误对象,是因为那是四端共用的公开形状;诊断信息进日志就够了。
|
|
120
|
+
* engine 自己发起的动作(`restart_pub_ice`)被拒时**只有**这一条日志。
|
|
85
121
|
*/
|
|
86
122
|
private logLocalReject;
|
|
87
123
|
}
|
|
@@ -90,4 +126,11 @@ export declare class FrameLoop {
|
|
|
90
126
|
* 关摄像头与麦克风开关不用等画面(Android `videoTurnedOn` 同一条判据)。
|
|
91
127
|
*/
|
|
92
128
|
export declare function videoTurnedOn(emit: readonly EmittedEvent[]): string[];
|
|
129
|
+
/**
|
|
130
|
+
* callSummaryEvent 用结束前的通话上下文 + onCallEnd 的载荷拼 `onCallSummary`。
|
|
131
|
+
*
|
|
132
|
+
* 结束前没有通话,或这通电话还没拿到 call_id(本地就地拒掉 / 发不出去的 `call()`)返回 null:
|
|
133
|
+
* 服务端没有这通电话,宿主也没有 cid 可写进记录。
|
|
134
|
+
*/
|
|
135
|
+
export declare function callSummaryEvent(call: CallContext, end: EmittedEvent, selfUid: string): EmittedEvent | null;
|
|
93
136
|
//# sourceMappingURL=frameLoop.d.ts.map
|
package/dist/frameLoop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameLoop.d.ts","sourceRoot":"","sources":["../src/frameLoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAgC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"frameLoop.d.ts","sourceRoot":"","sources":["../src/frameLoop.ts"],"names":[],"mappings":"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"}
|