@tencent-rtc/mcp 1.3.8 → 1.4.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 (429) hide show
  1. package/package.json +2 -2
  2. package/resource/doc/{tuicallkit/iOS/faq.md → callkit/faq/android-faq.md} +10 -22
  3. package/resource/doc/{tuicallkit/android/faq.md → callkit/faq/flutter-faq.md} +10 -22
  4. package/resource/doc/{tuicallkit/flutter/faq.md → callkit/faq/ios-faq.md} +10 -22
  5. package/resource/doc/callkit/preset/android/api.md +296 -0
  6. package/resource/doc/callkit/preset/android/integration.md +430 -0
  7. package/resource/doc/callkit/preset/flutter/api.md +410 -0
  8. package/resource/doc/{tuicallkit → callkit/preset}/flutter/integration.md +35 -97
  9. package/resource/doc/callkit/preset/ios/api.md +80 -0
  10. package/resource/doc/{tuicallkit/iOS → callkit/preset/ios}/integration.md +37 -118
  11. package/resource/doc/callkit/preset/react/api.md +501 -0
  12. package/resource/doc/{tuicallkit → callkit/preset}/react/integration.md +5 -20
  13. package/resource/doc/callkit/preset/vue/api.md +501 -0
  14. package/resource/doc/{tuicallkit → callkit/preset}/vue/integration.md +4 -19
  15. package/resource/doc/{chatuikit → chatkit}/android/faq.md +29 -38
  16. package/resource/doc/{chatuikit → chatkit}/android/features/theme.md +22 -166
  17. package/resource/doc/chatkit/android/integration.md +490 -0
  18. package/resource/doc/chatkit/faq/android_sdk/client-api.md +281 -0
  19. package/resource/doc/{chatuikit → chatkit}/faq/common/product.md +0 -1
  20. package/resource/doc/{chatuikit → chatkit}/faq/common/server.md +1 -1
  21. package/resource/doc/chatkit/faq/flutter_sdk/client-api.md +199 -0
  22. package/resource/doc/{chatuikit → chatkit}/faq/flutter_sdk/faq.md +3 -3
  23. package/resource/doc/chatkit/faq/ios_sdk/client-api.md +235 -0
  24. package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/faq.md +3 -3
  25. package/resource/doc/{chatuikit → chatkit}/flutter/features/theme.md +22 -166
  26. package/resource/doc/{chatuikit → chatkit}/flutter/integration.md +19 -88
  27. package/resource/doc/{chatuikit/iOS → chatkit/ios}/faq.md +29 -38
  28. package/resource/doc/{chatuikit/iOS → chatkit/ios}/features/theme.md +27 -176
  29. package/resource/doc/{chatuikit/iOS → chatkit/ios}/integration.md +47 -165
  30. package/resource/doc/{chatuikit → chatkit}/react/components/avatar.md +0 -33
  31. package/resource/doc/{chatuikit → chatkit}/react/components/chat-header.md +8 -49
  32. package/resource/doc/{chatuikit → chatkit}/react/components/chat-setting.md +6 -35
  33. package/resource/doc/{chatuikit → chatkit}/react/components/chat.md +0 -6
  34. package/resource/doc/{chatuikit → chatkit}/react/components/component-list.md +0 -11
  35. package/resource/doc/{chatuikit → chatkit}/react/components/contact-list.md +96 -502
  36. package/resource/doc/chatkit/react/components/conversation-actions.md +174 -0
  37. package/resource/doc/chatkit/react/components/conversation-list.md +333 -0
  38. package/resource/doc/chatkit/react/components/conversation-preview.md +118 -0
  39. package/resource/doc/chatkit/react/components/conversation-search.md +60 -0
  40. package/resource/doc/{chatuikit → chatkit}/react/components/message-input.md +36 -337
  41. package/resource/doc/{chatuikit → chatkit}/react/components/message-list.md +20 -212
  42. package/resource/doc/chatkit/react/components/search.md +243 -0
  43. package/resource/doc/{chatuikit → chatkit}/react/components/tuikit.md +1 -47
  44. package/resource/doc/{chatuikit → chatkit}/react/integration.md +21 -81
  45. package/resource/doc/{chatuikit → chatkit}/vue/components/avatar.md +0 -33
  46. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-header.md +7 -48
  47. package/resource/doc/{chatuikit → chatkit}/vue/components/chat-setting.md +3 -5
  48. package/resource/doc/{chatuikit → chatkit}/vue/components/chat.md +0 -5
  49. package/resource/doc/{chatuikit → chatkit}/vue/components/component-list.md +0 -15
  50. package/resource/doc/chatkit/vue/components/contact-list.md +271 -0
  51. package/resource/doc/chatkit/vue/components/conversation-actions.md +228 -0
  52. package/resource/doc/{chatuikit → chatkit}/vue/components/conversation-list.md +42 -492
  53. package/resource/doc/chatkit/vue/components/conversation-preview.md +213 -0
  54. package/resource/doc/chatkit/vue/components/conversation-search.md +50 -0
  55. package/resource/doc/{chatuikit → chatkit}/vue/components/message-input.md +2 -223
  56. package/resource/doc/{chatuikit → chatkit}/vue/components/message-list.md +23 -252
  57. package/resource/doc/{chatuikit → chatkit}/vue/components/search.md +73 -640
  58. package/resource/doc/{chatuikit → chatkit}/vue/components/tuikit.md +7 -21
  59. package/resource/doc/{chatuikit → chatkit}/vue/components/userpicker.md +3 -62
  60. package/resource/doc/{chatuikit → chatkit}/vue/faq.md +1 -1
  61. package/resource/doc/{chatuikit → chatkit}/vue/integration.md +22 -23
  62. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audience-list.md +18 -89
  63. package/resource/doc/livekit/{live → core-sdk/live}/android/live-audio-effect.md +34 -192
  64. package/resource/doc/livekit/{live → core-sdk/live}/android/live-barrage.md +28 -141
  65. package/resource/doc/livekit/{live → core-sdk/live}/android/live-base-beauty.md +20 -112
  66. package/resource/doc/livekit/{live → core-sdk/live}/android/live-co-guest-interaction.md +59 -193
  67. package/resource/doc/livekit/{live → core-sdk/live}/android/live-gift.md +75 -455
  68. package/resource/doc/livekit/{live → core-sdk/live}/android/live-host-interaction.md +94 -344
  69. package/resource/doc/livekit/{live → core-sdk/live}/android/live-integration.md +107 -515
  70. package/resource/doc/livekit/{live → core-sdk/live}/android/live-live-list.md +33 -173
  71. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audience-list.md +14 -93
  72. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-audio-effect.md +34 -179
  73. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-barrage.md +19 -107
  74. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-base-beauty.md +24 -166
  75. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-co-guest-interaction.md +56 -163
  76. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-gift.md +69 -443
  77. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-host-interaction.md +117 -364
  78. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-integration.md +107 -492
  79. package/resource/doc/livekit/{live → core-sdk/live}/flutter/live-live-list.md +23 -165
  80. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audience-list.md +35 -111
  81. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-audio-effect.md +35 -193
  82. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-barrage.md +31 -144
  83. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-base-beauty.md +24 -116
  84. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-co-guest-interaction.md +37 -171
  85. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-gift.md +79 -459
  86. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-host-interaction.md +69 -320
  87. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-integration.md +85 -502
  88. package/resource/doc/livekit/{live → core-sdk/live}/ios/live-live-list.md +32 -169
  89. package/resource/doc/livekit/core-sdk/voice/android/voice-audience-list.md +263 -0
  90. package/resource/doc/livekit/core-sdk/voice/android/voice-audio-effect.md +222 -0
  91. package/resource/doc/livekit/core-sdk/voice/android/voice-barrage.md +452 -0
  92. package/resource/doc/livekit/core-sdk/voice/android/voice-co-guest-interaction.md +536 -0
  93. package/resource/doc/livekit/core-sdk/voice/android/voice-gift.md +442 -0
  94. package/resource/doc/livekit/core-sdk/voice/android/voice-host-interaction.md +489 -0
  95. package/resource/doc/livekit/core-sdk/voice/android/voice-integration.md +574 -0
  96. package/resource/doc/livekit/core-sdk/voice/android/voice-room-list.md +435 -0
  97. package/resource/doc/livekit/core-sdk/voice/flutter/voice-co-guest-interaction.md +516 -0
  98. package/resource/doc/livekit/core-sdk/voice/flutter/voice-integration.md +576 -0
  99. package/resource/doc/livekit/core-sdk/voice/ios/voice-audience-list.md +263 -0
  100. package/resource/doc/livekit/core-sdk/voice/ios/voice-audio-effect.md +212 -0
  101. package/resource/doc/livekit/core-sdk/voice/ios/voice-barrage.md +404 -0
  102. package/resource/doc/livekit/core-sdk/voice/ios/voice-co-guest-interaction.md +499 -0
  103. package/resource/doc/livekit/core-sdk/voice/ios/voice-gift.md +403 -0
  104. package/resource/doc/livekit/core-sdk/voice/ios/voice-host-interaction.md +552 -0
  105. package/resource/doc/livekit/core-sdk/voice/ios/voice-integration.md +514 -0
  106. package/resource/doc/livekit/core-sdk/voice/ios/voice-room-list.md +348 -0
  107. package/resource/doc/livekit/faq/common/{error_code.md → error-code.md} +2 -2
  108. package/resource/doc/livekit/preset/live/vue/api-reference/index.md +780 -0
  109. package/resource/doc/livekit/preset/live/vue/components/barrage.md +291 -0
  110. package/resource/doc/livekit/{live → preset/live}/vue/components/co-guest-panel.md +10 -49
  111. package/resource/doc/livekit/{live → preset/live}/vue/components/live-audience-list.md +26 -144
  112. package/resource/doc/livekit/{live → preset/live}/vue/components/live-scene-panel.md +12 -75
  113. package/resource/doc/livekit/{live → preset/live}/vue/components/live-view.md +36 -227
  114. package/resource/doc/livekit/preset/live/vue/components/stream-mixer.md +215 -0
  115. package/resource/doc/livekit/preset/live/vue/faq.md +1 -0
  116. package/resource/doc/livekit/preset/live/vue/live-list-integration.md +241 -0
  117. package/resource/doc/livekit/preset/live/vue/live-player-desk-integration.md +299 -0
  118. package/resource/doc/livekit/preset/live/vue/live-player-h5-integration.md +300 -0
  119. package/resource/doc/livekit/preset/live/vue/live-pusher-integration.md +743 -0
  120. package/resource/doc/roomkit/vue/faq.md +1 -0
  121. package/resource/doc/roomkit/vue/features/call-user-to-room.md +17 -53
  122. package/resource/doc/roomkit/vue/features/device-detection.md +30 -48
  123. package/resource/doc/roomkit/vue/features/device-state.md +24 -44
  124. package/resource/doc/roomkit/vue/features/free-beauty-panel.md +13 -36
  125. package/resource/doc/roomkit/vue/features/room-chat.md +31 -89
  126. package/resource/doc/roomkit/vue/features/room-participant-state.md +28 -50
  127. package/resource/doc/roomkit/vue/features/room-state.md +25 -34
  128. package/resource/doc/roomkit/vue/features/room-view.md +30 -125
  129. package/resource/doc/roomkit/vue/features/schedule-room.md +9 -40
  130. package/resource/doc/roomkit/vue/features/screen-share.md +22 -90
  131. package/resource/doc/roomkit/vue/features/virtual-background.md +13 -29
  132. package/resource/doc/roomkit/vue/integration.md +173 -337
  133. package/resource/doc/rtcengine/faq/common/error_code.md +1 -0
  134. package/resource/doc/rtcengine/faq/web/web.md +14 -24
  135. package/resource/doc/rtcengine/web/api.md +1 -3
  136. package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +3 -10
  137. package/resource/doc/rtcengine/web/how_to_run_web_sdk_demo.md +1 -5
  138. package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +1 -2
  139. package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +2 -4
  140. package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +3 -5
  141. package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +1 -7
  142. package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +0 -2
  143. package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +4 -8
  144. package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +11 -11
  145. package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +12 -88
  146. package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +5 -5
  147. package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +30 -37
  148. package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +13 -90
  149. package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +1 -2
  150. package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +1 -2
  151. package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +19 -19
  152. package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +1 -1
  153. package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +4 -5
  154. package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +3 -3
  155. package/resource/doc/trtc/C++/ITRTCCloud.md +686 -2835
  156. package/resource/doc/trtc/C++/ITRTCStatistics.md +53 -308
  157. package/resource/doc/trtc/C++/ITXAudioEffectManager.md +202 -1022
  158. package/resource/doc/trtc/C++/ITXDeviceManager.md +126 -767
  159. package/resource/doc/trtc/C++/TRTCCloudCallback.md +579 -2147
  160. package/resource/doc/trtc/C++/TRTCTypeDef.md +703 -3378
  161. package/resource/doc/trtc/C++/TXLiteAVCode.md +116 -908
  162. package/resource/doc/trtc/android/TRTCCloud.md +606 -2573
  163. package/resource/doc/trtc/android/TRTCCloudDef.md +752 -3640
  164. package/resource/doc/trtc/android/TRTCCloudListener.md +581 -2008
  165. package/resource/doc/trtc/android/TRTCStatistics.md +48 -278
  166. package/resource/doc/trtc/android/TXAudioEffectManager.md +202 -1022
  167. package/resource/doc/trtc/android/TXBeautyManager.md +127 -704
  168. package/resource/doc/trtc/android/TXDeviceManager.md +51 -318
  169. package/resource/doc/trtc/android/TXLiteAVCode.md +114 -892
  170. package/resource/doc/trtc/iOS/TRTCCloud.md +694 -2904
  171. package/resource/doc/trtc/iOS/TRTCCloudDef.md +726 -3498
  172. package/resource/doc/trtc/iOS/TRTCCloudDelegate.md +543 -2028
  173. package/resource/doc/trtc/iOS/TRTCStatistics.md +48 -278
  174. package/resource/doc/trtc/iOS/TXAudioEffectManager.md +174 -877
  175. package/resource/doc/trtc/iOS/TXBeautyManager.md +128 -710
  176. package/resource/doc/trtc/iOS/TXDeviceManager.md +129 -772
  177. package/resource/doc/trtc/iOS/TXLiteAVCode.md +117 -915
  178. package/server.js +1 -5
  179. package/server.js.map +1 -1
  180. package/tools/call/get_callkit_api.js +32 -0
  181. package/tools/call/get_callkit_api.js.map +1 -0
  182. package/tools/call/get_native_call_uikit_integration.js +34 -0
  183. package/tools/call/get_native_call_uikit_integration.js.map +1 -0
  184. package/tools/call/{get-web-call-integration.js → get_web_call_uikit_integration.js} +13 -8
  185. package/tools/call/get_web_call_uikit_integration.js.map +1 -0
  186. package/tools/chat/get_native_chat_uikit_feature_detail.js +34 -0
  187. package/tools/chat/get_native_chat_uikit_feature_detail.js.map +1 -0
  188. package/tools/chat/get_native_chat_uikit_integration.js +45 -0
  189. package/tools/chat/get_native_chat_uikit_integration.js.map +1 -0
  190. package/tools/chat/get_web_chat_uikit_component_detail.js +34 -0
  191. package/tools/chat/get_web_chat_uikit_component_detail.js.map +1 -0
  192. package/tools/chat/get_web_chat_uikit_integration.js +45 -0
  193. package/tools/chat/get_web_chat_uikit_integration.js.map +1 -0
  194. package/tools/common/get_faq.js +265 -0
  195. package/tools/common/get_faq.js.map +1 -0
  196. package/tools/common/{get-usersig.js → get_usersig.js} +6 -3
  197. package/tools/common/get_usersig.js.map +1 -0
  198. package/tools/common/present_framework_choice.js +63 -0
  199. package/tools/common/present_framework_choice.js.map +1 -0
  200. package/tools/definitions/get_callkit_api_def.js +29 -0
  201. package/tools/definitions/get_callkit_api_def.js.map +1 -0
  202. package/tools/definitions/get_faq_def.js +17 -18
  203. package/tools/definitions/get_faq_def.js.map +1 -1
  204. package/tools/definitions/get_native_call_uikit_integration_def.js +15 -18
  205. package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
  206. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js +31 -0
  207. package/tools/definitions/get_native_chat_uikit_feature_detail_def.js.map +1 -0
  208. package/tools/definitions/get_native_chat_uikit_integration_def.js +16 -19
  209. package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
  210. package/tools/definitions/get_native_livekit_core_features_def.js +34 -0
  211. package/tools/definitions/get_native_livekit_core_features_def.js.map +1 -0
  212. package/tools/definitions/get_native_livekit_core_integration_def.js +34 -0
  213. package/tools/definitions/get_native_livekit_core_integration_def.js.map +1 -0
  214. package/tools/definitions/get_native_trtc_sdk_docs_def.js +32 -0
  215. package/tools/definitions/get_native_trtc_sdk_docs_def.js.map +1 -0
  216. package/tools/definitions/get_usersig_def.js +17 -22
  217. package/tools/definitions/get_usersig_def.js.map +1 -1
  218. package/tools/definitions/get_web_call_uikit_integration_def.js +15 -7
  219. package/tools/definitions/get_web_call_uikit_integration_def.js.map +1 -1
  220. package/tools/definitions/get_web_chat_uikit_component_detail_def.js +17 -49
  221. package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
  222. package/tools/definitions/get_web_chat_uikit_integration_def.js +16 -19
  223. package/tools/definitions/get_web_chat_uikit_integration_def.js.map +1 -1
  224. package/tools/definitions/get_web_live_uikit_integration_def.js +15 -18
  225. package/tools/definitions/get_web_live_uikit_integration_def.js.map +1 -1
  226. package/tools/definitions/get_web_livekit_api_def.js +30 -0
  227. package/tools/definitions/get_web_livekit_api_def.js.map +1 -0
  228. package/tools/definitions/get_web_livekit_component_detail_def.js +32 -0
  229. package/tools/definitions/get_web_livekit_component_detail_def.js.map +1 -0
  230. package/tools/definitions/get_web_room_uikit_integration_def.js +15 -30
  231. package/tools/definitions/get_web_room_uikit_integration_def.js.map +1 -1
  232. package/tools/definitions/get_web_roomkit_feature_detail_def.js +31 -0
  233. package/tools/definitions/get_web_roomkit_feature_detail_def.js.map +1 -0
  234. package/tools/definitions/get_web_trtc_sdk_api_def.js +27 -0
  235. package/tools/definitions/get_web_trtc_sdk_api_def.js.map +1 -0
  236. package/tools/definitions/get_web_trtc_sdk_integration_def.js +27 -0
  237. package/tools/definitions/get_web_trtc_sdk_integration_def.js.map +1 -0
  238. package/tools/definitions/get_web_trtc_sdk_plugin_def.js +27 -0
  239. package/tools/definitions/get_web_trtc_sdk_plugin_def.js.map +1 -0
  240. package/tools/definitions/present_framework_choice_def.js +24 -12
  241. package/tools/definitions/present_framework_choice_def.js.map +1 -1
  242. package/tools/index.js +47 -59
  243. package/tools/index.js.map +1 -1
  244. package/tools/live/get_native_livekit_core_features.js +65 -0
  245. package/tools/live/get_native_livekit_core_features.js.map +1 -0
  246. package/tools/live/get_native_livekit_core_integration.js +59 -0
  247. package/tools/live/get_native_livekit_core_integration.js.map +1 -0
  248. package/tools/live/get_web_live_uikit_integration.js +48 -0
  249. package/tools/live/get_web_live_uikit_integration.js.map +1 -0
  250. package/tools/live/get_web_livekit_api.js +32 -0
  251. package/tools/live/get_web_livekit_api.js.map +1 -0
  252. package/tools/live/get_web_livekit_component_detail.js +34 -0
  253. package/tools/live/get_web_livekit_component_detail.js.map +1 -0
  254. package/tools/room/{get-web-room-integration.js → get_web_room_uikit_integration.js} +13 -14
  255. package/tools/room/get_web_room_uikit_integration.js.map +1 -0
  256. package/tools/room/{get-web-room-feature-detail.js → get_web_roomkit_feature_detail.js} +30 -31
  257. package/tools/room/get_web_roomkit_feature_detail.js.map +1 -0
  258. package/tools/rtcengine/get_web_trtc_sdk_api.js +31 -0
  259. package/tools/rtcengine/get_web_trtc_sdk_api.js.map +1 -0
  260. package/tools/rtcengine/get_web_trtc_sdk_integration.js +31 -0
  261. package/tools/rtcengine/get_web_trtc_sdk_integration.js.map +1 -0
  262. package/tools/rtcengine/get_web_trtc_sdk_plugin.js +31 -0
  263. package/tools/rtcengine/get_web_trtc_sdk_plugin.js.map +1 -0
  264. package/tools/trtc/get_native_trtc_sdk_docs.js +73 -0
  265. package/tools/trtc/get_native_trtc_sdk_docs.js.map +1 -0
  266. package/utils/generate-structured-result.js +61 -17
  267. package/utils/generate-structured-result.js.map +1 -1
  268. package/utils/report-cls-client.js +12 -1
  269. package/utils/report-cls-client.js.map +1 -1
  270. package/utils/report-es-client.js +2 -2
  271. package/resource/doc/chatuikit/android/integration.md +0 -287
  272. package/resource/doc/chatuikit/faq/android_sdk/client-api.md +0 -1371
  273. package/resource/doc/chatuikit/faq/flutter_sdk/client-api.md +0 -932
  274. package/resource/doc/chatuikit/faq/ios_sdk/client-api.md +0 -1119
  275. package/resource/doc/chatuikit/flutter/workflow.md +0 -941
  276. package/resource/doc/chatuikit/iOS/workflow.md +0 -0
  277. package/resource/doc/chatuikit/react/components/conversation-list.md +0 -1017
  278. package/resource/doc/chatuikit/react/components/search.md +0 -745
  279. package/resource/doc/chatuikit/react/create-group.md +0 -23
  280. package/resource/doc/chatuikit/react/init.md +0 -26
  281. package/resource/doc/chatuikit/react/workflow.md +0 -258
  282. package/resource/doc/chatuikit/vue/components/contact-list.md +0 -679
  283. package/resource/doc/chatuikit/vue/create-group.md +0 -25
  284. package/resource/doc/chatuikit/vue/init.md +0 -40
  285. package/resource/doc/chatuikit/vue/workflow.md +0 -395
  286. package/resource/doc/livekit/live/android/workflow.md +0 -320
  287. package/resource/doc/livekit/live/flutter/workflow.md +0 -353
  288. package/resource/doc/livekit/live/ios/workflow.md +0 -454
  289. package/resource/doc/livekit/live/vue/components/barrage.md +0 -616
  290. package/resource/doc/livekit/live/vue/components/stream-mixer.md +0 -446
  291. package/resource/doc/livekit/live/vue/faq.md +0 -0
  292. package/resource/doc/livekit/live/vue/live-list-integration.md +0 -200
  293. package/resource/doc/livekit/live/vue/live-player-desk-integration.md +0 -269
  294. package/resource/doc/livekit/live/vue/live-player-h5-integration.md +0 -269
  295. package/resource/doc/livekit/live/vue/live-pusher-integration.md +0 -595
  296. package/resource/doc/livekit/live/vue/states/live-state.md +0 -3591
  297. package/resource/doc/livekit/live/vue/workflow.md +0 -218
  298. package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +0 -312
  299. package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +0 -430
  300. package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +0 -679
  301. package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +0 -671
  302. package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +0 -271
  303. package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +0 -849
  304. package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +0 -1046
  305. package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +0 -460
  306. package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +0 -558
  307. package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +0 -865
  308. package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +0 -657
  309. package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +0 -437
  310. package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +0 -335
  311. package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +0 -748
  312. package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +0 -327
  313. package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +0 -507
  314. package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +0 -507
  315. package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +0 -659
  316. package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +0 -284
  317. package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +0 -814
  318. package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +0 -1000
  319. package/resource/doc/roomkit/vue/features/workflow.md +0 -553
  320. package/resource/doc/roomkit/vue/workflow.md +0 -487
  321. package/resource/doc/tuicallkit/android/integration.md +0 -286
  322. package/resource/doc/tuicallkit/android/workflow.md +0 -0
  323. package/resource/doc/tuicallkit/faq/android_sdk/call-observer-api.md +0 -784
  324. package/resource/doc/tuicallkit/faq/android_sdk/callkit-api.md +0 -610
  325. package/resource/doc/tuicallkit/faq/flutter_sdk/call-define-api.md +0 -938
  326. package/resource/doc/tuicallkit/faq/flutter_sdk/call-observer-api.md +0 -897
  327. package/resource/doc/tuicallkit/faq/flutter_sdk/callkit-api.md +0 -469
  328. package/resource/doc/tuicallkit/faq/ios_sdk/call-observer-api.md +0 -781
  329. package/resource/doc/tuicallkit/faq/ios_sdk/callkit-api.md +0 -398
  330. package/resource/doc/tuicallkit/flutter/workflow.md +0 -331
  331. package/resource/doc/tuicallkit/react/api.md +0 -1404
  332. package/resource/doc/tuicallkit/vue/api.md +0 -1406
  333. package/resource/doc/tuicallkit/vue/faq.md +0 -36
  334. package/tools/call/get-native-call-integration.js +0 -43
  335. package/tools/call/get-native-call-integration.js.map +0 -1
  336. package/tools/call/get-web-call-api.js +0 -27
  337. package/tools/call/get-web-call-api.js.map +0 -1
  338. package/tools/call/get-web-call-integration.js.map +0 -1
  339. package/tools/chat/get-native-chat-feature-detail.js +0 -30
  340. package/tools/chat/get-native-chat-feature-detail.js.map +0 -1
  341. package/tools/chat/get-native-chat-integration.js +0 -45
  342. package/tools/chat/get-native-chat-integration.js.map +0 -1
  343. package/tools/chat/get-web-chat-component-detail.js +0 -31
  344. package/tools/chat/get-web-chat-component-detail.js.map +0 -1
  345. package/tools/chat/get-web-chat-integration.js +0 -45
  346. package/tools/chat/get-web-chat-integration.js.map +0 -1
  347. package/tools/chat/get-web-chat-uikit-init.js +0 -28
  348. package/tools/chat/get-web-chat-uikit-init.js.map +0 -1
  349. package/tools/chat/get-web-create-group-doc.js +0 -28
  350. package/tools/chat/get-web-create-group-doc.js.map +0 -1
  351. package/tools/common/get-faq.js +0 -91
  352. package/tools/common/get-faq.js.map +0 -1
  353. package/tools/common/get-usersig.js.map +0 -1
  354. package/tools/common/present-framework-choice.js +0 -16
  355. package/tools/common/present-framework-choice.js.map +0 -1
  356. package/tools/common/record-prompt.js +0 -55
  357. package/tools/common/record-prompt.js.map +0 -1
  358. package/tools/common/record-result.js +0 -60
  359. package/tools/common/record-result.js.map +0 -1
  360. package/tools/definitions/get_native_chat_feature_detail_def.js +0 -32
  361. package/tools/definitions/get_native_chat_feature_detail_def.js.map +0 -1
  362. package/tools/definitions/get_native_live_api_def.js +0 -23
  363. package/tools/definitions/get_native_live_api_def.js.map +0 -1
  364. package/tools/definitions/get_native_live_uikit_extra_features_def.js +0 -87
  365. package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +0 -1
  366. package/tools/definitions/get_native_live_uikit_integration_def.js +0 -49
  367. package/tools/definitions/get_native_live_uikit_integration_def.js.map +0 -1
  368. package/tools/definitions/get_native_live_uikit_interaction_def.js +0 -74
  369. package/tools/definitions/get_native_live_uikit_interaction_def.js.map +0 -1
  370. package/tools/definitions/get_trtc_native_api_def.js +0 -16
  371. package/tools/definitions/get_trtc_native_api_def.js.map +0 -1
  372. package/tools/definitions/get_web_call_uikit_api_def.js +0 -23
  373. package/tools/definitions/get_web_call_uikit_api_def.js.map +0 -1
  374. package/tools/definitions/get_web_chat_uikit_init_def.js +0 -23
  375. package/tools/definitions/get_web_chat_uikit_init_def.js.map +0 -1
  376. package/tools/definitions/get_web_create_group_doc_def.js +0 -18
  377. package/tools/definitions/get_web_create_group_doc_def.js.map +0 -1
  378. package/tools/definitions/get_web_live_state_detail_def.js +0 -19
  379. package/tools/definitions/get_web_live_state_detail_def.js.map +0 -1
  380. package/tools/definitions/get_web_live_uikit_component_detail_def.js +0 -27
  381. package/tools/definitions/get_web_live_uikit_component_detail_def.js.map +0 -1
  382. package/tools/definitions/get_web_room_feature_detail_def.js +0 -95
  383. package/tools/definitions/get_web_room_feature_detail_def.js.map +0 -1
  384. package/tools/definitions/get_web_room_state_detail_def.js +0 -19
  385. package/tools/definitions/get_web_room_state_detail_def.js.map +0 -1
  386. package/tools/definitions/record_prompt_def.js +0 -53
  387. package/tools/definitions/record_prompt_def.js.map +0 -1
  388. package/tools/definitions/record_result_def.js +0 -30
  389. package/tools/definitions/record_result_def.js.map +0 -1
  390. package/tools/live/get-native-live-uikit-integration.js +0 -101
  391. package/tools/live/get-native-live-uikit-integration.js.map +0 -1
  392. package/tools/live/get-web-live-component-detail.js +0 -31
  393. package/tools/live/get-web-live-component-detail.js.map +0 -1
  394. package/tools/live/get-web-live-state-detail.js +0 -31
  395. package/tools/live/get-web-live-state-detail.js.map +0 -1
  396. package/tools/live/get-web-live-uikit-integration.js +0 -52
  397. package/tools/live/get-web-live-uikit-integration.js.map +0 -1
  398. package/tools/live/get_native_live_uikit_extra_features.js +0 -105
  399. package/tools/live/get_native_live_uikit_extra_features.js.map +0 -1
  400. package/tools/live/get_native_live_uikit_interaction.js +0 -101
  401. package/tools/live/get_native_live_uikit_interaction.js.map +0 -1
  402. package/tools/native_live/get-native-live-api.js +0 -31
  403. package/tools/native_live/get-native-live-api.js.map +0 -1
  404. package/tools/room/get-web-room-feature-detail.js.map +0 -1
  405. package/tools/room/get-web-room-integration.js.map +0 -1
  406. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js +0 -28
  407. package/tools/rtcengine/get-rtcengine-web-sdk-integration.js.map +0 -1
  408. package/tools/rtcengine/get-trtc-sdk-faq.js +0 -32
  409. package/tools/rtcengine/get-trtc-sdk-faq.js.map +0 -1
  410. package/tools/rtcengine/get-trtc-web-sdk-api.js +0 -28
  411. package/tools/rtcengine/get-trtc-web-sdk-api.js.map +0 -1
  412. package/tools/rtcengine/get-trtc-web-sdk-faq.js +0 -30
  413. package/tools/rtcengine/get-trtc-web-sdk-faq.js.map +0 -1
  414. package/tools/rtcengine/get-trtc-web-sdk-integration.js +0 -29
  415. package/tools/rtcengine/get-trtc-web-sdk-integration.js.map +0 -1
  416. package/tools/rtcengine/get-trtc-web-sdk-plugin.js +0 -45
  417. package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +0 -1
  418. package/tools/trtc/get-trtc-native-api.js +0 -31
  419. package/tools/trtc/get-trtc-native-api.js.map +0 -1
  420. package/utils/handle-component-name.js +0 -33
  421. package/utils/handle-component-name.js.map +0 -1
  422. /package/resource/doc/{chatuikit/android/workflow.md → callkit/core-sdk/.gitkeep} +0 -0
  423. /package/resource/doc/{tuicallkit/faq/common/error_code.md → callkit/faq/common/error-code.md} +0 -0
  424. /package/resource/doc/{tuicallkit/react/faq.md → callkit/faq/web-faq.md} +0 -0
  425. /package/resource/doc/{chatuikit → chatkit}/faq/common/server_error_code.md +0 -0
  426. /package/resource/doc/{chatuikit → chatkit}/faq/web_sdk/error_code.md +0 -0
  427. /package/resource/doc/{chatuikit → chatkit}/flutter/faq.md +0 -0
  428. /package/resource/doc/{chatuikit → chatkit}/react/faq.md +0 -0
  429. /package/resource/doc/roomkit/faq/common/{error_code.md → error-code.md} +0 -0
