im-rtc-call-engine 1.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 (218) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bytes.d.ts +11 -0
  3. package/dist/bytes.d.ts.map +1 -0
  4. package/dist/bytes.js +20 -0
  5. package/dist/bytes.js.map +1 -0
  6. package/dist/callOptions.d.ts +27 -0
  7. package/dist/callOptions.d.ts.map +1 -0
  8. package/dist/callOptions.js +19 -0
  9. package/dist/callOptions.js.map +1 -0
  10. package/dist/deviceId.d.ts +10 -0
  11. package/dist/deviceId.d.ts.map +1 -0
  12. package/dist/deviceId.js +55 -0
  13. package/dist/deviceId.js.map +1 -0
  14. package/dist/engine.d.ts +302 -0
  15. package/dist/engine.d.ts.map +1 -0
  16. package/dist/engine.js +489 -0
  17. package/dist/engine.js.map +1 -0
  18. package/dist/engineBus.d.ts +16 -0
  19. package/dist/engineBus.d.ts.map +1 -0
  20. package/dist/engineBus.js +89 -0
  21. package/dist/engineBus.js.map +1 -0
  22. package/dist/engineWiring.d.ts +40 -0
  23. package/dist/engineWiring.d.ts.map +1 -0
  24. package/dist/engineWiring.js +57 -0
  25. package/dist/engineWiring.js.map +1 -0
  26. package/dist/errors.d.ts +185 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +253 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/eventBus.d.ts +24 -0
  31. package/dist/eventBus.d.ts.map +1 -0
  32. package/dist/eventBus.js +50 -0
  33. package/dist/eventBus.js.map +1 -0
  34. package/dist/events.d.ts +220 -0
  35. package/dist/events.d.ts.map +1 -0
  36. package/dist/events.js +35 -0
  37. package/dist/events.js.map +1 -0
  38. package/dist/frameLoop.d.ts +93 -0
  39. package/dist/frameLoop.d.ts.map +1 -0
  40. package/dist/frameLoop.js +346 -0
  41. package/dist/frameLoop.js.map +1 -0
  42. package/dist/index.d.ts +60 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +42 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/logger.d.ts +64 -0
  47. package/dist/logger.d.ts.map +1 -0
  48. package/dist/logger.js +101 -0
  49. package/dist/logger.js.map +1 -0
  50. package/dist/media/engineMediaApi.d.ts +40 -0
  51. package/dist/media/engineMediaApi.d.ts.map +1 -0
  52. package/dist/media/engineMediaApi.js +71 -0
  53. package/dist/media/engineMediaApi.js.map +1 -0
  54. package/dist/media/firstFrameGate.d.ts +47 -0
  55. package/dist/media/firstFrameGate.d.ts.map +1 -0
  56. package/dist/media/firstFrameGate.js +117 -0
  57. package/dist/media/firstFrameGate.js.map +1 -0
  58. package/dist/media/mediaAdapter.d.ts +135 -0
  59. package/dist/media/mediaAdapter.d.ts.map +1 -0
  60. package/dist/media/mediaAdapter.js +2 -0
  61. package/dist/media/mediaAdapter.js.map +1 -0
  62. package/dist/media/mediaBridge.d.ts +99 -0
  63. package/dist/media/mediaBridge.d.ts.map +1 -0
  64. package/dist/media/mediaBridge.js +186 -0
  65. package/dist/media/mediaBridge.js.map +1 -0
  66. package/dist/media/mediaPlane.d.ts +58 -0
  67. package/dist/media/mediaPlane.d.ts.map +1 -0
  68. package/dist/media/mediaPlane.js +119 -0
  69. package/dist/media/mediaPlane.js.map +1 -0
  70. package/dist/media/videoProfile.d.ts +79 -0
  71. package/dist/media/videoProfile.d.ts.map +1 -0
  72. package/dist/media/videoProfile.js +46 -0
  73. package/dist/media/videoProfile.js.map +1 -0
  74. package/dist/media/videoProfile.test.d.ts +2 -0
  75. package/dist/media/videoProfile.test.d.ts.map +1 -0
  76. package/dist/media/videoProfile.test.js +26 -0
  77. package/dist/media/videoProfile.test.js.map +1 -0
  78. package/dist/media/viewRegistry.d.ts +75 -0
  79. package/dist/media/viewRegistry.d.ts.map +1 -0
  80. package/dist/media/viewRegistry.js +130 -0
  81. package/dist/media/viewRegistry.js.map +1 -0
  82. package/dist/media/webrtcAdapter.d.ts +158 -0
  83. package/dist/media/webrtcAdapter.d.ts.map +1 -0
  84. package/dist/media/webrtcAdapter.js +502 -0
  85. package/dist/media/webrtcAdapter.js.map +1 -0
  86. package/dist/protocolId.d.ts +14 -0
  87. package/dist/protocolId.d.ts.map +1 -0
  88. package/dist/protocolId.js +109 -0
  89. package/dist/protocolId.js.map +1 -0
  90. package/dist/reasons.d.ts +63 -0
  91. package/dist/reasons.d.ts.map +1 -0
  92. package/dist/reasons.js +81 -0
  93. package/dist/reasons.js.map +1 -0
  94. package/dist/redact.d.ts +19 -0
  95. package/dist/redact.d.ts.map +1 -0
  96. package/dist/redact.js +50 -0
  97. package/dist/redact.js.map +1 -0
  98. package/dist/signaling/backoff.d.ts +17 -0
  99. package/dist/signaling/backoff.d.ts.map +1 -0
  100. package/dist/signaling/backoff.js +23 -0
  101. package/dist/signaling/backoff.js.map +1 -0
  102. package/dist/signaling/candidate.d.ts +19 -0
  103. package/dist/signaling/candidate.d.ts.map +1 -0
  104. package/dist/signaling/candidate.js +22 -0
  105. package/dist/signaling/candidate.js.map +1 -0
  106. package/dist/signaling/caseMapping.d.ts +19 -0
  107. package/dist/signaling/caseMapping.d.ts.map +1 -0
  108. package/dist/signaling/caseMapping.js +34 -0
  109. package/dist/signaling/caseMapping.js.map +1 -0
  110. package/dist/signaling/connection.d.ts +110 -0
  111. package/dist/signaling/connection.d.ts.map +1 -0
  112. package/dist/signaling/connection.js +365 -0
  113. package/dist/signaling/connection.js.map +1 -0
  114. package/dist/signaling/connectionFactory.d.ts +55 -0
  115. package/dist/signaling/connectionFactory.d.ts.map +1 -0
  116. package/dist/signaling/connectionFactory.js +29 -0
  117. package/dist/signaling/connectionFactory.js.map +1 -0
  118. package/dist/signaling/connectionTypes.d.ts +94 -0
  119. package/dist/signaling/connectionTypes.d.ts.map +1 -0
  120. package/dist/signaling/connectionTypes.js +2 -0
  121. package/dist/signaling/connectionTypes.js.map +1 -0
  122. package/dist/signaling/discipline.d.ts +6 -0
  123. package/dist/signaling/discipline.d.ts.map +1 -0
  124. package/dist/signaling/discipline.js +100 -0
  125. package/dist/signaling/discipline.js.map +1 -0
  126. package/dist/signaling/enums.d.ts +53 -0
  127. package/dist/signaling/enums.d.ts.map +1 -0
  128. package/dist/signaling/enums.js +52 -0
  129. package/dist/signaling/enums.js.map +1 -0
  130. package/dist/signaling/envelope.d.ts +31 -0
  131. package/dist/signaling/envelope.d.ts.map +1 -0
  132. package/dist/signaling/envelope.js +91 -0
  133. package/dist/signaling/envelope.js.map +1 -0
  134. package/dist/signaling/fieldSpec.d.ts +101 -0
  135. package/dist/signaling/fieldSpec.d.ts.map +1 -0
  136. package/dist/signaling/fieldSpec.js +130 -0
  137. package/dist/signaling/fieldSpec.js.map +1 -0
  138. package/dist/signaling/frameSender.d.ts +34 -0
  139. package/dist/signaling/frameSender.d.ts.map +1 -0
  140. package/dist/signaling/frameSender.js +57 -0
  141. package/dist/signaling/frameSender.js.map +1 -0
  142. package/dist/signaling/frames.call.d.ts +299 -0
  143. package/dist/signaling/frames.call.d.ts.map +1 -0
  144. package/dist/signaling/frames.call.js +149 -0
  145. package/dist/signaling/frames.call.js.map +1 -0
  146. package/dist/signaling/frames.room.d.ts +566 -0
  147. package/dist/signaling/frames.room.d.ts.map +1 -0
  148. package/dist/signaling/frames.room.js +165 -0
  149. package/dist/signaling/frames.room.js.map +1 -0
  150. package/dist/signaling/frames.sys.d.ts +145 -0
  151. package/dist/signaling/frames.sys.d.ts.map +1 -0
  152. package/dist/signaling/frames.sys.js +53 -0
  153. package/dist/signaling/frames.sys.js.map +1 -0
  154. package/dist/signaling/handshakeGiveUp.d.ts +36 -0
  155. package/dist/signaling/handshakeGiveUp.d.ts.map +1 -0
  156. package/dist/signaling/handshakeGiveUp.js +48 -0
  157. package/dist/signaling/handshakeGiveUp.js.map +1 -0
  158. package/dist/signaling/heartbeat.d.ts +34 -0
  159. package/dist/signaling/heartbeat.d.ts.map +1 -0
  160. package/dist/signaling/heartbeat.js +52 -0
  161. package/dist/signaling/heartbeat.js.map +1 -0
  162. package/dist/signaling/pendingRequests.d.ts +33 -0
  163. package/dist/signaling/pendingRequests.d.ts.map +1 -0
  164. package/dist/signaling/pendingRequests.js +57 -0
  165. package/dist/signaling/pendingRequests.js.map +1 -0
  166. package/dist/signaling/reconnector.d.ts +43 -0
  167. package/dist/signaling/reconnector.d.ts.map +1 -0
  168. package/dist/signaling/reconnector.js +76 -0
  169. package/dist/signaling/reconnector.js.map +1 -0
  170. package/dist/signaling/registry.d.ts +100 -0
  171. package/dist/signaling/registry.d.ts.map +1 -0
  172. package/dist/signaling/registry.js +217 -0
  173. package/dist/signaling/registry.js.map +1 -0
  174. package/dist/signaling/resumeDeadline.d.ts +48 -0
  175. package/dist/signaling/resumeDeadline.d.ts.map +1 -0
  176. package/dist/signaling/resumeDeadline.js +89 -0
  177. package/dist/signaling/resumeDeadline.js.map +1 -0
  178. package/dist/signaling/tokenExpiry.d.ts +89 -0
  179. package/dist/signaling/tokenExpiry.d.ts.map +1 -0
  180. package/dist/signaling/tokenExpiry.js +106 -0
  181. package/dist/signaling/tokenExpiry.js.map +1 -0
  182. package/dist/signaling/webSocket.d.ts +59 -0
  183. package/dist/signaling/webSocket.d.ts.map +1 -0
  184. package/dist/signaling/webSocket.js +50 -0
  185. package/dist/signaling/webSocket.js.map +1 -0
  186. package/dist/state/callMachine.d.ts +56 -0
  187. package/dist/state/callMachine.d.ts.map +1 -0
  188. package/dist/state/callMachine.js +176 -0
  189. package/dist/state/callMachine.js.map +1 -0
  190. package/dist/state/callRecv.d.ts +12 -0
  191. package/dist/state/callRecv.d.ts.map +1 -0
  192. package/dist/state/callRecv.js +255 -0
  193. package/dist/state/callRecv.js.map +1 -0
  194. package/dist/state/engineMachine.d.ts +41 -0
  195. package/dist/state/engineMachine.d.ts.map +1 -0
  196. package/dist/state/engineMachine.js +210 -0
  197. package/dist/state/engineMachine.js.map +1 -0
  198. package/dist/state/forceEnd.d.ts +44 -0
  199. package/dist/state/forceEnd.d.ts.map +1 -0
  200. package/dist/state/forceEnd.js +96 -0
  201. package/dist/state/forceEnd.js.map +1 -0
  202. package/dist/state/roomMachine.d.ts +92 -0
  203. package/dist/state/roomMachine.d.ts.map +1 -0
  204. package/dist/state/roomMachine.js +319 -0
  205. package/dist/state/roomMachine.js.map +1 -0
  206. package/dist/state/roomRecv.d.ts +7 -0
  207. package/dist/state/roomRecv.d.ts.map +1 -0
  208. package/dist/state/roomRecv.js +209 -0
  209. package/dist/state/roomRecv.js.map +1 -0
  210. package/dist/state/types.d.ts +61 -0
  211. package/dist/state/types.d.ts.map +1 -0
  212. package/dist/state/types.js +30 -0
  213. package/dist/state/types.js.map +1 -0
  214. package/dist/version.d.ts +11 -0
  215. package/dist/version.d.ts.map +1 -0
  216. package/dist/version.js +11 -0
  217. package/dist/version.js.map +1 -0
  218. package/package.json +35 -0
