@cometchat/skills 4.4.2 → 5.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 (490) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +36 -0
  4. package/LICENSE +21 -0
  5. package/README.md +41 -163
  6. package/RULES.md +114 -0
  7. package/bin/cometchat-skills.mjs +1180 -0
  8. package/bin/legacy-skills.json +95 -0
  9. package/catalogs/android-v6.json +1646 -0
  10. package/catalogs/flutter-v6.json +651 -0
  11. package/catalogs/ios-v5.json +1383 -0
  12. package/catalogs/rn-calls-v5.json +134 -0
  13. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  14. package/catalogs/rn-sdk-v4.json +672 -0
  15. package/catalogs/rn-v5.json +449 -0
  16. package/catalogs/rn-v5.symbols.txt +216 -0
  17. package/catalogs/sdk-android-v5.json +514 -0
  18. package/contracts.android-calls-v5.json +122 -0
  19. package/contracts.android-v6.json +135 -0
  20. package/contracts.angular-v5.json +694 -0
  21. package/contracts.flutter-calls-v5.json +77 -0
  22. package/contracts.flutter-v6.json +126 -0
  23. package/contracts.ios-calls-v5.json +67 -0
  24. package/contracts.ios-v5.json +436 -0
  25. package/contracts.json +82 -0
  26. package/contracts.rn-calls-v5.json +77 -0
  27. package/contracts.rn-v5.json +727 -0
  28. package/contracts.sdk-android-v5.json +15 -0
  29. package/contracts.web-calls-v5.json +45 -0
  30. package/features.android-calls-v5.json +246 -0
  31. package/features.android-v6.json +65 -0
  32. package/features.angular-v5.json +521 -0
  33. package/features.flutter-calls-v5.json +286 -0
  34. package/features.flutter-v6.json +484 -0
  35. package/features.ios-calls-v5.json +236 -0
  36. package/features.ios-v5.json +573 -0
  37. package/features.json +61 -0
  38. package/features.rn-calls-v5.json +187 -0
  39. package/features.rn-v5.json +614 -0
  40. package/features.sdk-android-v5.json +40 -0
  41. package/features.sdk-jsv4.json +24 -0
  42. package/features.web-calls-v5.json +108 -0
  43. package/package.json +151 -74
  44. package/peers.yaml +312 -0
  45. package/registry/README.md +31 -0
  46. package/registry/android-calls-v5.json +54 -0
  47. package/registry/android-v6.json +137 -0
  48. package/registry/angular-v5.json +114 -0
  49. package/registry/flutter-calls-v5.json +54 -0
  50. package/registry/flutter-v6.json +119 -0
  51. package/registry/ios-calls-v5.json +59 -0
  52. package/registry/ios-v5.json +97 -0
  53. package/registry/rn-calls-v5.json +59 -0
  54. package/registry/rn-v5.json +129 -0
  55. package/registry/sdk-android-v5.json +53 -0
  56. package/registry/sdk-jsv4.json +53 -0
  57. package/registry/web-calls-v5.json +54 -0
  58. package/registry/web-v7.json +99 -0
  59. package/skills/cometchat/SKILL.md +42 -2096
  60. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  67. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  68. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  69. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  70. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  71. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  72. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  73. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  74. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  75. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  76. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  77. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  78. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  79. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  80. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  81. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  82. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  83. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  84. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  85. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  86. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  87. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  88. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  89. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  90. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  91. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  92. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  93. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  94. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  95. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  96. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  97. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  98. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  99. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  100. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  101. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  102. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  103. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  104. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  105. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  106. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  107. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  108. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  109. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  110. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  111. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  112. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  113. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  114. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  115. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  116. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  117. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  118. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  119. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  120. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  121. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  122. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  123. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  127. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  128. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  129. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  130. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  131. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  132. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  133. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  134. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  135. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  136. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  137. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  138. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  139. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  140. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  141. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  142. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  143. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  144. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  145. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  146. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  147. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  148. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  149. package/skills/cometchat-ios-components/SKILL.md +44 -834
  150. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  151. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  152. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  153. package/skills/cometchat-ios-core/references/install.md +23 -0
  154. package/skills/cometchat-ios-core/references/layout.md +186 -0
  155. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  156. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  157. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  158. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  159. package/skills/cometchat-ios-features/SKILL.md +29 -738
  160. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  161. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  162. package/skills/cometchat-ios-push/SKILL.md +24 -602
  163. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  164. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  165. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  166. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  167. package/skills/cometchat-onboarding/SKILL.md +89 -0
  168. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  169. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  170. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  171. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  172. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  173. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  174. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  175. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  176. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  177. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  178. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  179. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  180. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  181. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  182. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  183. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  184. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  185. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  186. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  187. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  188. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  189. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  190. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  191. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  192. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  193. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  194. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  195. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  196. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  198. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  199. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  200. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  201. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  202. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  203. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  204. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  205. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  206. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  207. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  208. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  209. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  210. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  211. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  212. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  213. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  214. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  215. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  216. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  217. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  218. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  219. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  220. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  221. package/test-suite/README.md +70 -0
  222. package/test-suite/catalogs/android-calls-v5.json +830 -0
  223. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  224. package/test-suite/catalogs/android-v6.json +1646 -0
  225. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  226. package/test-suite/catalogs/angular-v5.json +7587 -0
  227. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  228. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  229. package/test-suite/catalogs/flutter-v6.json +651 -0
  230. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  231. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  232. package/test-suite/catalogs/ios-v5.json +1383 -0
  233. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  234. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  235. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  236. package/test-suite/catalogs/rn-v5.json +449 -0
  237. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  238. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  239. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  240. package/test-suite/catalogs/web-calls-v5.json +195 -0
  241. package/test-suite/catalogs/web-v7.json +1243 -0
  242. package/test-suite/scripts/build-registry.mjs +113 -0
  243. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  244. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  245. package/test-suite/scripts/lint-skills.mjs +909 -0
  246. package/test-suite/scripts/measure-tokens.mjs +169 -0
  247. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  248. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  249. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  250. package/test-suite/scripts/verify-catalog.mjs +242 -0
  251. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  252. package/test-suite/scripts/verify-detection.mjs +178 -0
  253. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  254. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  255. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  256. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  257. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  258. package/test-suite/typecheck/angular-v5/package.json +21 -0
  259. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  260. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  261. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  262. package/test-suite/typecheck/web-v7/package.json +18 -0
  263. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  264. package/bin/install.js +0 -1003
  265. package/skills/.claude-plugin/marketplace.json +0 -86
  266. package/skills/cometchat/references/asking-questions.md +0 -48
  267. package/skills/cometchat-a11y/SKILL.md +0 -477
  268. package/skills/cometchat-android-v5/SKILL.md +0 -121
  269. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  270. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  271. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  272. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  273. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  274. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  275. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  276. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  277. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  278. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  279. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  280. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  281. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  282. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  283. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  284. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  285. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  286. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  287. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  288. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  289. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  290. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  291. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  292. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  293. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  294. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  295. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  296. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  297. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  298. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  299. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  300. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  301. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  302. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  303. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  304. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  305. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  306. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  307. package/skills/cometchat-android-v6/SKILL.md +0 -108
  308. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  309. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  310. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  311. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  312. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  313. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  314. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  315. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  316. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  317. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  318. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  319. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  320. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  321. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  322. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  323. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  324. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  325. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  326. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  327. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  328. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  329. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  330. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  331. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  332. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  333. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  334. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  335. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  336. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  337. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  338. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  339. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  340. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  341. package/skills/cometchat-angular-components/SKILL.md +0 -235
  342. package/skills/cometchat-angular-core/SKILL.md +0 -386
  343. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  344. package/skills/cometchat-angular-features/SKILL.md +0 -329
  345. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  346. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  347. package/skills/cometchat-angular-production/SKILL.md +0 -564
  348. package/skills/cometchat-angular-push/SKILL.md +0 -389
  349. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  350. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  351. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  352. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  353. package/skills/cometchat-calls/SKILL.md +0 -364
  354. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  355. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  356. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  357. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  358. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  359. package/skills/cometchat-components/SKILL.md +0 -1142
  360. package/skills/cometchat-core/SKILL.md +0 -1048
  361. package/skills/cometchat-customization/SKILL.md +0 -580
  362. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  363. package/skills/cometchat-features/SKILL.md +0 -861
  364. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  365. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  366. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  367. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  368. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  369. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  370. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  371. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  372. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  373. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  374. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  375. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  376. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  377. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  378. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  379. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  380. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  381. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  382. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  383. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  384. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  385. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  386. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  387. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  388. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  389. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  390. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  391. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  392. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  393. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  394. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  395. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  396. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  397. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  398. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  399. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  400. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  401. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  402. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  403. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  404. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  405. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  406. package/skills/cometchat-i18n/SKILL.md +0 -419
  407. package/skills/cometchat-ios/SKILL.md +0 -325
  408. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  409. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  410. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  411. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  412. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  413. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  414. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  415. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  416. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  417. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  418. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  419. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  420. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  421. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  422. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  423. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  424. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  425. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  426. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  427. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  428. package/skills/cometchat-ios-production/SKILL.md +0 -738
  429. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  430. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  431. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  432. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  433. package/skills/cometchat-native-calls/SKILL.md +0 -671
  434. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  435. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  436. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  437. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  438. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  439. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  440. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  441. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  442. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  443. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  444. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  445. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  446. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  447. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  448. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  449. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  450. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  451. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  452. package/skills/cometchat-native-components/SKILL.md +0 -628
  453. package/skills/cometchat-native-core/SKILL.md +0 -679
  454. package/skills/cometchat-native-customization/SKILL.md +0 -716
  455. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  456. package/skills/cometchat-native-features/SKILL.md +0 -638
  457. package/skills/cometchat-native-placement/SKILL.md +0 -509
  458. package/skills/cometchat-native-production/SKILL.md +0 -700
  459. package/skills/cometchat-native-push/SKILL.md +0 -594
  460. package/skills/cometchat-native-testing/SKILL.md +0 -582
  461. package/skills/cometchat-native-theming/SKILL.md +0 -681
  462. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  463. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  464. package/skills/cometchat-placement/SKILL.md +0 -1360
  465. package/skills/cometchat-production/SKILL.md +0 -1027
  466. package/skills/cometchat-react-calls/SKILL.md +0 -752
  467. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  468. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  469. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  470. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  471. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  472. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  473. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  474. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  475. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  476. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  477. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  478. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  479. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  480. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  481. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  482. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  483. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  484. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  485. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  486. package/skills/cometchat-react-push/SKILL.md +0 -634
  487. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  488. package/skills/cometchat-react-testing/SKILL.md +0 -413
  489. package/skills/cometchat-theming/SKILL.md +0 -498
  490. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,257 +0,0 @@
