@cometchat/skills 4.4.2 → 5.0.1

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 (518) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +44 -0
  4. package/LICENSE +21 -0
  5. package/MIGRATING.md +187 -0
  6. package/README.md +52 -156
  7. package/RULES.md +125 -0
  8. package/bin/cometchat-skills.mjs +1280 -0
  9. package/bin/legacy-skills.json +95 -0
  10. package/catalogs/android-v6.json +1646 -0
  11. package/catalogs/flutter-v6.json +651 -0
  12. package/catalogs/ios-v5.json +1383 -0
  13. package/catalogs/rn-calls-v5.json +134 -0
  14. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  15. package/catalogs/rn-sdk-v4.json +672 -0
  16. package/catalogs/rn-v5.json +449 -0
  17. package/catalogs/rn-v5.symbols.txt +216 -0
  18. package/catalogs/sdk-android-v5.json +514 -0
  19. package/contracts.android-calls-v5.json +122 -0
  20. package/contracts.android-v6.json +135 -0
  21. package/contracts.angular-v5.json +694 -0
  22. package/contracts.flutter-calls-v5.json +77 -0
  23. package/contracts.flutter-v6.json +126 -0
  24. package/contracts.ios-calls-v5.json +67 -0
  25. package/contracts.ios-v5.json +436 -0
  26. package/contracts.json +82 -0
  27. package/contracts.rn-calls-v5.json +77 -0
  28. package/contracts.rn-v5.json +727 -0
  29. package/contracts.sdk-android-v5.json +15 -0
  30. package/contracts.web-calls-v5.json +45 -0
  31. package/features.android-calls-v5.json +246 -0
  32. package/features.android-v6.json +65 -0
  33. package/features.angular-v5.json +521 -0
  34. package/features.flutter-calls-v5.json +286 -0
  35. package/features.flutter-v6.json +484 -0
  36. package/features.ios-calls-v5.json +236 -0
  37. package/features.ios-v5.json +573 -0
  38. package/features.json +61 -0
  39. package/features.rn-calls-v5.json +187 -0
  40. package/features.rn-v5.json +614 -0
  41. package/features.sdk-android-v5.json +40 -0
  42. package/features.sdk-jsv4.json +24 -0
  43. package/features.web-calls-v5.json +108 -0
  44. package/package.json +156 -74
  45. package/peers.yaml +355 -0
  46. package/registry/README.md +31 -0
  47. package/registry/android-calls-v5.json +94 -0
  48. package/registry/android-v6.json +177 -0
  49. package/registry/angular-v5.json +154 -0
  50. package/registry/flutter-calls-v5.json +94 -0
  51. package/registry/flutter-v6.json +159 -0
  52. package/registry/ios-calls-v5.json +99 -0
  53. package/registry/ios-v5.json +152 -0
  54. package/registry/rn-calls-v5.json +99 -0
  55. package/registry/rn-v5.json +169 -0
  56. package/registry/sdk-android-v5.json +93 -0
  57. package/registry/sdk-jsv4.json +93 -0
  58. package/registry/web-calls-v5.json +94 -0
  59. package/registry/web-v7.json +154 -0
  60. package/skills/cometchat/SKILL.md +47 -2096
  61. package/skills/cometchat-a11y/SKILL.md +44 -472
  62. package/skills/cometchat-analytics/SKILL.md +61 -0
  63. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  67. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  68. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  69. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  70. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  71. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  72. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  73. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  74. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  75. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  76. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  77. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  78. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  79. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  80. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  81. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  82. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  83. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  84. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  85. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  86. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  87. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  88. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  89. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  90. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  91. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  92. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  93. package/skills/cometchat-android-v6-production/SKILL.md +41 -179
  94. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  95. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  96. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  97. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  98. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  99. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  100. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  101. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  102. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  103. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  104. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  105. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  106. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  107. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  108. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  109. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  110. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  111. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  112. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  113. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  114. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  115. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  116. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  117. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  118. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  119. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  120. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  121. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  122. package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
  123. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  124. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  125. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  126. package/skills/cometchat-audit/SKILL.md +61 -0
  127. package/skills/cometchat-compliance/SKILL.md +63 -0
  128. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  129. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  130. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  131. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  132. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  133. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  134. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  135. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  136. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  137. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  138. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  139. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  140. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  141. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  142. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  143. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  144. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  145. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  146. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
  147. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  148. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  149. package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
  150. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  151. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  152. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  153. package/skills/cometchat-i18n/SKILL.md +35 -404
  154. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  155. package/skills/cometchat-ios-components/SKILL.md +44 -834
  156. package/skills/cometchat-ios-core/SKILL.md +182 -1068
  157. package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
  158. package/skills/cometchat-ios-core/references/docs-map.md +124 -0
  159. package/skills/cometchat-ios-core/references/install.md +23 -0
  160. package/skills/cometchat-ios-core/references/layout.md +219 -0
  161. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  162. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  163. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  164. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  165. package/skills/cometchat-ios-features/SKILL.md +29 -738
  166. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  167. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  168. package/skills/cometchat-ios-production/SKILL.md +67 -723
  169. package/skills/cometchat-ios-push/SKILL.md +24 -602
  170. package/skills/cometchat-ios-testing/SKILL.md +36 -355
  171. package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
  172. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  173. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  174. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  175. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  176. package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
  177. package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
  178. package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
  179. package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
  180. package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
  181. package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
  182. package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
  183. package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
  184. package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
  185. package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
  186. package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
  187. package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
  188. package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
  189. package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
  190. package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
  191. package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
  192. package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
  193. package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
  194. package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
  195. package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
  196. package/skills/cometchat-moderation/SKILL.md +58 -0
  197. package/skills/cometchat-onboarding/SKILL.md +92 -0
  198. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  199. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  200. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  201. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  202. package/skills/cometchat-onboarding/references/platforms.md +105 -0
  203. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  204. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  205. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  206. package/skills/cometchat-react-native-core/SKILL.md +335 -0
  207. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  208. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  209. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  210. package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
  211. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  212. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  213. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  214. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  215. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  216. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  217. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  218. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  219. package/skills/cometchat-react-native-production/SKILL.md +79 -0
  220. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  221. package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
  222. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  223. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  224. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  225. package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
  226. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  227. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  228. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  229. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  230. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  231. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  232. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  233. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  234. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  235. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  236. package/skills/cometchat-react-v7-core/references/layout.md +150 -0
  237. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  238. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  239. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  240. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  241. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  242. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  243. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  244. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  245. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  246. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  247. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  248. package/skills/cometchat-react-v7-production/SKILL.md +84 -0
  249. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  250. package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
  251. package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
  252. package/skills/cometchat-security/SKILL.md +80 -0
  253. package/skills/cometchat-self-host/SKILL.md +56 -0
  254. package/test-suite/README.md +70 -0
  255. package/test-suite/catalogs/android-calls-v5.json +830 -0
  256. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  257. package/test-suite/catalogs/android-v6.json +1646 -0
  258. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  259. package/test-suite/catalogs/angular-v5.json +7587 -0
  260. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  261. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  262. package/test-suite/catalogs/flutter-v6.json +651 -0
  263. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  264. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  265. package/test-suite/catalogs/ios-v5.json +1383 -0
  266. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  267. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  268. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  269. package/test-suite/catalogs/rn-v5.json +449 -0
  270. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  271. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  272. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  273. package/test-suite/catalogs/web-calls-v5.json +195 -0
  274. package/test-suite/catalogs/web-v7.json +1243 -0
  275. package/test-suite/scripts/build-registry.mjs +113 -0
  276. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  277. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  278. package/test-suite/scripts/lint-skills.mjs +932 -0
  279. package/test-suite/scripts/measure-tokens.mjs +169 -0
  280. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  281. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  282. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  283. package/test-suite/scripts/verify-catalog.mjs +242 -0
  284. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  285. package/test-suite/scripts/verify-detection.mjs +178 -0
  286. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  287. package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
  288. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  289. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  290. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  291. package/test-suite/typecheck/angular-v5/package.json +21 -0
  292. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  293. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  294. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  295. package/test-suite/typecheck/web-v7/package.json +18 -0
  296. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  297. package/bin/install.js +0 -1003
  298. package/skills/.claude-plugin/marketplace.json +0 -86
  299. package/skills/cometchat/references/asking-questions.md +0 -48
  300. package/skills/cometchat-android-v5/SKILL.md +0 -121
  301. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  302. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  303. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  304. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  305. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  306. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  307. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  308. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  309. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  310. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  311. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  312. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  313. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  314. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  315. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  316. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  317. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  318. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  319. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  320. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  321. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  322. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  323. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  324. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  325. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  326. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  327. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  328. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  329. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  330. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  331. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  332. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  333. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  334. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  335. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  336. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  337. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  338. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  339. package/skills/cometchat-android-v6/SKILL.md +0 -108
  340. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  341. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  342. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  343. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  344. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  345. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  346. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  347. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  348. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  349. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  350. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  351. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  352. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  353. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  354. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  355. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  356. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  357. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  358. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  359. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  360. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  361. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  362. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  363. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  364. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  365. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  366. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  367. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  368. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  369. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  370. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  371. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  372. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  373. package/skills/cometchat-angular-components/SKILL.md +0 -235
  374. package/skills/cometchat-angular-core/SKILL.md +0 -386
  375. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  376. package/skills/cometchat-angular-features/SKILL.md +0 -329
  377. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  378. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  379. package/skills/cometchat-angular-production/SKILL.md +0 -564
  380. package/skills/cometchat-angular-push/SKILL.md +0 -389
  381. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  382. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  383. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  384. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  385. package/skills/cometchat-calls/SKILL.md +0 -364
  386. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  387. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  388. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  389. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  390. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  391. package/skills/cometchat-components/SKILL.md +0 -1142
  392. package/skills/cometchat-core/SKILL.md +0 -1048
  393. package/skills/cometchat-customization/SKILL.md +0 -580
  394. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  395. package/skills/cometchat-features/SKILL.md +0 -861
  396. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  397. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  398. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  399. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  400. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  401. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  402. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  403. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  404. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  405. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  406. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  407. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  408. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  409. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  410. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  411. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  412. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  413. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  414. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  415. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  416. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  417. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  418. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  419. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  420. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  421. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  422. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  423. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  424. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  425. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  426. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  427. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  428. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  429. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  430. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  431. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  432. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  433. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  434. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  435. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  436. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  437. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  438. package/skills/cometchat-ios/SKILL.md +0 -325
  439. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  440. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  441. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  442. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  443. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  444. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  445. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  446. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  447. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  448. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  449. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  450. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  451. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  452. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  453. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  454. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  455. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  456. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  457. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  458. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  459. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  460. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  461. package/skills/cometchat-native-calls/SKILL.md +0 -671
  462. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  463. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  464. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  465. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  466. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  467. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  468. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  469. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  470. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  471. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  472. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  473. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  474. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  475. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  476. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  477. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  478. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  479. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  480. package/skills/cometchat-native-components/SKILL.md +0 -628
  481. package/skills/cometchat-native-core/SKILL.md +0 -679
  482. package/skills/cometchat-native-customization/SKILL.md +0 -716
  483. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  484. package/skills/cometchat-native-features/SKILL.md +0 -638
  485. package/skills/cometchat-native-placement/SKILL.md +0 -509
  486. package/skills/cometchat-native-production/SKILL.md +0 -700
  487. package/skills/cometchat-native-push/SKILL.md +0 -594
  488. package/skills/cometchat-native-testing/SKILL.md +0 -582
  489. package/skills/cometchat-native-theming/SKILL.md +0 -681
  490. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  491. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  492. package/skills/cometchat-placement/SKILL.md +0 -1360
  493. package/skills/cometchat-production/SKILL.md +0 -1027
  494. package/skills/cometchat-react-calls/SKILL.md +0 -752
  495. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  496. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  497. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  498. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  499. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  500. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  501. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  502. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  503. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  504. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  505. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  506. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  507. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  508. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  509. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  510. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  511. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  512. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  513. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  514. package/skills/cometchat-react-push/SKILL.md +0 -634
  515. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  516. package/skills/cometchat-react-testing/SKILL.md +0 -413
  517. package/skills/cometchat-theming/SKILL.md +0 -498
  518. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,899 +0,0 @@