@@ -0,0 +1,552 @@
1
+ `AtomicXCore` provides two core modules: `CoHostStore` for **cross-room connections** and `BattleStore` for **PK battles**. This guide explains how to integrate these modules to enable connection and PK features in a voice chat room application.
2
+
3
+ ## Core Concepts
4
+ | **Key Concept** | **Type** | **Core Responsibilities & Description** |
5
+ | --- | --- | --- |
6
+ | **CoHostStore** | `class` | Manages the lifecycle of co-hosting between streamers, providing APIs for co-hosting (requestHostConnection, acceptHostConnection). |
7
+ | **BattleStore** | `class` | Handles signaling and state management for cross-room PK battles, including PK status. |
8
+ | **LiveListStore** | `class` | Fetches the list of live rooms (`fetchLiveList`), enabling discovery of other rooms available for co-hosting. |
9
+ | **LiveSeatStore** | `class` | Manages the status of all seats in a room (including cross-room seats during co-hosting), tracks users joining/leaving seats and microphone status. |
10
+ | **CoHostLayoutTemplate** | `enum` | Defines seat layout templates for co-hosting, such as `.hostStaticVoice6v6`. |
11
+ | **BattleConfig** | `struct` | Configures PK details, including PK duration (`duration`) and whether a response (`needResponse`) is required. |
12
+
13
+ ## Prerequisites
14
+
15
+ Integrate the Quick Start and ensure you have implemented both **streamer start live** and **audience watch** features.
16
+
17
+ ## Streamer Initiates a Co-hosting Session
18
+
19
+ ### Step 1: Fetch Active Streamers
20
+
21
+ To initiate co-hosting or PK, fetch the current list of live rooms and select a target streamer.
22
+
23
+ **Implementation:** Call `LiveListStore.shared.fetchLiveList`.
24
+
25
+ > **Note:**
26
+ >
27
+ > - If the desired live room is missing from the list, verify that the isPublicVisible field in TUILiveInfo was set to true when starting the stream.
28
+ > - This API supports pagination. Use the cursor from the `Result` is `.success` callback for subsequent requests. If the returned cursor is empty, all rooms have been fetched.
29
+ > - For optimal performance, set count to 20.
30
+
31
+ ``` swift
32
+ import AtomicXCore
33
+
34
+ func fetchLiveListForCoHost() {
35
+ var cursor = "" // Initial fetch, cursor is empty
36
+ let count = 20 // Fetch 20 items per request
37
+ let liveListStore = LiveListStore.shared
38
+ liveListStore.fetchLiveList(cursor: cursor, count: count, completion: { [weak self] result in
39
+ guard let self = self else { return }
40
+ switch result {
41
+ case .success:
42
+ print("Live room list fetched successfully")
43
+ // The live room list is updated in LiveListStore.shared.state.value.liveList.
44
+ // Update the co-host invitation panel with the recommended users.
45
+ // inviteAdapter.submitList(LiveListStore.shared.state.value.liveList)
46
+ case .failure(let error):
47
+ print("Failed to fetch live room list: \(error.code), \(error.message)")
48
+ }
49
+ })
50
+ }
51
+ ```
52
+
53
+ ### Step 2: Send a Co-hosting Invitation
54
+
55
+ After selecting a target streamer, use `CoHostStore.requestHostConnection` to send a co-hosting invitation.
56
+
57
+ > **Note:**
58
+ >
59
+ > - AtomicXCore supports up to 9 rooms for cross-room co-hosting, with 50 users per room.
60
+ > - The API supports batch invitations. To check if an invitation to a single room was successful, you need to check if the` Result` is `.success` in the completion callback.
61
+ > - The API accepts extension fields. After the invitation is sent, this field is delivered to the target streamer via the `onCoHostRequestReceived` callback. Use it to pass custom business data, such as "start PK immediately".
62
+
63
+ ``` swift
64
+ import AtomicXCore
65
+
66
+ let targetHostLiveID = "target_host_room_id"
67
+ let layoutTemplate = .hostStaticVoice6v6
68
+ let timeout: TimeInterval = 10 // Invitation timeout (seconds)
69
+ let extraInfo: String = "" // Custom business info, e.g., for direct PK
70
+
71
+ coHostStore.requestHostConnection(
72
+ targetHost: targetHostLiveID,
73
+ layoutTemplate: layoutTemplate,
74
+ timeout: timeout,
75
+ extraInfo: extraInfo,
76
+ completion: { [weak self] result in
77
+ guard let self = self else { return }
78
+ switch result {
79
+ case .success():
80
+ print("Invitation sent successfully")
81
+ case .failure(let error):
82
+ print("Failed to send invitation: \(error.code), \(error.message)")
83
+ }
84
+ }
85
+ )
86
+ ```
87
+
88
+ ### Step 3: Target Streamer Receives Invitation
89
+
90
+ Once the invitation is sent, the target streamer receives the `onCoHostRequestReceived` event from `CoHostEventPublisher`. Listen for this event to display a UI prompt, such as "Streamer invites you to join co-hosting".
91
+ ``` swift
92
+ var coHostStore: CoHostStore {
93
+ return CoHostStore.create(liveID: liveID)
94
+ }
95
+
96
+ coHostStore.coHostEventPublisher
97
+ .receive(on: RunLoop.main)
98
+ .sink { [weak self] event in
99
+ guard let self = self else { return }
100
+ switch event {
101
+ case .onCoHostRequestReceived(let inviter, let extensionInfo):
102
+ // Handle co-hosting invitation
103
+ default:
104
+ break
105
+ }
106
+ }.store(in: &cancellableSet)
107
+ ```
108
+
109
+ ### Step 4: Target Streamer Accepts or Rejects Invitation
110
+
111
+ On the UI, the target streamer can accept or reject the invitation using `acceptHostConnection` or `rejectHostConnection`.
112
+ ``` swift
113
+ import AtomicXCore
114
+ import Combine
115
+
116
+ private var cancellableSet: Set<AnyCancellable> = []
117
+
118
+ var coHostStore: CoHostStore {
119
+ return CoHostStore.create(liveID: liveID)
120
+ }
121
+
122
+ coHostStore.coHostEventPublisher
123
+ .receive(on: RunLoop.main)
124
+ .sink { [weak self] event in
125
+ guard let self = self else { return }
126
+ switch event {
127
+ case .onCoHostRequestReceived(let inviter, let extensionInfo):
128
+ // Accept co-hosting request
129
+ coHostStore.acceptHostConnection(fromHostLiveID: inviter.liveID) { [weak self] result in
130
+ guard let self = self else { return }
131
+ switch result {
132
+ case .success():
133
+ // Accepted
134
+ case .failure(let error):
135
+ // Handle error
136
+ }
137
+ }
138
+ // To reject:
139
+ // coHostStore.rejectHostConnection(fromHostLiveID: inviter.liveID) { ... }
140
+ default:
141
+ break
142
+ }
143
+ }.store(in: &cancellableSet)
144
+ ```
145
+
146
+ ### Step 5: Render Co-hosting UI Layout
147
+
148
+ Once co-hosting is established, listen to `CoHostStore.coHostState.connected` and `LiveSeatStore.liveSeatState.seatList` to update the seat layout dynamically.
149
+ ``` swift
150
+ import AtomicXCore
151
+ import Combine
152
+
153
+ private var cancellableSet: Set<AnyCancellable> = []
154
+
155
+ var liveSeatStore: LiveSeatStore {
156
+ return LiveSeatStore.create(liveID: liveID)
157
+ }
158
+
159
+ // Listen for co-hosting state
160
+ coHostStore.state.subscribe(StatePublisherSelector(keyPath: \CoHostState.connected))
161
+ .receive(on: RunLoop.main)
162
+ .dropFirst()
163
+ .sink { [weak self] connected in
164
+ guard let self = self else { return }
165
+ // If connected > 0, host is in co-hosting state
166
+ }
167
+ .store(in: &cancellableSet)
168
+
169
+ // Listen for seat info to refresh avatars, mute status, etc.
170
+ liveSeatStore.state.subscribe(StatePublisherSelector(keyPath: \LiveSeatState.seatList))
171
+ .removeDuplicates()
172
+ .receive(on: RunLoop.main)
173
+ .sink { [weak self] seatList in
174
+ guard let self = self else { return }
175
+ // Use seatInfo.userInfo.liveID to distinguish local/remote users
176
+ // Use seatInfo.userInfo.microphoneStatus for mute icon
177
+ }
178
+ .store(in: &cancellableSet)
179
+ ```
180
+
181
+ ### Step 6: Invite Additional Streamers During Co-hosting
182
+
183
+ You can invite more streamers to join co-hosting at any time by calling `requestHostConnection` again.
184
+ ``` swift
185
+ import AtomicXCore
186
+
187
+ let targetHostLiveID = "target_host_room_id"
188
+ let layoutTemplate = .hostStaticVoice6v6
189
+ let timeout: TimeInterval = 10
190
+ let extraInfo: String = ""
191
+
192
+ coHostStore.requestHostConnection(
193
+ targetHost: targetHostLiveID,
194
+ layoutTemplate: layoutTemplate,
195
+ timeout: timeout,
196
+ extraInfo: extraInfo,
197
+ completion: { [weak self] result in
198
+ guard let self = self else { return }
199
+ switch result {
200
+ case .success():
201
+ print("Invitation sent successfully")
202
+ case .failure(let error):
203
+ print("Failed to send invitation: \(error.code), \(error.message)")
204
+ }
205
+ }
206
+ )
207
+ ```
208
+
209
+ ### Step 7: Exit Co-hosting
210
+
211
+ To exit co-hosting, call `exitHostConnection`. Other streamers in the session will receive updated seat information and should change their layouts.
212
+ ``` swift
213
+ func onExitButtonClicked() {
214
+ coHostStore.exitHostConnection() { [weak self] result in
215
+ guard let self = self else { return }
216
+ switch result {
217
+ case .success():
218
+ // Exited co-hosting
219
+ case .failure(let error):
220
+ // Handle error
221
+ }
222
+ }
223
+ }
224
+ ```
225
+
226
+ PK Streamer Initiates a PK BattleStreamers can start PK battles using two main flows, depending on the room state before PK begins:
227
+ | **PK Mode** | **Room State (Before PK)** | **Room State (After PK)** |
228
+ | --- | --- | --- |
229
+ | **Scenario 1: PK after co-hosting** | Both sides **already co-hosting** | Return to co-hosting state |
230
+ | **Scenario 2: Co-hosting with PK mode** | Both sides **not co-hosting** | Return to co-hosting state |
231
+
232
+ ### Scenario 1: PK After Co-hosting
233
+
234
+ **AtomicXCore** enables timed PK battles between co-hosted streamers. The typical flow:
235
+ 1. Send co-hosting invitation; target streamer accepts.
236
+
237
+ 2. Co-hosted streamers click `PK` to start a timed battle. Winner is determined by the gifts received.
238
+
239
+ 3. Target streamer receives a PK prompt and can accept or decline.
240
+
241
+ 4. Upon acceptance, PK mode starts, and a progress bar displays metrics (gifts, likes, etc.).
242
+
243
+ 5. When PK time ends, results are shown and a penalty phase may follow.
244
+
245
+ 6. After PK, the session returns to co-hosting.
246
+
247
+ #### Step 1: Initiate PK Invitation
248
+
249
+ While co-hosting, call `BattleStore.requestBattle` to send a PK invitation. Configure PK duration, whether acceptance is required, and any extension info.
250
+
251
+ > **Note:**
252
+ >
253
+ > - If duration is not set, PK defaults to 5 minutes.
254
+ > - To skip target acceptance, set needResponse to false in BattleConfig. PK starts immediately.
255
+ > - If needResponse is false, set timeout to 0.
256
+ > - If a timeout is set and not accepted in time, both inviter and invitee receive onBattleRequestTimeout. Co-hosted streamers can initiate another PK.
257
+
258
+ ``` swift
259
+ var battleStore: BattleStore {
260
+ return BattleStore.create(liveID: liveID)
261
+ }
262
+ let targetUserID = ""
263
+
264
+ let config = BattleConfig(
265
+ duration: 30, // PK duration in seconds
266
+ needResponse: true, // Target must accept
267
+ extensionInfo: ""
268
+ )
269
+ battleStore.requestBattle(config: config, userIDList: [targetUserID], timeout: 10) { [weak self] result in
270
+ guard let self = self else { return }
271
+ switch result {
272
+ case .success(let (battleInfo, _)):
273
+ // PK started
274
+ case .failure(_):
275
+ // Handle error
276
+ }
277
+ }
278
+ ```
279
+
280
+ #### Step 2: Target Streamer Receives PK Invitation
281
+
282
+ The target streamer receives the `onBattleRequestReceived` event from `BattleEventPublisher`. Use this event to prompt the target in the UI.
283
+ ``` swift
284
+ battleStore.battleEventPublisher
285
+ .receive(on: RunLoop.main)
286
+ .sink { [weak self] event in
287
+ guard let self = self else { return }
288
+ switch event {
289
+ case .onBattleRequestReceived(let battleID, let inviter, let invitee):
290
+ // Handle PK invitation
291
+ default:
292
+ break
293
+ }
294
+ }
295
+ .store(in: &cancellableSet)
296
+ ```
297
+
298
+ #### Step 3: Enter PK State
299
+
300
+ When you receive the `onBattleStarted` event, render the PK progress bar in the UI.
301
+ - If `needResponse` is `false`, PK starts automatically after sending the invitation.
302
+
303
+ - If `needResponse` is `true`, PK starts only after all targets call `acceptBattle`.
304
+
305
+ - When a target accepts, all PK participants receive `onUserJoinBattle`.
306
+
307
+ - When PK begins, all participants receive `onBattleStarted`.
308
+
309
+ #### Step 4: End PK State
310
+
311
+ PK can end in two ways:
312
+ 1. **PK Time Expires:**When the configured duration ends, all participants receive `onBattleEnded`.
313
+
314
+ 2. **Manual Exit:**Any participant can call `exitBattle` to leave PK. Remaining users receive `onUserExitBattle`. If all participants exit before time ends, PK ends early.
315
+
316
+ ``` swift
317
+ var battleStore: BattleStore {
318
+ return BattleStore.create(liveID: liveID)
319
+ }
320
+ guard let battleID = battleStore.state.value.currentBattleInfo?.battleID else { return }
321
+ battleStore.exitBattle(battleID: battleID, completion: { [weak self] result in
322
+ guard let self = self else { return }
323
+ switch result {
324
+ case .success():
325
+ // Exited PK
326
+ case .failure(let error):
327
+ // Handle error
328
+ }
329
+ })
330
+ ```
331
+
332
+ After PK ends (`onBattleEnded`), display results and identify the winner/loser (see Winner Determination section).
333
+
334
+ > **Note:**
335
+ >
336
+ > - After PK ends, the session returns to cross-room co-hosting.
337
+ > - To end co-hosting after PK, call `exitHostConnection`.
338
+
339
+ ### Scenario 2: Co-hosting with PK Mode
340
+
341
+ **AtomicXCore** supports direct PK initiation during a live session, without prior co-hosting. After PK ends, the session returns to the live room state.
342
+ 1. Streamer clicks `PK`, opens a panel with active streamers (see Step 1 above).
343
+
344
+ 2. Selects a streamer and sends a PK invitation.
345
+
346
+ 3. Target streamer receives the invitation and can accept or reject.
347
+
348
+ 4. Upon acceptance, PK starts automatically. Points are accumulated via gifts or likes.
349
+
350
+ 5. After PK ends, the winner is determined by points.
351
+
352
+ > **Note:**
353
+ >
354
+
355
+ > This flow requires both CoHostStore and BattleStore, with `BattleConfig.needResponse` set to `false`.
356
+ >
357
+
358
+ #### Step 1: Send Co-hosting Request
359
+
360
+ Similar to previous steps, but set the`extraInfo` field in `requestHostConnection` to indicate PK should follow co-hosting. This enables custom UI prompts for the target streamer.
361
+
362
+ For example:
363
+ - `{"withPK:true"}` prompts "Streamer invites you to PK".
364
+
365
+ - `{"withPK:false"}` prompts "Streamer invites you to join cross-room co-hosting".
366
+
367
+ ``` swift
368
+ import AtomicXCore
369
+
370
+ let targetHostLiveID = "target_host_room_id"
371
+ let layoutTemplate = .hostStaticVoice6v6
372
+ let timeout: TimeInterval = 10
373
+ let extraInfo: String = "" // e.g., {"withPK:true"}
374
+
375
+ coHostStore.requestHostConnection(
376
+ targetHost: targetHostLiveID,
377
+ layoutTemplate: layoutTemplate,
378
+ timeout: timeout,
379
+ extraInfo: extraInfo,
380
+ completion: { [weak self] result in
381
+ guard let self = self else { return }
382
+ switch result {
383
+ case .success():
384
+ print("Invitation sent successfully")
385
+ case .failure(let error):
386
+ print("Failed to send invitation: \(error.code), \(error.message)")
387
+ }
388
+ }
389
+ )
390
+ ```
391
+
392
+ #### Step 2: Target Streamer Receives Request and Confirms
393
+
394
+ The target streamer receives `onCoHostRequestReceived` and can accept or reject the invitation.
395
+ ``` swift
396
+ var coHostStore: CoHostStore {
397
+ return CoHostStore.create(liveID: liveID)
398
+ }
399
+
400
+ coHostStore.coHostEventPublisher
401
+ .receive(on: RunLoop.main)
402
+ .sink { [weak self] event in
403
+ guard let self = self else { return }
404
+ switch event {
405
+ case .onCoHostRequestReceived(let inviter, let extensionInfo):
406
+ // Accept co-hosting request
407
+ coHostStore.acceptHostConnection(fromHostLiveID: inviter.liveID) { [weak self] result in
408
+ guard let self = self else { return }
409
+ switch result {
410
+ case .success():
411
+ // Accepted
412
+ case .failure(let error):
413
+ // Handle error
414
+ }
415
+ }
416
+ // To reject:
417
+ // coHostStore.rejectHostConnection(fromHostLiveID: inviter.liveID) { ... }
418
+ default:
419
+ break
420
+ }
421
+ }.store(in: &cancellableSet)
422
+ ```
423
+
424
+ #### Step 3: Initiate PK Automatically
425
+
426
+ When the target streamer accepts, immediately call `BattleStore.requestBattle` with `needResponse: false` to start PK.
427
+ ``` swift
428
+ import AtomicXCore
429
+
430
+ var coHostStore: CoHostStore {
431
+ return CoHostStore.create(liveID: liveID)
432
+ }
433
+
434
+ coHostStore.coHostEventPublisher
435
+ .receive(on: RunLoop.main)
436
+ .sink { [weak self] event in
437
+ guard let self = self else { return }
438
+ switch event {
439
+ case .onCoHostRequestAccepted(let invitee):
440
+ let config = BattleConfig(duration: 30, needResponse: false, extensionInfo: "")
441
+ battleStore.requestBattle(config: config, userIDList: [invitee.userID], timeout: 0) { [weak self] result in
442
+ guard let self = self else { return }
443
+ switch result {
444
+ case .success:
445
+ // PK started
446
+ case .failure(let error):
447
+ // Handle error
448
+ }
449
+ }
450
+ default:
451
+ break
452
+ }
453
+ }.store(in: &cancellableSet)
454
+ ```
455
+
456
+ #### Step 4: Enter PK State
457
+
458
+ This step is same as Enter PK State.
459
+
460
+ ## PK Score Update and Winner Determination
461
+
462
+ ### Updating PK Score via REST API
463
+
464
+ In typical** live host PK scenarios,** the value of gifts received by the host is linked to the PK score (for example, when a viewer sends a "Rocket" gift, the host's PK score increases by 500 points). You can implement real-time PK score updates using our `REST API`.
465
+
466
+ > **Note:**
467
+ >
468
+
469
+ > The PK score system in the LiveKit backend uses pure numeric calculation and accumulation. You must calculate the PK score according to your own business logic before calling the update API. See the following PK score calculation examples:
470
+ >
471
+ | Gift Type | Score Calculation Rule | Example |
472
+ | --- | --- | --- |
473
+ | Basic Gift | Gift value × 5 | 10 RMB gift → 50 points |
474
+ | Intermediate Gift | Gift value × 8 | 50 RMB gift → 400 points |
475
+ | Advanced Gift | Gift value × 12 | 100 RMB gift → 1200 points |
476
+ | Special Effect Gift | Fixed high score | 520 RMB gift → 1314 points |
477
+
478
+ #### REST API Call Flow
479
+
480
+ #### Key Process Description
481
+ 1. **Obtain PK Status:**
482
+
483
+ - **Callback Configuration**: Configure PK Status Callback to have the `LiveKit` backend actively notify your system when PK starts or ends.
484
+
485
+ - **Active Query**: Your backend can call the PK Status Query API at any time to check the current PK status.
486
+
487
+ 2. **PK Score Calculation**: Your backend calculates the PK score increment based on your business rules.
488
+
489
+ 3. **PK Score Update**: Your backend calls the Update PK Score API to update the PK score in the `LiveKit` backend.
490
+
491
+ 4. **LiveKit Backend Syncs to Client**: The backend automatically synchronizes the updated PK score to all clients.
492
+
493
+ #### Involved REST API Endpoints
494
+ | **API** | **Function Description** | **Request Example** |
495
+ | --- | --- | --- |
496
+ | Active API - Query PK Status | Check whether the current room is in PK | Example |
497
+ | Active API - Update PK Score | Update the calculated PK score | Example |
498
+ | Callback Configuration - PK Start Callback | Receive real-time notification when PK starts | Example |
499
+ | Callback Configuration - PK End Callback | Receive real-time notification when PK ends | Example |
500
+
501
+ ### Winner Determination
502
+
503
+ In PK scenarios, streamer scores are tied to gifts received. The PK module in RoomEngine supports score updates and broadcasting. Link gift events to PK scoring for real-time progress bar updates.
504
+
505
+ When your billing system detects a successful gift transaction, call the Modify PK Score REST API to update the streamer's PK score. All users in the PK rooms will see the updated `battleScore` in `BattleState`. Use this to update the PK progress bar.
506
+ ``` swift
507
+ battleStore.state.subscribe(StatePublisherSelector(keyPath: \BattleState.battleScore))
508
+ .receive(on: RunLoop.main)
509
+ .sink { [weak self] battleScore in
510
+ guard let self = self else { return }
511
+ // Update PK progress bar here
512
+ }
513
+ .store(in: &cancellableSet)
514
+ ```
515
+
516
+ ## API Documentation
517
+
518
+ For complete API details, refer to the [AtomicXCore API documentation](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore):
519
+ | **Store/Component** | **Function Description** | **API Documentation** |
520
+ | --- | --- | --- |
521
+ | **CoHostStore** | Core component for live stream display and interaction: handles video rendering, widget management, streamer live, audience mic-link, streamer co-hosting, and more. | [API Documentation](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/cohoststore) |
522
+ | **BattleStore** | Manages the full lifecycle of live rooms: create, join, leave, destroy, query room list, modify live info, listen for live status changes. | [API Documentation](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/battlestore) |
523
+ | **LiveListStore** | Manages live room lifecycle: query room list, modify live info, etc. | [API Documentation](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/liveliststore) |
524
+ | **LiveSeatStore** | Manages seat status: tracks all seats in the room (including cross-room seats during co-hosting), check user join/leave, microphone, seat status, etc. | [API Documentation](https://tencent-rtc.github.io/TUIKit_iOS/documentation/atomicxcore/liveseatstore) |
525
+
526
+ ## FAQs
527
+
528
+ #### What are the maximum limits for co-hosted rooms and users during co-hosting or PK?
529
+
530
+ You can co-host up to 9 rooms, with up to 50 users per room.
531
+
532
+ #### How do I implement a penalty phase after PK loss?
533
+
534
+ After receiving the `onBattleEnded` callback from `battleEventPublisher`, use `battleScore` in `BattleState` to determine the winner and loser. Co-hosting continues after PK ends. Implement a custom 30-second penalty phase, then disconnect co-hosting after the countdown.
535
+
536
+ #### Why didn't the co-hosting invitation reach the other party?
537
+ - Ensure `targetHostLiveId` is correct and the target room is actively streaming.
538
+
539
+ - Check network connectivity; invitation signaling times out after 30 seconds.
540
+
541
+ #### What happens if a streamer disconnects or the app crashes during co-hosting or PK?
542
+
543
+ **CoHostStore** and **BattleStore** include heartbeat and timeout detection. If a participant exits by accident, the other party receives events such as **onCoHostUserLeft** or **onUserExitBattle**. Use these events to update the UI (e.g., "The other party has disconnected") and end the interaction.
544
+
545
+ #### Why can PK scores only be updated via REST API?
546
+
547
+ `REST API` ensures PK score **security, real-time performance, and scalability**:
548
+ - **Tamper-proof and fair**: Requires authentication and data verification; each update is traceable (e.g., gift event), prevents manual changes or cheating, and ensures fair competition.
549
+
550
+ - **Real-time multi-end sync**: Standardized formats (e.g., JSON) enable rapid integration with gift, PK, and display systems, keeping scores consistent and real-time across streamer, audience, and backend.
551
+
552
+ - **Flexible rule adaptation**: Backend configuration changes (e.g., gift-to-score mapping, bonus points) can be made without frontend updates, reducing iteration costs.