@@ -0,0 +1,165 @@
1
+ import { LAYERS, PC_ROLES, REASONS, ROOM_KINDS, TRACK_KINDS, TRACK_SOURCES, } from './enums.js';
2
+ /**
3
+ * room 域:房间与媒体。见 RTC_PROTOCOL.md §3。
4
+ * Room 层是媒体的全部——1v1、群通话、会议都用同一套帧。
5
+ */
6
+ /** PARTICIPANT_FIELDS:房间成员快照。 */
7
+ export const PARTICIPANT_FIELDS = {
8
+ participantId: { kind: 'string', wire: 'participant_id' },
9
+ uid: { kind: 'string', wire: 'uid' },
10
+ deviceId: { kind: 'string', wire: 'device_id' },
11
+ joinedAtMs: { kind: 'int', wire: 'joined_at_ms' },
12
+ };
13
+ /** TRACK_FIELDS:一条已发布 Track 的快照。 */
14
+ export const TRACK_FIELDS = {
15
+ trackId: { kind: 'string', wire: 'track_id' },
16
+ participantId: { kind: 'string', wire: 'participant_id' },
17
+ uid: { kind: 'string', wire: 'uid' },
18
+ kind: { kind: 'enum', wire: 'kind', values: TRACK_KINDS, fallback: 'audio' },
19
+ source: { kind: 'enum', wire: 'source', values: TRACK_SOURCES, fallback: 'microphone' },
20
+ codec: { kind: 'string', wire: 'codec' },
21
+ /** 空数组 = 单层。**不能是 null**。 */
22
+ simulcastLayers: { kind: 'enumArray', wire: 'simulcast_layers', values: LAYERS, fallback: 'l' },
23
+ muted: { kind: 'bool', wire: 'muted' },
24
+ };
25
+ /**
26
+ * JOIN_FIELDS:进房请求。
27
+ *
28
+ * **注意 auto_subscribe / publish_audio 默认是 true**:直接用零值对象发这一帧,
29
+ * 线路上会变成 false,人进了房却收不到任何流。发送侧一律用 newJoinData()。
30
+ */
31
+ export const JOIN_FIELDS = {
32
+ roomId: { kind: 'string', wire: 'room_id' },
33
+ roomToken: { kind: 'string', wire: 'room_token' },
34
+ autoSubscribe: { kind: 'bool', wire: 'auto_subscribe', default: true },
35
+ publishAudio: { kind: 'bool', wire: 'publish_audio', default: true },
36
+ publishVideo: { kind: 'bool', wire: 'publish_video', default: false },
37
+ };
38
+ /** JOIN_OK_FIELDS:带回整个房间的快照,客户端据此一次性把九宫格搭起来。 */
39
+ export const JOIN_OK_FIELDS = {
40
+ roomId: { kind: 'string', wire: 'room_id' },
41
+ roomKind: { kind: 'enum', wire: 'room_kind', values: ROOM_KINDS, fallback: 'call_group' },
42
+ participantId: { kind: 'string', wire: 'participant_id' },
43
+ maxParticipants: { kind: 'int', wire: 'max_participants' },
44
+ joinedAtMs: { kind: 'int', wire: 'joined_at_ms' },
45
+ participants: { kind: 'objectArray', wire: 'participants', fields: PARTICIPANT_FIELDS },
46
+ tracks: { kind: 'objectArray', wire: 'tracks', fields: TRACK_FIELDS },
47
+ };
48
+ /** LEAVE_FIELDS:离房请求。 */
49
+ export const LEAVE_FIELDS = {
50
+ roomId: { kind: 'string', wire: 'room_id' },
51
+ };
52
+ /**
53
+ * PUBLISH_FIELDS:发布请求。
54
+ *
55
+ * cid 是**客户端**生成的本地 track 标识,必须出现在随后 pub offer 的 msid 里;
56
+ * 服务端靠它把 SDP 的 m-line 认回 track_id。
57
+ */
58
+ export const PUBLISH_FIELDS = {
59
+ cid: { kind: 'string', wire: 'cid' },
60
+ kind: { kind: 'enum', wire: 'kind', values: TRACK_KINDS, fallback: 'audio' },
61
+ source: { kind: 'enum', wire: 'source', values: TRACK_SOURCES, fallback: 'microphone' },
62
+ simulcast: { kind: 'bool', wire: 'simulcast' },
63
+ width: { kind: 'int', wire: 'width' },
64
+ height: { kind: 'int', wire: 'height' },
65
+ maxBitrateKbps: { kind: 'int', wire: 'max_bitrate_kbps' },
66
+ };
67
+ /** PUBLISH_OK_FIELDS:回带 track_id 与原样回显的 cid 供配对。 */
68
+ export const PUBLISH_OK_FIELDS = {
69
+ trackId: { kind: 'string', wire: 'track_id' },
70
+ cid: { kind: 'string', wire: 'cid' },
71
+ };
72
+ /** TRACK_ID_FIELDS:只带 track_id 的帧(unpublish / unsubscribe)。 */
73
+ export const TRACK_ID_FIELDS = {
74
+ trackId: { kind: 'string', wire: 'track_id' },
75
+ };
76
+ /** MUTE_FIELDS:开关麦克风/摄像头。**这不是 unpublish**,Track 与协商都保留。 */
77
+ export const MUTE_FIELDS = {
78
+ trackId: { kind: 'string', wire: 'track_id' },
79
+ muted: { kind: 'bool', wire: 'muted' },
80
+ };
81
+ /** LAYER_FIELDS:订阅与换层。max_layer 是**上界不是命令**。 */
82
+ export const LAYER_FIELDS = {
83
+ trackId: { kind: 'string', wire: 'track_id' },
84
+ maxLayer: { kind: 'enum', wire: 'max_layer', values: LAYERS, fallback: 'l', default: 'm' },
85
+ };
86
+ /** SDP_FIELDS:room.offer 与 room.answer 共用。 */
87
+ export const SDP_FIELDS = {
88
+ pc: { kind: 'enum', wire: 'pc', values: PC_ROLES, fallback: 'pub' },
89
+ sdp: { kind: 'string', wire: 'sdp' },
90
+ };
91
+ /** ICE_FIELDS:trickle ICE 候选。candidate 为 '' 表示收集结束,接收方必须容忍。 */
92
+ export const ICE_FIELDS = {
93
+ pc: { kind: 'enum', wire: 'pc', values: PC_ROLES, fallback: 'pub' },
94
+ candidate: { kind: 'string', wire: 'candidate' },
95
+ sdpMid: { kind: 'string', wire: 'sdp_mid' },
96
+ sdpMLineIndex: { kind: 'int', wire: 'sdp_mline_index' },
97
+ };
98
+ /** PARTICIPANT_JOINED_FIELDS:有人进房。 */
99
+ export const PARTICIPANT_JOINED_FIELDS = {
100
+ roomId: { kind: 'string', wire: 'room_id' },
101
+ participantId: { kind: 'string', wire: 'participant_id' },
102
+ uid: { kind: 'string', wire: 'uid' },
103
+ deviceId: { kind: 'string', wire: 'device_id' },
104
+ joinedAtMs: { kind: 'int', wire: 'joined_at_ms' },
105
+ };
106
+ /** PARTICIPANT_LEFT_FIELDS:有人离房。reason 取 §6 的子集。 */
107
+ export const PARTICIPANT_LEFT_FIELDS = {
108
+ roomId: { kind: 'string', wire: 'room_id' },
109
+ participantId: { kind: 'string', wire: 'participant_id' },
110
+ uid: { kind: 'string', wire: 'uid' },
111
+ deviceId: { kind: 'string', wire: 'device_id' },
112
+ reason: { kind: 'enum', wire: 'reason', values: REASONS, fallback: 'error' },
113
+ durationSec: { kind: 'int', wire: 'duration_sec' },
114
+ };
115
+ /** TRACK_PUBLISHED_FIELDS:有人发布了 Track。 */
116
+ export const TRACK_PUBLISHED_FIELDS = {
117
+ roomId: { kind: 'string', wire: 'room_id' },
118
+ ...TRACK_FIELDS,
119
+ };
120
+ /** TRACK_UNPUBLISHED_FIELDS:有人销毁了 Track。 */
121
+ export const TRACK_UNPUBLISHED_FIELDS = {
122
+ roomId: { kind: 'string', wire: 'room_id' },
123
+ trackId: { kind: 'string', wire: 'track_id' },
124
+ participantId: { kind: 'string', wire: 'participant_id' },
125
+ uid: { kind: 'string', wire: 'uid' },
126
+ };
127
+ /** TRACK_MUTED_FIELDS:对应 onUserAudioAvailable / onUserVideoAvailable。 */
128
+ export const TRACK_MUTED_FIELDS = {
129
+ roomId: { kind: 'string', wire: 'room_id' },
130
+ trackId: { kind: 'string', wire: 'track_id' },
131
+ participantId: { kind: 'string', wire: 'participant_id' },
132
+ uid: { kind: 'string', wire: 'uid' },
133
+ kind: { kind: 'enum', wire: 'kind', values: TRACK_KINDS, fallback: 'audio' },
134
+ muted: { kind: 'bool', wire: 'muted' },
135
+ };
136
+ /** SPEAKER_FIELDS:一个正在说话的人。volume 0~100,**整数**。 */
137
+ export const SPEAKER_FIELDS = {
138
+ participantId: { kind: 'string', wire: 'participant_id' },
139
+ uid: { kind: 'string', wire: 'uid' },
140
+ volume: { kind: 'int', wire: 'volume', min: 0, max: 100 },
141
+ };
142
+ /** ACTIVE_SPEAKERS_FIELDS:服务端节流 300ms,客户端**不得**依赖更高频率。 */
143
+ export const ACTIVE_SPEAKERS_FIELDS = {
144
+ roomId: { kind: 'string', wire: 'room_id' },
145
+ speakers: { kind: 'objectArray', wire: 'speakers', fields: SPEAKER_FIELDS },
146
+ };
147
+ /** QUALITY_ENTRY_FIELDS:一个人的网络质量,level 0~6。 */
148
+ export const QUALITY_ENTRY_FIELDS = {
149
+ participantId: { kind: 'string', wire: 'participant_id' },
150
+ uid: { kind: 'string', wire: 'uid' },
151
+ // 越界折成 0 = unknown,**不是钳到 6**——把未知说成「已断开」会误导 UI。
152
+ level: { kind: 'int', wire: 'level', min: 0, max: 6, outOfRange: 0 },
153
+ };
154
+ /** QUALITY_FIELDS:服务端节流 2s。 */
155
+ export const QUALITY_FIELDS = {
156
+ roomId: { kind: 'string', wire: 'room_id' },
157
+ entries: { kind: 'objectArray', wire: 'entries', fields: QUALITY_ENTRY_FIELDS },
158
+ };
159
+ /** ROOM_CLOSED_FIELDS:房间结束。 */
160
+ export const ROOM_CLOSED_FIELDS = {
161
+ roomId: { kind: 'string', wire: 'room_id' },
162
+ reason: { kind: 'enum', wire: 'reason', values: REASONS, fallback: 'error' },
163
+ durationSec: { kind: 'int', wire: 'duration_sec' },
164
+ };
165
+ //# sourceMappingURL=frames.room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.room.js","sourceRoot":"","sources":["../../src/signaling/frames.room.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /** sys 域:连接、鉴权、心跳、错误。见 RTC_PROTOCOL.md §1 与 §7。 */
2
+ /** EMPTY_FIELDS 用于 data 恒为 {} 的帧:sys.ping / sys.pong / 各种纯 ack。 */
3
+ export declare const EMPTY_FIELDS: {};
4
+ /**
5
+ * HELLO_FIELDS:WS 打开后必须在 5 秒内发出的第一帧(§1.2)。
6
+ *
7
+ * token 走首帧而不是 URL 查询串:查询串会进网关日志、Referer 与浏览器历史。
8
+ */
9
+ export declare const HELLO_FIELDS: {
10
+ readonly protocolVersion: {
11
+ readonly kind: "int";
12
+ readonly wire: "protocol_version";
13
+ readonly default: 1;
14
+ };
15
+ readonly token: {
16
+ readonly kind: "string";
17
+ readonly wire: "token";
18
+ };
19
+ readonly deviceId: {
20
+ readonly kind: "string";
21
+ readonly wire: "device_id";
22
+ };
23
+ /** 重连恢复用;首次连接为 ''。 */
24
+ readonly sessionId: {
25
+ readonly kind: "string";
26
+ readonly wire: "session_id";
27
+ };
28
+ /** 仅用于日志与灰度,**禁止参与逻辑**。 */
29
+ readonly sdk: {
30
+ readonly kind: "string";
31
+ readonly wire: "sdk";
32
+ };
33
+ };
34
+ /** LIMITS_FIELDS:服务端下发的限额,让客户端能本地预校验(§2.6)。 */
35
+ export declare const LIMITS_FIELDS: {
36
+ readonly maxFrameBytes: {
37
+ readonly kind: "int";
38
+ readonly wire: "max_frame_bytes";
39
+ };
40
+ readonly maxCallees: {
41
+ readonly kind: "int";
42
+ readonly wire: "max_callees";
43
+ };
44
+ readonly maxRoomParticipants: {
45
+ readonly kind: "int";
46
+ readonly wire: "max_room_participants";
47
+ };
48
+ readonly maxUserDataBytes: {
49
+ readonly kind: "int";
50
+ readonly wire: "max_user_data_bytes";
51
+ };
52
+ readonly ringTimeoutSecDefault: {
53
+ readonly kind: "int";
54
+ readonly wire: "ring_timeout_sec_default";
55
+ };
56
+ };
57
+ /** HELLO_OK_FIELDS:鉴权成功的应答。 */
58
+ export declare const HELLO_OK_FIELDS: {
59
+ readonly uid: {
60
+ readonly kind: "string";
61
+ readonly wire: "uid";
62
+ };
63
+ readonly deviceId: {
64
+ readonly kind: "string";
65
+ readonly wire: "device_id";
66
+ };
67
+ readonly sessionId: {
68
+ readonly kind: "string";
69
+ readonly wire: "session_id";
70
+ };
71
+ /** 供客户端算时钟偏移,**只做展示**。 */
72
+ readonly serverTimeMs: {
73
+ readonly kind: "int";
74
+ readonly wire: "server_time_ms";
75
+ };
76
+ readonly resumed: {
77
+ readonly kind: "bool";
78
+ readonly wire: "resumed";
79
+ };
80
+ readonly pingIntervalSec: {
81
+ readonly kind: "int";
82
+ readonly wire: "ping_interval_sec";
83
+ };
84
+ /**
85
+ * 本次握手用的那张票的到期时刻(Unix 毫秒)。**0 = 未知**。
86
+ *
87
+ * 客户端据此在到期前主动换票,而不是等下一次重连撞上 4401 再被动补救。
88
+ * **禁止自己解析 token 取 exp**——票对客户端是 opaque 的,可能根本不是 JWT。
89
+ */
90
+ readonly tokenExpiresAtMs: {
91
+ readonly kind: "int";
92
+ readonly wire: "token_expires_at_ms";
93
+ };
94
+ readonly limits: {
95
+ readonly kind: "object";
96
+ readonly wire: "limits";
97
+ readonly fields: {
98
+ readonly maxFrameBytes: {
99
+ readonly kind: "int";
100
+ readonly wire: "max_frame_bytes";
101
+ };
102
+ readonly maxCallees: {
103
+ readonly kind: "int";
104
+ readonly wire: "max_callees";
105
+ };
106
+ readonly maxRoomParticipants: {
107
+ readonly kind: "int";
108
+ readonly wire: "max_room_participants";
109
+ };
110
+ readonly maxUserDataBytes: {
111
+ readonly kind: "int";
112
+ readonly wire: "max_user_data_bytes";
113
+ };
114
+ readonly ringTimeoutSecDefault: {
115
+ readonly kind: "int";
116
+ readonly wire: "ring_timeout_sec_default";
117
+ };
118
+ };
119
+ };
120
+ };
121
+ /** ERROR_FIELDS:sys.error 的 data(§7)。 */
122
+ export declare const ERROR_FIELDS: {
123
+ readonly code: {
124
+ readonly kind: "int";
125
+ readonly wire: "code";
126
+ };
127
+ readonly name: {
128
+ readonly kind: "string";
129
+ readonly wire: "name";
130
+ };
131
+ /** 英文固定短语,给开发者看;**禁止直接显示给用户**。 */
132
+ readonly msg: {
133
+ readonly kind: "string";
134
+ readonly wire: "msg";
135
+ };
136
+ readonly forType: {
137
+ readonly kind: "string";
138
+ readonly wire: "for_type";
139
+ };
140
+ readonly retryable: {
141
+ readonly kind: "bool";
142
+ readonly wire: "retryable";
143
+ };
144
+ };
145
+ //# sourceMappingURL=frames.sys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.sys.d.ts","sourceRoot":"","sources":["../../src/signaling/frames.sys.ts"],"names":[],"mappings":"AAEA,mDAAmD;AAEnD,mEAAmE;AACnE,eAAO,MAAM,YAAY,IAAoC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;IAIvB,sBAAsB;;;;;IAEtB,2BAA2B;;;;;CAEG,CAAC;AAEjC,+CAA+C;AAC/C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;CAMM,CAAC;AAEjC,+BAA+B;AAC/B,eAAO,MAAM,eAAe;;;;;;;;;;;;;IAI1B,0BAA0B;;;;;;;;;;;;;IAI1B;;;;;OAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG2B,CAAC;AAEjC,yCAAyC;AACzC,eAAO,MAAM,YAAY;;;;;;;;;IAGvB,kCAAkC;;;;;;;;;;;;;CAIJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ /** sys 域:连接、鉴权、心跳、错误。见 RTC_PROTOCOL.md §1 与 §7。 */
2
+ /** EMPTY_FIELDS 用于 data 恒为 {} 的帧:sys.ping / sys.pong / 各种纯 ack。 */
3
+ export const EMPTY_FIELDS = {};
4
+ /**
5
+ * HELLO_FIELDS:WS 打开后必须在 5 秒内发出的第一帧(§1.2)。
6
+ *
7
+ * token 走首帧而不是 URL 查询串:查询串会进网关日志、Referer 与浏览器历史。
8
+ */
9
+ export const HELLO_FIELDS = {
10
+ protocolVersion: { kind: 'int', wire: 'protocol_version', default: 1 },
11
+ token: { kind: 'string', wire: 'token' },
12
+ deviceId: { kind: 'string', wire: 'device_id' },
13
+ /** 重连恢复用;首次连接为 ''。 */
14
+ sessionId: { kind: 'string', wire: 'session_id' },
15
+ /** 仅用于日志与灰度,**禁止参与逻辑**。 */
16
+ sdk: { kind: 'string', wire: 'sdk' },
17
+ };
18
+ /** LIMITS_FIELDS:服务端下发的限额,让客户端能本地预校验(§2.6)。 */
19
+ export const LIMITS_FIELDS = {
20
+ maxFrameBytes: { kind: 'int', wire: 'max_frame_bytes' },
21
+ maxCallees: { kind: 'int', wire: 'max_callees' },
22
+ maxRoomParticipants: { kind: 'int', wire: 'max_room_participants' },
23
+ maxUserDataBytes: { kind: 'int', wire: 'max_user_data_bytes' },
24
+ ringTimeoutSecDefault: { kind: 'int', wire: 'ring_timeout_sec_default' },
25
+ };
26
+ /** HELLO_OK_FIELDS:鉴权成功的应答。 */
27
+ export const HELLO_OK_FIELDS = {
28
+ uid: { kind: 'string', wire: 'uid' },
29
+ deviceId: { kind: 'string', wire: 'device_id' },
30
+ sessionId: { kind: 'string', wire: 'session_id' },
31
+ /** 供客户端算时钟偏移,**只做展示**。 */
32
+ serverTimeMs: { kind: 'int', wire: 'server_time_ms' },
33
+ resumed: { kind: 'bool', wire: 'resumed' },
34
+ pingIntervalSec: { kind: 'int', wire: 'ping_interval_sec' },
35
+ /**
36
+ * 本次握手用的那张票的到期时刻(Unix 毫秒)。**0 = 未知**。
37
+ *
38
+ * 客户端据此在到期前主动换票,而不是等下一次重连撞上 4401 再被动补救。
39
+ * **禁止自己解析 token 取 exp**——票对客户端是 opaque 的,可能根本不是 JWT。
40
+ */
41
+ tokenExpiresAtMs: { kind: 'int', wire: 'token_expires_at_ms' },
42
+ limits: { kind: 'object', wire: 'limits', fields: LIMITS_FIELDS },
43
+ };
44
+ /** ERROR_FIELDS:sys.error 的 data(§7)。 */
45
+ export const ERROR_FIELDS = {
46
+ code: { kind: 'int', wire: 'code' },
47
+ name: { kind: 'string', wire: 'name' },
48
+ /** 英文固定短语,给开发者看;**禁止直接显示给用户**。 */
49
+ msg: { kind: 'string', wire: 'msg' },
50
+ forType: { kind: 'string', wire: 'for_type' },
51
+ retryable: { kind: 'bool', wire: 'retryable' },
52
+ };
53
+ //# sourceMappingURL=frames.sys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.sys.js","sourceRoot":"","sources":["../../src/signaling/frames.sys.ts"],"names":[],"mappings":"AAEA,mDAAmD;AAEnD,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,EAAiC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE;IACtE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IACxC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IAC/C,sBAAsB;IACtB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACjD,2BAA2B;IAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;CACN,CAAC;AAEjC,+CAA+C;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACvD,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;IAChD,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE;IACnE,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC9D,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE;CAC1C,CAAC;AAEjC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;IACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;IAC/C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;IACjD,0BAA0B;IAC1B,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACrD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE;IAC3D;;;;;OAKG;IACH,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE;IAC9D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;CACnC,CAAC;AAEjC,yCAAyC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;IACnC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC,kCAAkC;IAClC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;IACpC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;CAChB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { KickedOutReason } from './connectionTypes.js';
2
+ /**
3
+ * 握手失败该不该一次就放弃,放弃的话按哪种原因抛给宿主。返回 `null` = 照常退避重连。
4
+ *
5
+ * **不可重试 ≠ 参数不对**,三类的处置完全不同,合成一类等于给宿主一条错的建议:
6
+ *
7
+ * | 码 | 抛什么 | 宿主该做什么 |
8
+ * |---|---|---|
9
+ * | 1101 `token_invalid` | `authExpired` | **换一枚票再来**。签名密钥轮换、票被吊销都长这样,而换票正好救得了 |
10
+ * | 1104 `kicked_out` | `takenOver` | 回登录页。服务端的吊销名单走的就是「`sys.error{1104}` + 4403」这一对 |
11
+ * | 1004 / 1006 / 1106 … | `configRejected` | 去改配置。换票和重试都救不了——`device_id` 里那个空格不会因为再来一次就没了 |
12
+ *
13
+ * 判据仍然是错误码表里的 `retryable`,不在这里另立一张名单——那张表是四端共用的
14
+ * 一致性向量的一部分(`error_codes.json`),另立名单等于给它开了个后门。
15
+ *
16
+ * # 两条边界
17
+ *
18
+ * 1. **local 组的码不是服务端的裁决。** `Connection.close()` 会拿 `2005 invalid_state`
19
+ * (它 `retryable === false`)把在飞的握手结掉,那是宿主自己按的 logout。
20
+ * 不挡掉的话一次正常的 logout 会报成「服务端拒了你的参数」——而静默续期正是
21
+ * 先 logout 再换票,会当场变成把人踹回登录页。
22
+ * 超时(2004)与断线(2003)也在 local 组,照常走重连。
23
+ * 2. **本端不认识的码信帧上自带的 `retryable`**(见 `RtcError.unknownCodeRetryable`),
24
+ * 不能拿折算后的 1501 当真——那样服务端新加的终局码会退化成无限重连。
25
+ *
26
+ * # 为什么不像 4401 那样给三次机会
27
+ *
28
+ * 4401 给三次是因为「票刚好过期」换一枚新票就能好,而重连时宿主可能已经
29
+ * `updateToken` 了。这里不一样:**`device_id` 里有个空格这件事,重连一万次
30
+ * 它还是有空格**。给三次机会只是把同一条错误在日志里刷三遍,把真正的原因埋掉。
31
+ *
32
+ * 独立成一个纯函数(而不是留在 `Connection` 里)有两个好处:这条判据能被直接钉住,
33
+ * 不必每次都摆一套假服务端;`connection.ts` 也不用为它继续长胖。
34
+ */
35
+ export declare function handshakeGiveUpReason(err: unknown): KickedOutReason | null;
36
+ //# sourceMappingURL=handshakeGiveUp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshakeGiveUp.d.ts","sourceRoot":"","sources":["../../src/signaling/handshakeGiveUp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAQ1E"}
@@ -0,0 +1,48 @@
1
+ import { ErrorCode, isLocalError, isRtcError } from '../errors.js';
2
+ /**
3
+ * 握手失败该不该一次就放弃,放弃的话按哪种原因抛给宿主。返回 `null` = 照常退避重连。
4
+ *
5
+ * **不可重试 ≠ 参数不对**,三类的处置完全不同,合成一类等于给宿主一条错的建议:
6
+ *
7
+ * | 码 | 抛什么 | 宿主该做什么 |
8
+ * |---|---|---|
9
+ * | 1101 `token_invalid` | `authExpired` | **换一枚票再来**。签名密钥轮换、票被吊销都长这样,而换票正好救得了 |
10
+ * | 1104 `kicked_out` | `takenOver` | 回登录页。服务端的吊销名单走的就是「`sys.error{1104}` + 4403」这一对 |
11
+ * | 1004 / 1006 / 1106 … | `configRejected` | 去改配置。换票和重试都救不了——`device_id` 里那个空格不会因为再来一次就没了 |
12
+ *
13
+ * 判据仍然是错误码表里的 `retryable`,不在这里另立一张名单——那张表是四端共用的
14
+ * 一致性向量的一部分(`error_codes.json`),另立名单等于给它开了个后门。
15
+ *
16
+ * # 两条边界
17
+ *
18
+ * 1. **local 组的码不是服务端的裁决。** `Connection.close()` 会拿 `2005 invalid_state`
19
+ * (它 `retryable === false`)把在飞的握手结掉,那是宿主自己按的 logout。
20
+ * 不挡掉的话一次正常的 logout 会报成「服务端拒了你的参数」——而静默续期正是
21
+ * 先 logout 再换票,会当场变成把人踹回登录页。
22
+ * 超时(2004)与断线(2003)也在 local 组,照常走重连。
23
+ * 2. **本端不认识的码信帧上自带的 `retryable`**(见 `RtcError.unknownCodeRetryable`),
24
+ * 不能拿折算后的 1501 当真——那样服务端新加的终局码会退化成无限重连。
25
+ *
26
+ * # 为什么不像 4401 那样给三次机会
27
+ *
28
+ * 4401 给三次是因为「票刚好过期」换一枚新票就能好,而重连时宿主可能已经
29
+ * `updateToken` 了。这里不一样:**`device_id` 里有个空格这件事,重连一万次
30
+ * 它还是有空格**。给三次机会只是把同一条错误在日志里刷三遍,把真正的原因埋掉。
31
+ *
32
+ * 独立成一个纯函数(而不是留在 `Connection` 里)有两个好处:这条判据能被直接钉住,
33
+ * 不必每次都摆一套假服务端;`connection.ts` 也不用为它继续长胖。
34
+ */
35
+ export function handshakeGiveUpReason(err) {
36
+ if (!isRtcError(err) || isLocalError(err.code))
37
+ return null;
38
+ // 未知码优先信帧上那一位;连帧上都没有就当可重试,维持「不认识就先退避着」的老行为。
39
+ const retryable = err.unknownCodeRetryable ?? err.retryable;
40
+ if (retryable)
41
+ return null;
42
+ if (err.code === ErrorCode.tokenInvalid)
43
+ return 'authExpired';
44
+ if (err.code === ErrorCode.kickedOut)
45
+ return 'takenOver';
46
+ return 'configRejected';
47
+ }
48
+ //# sourceMappingURL=handshakeGiveUp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshakeGiveUp.js","sourceRoot":"","sources":["../../src/signaling/handshakeGiveUp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,4CAA4C;IAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,SAAS,CAAC;IAC5D,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY;QAAE,OAAO,aAAa,CAAC;IAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,SAAS;QAAE,OAAO,WAAW,CAAC;IACzD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * 心跳(RTC_PROTOCOL.md §1.3)。
3
+ *
4
+ * **判活条件是「收到对端任何一帧」,不是「pong 回来了」**——服务端发的任何帧
5
+ * 都证明它还活着。所以 `noteFrameReceived()` 由读循环无差别调用。
6
+ *
7
+ * 从 Connection 里拆出来是为了体量红线(CONVENTIONS §2),
8
+ * 顺带让「连续 3 个周期没动静就判死」这条规则有了独立的测试面。
9
+ */
10
+ /** MISS_LIMIT 是判死前允许连续静默的周期数(§1.3:3 个周期 = 45 秒)。 */
11
+ export declare const MISS_LIMIT = 3;
12
+ /** HeartbeatCallbacks 是心跳的两个出口。 */
13
+ export interface HeartbeatCallbacks {
14
+ /** 该发一个 sys.ping 了。 */
15
+ sendPing: () => void;
16
+ /** 连续静默超限,连接该判死了。 */
17
+ onDead: () => void;
18
+ }
19
+ /** Heartbeat 管理 ping 定时器与静默计数。 */
20
+ export declare class Heartbeat {
21
+ private readonly callbacks;
22
+ private timer;
23
+ private missed;
24
+ constructor(callbacks: HeartbeatCallbacks);
25
+ /** start 按服务端下发的间隔起心跳。重复调用会先停掉旧的。 */
26
+ start(intervalSec: number): void;
27
+ /** noteFrameReceived 由读循环无差别调用:收到任何帧都算对端活着。 */
28
+ noteFrameReceived(): void;
29
+ /** stop 停掉心跳。幂等。 */
30
+ stop(): void;
31
+ /** missedBeats 供测试与诊断观察。 */
32
+ get missedBeats(): number;
33
+ }
34
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/signaling/heartbeat.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,oDAAoD;AACpD,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,kCAAkC;AAClC,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,MAAM,CAAK;gBAEU,SAAS,EAAE,kBAAkB;IAE1D,qCAAqC;IACrC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAgBhC,+CAA+C;IAC/C,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB;IACpB,IAAI,IAAI,IAAI;IAOZ,4BAA4B;IAC5B,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
@@ -0,0 +1,52 @@
1
+ import { logger } from '../logger.js';
2
+ /**
3
+ * 心跳(RTC_PROTOCOL.md §1.3)。
4
+ *
5
+ * **判活条件是「收到对端任何一帧」,不是「pong 回来了」**——服务端发的任何帧
6
+ * 都证明它还活着。所以 `noteFrameReceived()` 由读循环无差别调用。
7
+ *
8
+ * 从 Connection 里拆出来是为了体量红线(CONVENTIONS §2),
9
+ * 顺带让「连续 3 个周期没动静就判死」这条规则有了独立的测试面。
10
+ */
11
+ /** MISS_LIMIT 是判死前允许连续静默的周期数(§1.3:3 个周期 = 45 秒)。 */
12
+ export const MISS_LIMIT = 3;
13
+ /** Heartbeat 管理 ping 定时器与静默计数。 */
14
+ export class Heartbeat {
15
+ callbacks;
16
+ timer = null;
17
+ missed = 0;
18
+ constructor(callbacks) {
19
+ this.callbacks = callbacks;
20
+ }
21
+ /** start 按服务端下发的间隔起心跳。重复调用会先停掉旧的。 */
22
+ start(intervalSec) {
23
+ this.stop();
24
+ this.missed = 0;
25
+ const intervalMs = Math.max(1, intervalSec) * 1000;
26
+ this.timer = setInterval(() => {
27
+ this.missed += 1;
28
+ if (this.missed > MISS_LIMIT) {
29
+ logger.warn('心跳超时,判定连接已死', { missed: this.missed });
30
+ this.callbacks.onDead();
31
+ return;
32
+ }
33
+ this.callbacks.sendPing();
34
+ }, intervalMs);
35
+ }
36
+ /** noteFrameReceived 由读循环无差别调用:收到任何帧都算对端活着。 */
37
+ noteFrameReceived() {
38
+ this.missed = 0;
39
+ }
40
+ /** stop 停掉心跳。幂等。 */
41
+ stop() {
42
+ if (this.timer !== null) {
43
+ clearInterval(this.timer);
44
+ this.timer = null;
45
+ }
46
+ }
47
+ /** missedBeats 供测试与诊断观察。 */
48
+ get missedBeats() {
49
+ return this.missed;
50
+ }
51
+ }
52
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/signaling/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;GAQG;AAEH,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAU5B,kCAAkC;AAClC,MAAM,OAAO,SAAS;IAIS;IAHrB,KAAK,GAA0C,IAAI,CAAC;IACpD,MAAM,GAAG,CAAC,CAAC;IAEnB,YAA6B,SAA6B;QAA7B,cAAS,GAAT,SAAS,CAAoB;IAAG,CAAC;IAE9D,qCAAqC;IACrC,KAAK,CAAC,WAAmB;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;QAEnD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC;IAED,+CAA+C;IAC/C,iBAAiB;QACf,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import { RtcError } from '../errors.js';
2
+ import type { Envelope } from './envelope.js';
3
+ /**
4
+ * 在途请求表:**按 `req_id` 配对,不按帧类型**。
5
+ *
6
+ * pub 侧的 `room.offer` 是由 **`room.answer`** 应答的(协议 §3.3 固定 offerer),
7
+ * 只看类型对不上号;按 req_id 配对还顺带解决了「多个同类请求在途」的问题。
8
+ */
9
+ /** RequestResult 是一次请求的应答。 */
10
+ export interface RequestResult {
11
+ readonly envelope: Envelope;
12
+ readonly data: Record<string, unknown>;
13
+ }
14
+ /** PendingRequests 管理在途请求与它们的超时。 */
15
+ export declare class PendingRequests {
16
+ private readonly timeoutMs;
17
+ private readonly waiters;
18
+ constructor(timeoutMs: number);
19
+ /** track 登记一个在途请求,返回它的 Promise。 */
20
+ track(reqId: string, type: string): Promise<RequestResult>;
21
+ /** abandon 撤掉一个还没发出去就失败的请求。 */
22
+ abandon(reqId: string): void;
23
+ /**
24
+ * settle 用一帧应答结算在途请求。
25
+ * 返回 false 表示这个 req_id 没人在等——调用方应当把它当事件处理。
26
+ */
27
+ settle(envelope: Envelope, decode: (env: Envelope) => Record<string, unknown>): boolean;
28
+ /** rejectAll 在断线时把全部在途请求失败掉——它们的应答永远不会来了。 */
29
+ rejectAll(error: RtcError): void;
30
+ /** size 供测试与诊断观察。 */
31
+ get size(): number;
32
+ }
33
+ //# sourceMappingURL=pendingRequests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingRequests.d.ts","sourceRoot":"","sources":["../../src/signaling/pendingRequests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAoB,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;GAKG;AAEH,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AASD,oCAAoC;AACpC,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;gBAExB,SAAS,EAAE,MAAM;IAE9C,mCAAmC;IACnC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAU1D,+BAA+B;IAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO5B;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAcvF,6CAA6C;IAC7C,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAQhC,qBAAqB;IACrB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}