1
- ---
2
- name: cometchat-nextjs-patterns
3
- description: "Framework-specific patterns for integrating CometChat React UI Kit v6 into Next.js projects (App Router and Pages Router). Covers SSR prevention, provider setup, route placement, API routes, and common pitfalls."
4
- license: "MIT"
5
- compatibility: "Node.js >=18; React >=18; Next.js >=13; @cometchat/chat-uikit-react ^6; @cometchat/chat-sdk-javascript ^4"
6
- metadata:
7
- author: "CometChat"
8
- version: "3.0.0"
9
- tags: "chat cometchat nextjs next react ssr app-router pages-router patterns"
10
- ---
11
-
12
- > **Ground truth:** `@cometchat/chat-uikit-react@^6` (+ `@cometchat/calls-sdk-javascript@^5`) — installed package types + `ui-kit/react`. **Official docs:** https://www.cometchat.com/docs/ui-kit/react/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
13
-
14
- ## Purpose
15
-
16
- This skill teaches Claude how to integrate CometChat into a Next.js project. Next.js is the most complex framework to integrate with because of Server-Side Rendering (SSR) and the Server Component / Client Component boundary. Every CometChat component is browser-only -- getting this wrong is the #1 source of integration failures.
17
-
18
- **Read these companion skills first:**
19
- - `cometchat-core` -- initialization, login, CSS, provider pattern, anti-patterns
20
- - `cometchat-components` -- component catalog and composition patterns
21
- - `cometchat-placement` -- WHERE to put chat (route, modal, drawer, embedded)
22
-
23
- This skill covers the HOW for Next.js specifically.
24
-
25
- ---
26
-
27
- ## 1. Project detection
28
-
29
- A project uses Next.js when `package.json` has `next` as a dependency.
30
-
31
- ### Detecting App Router vs Pages Router
32
-
33
- Both may coexist in a project. Check which is primary:
34
-
35
- ```bash
36
- # App Router: look for app/ directory with layout.tsx
37
- ls app/layout.tsx app/layout.jsx 2>/dev/null
38
-
39
- # Pages Router: look for pages/ directory with _app.tsx
40
- ls pages/_app.tsx pages/_app.jsx pages/_app.js 2>/dev/null
41
- ```
42
-
43
- **If `app/layout.tsx` exists, treat the project as App Router.** Even if `pages/` also exists, App Router is the primary routing mechanism in modern Next.js.
44
-
45
- **If only `pages/` exists, treat the project as Pages Router.**
46
-
47
- ---
48
-
49
- ## 2. Critical: SSR prevention
50
-
51
- **Every file that imports from `@cometchat/chat-uikit-react` MUST prevent server-side rendering.** CometChat components access `window`, `document`, and WebSocket APIs during import -- not just during render, but at import time. If Next.js tries to import these modules on the server, the build crashes with `ReferenceError: window is not defined`.
52
-
53
- ### App Router: "use client" directive
54
-
55
- Add `"use client"` as the FIRST line of every file that imports CometChat:
56
-
57
- ```tsx
58
- "use client";
59
-
60
- import { CometChatConversations } from "@cometchat/chat-uikit-react";
61
- // This file only runs in the browser
62
- ```
63
-
64
- **Common mistake:** Putting `"use client"` AFTER imports. It must be the very first line, before any import statements.
65
-
66
- ```tsx
67
- // WRONG -- "use client" is not the first line
68
- import React from "react";
69
- "use client"; // too late, has no effect
70
-
71
- // CORRECT
72
- "use client";
73
- import React from "react";
74
- ```
75
-
76
- ### App Router: dynamic import from a Client Component (Next.js 15+ rule)
77
-
78
- > ⚠️ **Next.js 15+ change (verified by runtime smoke 2026-06-02):** `dynamic(..., { ssr: false })` is **FORBIDDEN in Server Components** — Next.js 15+ throws a build error. The page that owns the dynamic-import MUST be a Client Component (`"use client"` at line 1). Otherwise the build fails with `Ecmascript file had an error` even if everything else is correct.
79
-
80
- ```tsx
81
- // app/messages/page.tsx
82
- "use client"; // ← REQUIRED in Next.js 15+ when using `dynamic({ ssr: false })`
83
- import dynamic from "next/dynamic";
84
-
85
- const ChatView = dynamic(() => import("../../components/ChatView"), {
86
- ssr: false,
87
- loading: () => <div>Loading chat...</div>,
88
- });
89
-
90
- export default function MessagesPage() {
91
- return <ChatView />;
92
- }
93
- ```
94
-
95
- The `ChatView` component file itself must also have `"use client"` at the top. Both ends of the dynamic-import boundary need the directive.
96
-
97
- **If you cannot make the page a Client Component** (because it needs server data-fetching), wrap your data-fetching in a separate Server Component sibling and pass results down via props to a Client Component that owns the CometChat subtree.
98
-
99
- **Build still fails after applying both `"use client"` and `dynamic(... ssr:false)`?** Add `export const dynamic = "force-dynamic";` at the top of the page to opt out of static prerendering entirely (or `export const runtime = "edge";` for edge runtime). This is sometimes needed in Next.js 16 even with everything else correct — verified during 2026-06-02 smoke against Next.js 16.2.7. Skill-side suspicion: kit's module-eval-time `window` references still trip static prerender even via dynamic boundary.
100
-
101
- ### Pages Router: dynamic import
102
-
103
- In the Pages Router, every page can potentially run on the server. Use `next/dynamic`:
104
-
105
- ```tsx
106
- // pages/messages.tsx
107
- import dynamic from "next/dynamic";
108
-
109
- const ChatView = dynamic(() => import("../components/ChatView"), {
110
- ssr: false,
111
- loading: () => <div>Loading chat...</div>,
112
- });
113
-
114
- export default function MessagesPage() {
115
- return <ChatView />;
116
- }
117
- ```
118
-
119
- ---
120
-
121
- ## 3. CometChatProvider for Next.js (App Router)
122
-
123
- ### Full implementation
124
-
125
- ```tsx
126
- // app/providers/CometChatProvider.tsx
127
- "use client";
128
-
129
- import React, { useEffect, useState, createContext, useContext } from "react";
130
- import { CometChatUIKit, UIKitSettingsBuilder } from "@cometchat/chat-uikit-react";
131
-
132
- interface CometChatContextValue {
133
- isReady: boolean;
134
- error: string | null;
135
- }
136
-
137
- const CometChatContext = createContext<CometChatContextValue>({
138
- isReady: false,
139
- error: null,
140
- });
141
-
142
- export const useCometChat = () => useContext(CometChatContext);
143
-
144
- // Module-level state prevents both double-init AND double-login in React
145
- // StrictMode. Without the loginInFlight guard, a second mount calls
146
- // login() while the first is still pending and the SDK throws
147
- // "Please wait until the previous login request ends."
148
- let initialized = false;
149
- let loginInFlight: Promise<unknown> | null = null;
150
-
151
- async function ensureLoggedIn(
152
- uid: string,
153
- authToken?: string,
154
- ): Promise<void> {
155
- const existing = await CometChatUIKit.getLoggedinUser();
156
- if (existing) return;
157
- if (loginInFlight) {
158
- await loginInFlight;
159
- return;
160
- }
161
- loginInFlight = authToken
162
- ? CometChatUIKit.loginWithAuthToken(authToken)
163
- : CometChatUIKit.login(uid);
164
- try {
165
- await loginInFlight;
166
- } finally {
167
- loginInFlight = null;
168
- }
169
- }
170
-
171
- interface CometChatProviderProps {
172
- children: React.ReactNode;
173
- }
174
-
175
- export function CometChatProvider({ children }: CometChatProviderProps) {
176
- const [isReady, setIsReady] = useState(false);
177
- const [error, setError] = useState<string | null>(null);
178
-
179
- useEffect(() => {
180
- async function setup() {
181
- try {
182
- if (!initialized) {
183
- initialized = true;
184
-
185
- const settings = new UIKitSettingsBuilder()
186
- .setAppId(process.env.NEXT_PUBLIC_COMETCHAT_APP_ID!)
187
- .setRegion(process.env.NEXT_PUBLIC_COMETCHAT_REGION!)
188
- .setAuthKey(process.env.NEXT_PUBLIC_COMETCHAT_AUTH_KEY!)
189
- .subscribePresenceForAllUsers()
190
- .build();
191
-
192
- await CometChatUIKit.init(settings);
193
- }
194
-
195
- await ensureLoggedIn("cometchat-uid-1"); // DEVELOPMENT ONLY — see cometchat-production skill
196
-
197
- setIsReady(true);
198
- } catch (e) {
199
- setError(formatCometChatError(e)); // from cometchat-core §6 errors.ts — NOT String(e),
200
- // which renders "[object Object]" on kit errors (ENG-35719)
201
- }
202
- }
203
-
204
- setup();
205
- }, []);
206
-
207
- if (error) {
208
- return (
209
- <div style={{ color: "red", padding: 16, fontFamily: "monospace" }}>
210
- CometChat Error: {error}
211
- </div>
212
- );
213
- }
214
-
215
- if (!isReady) return null;
216
-
217
- return (
218
- <CometChatContext.Provider value={{ isReady, error }}>
219
- {children}
220
- </CometChatContext.Provider>
221
- );
222
- }
223
- ```
224
-
225
- ### Where to mount: Option A -- Global (chat available everywhere)
226
-
227
- Wrap the entire app in `app/layout.tsx`. The layout itself is a Server Component, but the provider is a Client Component via `"use client"` in its file:
228
-
229
- ```tsx
230
- // app/layout.tsx (Server Component)
231
- import { CometChatProvider } from "./providers/CometChatProvider";
232
- import "./globals.css";
233
-
234
- export default function RootLayout({ children }: { children: React.ReactNode }) {
235
- return (
236
- <html lang="en">
237
- <body>
238
- <CometChatProvider>
239
- {children}
240
- </CometChatProvider>
241
- </body>
242
- </html>
243
- );
244
- }
245
- ```
246
-
247
- **Note:** Importing a `"use client"` component from a Server Component is fine. Next.js renders the Server Component on the server and defers the Client Component to the browser. The `CometChatProvider` only runs its `useEffect` (and init) in the browser.
248
-
249
- > ⚠️ **Option A REQUIRES `force-dynamic` on the layout (verified — real build, Next 16.2.9 + kit 6.5.1).** Mounting the provider in `app/layout.tsx` pulls the kit module into the layout's module graph, so `next build` evaluates it during the **static prerender** of *every* route — including `/` (which imports no CometChat code) and the framework-generated `/_not-found` — and crashes with `ReferenceError: window is not defined`. `"use client"` does NOT prevent this in Next 16. The per-page `export const dynamic = "force-dynamic"` from §"Build still fails…" cannot fix it, because `/_not-found` has no page file to annotate. **The fix is to put the directive on the LAYOUT, where it cascades to all routes including `/_not-found`:**
250
- > ```tsx
251
- > // app/layout.tsx — add this alongside the provider mount
252
- > export const dynamic = "force-dynamic";
253
- > ```
254
- > If you would rather keep static prerendering for non-chat routes, use **Option B** (scoped route group) so `/` and `/_not-found` never import the kit — that is the cleaner choice for marketing/SSG-heavy sites.
255
-
256
- ### Where to mount: Option B -- Scoped (chat only on chat routes)
257
-
258
- Use a route group to scope the provider to chat-related routes:
259
-
260
- ```
261
- app/
262
- layout.tsx <-- no CometChat here
263
- page.tsx <-- home page, no chat overhead
264
- (chat)/
265
- layout.tsx <-- CometChatProvider wraps only this group
266
- messages/
267
- page.tsx <-- chat page
268
- inbox/
269
- page.tsx <-- another chat page
270
- ```
271
-
272
- ```tsx
273
- // app/(chat)/layout.tsx
274
- import { CometChatProvider } from "../providers/CometChatProvider";
275
-
276
- export default function ChatLayout({ children }: { children: React.ReactNode }) {
277
- return <CometChatProvider>{children}</CometChatProvider>;
278
- }
279
- ```
280
-
281
- Option B is better for performance: CometChat's SDK and WebSocket connection are only loaded when the user visits a chat route. Option A is simpler and ensures incoming call notifications work everywhere.
282
-
283
- ---
284
-
285
- ## 4. CometChatProvider for Next.js (Pages Router)
286
-
287
- In the Pages Router, mount the provider in `_app.tsx`. Use dynamic import to prevent SSR:
288
-
289
- ```tsx
290
- // pages/_app.tsx
291
- import type { AppProps } from "next/app";
292
- import dynamic from "next/dynamic";
293
- import "../styles/globals.css";
294
-
295
- const CometChatProvider = dynamic(
296
- () => import("../components/CometChatProvider").then((mod) => mod.CometChatProvider),
297
- { ssr: false }
298
- );
299
-
300
- export default function App({ Component, pageProps }: AppProps) {
301
- return (
302
- <CometChatProvider>
303
- <Component {...pageProps} />
304
- </CometChatProvider>
305
- );
306
- }
307
- ```
308
-
309
- The provider implementation is the same as section 3, but the file lives at `components/CometChatProvider.tsx` (no `"use client"` needed in Pages Router -- `ssr: false` handles SSR prevention).
310
-
311
- ---
312
-
313
- ## 5. Route placement (App Router)
314
-
315
- Next.js App Router uses file-system routing. Creating a file at the right path automatically creates the route.
316
-
317
- ### Create the chat page
318
-
319
- ```tsx
320
- // app/messages/page.tsx
321
- "use client";
322
-
323
- import { useState } from "react";
324
- import {
325
- CometChatConversations,
326
- CometChatMessageHeader,
327
- CometChatMessageList,
328
- CometChatMessageComposer,
329
- } from "@cometchat/chat-uikit-react";
330
- import { CometChat } from "@cometchat/chat-sdk-javascript";
331
-
332
- export default function MessagesPage() {
333
- const [selectedUser, setSelectedUser] = useState<CometChat.User>();
334
- const [selectedGroup, setSelectedGroup] = useState<CometChat.Group>();
335
-
336
- function handleConversationClick(conversation: CometChat.Conversation) {
337
- const entity = conversation.getConversationWith();
338
- if (entity instanceof CometChat.User) {
339
- setSelectedUser(entity);
340
- setSelectedGroup(undefined);
341
- } else if (entity instanceof CometChat.Group) {
342
- setSelectedUser(undefined);
343
- setSelectedGroup(entity);
344
- }
345
- }
346
-
347
- return (
348
- <div style={{ display: "flex", height: "100vh" }}>
349
- <div style={{ width: "360px", borderRight: "1px solid #eee" }}>
350
- <CometChatConversations onItemClick={handleConversationClick} />
351
- </div>
352
- <div style={{ flex: 1, display: "flex", flexDirection: "column" }}>
353
- {(selectedUser || selectedGroup) ? (
354
- <>
355
- {selectedUser && <CometChatMessageHeader user={selectedUser} />}
356
- {selectedGroup && <CometChatMessageHeader group={selectedGroup} />}
357
- {selectedUser && <CometChatMessageList user={selectedUser} hideReplyInThreadOption={true} />}
358
- {selectedGroup && <CometChatMessageList group={selectedGroup} hideReplyInThreadOption={true} />}
359
- {selectedUser && <CometChatMessageComposer user={selectedUser} />}
360
- {selectedGroup && <CometChatMessageComposer group={selectedGroup} />}
361
- </>
362
- ) : (
363
- <div style={{ flex: 1, display: "flex", alignItems: "center", justifyContent: "center", color: "#999" }}>
364
- Select a conversation to start chatting
365
- </div>
366
- )}
367
- </div>
368
- </div>
369
- );
370
- }
371
- ```
372
-
373
- This page is accessible at `/messages`. No router configuration needed -- Next.js handles it via the file system.
374
-
375
- ### Add a navigation link
376
-
377
- Find the layout's nav component and add a link:
378
-
379
- ```tsx
380
- import Link from "next/link";
381
-
382
- // In the nav, alongside existing links:
383
- <Link href="/messages">Messages</Link>
384
- ```
385
-
386
- **Important:** Use Next.js's `<Link>` component (from `next/link`), not a plain `<a>` tag or React Router's `<Link>`. Next.js's Link handles client-side navigation and prefetching.
387
-
388
- ---
389
-
390
- ## 6. Route placement (Pages Router)
391
-
392
- ### Create the chat page
393
-
394
- ```tsx
395
- // pages/messages.tsx
396
- import dynamic from "next/dynamic";
397
-
398
- const ChatView = dynamic(() => import("../components/ChatView"), {
399
- ssr: false,
400
- loading: () => (
401
- <div style={{ display: "flex", alignItems: "center", justifyContent: "center", height: "100vh" }}>
402
- Loading chat...
403
- </div>
404
- ),
405
- });
406
-
407
- export default function MessagesPage() {
408
- return <ChatView />;
409
- }
410
- ```
411
-
412
- The `ChatView` component contains the actual CometChat composition (see `cometchat-placement` for patterns). It is dynamically imported with `ssr: false` to prevent server rendering.
413
-
414
- ### ChatView implementation
415
-
416
- ```tsx
417
- // components/ChatView.tsx
418
- import { useState } from "react";
419
- import {
420
- CometChatConversations,
421
- CometChatMessageHeader,
422
- CometChatMessageList,
423
- CometChatMessageComposer,
424
- } from "@cometchat/chat-uikit-react";
425
- import { CometChat } from "@cometchat/chat-sdk-javascript";
426
-
427
- export default function ChatView() {
428
- const [selectedUser, setSelectedUser] = useState<CometChat.User>();
429
- const [selectedGroup, setSelectedGroup] = useState<CometChat.Group>();
430
-
431
- function handleConversationClick(conversation: CometChat.Conversation) {
432
- const entity = conversation.getConversationWith();
433
- if (entity instanceof CometChat.User) {
434
- setSelectedUser(entity);
435
- setSelectedGroup(undefined);
436
- } else if (entity instanceof CometChat.Group) {
437
- setSelectedUser(undefined);
438
- setSelectedGroup(entity);
439
- }
440
- }
441
-
442
- return (
443
- <div style={{ display: "flex", height: "100vh" }}>
444
- <div style={{ width: "360px", borderRight: "1px solid #eee" }}>
445
- <CometChatConversations onItemClick={handleConversationClick} />
446
- </div>
447
- <div style={{ flex: 1, display: "flex", flexDirection: "column" }}>
448
- {selectedUser && (
449
- <>
450
- <CometChatMessageHeader user={selectedUser} />
451
- <CometChatMessageList user={selectedUser} hideReplyInThreadOption={true} />
452
- <CometChatMessageComposer user={selectedUser} />
453
- </>
454
- )}
455
- {selectedGroup && (
456
- <>
457
- <CometChatMessageHeader group={selectedGroup} />
458
- <CometChatMessageList group={selectedGroup} hideReplyInThreadOption={true} />
459
- <CometChatMessageComposer group={selectedGroup} />
460
- </>
461
- )}
462
- </div>
463
- </div>
464
- );
465
- }
466
- ```
467
-
468
- ---
469
-
470
- ## 7. Modal/drawer placement
471
-
472
- ### App Router
473
-
474
- Create a Client Component for the drawer:
475
-
476
- ```tsx
477
- // components/ChatDrawer.tsx
478
- "use client";
479
-
480
- import { useEffect, useState } from "react";
481
- import {
482
- CometChatMessageHeader,
483
- CometChatMessageList,
484
- CometChatMessageComposer,
485
- } from "@cometchat/chat-uikit-react";
486
- import { CometChat } from "@cometchat/chat-sdk-javascript";
487
-
488
- interface ChatDrawerProps {
489
- isOpen: boolean;
490
- onClose: () => void;
491
- targetUserId?: string;
492
- }
493
-
494
- export function ChatDrawer({ isOpen, onClose, targetUserId }: ChatDrawerProps) {
495
- const [user, setUser] = useState<CometChat.User>();
496
-
497
- useEffect(() => {
498
- if (!isOpen || !targetUserId) return;
499
- CometChat.getUser(targetUserId).then(setUser);
500
- }, [isOpen, targetUserId]);
501
-
502
- if (!isOpen) return null;
503
-
504
- return (
505
- <>
506
- <div onClick={onClose} style={{ position: "fixed", inset: 0, zIndex: 999, backgroundColor: "rgba(0,0,0,0.3)" }} />
507
- <div style={{
508
- position: "fixed", top: 0, right: 0, bottom: 0, width: "400px", zIndex: 1000,
509
- backgroundColor: "#fff", boxShadow: "-4px 0 20px rgba(0,0,0,0.15)",
510
- display: "flex", flexDirection: "column",
511
- }}>
512
- <div style={{ display: "flex", justifyContent: "space-between", padding: "12px", borderBottom: "1px solid #eee" }}>
513
- <span style={{ fontWeight: 600 }}>Chat</span>
514
- <button onClick={onClose} style={{ background: "none", border: "none", cursor: "pointer" }}>X</button>
515
- </div>
516
- {user && (
517
- <>
518
- <CometChatMessageHeader user={user} />
519
- <div style={{ flex: 1, overflow: "hidden" }}>
520
- <CometChatMessageList user={user} hideReplyInThreadOption={true} />
521
- </div>
522
- <CometChatMessageComposer user={user} />
523
- </>
524
- )}
525
- </div>
526
- </>
527
- );
528
- }
529
- ```
530
-
531
- **Mounting the drawer:** The drawer component has `"use client"`, so it can be imported from either Server or Client Components. Import it in the layout or any page:
532
-
533
- ```tsx
534
- // In a Server Component layout -- this works because ChatDrawer is "use client"
535
- import { ChatDrawer } from "../components/ChatDrawer";
536
-
537
- // But state management (isOpen) must be in a Client Component.
538
- // Option 1: wrap in a small client component
539
- // Option 2: use a client-side context for drawer state
540
- ```
541
-
542
- For state lifting across the Server/Client boundary, create a small Client Component wrapper:
543
-
544
- ```tsx
545
- // components/ChatDrawerTrigger.tsx
546
- "use client";
547
-
548
- import { useState } from "react";
549
- import { ChatDrawer } from "./ChatDrawer";
550
-
551
- export function ChatDrawerTrigger({ targetUserId }: { targetUserId: string }) {
552
- const [isOpen, setIsOpen] = useState(false);
553
-
554
- return (
555
- <>
556
- <button onClick={() => setIsOpen(true)}>Message</button>
557
- <ChatDrawer isOpen={isOpen} onClose={() => setIsOpen(false)} targetUserId={targetUserId} />
558
- </>
559
- );
560
- }
561
- ```
562
-
563
- ### Pages Router
564
-
565
- Use `dynamic` import for the drawer/modal component:
566
-
567
- ```tsx
568
- import dynamic from "next/dynamic";
569
-
570
- const ChatDrawer = dynamic(() => import("../components/ChatDrawer").then(m => m.ChatDrawer), {
571
- ssr: false,
572
- });
573
- ```
574
-
575
- See `cometchat-placement` for complete modal and drawer implementations.
576
-
577
- ---
578
-
579
- ## 8. API route for production auth
580
-
581
- Next.js can serve as both frontend and backend. Use an API route to generate CometChat auth tokens server-side.
582
-
583
- ### App Router API route
584
-
585
- ```tsx
586
- // app/api/cometchat-token/route.ts
587
- import { NextRequest, NextResponse } from "next/server";
588
-
589
- const COMETCHAT_APP_ID = process.env.COMETCHAT_APP_ID!; // server-only, no NEXT_PUBLIC_ prefix
590
- const COMETCHAT_REGION = process.env.COMETCHAT_REGION!; // server-only
591
- const COMETCHAT_AUTH_TOKEN = process.env.COMETCHAT_AUTH_TOKEN!; // server-only secret
592
-
593
- export async function POST(request: NextRequest) {
594
- try {
595
- const { uid } = await request.json();
596
-
597
- if (!uid || typeof uid !== "string") {
598
- return NextResponse.json({ error: "uid is required" }, { status: 400 });
599
- }
600
-
601
- const response = await fetch(
602
- `https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/users/${uid}/auth_tokens`,
603
- {
604
- method: "POST",
605
- headers: {
606
- "Content-Type": "application/json",
607
- apiKey: COMETCHAT_AUTH_TOKEN,
608
- appId: COMETCHAT_APP_ID,
609
- },
610
- body: JSON.stringify({}),
611
- }
612
- );
613
-
614
- if (!response.ok) {
615
- const error = await response.text();
616
- return NextResponse.json({ error }, { status: response.status });
617
- }
618
-
619
- const data = await response.json();
620
- return NextResponse.json({ token: data.data.authToken });
621
- } catch (error) {
622
- return NextResponse.json({ error: String(error) }, { status: 500 });
623
- }
624
- }
625
- ```
626
-
627
- ### Pages Router API route
628
-
629
- ```tsx
630
- // pages/api/cometchat-token.ts
631
- import type { NextApiRequest, NextApiResponse } from "next";
632
-
633
- const COMETCHAT_APP_ID = process.env.COMETCHAT_APP_ID!;
634
- const COMETCHAT_REGION = process.env.COMETCHAT_REGION!;
635
- const COMETCHAT_AUTH_TOKEN = process.env.COMETCHAT_AUTH_TOKEN!;
636
-
637
- export default async function handler(req: NextApiRequest, res: NextApiResponse) {
638
- if (req.method !== "POST") {
639
- return res.status(405).json({ error: "Method not allowed" });
640
- }
641
-
642
- try {
643
- const { uid } = req.body;
644
-
645
- if (!uid || typeof uid !== "string") {
646
- return res.status(400).json({ error: "uid is required" });
647
- }
648
-
649
- const response = await fetch(
650
- `https://${COMETCHAT_APP_ID}.api-${COMETCHAT_REGION}.cometchat.io/v3/users/${uid}/auth_tokens`,
651
- {
652
- method: "POST",
653
- headers: {
654
- "Content-Type": "application/json",
655
- apiKey: COMETCHAT_AUTH_TOKEN,
656
- appId: COMETCHAT_APP_ID,
657
- },
658
- body: JSON.stringify({}),
659
- }
660
- );
661
-
662
- if (!response.ok) {
663
- const error = await response.text();
664
- return res.status(response.status).json({ error });
665
- }
666
-
667
- const data = await response.json();
668
- return res.status(200).json({ token: data.data.authToken });
669
- } catch (error) {
670
- return res.status(500).json({ error: String(error) });
671
- }
672
- }
673
- ```
674
-
675
- ### Environment variables for the API route
676
-
677
- Add server-only variables to `.env.local` (no `NEXT_PUBLIC_` prefix -- these must NOT be exposed to the browser):
678
-
679
- ```env
680
- # .env.local -- server-only (no NEXT_PUBLIC_ prefix)
681
- COMETCHAT_APP_ID=your_app_id
682
- COMETCHAT_REGION=us
683
- COMETCHAT_AUTH_TOKEN=your_server_auth_token
684
-
685
- # Client-side (NEXT_PUBLIC_ prefix)
686
- NEXT_PUBLIC_COMETCHAT_APP_ID=your_app_id
687
- NEXT_PUBLIC_COMETCHAT_REGION=us
688
- NEXT_PUBLIC_COMETCHAT_AUTH_KEY=your_client_auth_key
689
- ```
690
-
691
- **Note:** `COMETCHAT_AUTH_TOKEN` (server secret) and `COMETCHAT_AUTH_KEY` (client key) are different values from the CometChat dashboard. The auth token has higher privileges. Never prefix it with `NEXT_PUBLIC_`.
692
-
693
- ---
694
-
695
- ## 9. Environment variables
696
-
697
- ### Next.js env var conventions
698
-
699
- | Variable | Prefix | Accessible from | File |
700
- |---|---|---|---|
701
- | Client-side vars | `NEXT_PUBLIC_` | Browser + Server | `.env.local` |
702
- | Server-only vars | None | Server only (API routes, Server Components) | `.env.local` |
703
-
704
- ### .env.local file
705
-
706
- ```env
707
- NEXT_PUBLIC_COMETCHAT_APP_ID=your_app_id
708
- NEXT_PUBLIC_COMETCHAT_REGION=us
709
- NEXT_PUBLIC_COMETCHAT_AUTH_KEY=your_auth_key
710
- ```
711
-
712
- **Access in client code:** `process.env.NEXT_PUBLIC_COMETCHAT_APP_ID`
713
-
714
- **Important:** `.env.local` is gitignored by default in Next.js. Unlike Vite, you do not need to manually add it to `.gitignore`.
715
-
716
- ---
717
-
718
- ## 10. CSS import
719
-
720
- ### App Router
721
-
722
- Import in `app/globals.css` or `app/layout.tsx`:
723
-
724
- ```css
725
- /* app/globals.css */
726
- @import "@cometchat/chat-uikit-react/css-variables.css";
727
-
728
- /* your styles below */
729
- ```
730
-
731
- Or as a JS import in the root layout:
732
-
733
- ```tsx
734
- // app/layout.tsx
735
- import "@cometchat/chat-uikit-react/css-variables.css";
736
- import "./globals.css";
737
- ```
738
-
739
- ### Pages Router
740
-
741
- Import in `pages/_app.tsx` or `styles/globals.css`:
742
-
743
- ```tsx
744
- // pages/_app.tsx
745
- import "@cometchat/chat-uikit-react/css-variables.css";
746
- import "../styles/globals.css";
747
- ```
748
-
749
- ---
750
-
751
- ## 11. Common pitfalls
752
-
753
- ### Missing "use client"
754
-
755
- **Symptom:** `ReferenceError: window is not defined` or `ReferenceError: document is not defined` during build or at runtime.
756
-
757
- **Cause:** A file imports from `@cometchat/chat-uikit-react` without `"use client"` at the top. Next.js tries to render it on the server.
758
-
759
- **Fix:** Add `"use client"` as the first line of the file.
760
-
761
- ### Server/client code mixing
762
-
763
- **Symptom:** Build errors about `next/headers`, `cookies()`, or `generateMetadata` in the same file as CometChat imports.
764
-
765
- **Cause:** Server-only APIs and client-only APIs cannot coexist in the same file. CometChat requires `"use client"`, but `next/headers` and `cookies()` are server-only.
766
-
767
- **Fix:** Split the file. Keep server logic in a Server Component; keep CometChat in a separate `"use client"` component that the Server Component imports.
768
-
769
- ```tsx
770
- // app/messages/page.tsx (Server Component -- does data fetching)
771
- import { cookies } from "next/headers";
772
- import dynamic from "next/dynamic";
773
-
774
- const ChatView = dynamic(() => import("../../components/ChatView"), { ssr: false });
775
-
776
- export default async function MessagesPage() {
777
- const session = cookies().get("session"); // server-only
778
- if (!session) redirect("/login");
779
-
780
- return <ChatView />;
781
- }
782
- ```
783
-
784
- ### Image optimization
785
-
786
- CometChat renders avatars and media images via its own components. These do not conflict with `next/image`. Do not try to replace CometChat's internal images with `next/image` -- they are managed by the SDK.
787
-
788
- ### Middleware
789
-
790
- CometChat has no middleware requirements. Do not add CometChat-related middleware. If the project has auth middleware (e.g., protecting routes), just ensure the chat route is behind the same auth as the rest of the app.
791
-
792
- ### ISR/SSG pages with chat
793
-
794
- If a page uses static generation (`generateStaticParams`) or ISR, you can still add chat. Wrap the CometChat components in a Client Component. The page's static HTML ships without chat, and the Client Component hydrates and renders chat in the browser:
795
-
796
- ```tsx
797
- // app/products/[id]/page.tsx
798
- export async function generateStaticParams() {
799
- // ... returns product IDs for static generation
800
- }
801
-
802
- export default async function ProductPage({ params }: { params: { id: string } }) {
803
- const product = await getProduct(params.id);
804
-
805
- return (
806
- <div>
807
- <h1>{product.name}</h1>
808
- <p>{product.description}</p>
809
- {/* ChatPanel is "use client" -- renders only in the browser */}
810
- <ChatPanel targetUserId={product.sellerId} />
811
- </div>
812
- );
813
- }
814
- ```
815
-
816
- ### Turbopack
817
-
818
- Next.js's Turbopack (dev mode with `next dev --turbo`) works with CometChat. No special configuration needed. If you encounter issues, fall back to the standard Webpack dev server (`next dev` without `--turbo`).
819
-
820
- ### Pages Router: do NOT use CometChat from `getServerSideProps` / `getStaticProps` / `getInitialProps`
821
-
822
- **Symptom:** `ReferenceError: window is not defined` or cryptic SDK errors during `next build` or page rendering.
823
-
824
- **Cause:** The CometChat client SDK needs the browser (localStorage, WebSocket, etc.) and a logged-in user session. It cannot run inside `getServerSideProps`, `getStaticProps`, or `getInitialProps` — those execute on the Node.js server before the browser has hydrated.
825
-
826
- **Fix:** Do chat-related work in client components only. If you need to pre-seed a conversation from server data, pass just the primitive IDs (user UID, group GUID) as page props and let the client component fetch the CometChat entity on mount:
827
-
828
- ```tsx
829
- // pages/products/[id].tsx — server-side data fetch, no CometChat
830
- export async function getServerSideProps({ params }) {
831
- const product = await fetchProduct(params.id);
832
- return { props: { product } }; // pass sellerId as string, not a CometChat.User
833
- }
834
-
835
- export default function ProductPage({ product }) {
836
- return (
837
- <>
838
- <h1>{product.name}</h1>
839
- <ChatWithSeller sellerUid={product.sellerId} /> {/* client component */}
840
- </>
841
- );
842
- }
843
- ```
844
-
845
- ### Pages Router: `_document.tsx` doesn't need CometChat changes
846
-
847
- If the project has a custom `pages/_document.tsx` for font preloading or third-party SSR CSS injection, leave it alone. CometChat CSS variables are client-side only — they don't need `_document.tsx` integration. Mount the CSS import in `_app.tsx` as shown in section 10; `_document.tsx` is the wrong layer.
848
-
849
- ---
850
-
851
- ## 12. Complete integration checklist (App Router)
852
-
853
- 1. Install packages: `npm install @cometchat/chat-uikit-react@^6 @cometchat/chat-sdk-javascript@^4` — **⚠️ keep the `@^6` major pin; never install bare.** v7 is on npm — a bare `npm install @cometchat/chat-uikit-react` pulls it once it's tagged `latest`, and these v6 skills break against the v7 API.
854
- 2. Create `.env.local` with `NEXT_PUBLIC_COMETCHAT_APP_ID`, `NEXT_PUBLIC_COMETCHAT_REGION`, `NEXT_PUBLIC_COMETCHAT_AUTH_KEY`
855
- 3. Import `@cometchat/chat-uikit-react/css-variables.css` in `app/globals.css`
856
- 4. Create `app/providers/CometChatProvider.tsx` with `"use client"` (section 3)
857
- 5. Mount `CometChatProvider` in `app/layout.tsx` wrapping `{children}`
858
- 6. Create `app/messages/page.tsx` with `"use client"` (section 5)
859
- 7. Add a `<Link href="/messages">Messages</Link>` to the layout's nav
860
- 8. Verify: `npm run build` should succeed without SSR errors
861
-
862
- ## 13. Complete integration checklist (Pages Router)
863
-
864
- 1. Install packages: `npm install @cometchat/chat-uikit-react@^6 @cometchat/chat-sdk-javascript@^4` — **⚠️ keep the `@^6` major pin; never install bare.** v7 is on npm — a bare `npm install @cometchat/chat-uikit-react` pulls it once it's tagged `latest`, and these v6 skills break against the v7 API.
865
- 2. Create `.env.local` with `NEXT_PUBLIC_COMETCHAT_APP_ID`, `NEXT_PUBLIC_COMETCHAT_REGION`, `NEXT_PUBLIC_COMETCHAT_AUTH_KEY`
866
- 3. Import `@cometchat/chat-uikit-react/css-variables.css` in `pages/_app.tsx`
867
- 4. Create `components/CometChatProvider.tsx` (section 3 code, without `"use client"`)
868
- 5. Dynamically import `CometChatProvider` in `pages/_app.tsx` with `ssr: false` (section 4)
869
- 6. Create `pages/messages.tsx` with dynamic import (section 6)
870
- 7. Add a `<Link href="/messages">Messages</Link>` to the layout's nav
871
- 8. Verify: `npm run build` should succeed without SSR errors
872
-
873
- ## 14. Visual Builder integration (v4.3)
874
-
875
- If the customer picks **Visually** in dispatcher Step 3.1, the Next.js recipe diverges based on App Router vs Pages Router. Skills runs `cometchat builder export --platform react --output <target>` to download the canonical `src/CometChat/` + patch settings in one step.
876
-
877
- **Full recipe lives in `cometchat-core` §11 "Visual Builder integration".** This section is a pointer + Next.js-specific gotchas:
878
-
879
- ### App Router (recommended for Visual Builder)
880
-
881
- - Run `cometchat builder export --platform react --output src/app/CometChat --json`.
882
- - Create `src/app/CometChatNoSSR/CometChatNoSSR.tsx` (client component, init + login + render).
883
- - Create `src/app/CometChatAppWrapper.tsx` with `"use client"` + `dynamic(() => import("../app/CometChatNoSSR/CometChatNoSSR"), { ssr: false })`.
884
- - Import the wrapper in `src/app/page.tsx`.
885
- - **Patch `src/app/CometChat/context/CometChatContext.tsx`** to use `'../../../../package.json'` (4 levels up) instead of canonical's `'../../../package.json'` (3 levels). **Finding F16** — depth differs because the directory moved into `src/app/`.
886
-
887
- ### Pages Router (NOT recommended)
888
-
889
- **Finding F17** (2026-05-22): Next.js Pages Router enforces "global CSS imports only in `pages/_app.tsx`". The canonical `src/CometChat/` has 25+ component-level CSS imports — Pages Router rejects the build. App Router tolerates this; Pages Router does not. Recommend App Router instead.
890
-
891
- If a customer insists on Pages Router + Visual Builder, the only workaround is to convert all 25+ canonical CSS files into CSS Modules — heavy customer-side work. Not validated in v4.3.0.
892
-
893
- ### Both routers
894
-
895
- - Use `process.env.NEXT_PUBLIC_COMETCHAT_*` (NOT `import.meta.env.*` which is Vite-only).
896
- - Pin `@cometchat/chat-uikit-react@6.4.3` + `@cometchat/calls-sdk-javascript@4.2.5`.
897
- - `package.json` needs `cometChatCustomConfig` block (Finding F2).
898
-
899
- If the customer picks **In code**, ignore this section.