1
- # Group calls — broadcast meeting pattern (web)
2
-
3
- Group calls in CometChat use a **different signaling channel than 1:1 user calls**. The Ringing flow (Chat SDK `initiateCall` → `onIncomingCallReceived` on peer) fires for **1:1 user calls only**. For groups, the kit broadcasts a **custom message** of type `meeting` to the group; receivers see a "Join meeting" card in their message list (kit-based) OR need an explicit message listener (custom UI).
4
-
5
- This is by-design kit behavior — not a bug. Documented across all platform kits.
6
-
7
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/group-calls
8
-
9
- ---
10
-
11
- ## Architecture
12
-
13
- ```
14
- Caller (uid-A, member of group-X) CometChat Receivers (all other members of group-X)
15
- │ │ │
16
- │ <CometChatCallButtons group={x}> │ │
17
- │ → CometChatUIKit.sendCustomMessage( │ │
18
- │ CustomMessage(GUID, GROUP, │ │
19
- │ "meeting", │ │
20
- │ { callType, sessionId })) │ │
21
- ├─────────────────────────────────────────>│ │
22
- │ │ onCustomMessageReceived │
23
- │ ├─────────────────────────────>│ (each member's
24
- │ │ │ MessageListener
25
- │ │ │ fires if they're
26
- │ │ │ in the group)
27
- │ │ │
28
- │ caller jumps straight to OngoingCall │ │
29
- │ (joins session GUID directly) │ receiver taps "Join" │
30
- │ │ → joinSession(GUID) │
31
- │ CometChatCalls.joinSession(token, GUID) │ <─────────────────────────── │
32
- ├─────────────────────────────────────────>│ │
33
- │ ───── WebRTC session active (sessionId = group GUID) ───── │
34
- ```
35
-
36
- Key contrast with 1:1 ringing:
37
-
38
- | Channel | 1:1 user calls | Group calls |
39
- |---|---|---|
40
- | Signaling API | `CometChat.initiateCall(call)` | `CometChatUIKit.sendCustomMessage(meetingMessage)` |
41
- | Receiver event | `CallListener.onIncomingCallReceived` | `MessageListener.onCustomMessageReceived` (category=CATEGORY_CUSTOM + type="meeting") |
42
- | Session ID | server-generated unique per call | the group's GUID |
43
- | Ring/decline semantics | yes — `acceptCall` / `rejectCall` | no — receivers just tap to join (or ignore) |
44
- | Auto-cancel timeout | yes (45s default) | no — meeting card persists in chat history |
45
-
46
- ---
47
-
48
- ## Hard rules
49
-
50
- 1. **Group calls broadcast a custom message; they do NOT use the call listener.** If your custom UI only registers `addCallListener`, group-call recipients will see NOTHING. Add a `MessageListener` that handles `category === CATEGORY_CUSTOM && type === 'meeting'`.
51
- 2. **The session ID equals the group's GUID** — not a generated unique ID like 1:1 calls. Anyone with the GUID can join the session at any time (it's persistent, not auto-cancelled).
52
- 3. **Anyone can join, including after the meeting started.** Late joiners are normal — the WebRTC session is open until all participants leave. UI must handle "joining an already-active meeting" as a valid state.
53
- 4. **Joining = `CometChatCalls.joinSession(token, sessionSettings, container)` with sessionId set to the group GUID.** Same `generateToken(sessionId)` step as 1:1 ringing — auth is internal after `CometChatCalls.login()`.
54
- 5. **No `CometChat.endCall(sessionId)` on the chat side for groups** — the meeting message is the persistent record, not a call entity. Each participant just calls `CometChatCalls.leaveSession()` when they hang up.
55
- 6. **`onCallEndedMessageReceived` does NOT fire for group sessions.** The session persists as long as anyone's in it. Use `CometChatCalls.OngoingCallListener.onCallEnded` to detect when YOUR client's session ends.
56
-
57
- ---
58
-
59
- ## Caller side — kit-based
60
-
61
- If you're using `<CometChatMessageHeader>` + `<CometChatCallButtons>`, the kit handles everything:
62
-
63
- ```tsx
64
- import { CometChatCallButtons } from "@cometchat/chat-uikit-react";
65
-
66
- <CometChatCallButtons group={group} />
67
- ```
68
-
69
- Tapping voice/video automatically:
70
- 1. Sends a `CustomMessage` of type `meeting` to the group
71
- 2. Opens `<CometChatOutgoingCall>` UI (which transitions to `<CometChatOngoingCall>`)
72
- 3. Joins the WebRTC session with `sessionId = group.getGuid()`
73
-
74
- No additional code on the caller side.
75
-
76
- ## Caller side — custom UI
77
-
78
- If you don't use kit components and want full control:
79
-
80
- ```ts
81
- import { CometChat } from "@cometchat/chat-sdk-javascript";
82
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
83
-
84
- async function startGroupCall(guid: string, callType: "audio" | "video") {
85
- const loggedInUser = await CometChat.getLoggedInUser();
86
- if (!loggedInUser) throw new Error("Not logged in");
87
-
88
- // 1. Broadcast the meeting message to the group
89
- const sessionId = guid; // group GUID becomes the session ID
90
- const customData = { callType, sessionId };
91
- const meetingMessage = new CometChat.CustomMessage(
92
- guid,
93
- CometChat.RECEIVER_TYPE.GROUP,
94
- "meeting",
95
- customData,
96
- );
97
- meetingMessage.setCategory(CometChat.CATEGORY_CUSTOM);
98
- meetingMessage.setMetadata({
99
- incrementUnreadCount: true,
100
- pushNotification: "meeting",
101
- ...customData,
102
- });
103
- await CometChat.sendCustomMessage(meetingMessage);
104
-
105
- // 2. Generate a call token + join the session
106
- const authToken = loggedInUser.getAuthToken();
107
- const { token: callToken } = await CometChatCalls.generateToken(sessionId);
108
-
109
- // joinSession takes a SessionSettings OBJECT (NOT CallSettingsBuilder.build() —
110
- // that CallSettings is for the deprecated startSession). Events come from the
111
- // static addEventListener bus, not OngoingCallListener.
112
- const settings = { sessionType: callType === "audio" ? "VOICE" : "VIDEO" };
113
- const offClosed = CometChatCalls.addEventListener("onConnectionClosed", () => {
114
- /* hangup UI */
115
- });
116
- // later, on teardown: offClosed();
117
-
118
- // 3. Mount the WebRTC view into your container element
119
- await CometChatCalls.joinSession(callToken, settings, containerElement);
120
- }
121
- ```
122
-
123
- The `meeting` message lands in the group's chat history immediately; other members get `onCustomMessageReceived` if they have a listener.
124
-
125
- ---
126
-
127
- ## Receiver side — kit-based (auto-renders meeting card)
128
-
129
- If your app uses `<CometChatMessageList />` to render the group's messages, the kit auto-renders the meeting message as a **"Join meeting" card** with a tap target. No additional code needed:
130
-
131
- ```tsx
132
- <CometChatMessageList group={group} />
133
- ```
134
-
135
- When a user taps the meeting card, the kit:
136
- 1. Calls `CometChatCalls.generateToken(sessionId, authToken)`
137
- 2. Opens `<CometChatOngoingCall>` with `sessionID={group.getGuid()}`
138
- 3. Joins the WebRTC session
139
-
140
- The receiver is now in the same WebRTC session as the caller (and any other members who joined).
141
-
142
- ## Receiver side — custom UI (needs a message listener)
143
-
144
- If you DON'T use `<CometChatMessageList />` — e.g. you have a custom chat surface, OR you want incoming-meeting notifications globally — register a `MessageListener` and handle the meeting message yourself:
145
-
146
- ```ts
147
- import { CometChat } from "@cometchat/chat-sdk-javascript";
148
-
149
- const GROUP_MEETING_LISTENER_ID = "APP_GROUP_MEETING_LISTENER";
150
-
151
- CometChat.addMessageListener(
152
- GROUP_MEETING_LISTENER_ID,
153
- new CometChat.MessageListener({
154
- onCustomMessageReceived: (msg: CometChat.CustomMessage) => {
155
- if (msg.getCategory() !== CometChat.CATEGORY_CUSTOM) return;
156
- if (msg.getType() !== "meeting") return;
157
-
158
- const customData = msg.getCustomData() as { callType?: "audio" | "video"; sessionId?: string };
159
- const sessionId = customData.sessionId ?? msg.getReceiverId();
160
- const callType = customData.callType ?? "video";
161
- const fromUid = msg.getSender().getUid();
162
- const groupGuid = msg.getReceiverId();
163
-
164
- // Show YOUR group-call incoming UI here
165
- // (e.g. toast notification with "Join" button, badge on the group, etc.)
166
- showIncomingGroupCallUI({ sessionId, callType, fromUid, groupGuid });
167
- },
168
- }),
169
- );
170
-
171
- // On hangup or logout:
172
- CometChat.removeMessageListener(GROUP_MEETING_LISTENER_ID);
173
- ```
174
-
175
- Tap-to-join from your custom UI:
176
-
177
- ```ts
178
- async function joinGroupCall(sessionId: string, callType: "audio" | "video", container: HTMLElement) {
179
- const loggedInUser = await CometChat.getLoggedInUser();
180
- const authToken = loggedInUser!.getAuthToken();
181
- const { token: callToken } = await CometChatCalls.generateToken(sessionId);
182
-
183
- // SessionSettings OBJECT for joinSession (not CallSettingsBuilder output).
184
- const settings = { sessionType: callType === "audio" ? "VOICE" : "VIDEO" };
185
- const offClosed = CometChatCalls.addEventListener("onConnectionClosed", () => {
186
- /* hangup UI */
187
- });
188
- // later, on teardown: offClosed();
189
-
190
- await CometChatCalls.joinSession(callToken, settings, container);
191
- }
192
- ```
193
-
194
- No `acceptCall` step — receivers just join the session. The meeting message remains in the chat history regardless of who joins.
195
-
196
- ---
197
-
198
- ## Edge cases
199
-
200
- ### Late joining
201
-
202
- A meeting can be active for an hour before a member opens the app. The custom message persists in chat history; tapping the card joins the live session.
203
-
204
- **UI implication:** the meeting card should reflect live state. Listen for `MessageListener.onCustomMessageReceived` to add new cards; poll or use presence to know if the session is currently active. There's no built-in "meeting is live" signal — apps typically render the card with a "Join meeting" CTA regardless and let the WebRTC layer fail gracefully if everyone has left.
205
-
206
- ### Cancelling / leaving
207
-
208
- There's no "cancel the meeting" — the meeting message is permanent in chat history. Each participant leaves independently:
209
-
210
- ```ts
211
- CometChatCalls.leaveSession(); // your local WebRTC session (v5 — endSession() is deprecated)
212
- // No CometChat.endCall — meetings don't have a call entity.
213
- ```
214
-
215
- If you want to mark a meeting as "ended" UX-wise, send a follow-up message (e.g. another custom message of type `meeting_ended`) and have the receiver UI update its cards based on it. Not built into the SDK.
216
-
217
- ### Push notifications
218
-
219
- The meeting `CustomMessage` carries `metadata.pushNotification = "meeting"`. The CometChat push system can route this to a "meeting started in your group" push. Configure on the dashboard side under Notifications → Push Notification.
220
-
221
- ### Missed meetings
222
-
223
- Since meetings don't ring, there's no "missed call" entity. If you want missed-meeting UI, derive it from message history: list meeting messages where the current user has NOT joined the session.
224
-
225
- ---
226
-
227
- ## Anti-patterns
228
-
229
- 1. **Registering only `addCallListener` and expecting group calls to ring.** They won't. Group calls fire `onCustomMessageReceived`, not `onIncomingCallReceived`. Always add both listeners if you support both 1:1 and group calling.
230
- 2. **Treating `sessionId` as ephemeral for groups.** It's the group GUID — persistent. Don't generate a new sessionId per group call; the kit uses the GUID intentionally so all joiners hit the same WebRTC session.
231
- 3. **Calling `CometChat.endCall(sessionId)` after a group hangup.** Meetings have no call entity to end; the API returns an error. Use `CometChatCalls.leaveSession()` (local) only.
232
- 4. **Using `acceptCall` / `rejectCall` on the meeting message.** Those only work on 1:1 call entities. For meetings, you just join (no accept) or ignore (no reject).
233
- 5. **Assuming all group members ring simultaneously.** Only members with an active `MessageListener` get `onCustomMessageReceived`. Offline members see the meeting card when they next open the group.
234
- 6. **Sending the meeting message without `metadata.pushNotification`.** Offline members won't get a push. The kit handles this for you when you use `<CometChatCallButtons>`; if you're building custom, copy the metadata pattern in §"Caller side — custom UI".
235
-
236
- ---
237
-
238
- ## Verification checklist
239
-
240
- - [ ] If using kit components: `<CometChatCallButtons group={g}>` renders + tap initiates a meeting message
241
- - [ ] If using custom caller UI: `CometChat.sendCustomMessage` is called with `type: "meeting"`, `category: CATEGORY_CUSTOM`, `customData: { callType, sessionId: groupGuid }`
242
- - [ ] If using kit receiver: `<CometChatMessageList group={g}>` renders the meeting card with a "Join" button
243
- - [ ] If using custom receiver: `addMessageListener` registers `onCustomMessageReceived` and filters by category + type
244
- - [ ] On hangup, `CometChatCalls.leaveSession()` is called (NOT `CometChat.endCall`)
245
- - [ ] Late-joining works — open app while meeting is live; tap card; join session
246
- - [ ] Push notifications fire for offline group members (server-side configured)
247
- - [ ] Both listeners (`addCallListener` + `addMessageListener`) wired if app supports both 1:1 and group calls
248
-
249
- ---
250
-
251
- ## Pointers
252
-
253
- - `ringing-integration.md` — the 1:1 user-call flow (different channel — call listener, not message listener)
254
- - `call-session.md` — pure session-mode (URL-based, no chat-side signaling at all)
255
- - `cometchat-react-calls/SKILL.md` rule 1.7 — IncomingCall mount (1:1 only; group calls don't use this)
256
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/group-calls
257
- - Kit source (web React): `@cometchat/chat-uikit-react` → `src/components/Calling/CometChatCallButtons/CometChatCallButtons.tsx` (group call buttons send the `meeting` custom message)
@@ -1,188 +0,0 @@
1
- # Idle timeout on web
2
-
3
- Auto-ends calls where the local user is the only remaining participant. Two timers: a "you're alone, are you still there?" prompt fires after the first interval, then the session ends if the user doesn't respond before the second interval. SDK first-party — just two settings keys + one event.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/idle-timeout
6
- **Use it for:** any group call (preventing zombie sessions when everyone else hangs up), waiting rooms (auto-close empty rooms), classroom calls (instructor's screen doesn't stay live overnight).
7
-
8
- ---
9
-
10
- ## SDK API
11
-
12
- > ⚠️ **VALUES ARE IN MILLISECONDS.** `idleTimeoutPeriodBeforePrompt: 180` is **180 ms**, not 180 seconds — so the prompt fires the instant you join alone and the call exits in a fraction of a second (real customer bug, 2026-06). Always `* 1000`: 3 minutes = `180_000`.
13
-
14
- Two equivalent ways to set it — **match whichever your join path uses:**
15
-
16
- ```ts
17
- // (a) SessionSettings OBJECT — the session-mode path: joinSession(token, settings, container)
18
- const settings = {
19
- idleTimeoutPeriodBeforePrompt: 180_000, // 180s before the "still there?" prompt
20
- idleTimeoutPeriodAfterPrompt: 60_000, // 60s grace (this is the SDK MINIMUM)
21
- };
22
- await CometChatCalls.joinSession(token, settings, containerRef.current);
23
-
24
- // (b) Builder — the kit's callSettingsBuilder prop. ⚠️ The builder has ONLY a
25
- // single .setIdleTimeoutPeriod(ms) — there are NO setIdleTimeoutPeriodBeforePrompt /
26
- // setIdleTimeoutPeriodAfterPrompt builder methods. The before/after-prompt SPLIT
27
- // exists only as the SessionSettings object fields in form (a) above.
28
- const builder = new CometChatCalls.CallSettingsBuilder()
29
- .setIdleTimeoutPeriod(180_000);
30
-
31
- CometChatCalls.addEventListener("onSessionTimedOut", () => {
32
- // Navigate away, show "session ended" UI
33
- });
34
- ```
35
-
36
- | Setting | Default | Min | Unit |
37
- |---|---|---|---|
38
- | `idleTimeoutPeriodBeforePrompt` | 60_000 (60s) | — (don't use 0 / tiny — instant prompt) | **milliseconds** |
39
- | `idleTimeoutPeriodAfterPrompt` | 120_000 (120s) | **60_000 (60s)** — smaller is silently clamped to 60s | **milliseconds** |
40
-
41
- The SDK shows the prompt overlay automatically (kit's default UI). For custom UI you handle the prompt yourself.
42
-
43
- ---
44
-
45
- ## Recommended timeouts per app archetype
46
-
47
- | App | Before-prompt | After-prompt | Why |
48
- |---|---|---|---|
49
- | Marketplace 1:1 | 30s | 60s | Buyers lose interest fast; reclaim resources |
50
- | Telehealth (provider waiting) | 5min | 5min | Patients run late; don't punish them |
51
- | Classroom / instructor | 10min | 10min | Instructor may step away; don't interrupt class |
52
- | Internal team meeting | 60s | 120s | Default — meetings end abruptly anyway |
53
- | Customer support | 30s | 60s | Agent moves to next ticket; reclaim |
54
-
55
- ---
56
-
57
- ## Custom prompt UI (when default isn't enough)
58
-
59
- The kit's default prompt is functional but plain. Custom UI uses `enableDefaultLayout(false)` + listens for the prompt internally — though the SDK doesn't expose a direct "prompt fired" event. Two patterns:
60
-
61
- ### Pattern A — Track time-since-alone yourself
62
-
63
- ```tsx
64
- import { useEffect, useRef, useState } from "react";
65
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
66
-
67
- function useIdleTimeoutPrompt({
68
- beforePromptMs = 60_000,
69
- afterPromptMs = 120_000,
70
- }: { beforePromptMs?: number; afterPromptMs?: number; }) {
71
- const [showPrompt, setShowPrompt] = useState(false);
72
- const aloneSinceRef = useRef<number | null>(null);
73
- const promptTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
74
- const sessionTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
75
-
76
- useEffect(() => {
77
- const listener = new CometChatCalls.OngoingCallListener({
78
- onUserListUpdated: (users: { uid: string }[]) => {
79
- const localUid = CometChat.getLoggedinUser()?.getUid();
80
- const remoteCount = users.filter(u => u.uid !== localUid).length;
81
-
82
- if (remoteCount === 0 && aloneSinceRef.current === null) {
83
- // Just became alone
84
- aloneSinceRef.current = Date.now();
85
- promptTimerRef.current = setTimeout(() => {
86
- setShowPrompt(true);
87
- sessionTimerRef.current = setTimeout(() => {
88
- CometChatCalls.leaveSession();
89
- }, afterPromptMs);
90
- }, beforePromptMs);
91
- } else if (remoteCount > 0) {
92
- // Someone joined — clear timers
93
- aloneSinceRef.current = null;
94
- if (promptTimerRef.current) clearTimeout(promptTimerRef.current);
95
- if (sessionTimerRef.current) clearTimeout(sessionTimerRef.current);
96
- setShowPrompt(false);
97
- }
98
- },
99
- });
100
-
101
- // Attach listener... (see custom-ui.md for the full setup)
102
-
103
- return () => {
104
- if (promptTimerRef.current) clearTimeout(promptTimerRef.current);
105
- if (sessionTimerRef.current) clearTimeout(sessionTimerRef.current);
106
- };
107
- }, [beforePromptMs, afterPromptMs]);
108
-
109
- function dismiss() {
110
- setShowPrompt(false);
111
- if (sessionTimerRef.current) clearTimeout(sessionTimerRef.current);
112
- aloneSinceRef.current = null;
113
- }
114
-
115
- return { showPrompt, dismiss };
116
- }
117
- ```
118
-
119
- Usage:
120
-
121
- ```tsx
122
- function CustomCallView() {
123
- const { showPrompt, dismiss } = useIdleTimeoutPrompt({
124
- beforePromptMs: 30_000,
125
- afterPromptMs: 60_000,
126
- });
127
-
128
- return (
129
- <>
130
- {/* call UI */}
131
- {showPrompt && (
132
- <div role="alertdialog" aria-modal="true" aria-labelledby="idle-title">
133
- <h2 id="idle-title">Still there?</h2>
134
- <p>You're alone in this call. It'll end in 60 seconds.</p>
135
- <button onClick={dismiss}>Stay</button>
136
- <button onClick={() => CometChatCalls.leaveSession()}>End now</button>
137
- </div>
138
- )}
139
- </>
140
- );
141
- }
142
- ```
143
-
144
- ### Pattern B — Long timeouts + custom prompt only
145
-
146
- ```ts
147
- // SessionSettings object for joinSession (these before/after fields are object-only).
148
- const settings = {
149
- idleTimeoutPeriodBeforePrompt: 86_400_000, // 24 hours — effectively disabled
150
- idleTimeoutPeriodAfterPrompt: 86_400_000,
151
- };
152
- ```
153
-
154
- Then implement your own timeout via Pattern A. Useful when you want UX-customized prompts instead of the SDK's default overlay.
155
-
156
- ---
157
-
158
- ## Anti-patterns
159
-
160
- 1. **`idleTimeoutPeriodAfterPrompt < 60_000` (60s).** SDK rejects values below 60s. Setting it lower silently fails — the SDK uses 60s instead.
161
- 2. **Disabling idle timeout entirely** by setting both timers to `Infinity`. Sessions hang forever, server-side resources leak, billing dings you. Always set a reasonable upper bound.
162
- 3. **Showing the prompt at the same time as call notifications/banners.** Stacks on top of incoming-message notifications. Z-index conflicts. Render the idle prompt at the highest z-level for the call surface.
163
- 4. **Auto-ending without a goodbye animation.** Jarring. Fade-out the call surface over 500ms before disconnecting.
164
- 5. **Prompt UI without `role="alertdialog"`.** Screen readers don't pause to announce; user gets disconnected mid-listen. Use `role="alertdialog"` + `aria-modal="true"`.
165
- 6. **Restarting `aloneSinceRef.current` on EVERY participant change.** Want to track "alone since" only when transitioning from N>0 to 0. Don't reset when participants join/leave while still N>0.
166
-
167
- ---
168
-
169
- ## Verification checklist
170
-
171
- - [ ] `setIdleTimeoutPeriodBeforePrompt` + `setIdleTimeoutPeriodAfterPrompt` set on CallSettings
172
- - [ ] After-prompt period ≥ 60_000 (60s)
173
- - [ ] `onSessionTimedOut` event handler navigates away cleanly (not just `console.log`)
174
- - [ ] Custom prompt UI uses `role="alertdialog"` + `aria-modal="true"`
175
- - [ ] Custom prompt has both "Stay" and "End now" buttons
176
- - [ ] Timer cleanup in `useEffect` return — no leaked setTimeout
177
- - [ ] Browser smoke: 2 tabs in call, close tab B, watch tab A's timer fire (set short timeouts for testing)
178
- - [ ] After-prompt smoke: dismiss the prompt → timer clears → no auto-disconnect
179
-
180
- ---
181
-
182
- ## Pointers
183
-
184
- - `cometchat-react-calls` SKILL.md — the seven hard rules
185
- - `references/group-calls.md` — group call architecture (idle-timeout matters most for groups)
186
- - `references/custom-ui.md` — custom call UI integration
187
- - `cometchat-a11y` — `role="alertdialog"` patterns
188
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/idle-timeout
@@ -1,212 +0,0 @@
1
- # In-call chat on web
2
-
3
- Text messaging during a video/voice call. SDK provides the chat button in the control panel + events; the actual chat UI is yours to build (the kit's existing `<CometChatMessageList>` + `<CometChatMessageComposer>` work great here).
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/in-call-chat
6
- **Use it for:** classroom side chat, team meeting links/notes, customer support secondary channel, AV-impaired participant text fallback.
7
-
8
- ---
9
-
10
- ## SDK API
11
-
12
- ```ts
13
- // SessionSettings object passed to joinSession(token, settings, container).
14
- // hideChatButton is a SessionSettings field, not a CallSettingsBuilder method.
15
- const settings = { hideChatButton: false }; // show the kit's built-in chat button
16
-
17
- CometChatCalls.addEventListener("onChatButtonClicked", () => {
18
- // Open your chat panel
19
- setChatOpen(true);
20
- });
21
-
22
- // Update unread badge
23
- CometChatCalls.setChatButtonUnreadCount(5);
24
- CometChatCalls.setChatButtonUnreadCount(0); // clear
25
- ```
26
-
27
- The button + badge live on the SDK's control panel. Your job is to render the chat UI when the button is tapped.
28
-
29
- ---
30
-
31
- ## Architecture: group-as-session
32
-
33
- The recommended pattern: use a CometChat **group** keyed to the call session. Every participant joins the group when they join the call; messages flow through the group's normal CometChat Chat SDK channel. When the call ends, the group either persists (logged history) or is deleted (ephemeral).
34
-
35
- ```ts
36
- import { CometChat } from "@cometchat/chat-sdk-javascript";
37
-
38
- async function ensureCallGroup(sessionId: string): Promise<CometChat.Group> {
39
- // Try to get existing
40
- try {
41
- return await CometChat.getGroup(sessionId);
42
- } catch {
43
- // Create
44
- const group = new CometChat.Group(
45
- sessionId, // GUID == session ID
46
- `Call ${sessionId}`, // display name
47
- CometChat.GROUP_TYPE.PUBLIC, // anyone in the call can join
48
- );
49
- return await CometChat.createGroup(group);
50
- }
51
- }
52
-
53
- async function joinCallGroup(sessionId: string): Promise<void> {
54
- await CometChat.joinGroup(sessionId, CometChat.GROUP_TYPE.PUBLIC, "");
55
- }
56
- ```
57
-
58
- Wire this into your call-start flow: after `joinSession` succeeds, `joinCallGroup`.
59
-
60
- ---
61
-
62
- ## Chat panel UI
63
-
64
- ```tsx
65
- import { useState, useEffect } from "react";
66
- import { CometChat } from "@cometchat/chat-sdk-javascript";
67
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
68
- import {
69
- CometChatMessageList,
70
- CometChatMessageComposer,
71
- } from "@cometchat/chat-uikit-react";
72
-
73
- interface InCallChatPanelProps {
74
- sessionId: string;
75
- }
76
-
77
- function InCallChatPanel({ sessionId }: InCallChatPanelProps) {
78
- const [open, setOpen] = useState(false);
79
- const [unread, setUnread] = useState(0);
80
- const [group, setGroup] = useState<CometChat.Group>();
81
-
82
- // Listen for the SDK's button click
83
- useEffect(() => {
84
- const handler = () => setOpen(true);
85
- // addEventListener returns an unsubscribe fn — there is no removeEventListener.
86
- const off = CometChatCalls.addEventListener("onChatButtonClicked", handler);
87
- return () => off();
88
- }, []);
89
-
90
- // Resolve the group object for the message list
91
- useEffect(() => {
92
- CometChat.getGroup(sessionId).then(setGroup).catch(() => {});
93
- }, [sessionId]);
94
-
95
- // Track unread when panel is closed
96
- useEffect(() => {
97
- const listenerId = `in-call-chat-${sessionId}`;
98
- const messageListener = new CometChat.MessageListener({
99
- onTextMessageReceived: (msg: CometChat.TextMessage) => {
100
- if (
101
- msg.getReceiverType() === CometChat.RECEIVER_TYPE.GROUP &&
102
- msg.getReceiverId() === sessionId &&
103
- !open
104
- ) {
105
- setUnread((u) => {
106
- const next = u + 1;
107
- CometChatCalls.setChatButtonUnreadCount(next);
108
- return next;
109
- });
110
- }
111
- },
112
- });
113
- CometChat.addMessageListener(listenerId, messageListener);
114
- return () => CometChat.removeMessageListener(listenerId);
115
- }, [sessionId, open]);
116
-
117
- // Clear badge on open
118
- useEffect(() => {
119
- if (open) {
120
- setUnread(0);
121
- CometChatCalls.setChatButtonUnreadCount(0);
122
- }
123
- }, [open]);
124
-
125
- if (!open || !group) return null;
126
-
127
- return (
128
- <div
129
- role="dialog"
130
- aria-label="In-call chat"
131
- style={{
132
- position: "fixed",
133
- right: 0,
134
- top: 0,
135
- bottom: 0,
136
- width: 360,
137
- background: "var(--cometchat-background-color-01)",
138
- borderLeft: "1px solid var(--cometchat-border-color-light)",
139
- display: "flex",
140
- flexDirection: "column",
141
- zIndex: 200,
142
- }}
143
- >
144
- <div style={{ padding: "12px 16px", borderBottom: "1px solid var(--cometchat-border-color-light)", display: "flex", justifyContent: "space-between", alignItems: "center" }}>
145
- <strong>Chat</strong>
146
- <button onClick={() => setOpen(false)} aria-label="Close chat">×</button>
147
- </div>
148
- {/* The flex-1 + minHeight:0 dance applies here too — long chat → composer would push down */}
149
- <div style={{ flex: "1 1 0", minHeight: 0, overflow: "hidden" }}>
150
- <CometChatMessageList group={group} hideReplyInThreadOption />
151
- </div>
152
- <div style={{ flex: "0 0 auto" }}>
153
- <CometChatMessageComposer group={group} />
154
- </div>
155
- </div>
156
- );
157
- }
158
- ```
159
-
160
- The flex-1 + minHeight:0 + wrap-each-component pattern from `cometchat-react-patterns` rule 6a applies inside the chat panel too.
161
-
162
- ---
163
-
164
- ## Compact UX patterns
165
-
166
- For 1:1 calls or small groups, an in-call chat panel is overkill. Two lighter patterns:
167
-
168
- ### A — Floating message strip (top of call)
169
-
170
- Show only the latest message inline; tap to open full chat. Minimal UI for "just the gist."
171
-
172
- ### B — System-toast on each message
173
-
174
- `onTextMessageReceived` → toast at top of call. Auto-dismiss after 4s. No persistent panel.
175
-
176
- The full panel pattern above is for 5+-person calls or when chat is a load-bearing part of the experience (e.g. classroom Q&A).
177
-
178
- ---
179
-
180
- ## Anti-patterns
181
-
182
- 1. **Polling for unread count.** SDK's `setChatButtonUnreadCount` is push-based; respond to message events.
183
- 2. **Chat panel grows past viewport on long sessions.** flex-shrink trap (see `cometchat-react-patterns` rule 6a).
184
- 3. **Forgetting to clear the unread badge on panel open.** User opens, sees "12 new" badge that doesn't update — looks broken.
185
- 4. **Persisting the call group forever.** For ephemeral calls (consultations, support), delete the group on call end. Hosts of recurring meetings keep groups.
186
- 5. **Sending messages without auth.** Make sure CometChat.login resolved before joining the group. Race conditions on early call accept.
187
- 6. **Reusing one chat-panel instance across multiple calls.** Group reference goes stale. Re-mount per call.
188
-
189
- ---
190
-
191
- ## Verification checklist
192
-
193
- - [ ] `hideChatButton: false` in CallSettings
194
- - [ ] `onChatButtonClicked` listener opens the panel
195
- - [ ] CometChat group created/resolved with sessionId as GUID
196
- - [ ] Local user joins the group on call start
197
- - [ ] Unread badge updates from `onTextMessageReceived` only when panel closed
198
- - [ ] Badge cleared on panel open
199
- - [ ] Chat panel uses flex-1 + minHeight:0 + wrap-each-component pattern
200
- - [ ] `role="dialog"` + `aria-label` on the panel container
201
- - [ ] Cleanup: remove message + chat-button listeners on call end
202
- - [ ] Browser smoke: 2 tabs in call, send message from A → unread badge in B → tap → message visible
203
-
204
- ---
205
-
206
- ## Pointers
207
-
208
- - `cometchat-react-calls` SKILL.md
209
- - `cometchat-react-patterns` — minHeight:0 rule 6a (applies to in-call chat panel)
210
- - `references/group-calls.md` — group call architecture
211
- - `cometchat-android-v5-calls/references/in-call-chat.md` — Android V5 sibling reference
212
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/in-call-chat