@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,700 +0,0 @@
1
- ---
2
- name: cometchat-native-production
3
- description: "Production-readiness for React Native — server-minted auth tokens, user management CRUD, external-backend recipes (Express / Hono / Firebase Functions / Vercel Serverless). RN has no API routes, so the backend is always external."
4
- license: "MIT"
5
- compatibility: "Node.js >=18; React Native >=0.70; @cometchat/chat-uikit-react-native ^5"
6
- metadata:
7
- author: "CometChat"
8
- version: "3.0.0"
9
- tags: "cometchat react-native production auth token security user-management rest-api"
10
- ---
11
-
12
- ## Purpose
13
-
14
- Teaches Claude how to move a React Native CometChat integration from dev-mode Auth Key to production-ready server-minted auth tokens + user CRUD. Covers:
15
-
16
- 1. Why the dev `authKey` can't ship to production
17
- 2. Auth Key vs REST API Key — which lives where
18
- 3. Server endpoint recipes (Express / Hono / Firebase Functions / Vercel)
19
- 4. Client-side: `CometChatUIKit.login({ authToken })` + token refresh
20
- 5. User CRUD endpoints + auth-provider integration (Firebase Auth / Supabase / Clerk / Auth0)
21
- 6. Security checklist + rate limits
22
-
23
- **Read `cometchat-native-core` first** (init/login/wrapper chain) before this skill — production just swaps one prop on the provider, but understanding the provider lifecycle is the prerequisite.
24
-
25
- Ground truth: `docs/ui-kit/react-native/methods.mdx`, and the cross-platform REST API at `https://{APP_ID}.api-{REGION}.cometchat.io/v3/`. **Official docs:** https://www.cometchat.com/docs/fundamentals/user-auth · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP).
26
-
27
- ---
28
-
29
- ## 1. Why production auth matters
30
-
31
- In dev mode, `CometChatUIKit.login({ uid: "..." })` uses the `authKey` passed to `CometChatUIKit.init({ authKey })`. That key is embedded in your React Native bundle. For a signed iOS `.ipa` or Android `.apk`/`.aab`, anyone can extract it with standard reverse-engineering tools (unzip, strings, `apktool`, `ReverseAPK`) and use it to log in as **ANY** user in your CometChat app — read private messages, send as other users, access every conversation.
32
-
33
- Production MUST use server-side token generation:
34
-
35
- - Your **server** holds the REST API Key (a different key from the client Auth Key).
36
- - On user login, your server calls CometChat's REST API with the REST API Key to mint a short-lived **Auth Token** for that specific UID.
37
- - Your client receives the Auth Token and calls `CometChatUIKit.login({ authToken })`.
38
- - If the token leaks, the blast radius is one user session, not your whole app.
39
-
40
- **Exactly the same threat model as JWTs for a REST API.** If you've built a login flow before, this is that.
41
-
42
- ---
43
-
44
- ## 2. Auth Key vs REST API Key — two different keys
45
-
46
- Easy to confuse. Both come from the CometChat Dashboard (your app → API & Auth Keys), but they live in different places and have different privileges.
47
-
48
- | Key | Where in dashboard | Purpose | Where it lives |
49
- |---|---|---|---|
50
- | **Auth Key** | "Auth Keys" table | Client-side SDK `login({ uid })` in dev mode | **Client bundle** — dev only. Never in production builds. |
51
- | **REST API Key** | "REST API Keys" table | Server-to-server: token generation, user CRUD, custom-message-send | **Server only.** Never in an RN bundle, `app.json extra`, `EXPO_PUBLIC_*` var, or git-committed file. |
52
-
53
- If the project only has an Auth Key, the user needs to generate a REST API Key in the dashboard: **API & Auth Keys → REST API Keys → Add Key**. Pick "Full Access" for server-side use.
54
-
55
- ---
56
-
57
- ## 3. The token auth pattern (4 steps)
58
-
59
- ```
60
- 1. Client logs into YOUR auth (Firebase Auth / Supabase / Clerk / Auth0 / custom)
61
-
62
- 2. Client asks YOUR backend for a CometChat auth token
63
- ↓ (POST /api/cometchat-token { uid })
64
- 3. Backend calls CometChat REST API → gets an Auth Token for that UID
65
- ↓ POST https://{APP_ID}.api-{REGION}.cometchat.io/v3/users/{uid}/auth_tokens
66
- with header apiKey: <REST_API_KEY>
67
-
68
- 4. Client calls CometChatUIKit.login({ authToken: "..." })
69
- ```
70
-
71
- The RN client never sees the REST API Key. The server never ships a password or email to the client. The CometChat SDK holds the auth token, not a static key.
72
-
73
- ---
74
-
75
- ## 4. Server endpoint recipes
76
-
77
- RN projects don't have Next.js-style API routes. You need a separate backend. Pick the one the user already has, or the simplest if they're starting fresh.
78
-
79
- ### 4a. Express (Node.js backend)
80
-
81
- ```ts
82
- // server/routes/cometchat-token.ts
83
- import { Router } from "express";
84
- import { requireAuth } from "../middleware/auth"; // your existing auth
85
-
86
- const router = Router();
87
- const APP_ID = process.env.COMETCHAT_APP_ID!;
88
- const REGION = process.env.COMETCHAT_REGION!;
89
- const REST_API_KEY = process.env.COMETCHAT_REST_API_KEY!;
90
-
91
- router.post("/cometchat-token", requireAuth, async (req, res) => {
92
- // Derive UID from authenticated session — NOT from the request body in prod.
93
- const uid = req.user.id;
94
-
95
- const r = await fetch(
96
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(uid)}/auth_tokens`,
97
- {
98
- method: "POST",
99
- headers: {
100
- "Content-Type": "application/json",
101
- appId: APP_ID,
102
- apiKey: REST_API_KEY,
103
- },
104
- body: JSON.stringify({}),
105
- },
106
- );
107
-
108
- if (!r.ok) {
109
- const error = await r.text();
110
- console.error("CometChat token error:", error);
111
- return res.status(r.status).json({ error: "Failed to generate auth token" });
112
- }
113
-
114
- const data = await r.json();
115
- return res.json({ authToken: data.data.authToken });
116
- });
117
-
118
- export default router;
119
- ```
120
-
121
- ### 4b. Hono (Cloudflare Workers / Bun / Node)
122
-
123
- ```ts
124
- // server/cometchat-token.ts
125
- import { Hono } from "hono";
126
-
127
- const app = new Hono();
128
-
129
- app.post("/api/cometchat-token", async (c) => {
130
- const user = c.get("user"); // your middleware-resolved user
131
- if (!user) return c.json({ error: "unauthorized" }, 401);
132
-
133
- const APP_ID = c.env.COMETCHAT_APP_ID;
134
- const REGION = c.env.COMETCHAT_REGION;
135
- const REST_API_KEY = c.env.COMETCHAT_REST_API_KEY;
136
-
137
- const r = await fetch(
138
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(user.id)}/auth_tokens`,
139
- {
140
- method: "POST",
141
- headers: {
142
- "Content-Type": "application/json",
143
- appId: APP_ID,
144
- apiKey: REST_API_KEY,
145
- },
146
- body: JSON.stringify({}),
147
- },
148
- );
149
-
150
- if (!r.ok) return c.json({ error: "token mint failed" }, 502);
151
- const data = await r.json();
152
- return c.json({ authToken: data.data.authToken });
153
- });
154
-
155
- export default app;
156
- ```
157
-
158
- ### 4c. Firebase Cloud Functions
159
-
160
- ```ts
161
- // functions/src/cometchat-token.ts
162
- import { onCall, HttpsError } from "firebase-functions/v2/https";
163
-
164
- export const getCometChatToken = onCall(
165
- { secrets: ["COMETCHAT_APP_ID", "COMETCHAT_REGION", "COMETCHAT_REST_API_KEY"] },
166
- async (request) => {
167
- if (!request.auth) throw new HttpsError("unauthenticated", "Sign in required");
168
- const uid = request.auth.uid;
169
-
170
- const APP_ID = process.env.COMETCHAT_APP_ID!;
171
- const REGION = process.env.COMETCHAT_REGION!;
172
- const REST_API_KEY = process.env.COMETCHAT_REST_API_KEY!;
173
-
174
- const r = await fetch(
175
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(uid)}/auth_tokens`,
176
- {
177
- method: "POST",
178
- headers: {
179
- "Content-Type": "application/json",
180
- appId: APP_ID,
181
- apiKey: REST_API_KEY,
182
- },
183
- body: JSON.stringify({}),
184
- },
185
- );
186
-
187
- if (!r.ok) throw new HttpsError("internal", "token mint failed");
188
- const data = await r.json();
189
- return { authToken: data.data.authToken };
190
- },
191
- );
192
- ```
193
-
194
- Client call:
195
-
196
- ```tsx
197
- import functions from "@react-native-firebase/functions";
198
- const result = await functions().httpsCallable("getCometChatToken")();
199
- const authToken = result.data.authToken;
200
- ```
201
-
202
- ### 4d. Vercel Serverless / Next.js API Route
203
-
204
- Even if the RN app isn't Next.js, the user's existing web app often is. Reuse the same backend:
205
-
206
- ```ts
207
- // pages/api/cometchat-token.ts (or app/api/cometchat-token/route.ts)
208
- import type { NextApiRequest, NextApiResponse } from "next";
209
- import { getServerSession } from "next-auth";
210
- import { authOptions } from "./auth/[...nextauth]";
211
-
212
- export default async function handler(req: NextApiRequest, res: NextApiResponse) {
213
- if (req.method !== "POST") return res.status(405).end();
214
-
215
- const session = await getServerSession(req, res, authOptions);
216
- if (!session?.user) return res.status(401).json({ error: "unauthorized" });
217
-
218
- const APP_ID = process.env.COMETCHAT_APP_ID!;
219
- const REGION = process.env.COMETCHAT_REGION!;
220
- const REST_API_KEY = process.env.COMETCHAT_REST_API_KEY!;
221
- const uid = session.user.id;
222
-
223
- const r = await fetch(
224
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(uid)}/auth_tokens`,
225
- {
226
- method: "POST",
227
- headers: { "Content-Type": "application/json", appId: APP_ID, apiKey: REST_API_KEY },
228
- body: JSON.stringify({}),
229
- },
230
- );
231
-
232
- if (!r.ok) return res.status(502).json({ error: "token mint failed" });
233
- const data = await r.json();
234
- return res.json({ authToken: data.data.authToken });
235
- }
236
- ```
237
-
238
- ---
239
-
240
- ## 5. Client-side: `CometChatUIKit.login({ authToken })`
241
-
242
- Once the server is serving tokens, update the RN client to fetch the token and use it. This is a change to the `CometChatProvider` (see `cometchat-native-core` § 6) — swap the `uid` prop for an `authToken` prop.
243
-
244
- ### 5a. Update the provider to support authToken
245
-
246
- ```tsx
247
- // CometChatProvider.tsx — production-aware version
248
- import React, { createContext, useContext, useEffect, useState, type ReactNode } from "react";
249
- import { CometChatUIKit } from "@cometchat/chat-uikit-react-native";
250
-
251
- let initialized = false;
252
- let loginInFlight: Promise<unknown> | null = null;
253
-
254
- async function ensureLoggedIn(authToken?: string, uid?: string): Promise<void> {
255
- // getLoggedInUser() THROWS { code: "NOT_FOUND" } when there's no session — it does NOT
256
- // return null. An uncaught throw here leaves the app stuck on splash (see core §2/§6).
257
- let existing;
258
- try {
259
- existing = await CometChatUIKit.getLoggedInUser();
260
- } catch (e: any) {
261
- if (e?.code !== "NOT_FOUND") throw e; // no-session is the expected first-run path
262
- }
263
- if (existing) return;
264
- if (loginInFlight) {
265
- await loginInFlight;
266
- return;
267
- }
268
- // Production — prefer authToken
269
- if (authToken) {
270
- loginInFlight = CometChatUIKit.login({ authToken });
271
- } else if (uid) {
272
- loginInFlight = CometChatUIKit.login({ uid }); // dev fallback
273
- } else {
274
- return; // nothing to log in with yet
275
- }
276
- try {
277
- await loginInFlight;
278
- } finally {
279
- loginInFlight = null;
280
- }
281
- }
282
-
283
- interface Props {
284
- appId: string;
285
- region: string;
286
- authKey?: string; // dev only; omit in production
287
- authToken?: string; // production — from your backend
288
- uid?: string; // dev only
289
- children: ReactNode;
290
- }
291
-
292
- export function CometChatProvider({ appId, region, authKey, authToken, uid, children }: Props) {
293
- const [isReady, setIsReady] = useState(false);
294
- const [error, setError] = useState<string | null>(null);
295
-
296
- useEffect(() => {
297
- async function setup() {
298
- try {
299
- if (!initialized) {
300
- initialized = true;
301
- await CometChatUIKit.init({
302
- appId,
303
- region,
304
- subscriptionType: "ALL_USERS",
305
- ...(authKey ? { authKey } : {}),
306
- });
307
- }
308
- await ensureLoggedIn(authToken, uid);
309
- setIsReady(true);
310
- } catch (e) {
311
- setError(String(e));
312
- }
313
- }
314
- setup();
315
- }, [appId, region, authKey, authToken, uid]);
316
-
317
- if (!isReady) return null;
318
- return <>{children}</>;
319
- }
320
- ```
321
-
322
- **Push registration lands here** — right after `ensureLoggedIn` resolves,
323
- before `setIsReady(true)`. The CometChat SDK scopes push tokens to the
324
- logged-in user, so registering before login associates the token with
325
- "anonymous" and the device won't receive pushes.
326
-
327
- ```tsx
328
- import { bootstrapPushAfterLogin } from "../push/bootstrap";
329
- //...
330
- await ensureLoggedIn(authToken, uid);
331
- await bootstrapPushAfterLogin(); // registers FCM/APNs token with CometChat
332
- setIsReady(true);
333
- ```
334
-
335
- And unregister BEFORE `CometChatUIKit.logout()` — the SDK needs the user
336
- context to dissociate the token. See `cometchat-native-push § 7` for
337
- the full `bootstrapPushAfterLogin` / `unregisterPushTokenOnLogout` helper
338
- pair.
339
-
340
- ### 5b. Fetch the token from your backend
341
-
342
- Typical app flow:
343
-
344
- ```tsx
345
- // App.tsx
346
- import { useState, useEffect } from "react";
347
- import { CometChatProvider } from "./src/providers/CometChatProvider";
348
- import { useMyAppAuth } from "./src/hooks/useMyAppAuth"; // your existing auth
349
-
350
- export default function App() {
351
- const { user, isAuthenticated } = useMyAppAuth();
352
- const [cometChatToken, setCometChatToken] = useState<string | null>(null);
353
-
354
- useEffect(() => {
355
- if (!isAuthenticated) {
356
- setCometChatToken(null);
357
- return;
358
- }
359
- // Fetch a CometChat auth token from your backend
360
- fetch("https://api.yourapp.com/cometchat-token", {
361
- method: "POST",
362
- headers: { "Content-Type": "application/json", Authorization: `Bearer ${user.jwt}` },
363
- })
364
- .then((r) => r.json())
365
- .then((data) => setCometChatToken(data.authToken))
366
- .catch((e) => console.error("CometChat token fetch failed:", e));
367
- }, [isAuthenticated, user?.jwt]);
368
-
369
- if (!isAuthenticated) return <LoginScreen />;
370
- if (!cometChatToken) return <LoadingScreen message="Connecting chat..." />;
371
-
372
- return (
373
- <CometChatProvider
374
- appId={COMETCHAT_APP_ID}
375
- region={COMETCHAT_REGION}
376
- authToken={cometChatToken}
377
- // no authKey prop in production
378
- >
379
- <AppNavigator />
380
- </CometChatProvider>
381
- );
382
- }
383
- ```
384
-
385
- ### 5c. Handle token expiry / refresh
386
-
387
- Auth tokens have a configurable TTL (default 24 hours). On token expiry, SDK calls start failing. Handle this by re-minting on 401:
388
-
389
- ```tsx
390
- useEffect(() => {
391
- const LISTENER_ID = "TOKEN_EXPIRY_LISTENER";
392
- CometChat.addConnectionListener(
393
- LISTENER_ID,
394
- new CometChat.ConnectionListener({
395
- onDisconnected: async () => {
396
- // Connection dropped. Token might be expired.
397
- // Re-fetch and re-login.
398
- const freshToken = await fetchCometChatToken(user.jwt);
399
- setCometChatToken(freshToken);
400
- await CometChatUIKit.login({ authToken: freshToken });
401
- },
402
- }),
403
- );
404
- return () => CometChat.removeConnectionListener(LISTENER_ID);
405
- }, [user?.jwt]);
406
- ```
407
-
408
- A simpler approach for apps that can tolerate a forced re-login: on any 401 from the SDK, log the user out and force them through your app's sign-in flow again.
409
-
410
- ---
411
-
412
- ## 6. User management CRUD
413
-
414
- When someone signs up in your app, you need to create a matching CometChat user. Same for profile updates (name/avatar change) and deletion. These happen on your backend, using the REST API with the REST API Key.
415
-
416
- ### 6a. Create a user on signup
417
-
418
- ```ts
419
- async function createCometChatUser(uid: string, name: string, avatarUrl?: string) {
420
- const r = await fetch(
421
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users`,
422
- {
423
- method: "POST",
424
- headers: {
425
- "Content-Type": "application/json",
426
- appId: APP_ID,
427
- apiKey: REST_API_KEY,
428
- },
429
- body: JSON.stringify({
430
- uid,
431
- name,
432
- avatar: avatarUrl,
433
- }),
434
- },
435
- );
436
- if (!r.ok) throw new Error(`CometChat user create failed: ${await r.text()}`);
437
- return r.json();
438
- }
439
- ```
440
-
441
- ### 6b. Update a user on profile change
442
-
443
- ```ts
444
- async function updateCometChatUser(uid: string, updates: Partial<{ name: string; avatar: string; metadata: any }>) {
445
- const r = await fetch(
446
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(uid)}`,
447
- {
448
- method: "PUT",
449
- headers: {
450
- "Content-Type": "application/json",
451
- appId: APP_ID,
452
- apiKey: REST_API_KEY,
453
- },
454
- body: JSON.stringify(updates),
455
- },
456
- );
457
- if (!r.ok) throw new Error(`CometChat user update failed: ${await r.text()}`);
458
- return r.json();
459
- }
460
- ```
461
-
462
- ### 6c. Delete a user on account deletion
463
-
464
- ```ts
465
- async function deleteCometChatUser(uid: string) {
466
- const r = await fetch(
467
- `https://${APP_ID}.api-${REGION}.cometchat.io/v3/users/${encodeURIComponent(uid)}`,
468
- {
469
- method: "DELETE",
470
- headers: {
471
- "Content-Type": "application/json",
472
- appId: APP_ID,
473
- apiKey: REST_API_KEY,
474
- },
475
- body: JSON.stringify({ permanent: true }),
476
- },
477
- );
478
- if (!r.ok) throw new Error(`CometChat user delete failed: ${await r.text()}`);
479
- }
480
- ```
481
-
482
- ### 6d. Where to wire these calls
483
-
484
- The CRUD functions live on your backend; you call them from your existing auth event handlers:
485
-
486
- | Auth event | When to call | Function |
487
- |---|---|---|
488
- | User signs up | After your app's user creation succeeds | `createCometChatUser(newUser.id, newUser.name, newUser.avatarUrl)` |
489
- | User updates name or avatar | After your app's profile update succeeds | `updateCometChatUser(user.id, { name, avatar })` |
490
- | User deletes account | Before/after your app's user deletion | `deleteCometChatUser(user.id)` |
491
-
492
- ---
493
-
494
- ## 7. Auth-provider integration recipes
495
-
496
- Your RN app's auth layer typically comes from one of these SDKs. How to wire CometChat into each:
497
-
498
- ### 7a. Firebase Auth
499
-
500
- Firebase issues a UID per user. Use that same UID in CometChat.
501
-
502
- ```ts
503
- // Backend (Firebase Cloud Function)
504
- import { onDocumentCreated } from "firebase-functions/v2/firestore";
505
- import { onUserCreated, onUserDeleted } from "firebase-functions/v2/auth";
506
-
507
- export const onSignup = onUserCreated(async (event) => {
508
- const { uid, displayName, photoURL } = event.data;
509
- await createCometChatUser(uid, displayName ?? "User", photoURL);
510
- });
511
-
512
- export const onAccountDelete = onUserDeleted(async (event) => {
513
- await deleteCometChatUser(event.data.uid);
514
- });
515
-
516
- // Profile updates are app-level — hook into your profile-update handler
517
- ```
518
-
519
- Client — get the Firebase ID token, send to your `cometchat-token` endpoint:
520
-
521
- ```tsx
522
- import auth from "@react-native-firebase/auth";
523
- const idToken = await auth().currentUser!.getIdToken();
524
- const r = await fetch("/api/cometchat-token", {
525
- method: "POST",
526
- headers: { Authorization: `Bearer ${idToken}` },
527
- });
528
- const { authToken } = await r.json();
529
- ```
530
-
531
- ### 7b. Supabase Auth
532
-
533
- Supabase also issues a UID. Use it as the CometChat UID.
534
-
535
- ```ts
536
- // Backend — Supabase Edge Function triggered on signup
537
- Deno.serve(async (req) => {
538
- const event = await req.json();
539
- if (event.type === "INSERT" && event.table === "users") {
540
- const { id, email } = event.record;
541
- await createCometChatUser(id, email.split("@")[0]);
542
- }
543
- return new Response("ok");
544
- });
545
- ```
546
-
547
- Client:
548
-
549
- ```tsx
550
- import { supabase } from "./supabase";
551
- const { data: { session } } = await supabase.auth.getSession();
552
- const r = await fetch("/api/cometchat-token", {
553
- method: "POST",
554
- headers: { Authorization: `Bearer ${session!.access_token}` },
555
- });
556
- ```
557
-
558
- ### 7c. Clerk Expo
559
-
560
- Clerk is Expo-friendly and has its own webhooks for user lifecycle events.
561
-
562
- ```tsx
563
- // Client — React Native
564
- import { useAuth } from "@clerk/clerk-expo";
565
- const { getToken, userId } = useAuth();
566
- const jwt = await getToken();
567
- const r = await fetch("/api/cometchat-token", {
568
- method: "POST",
569
- headers: { Authorization: `Bearer ${jwt}` },
570
- });
571
- ```
572
-
573
- Backend — use a Clerk webhook to trigger CRUD on user lifecycle events.
574
-
575
- ### 7d. Auth0
576
-
577
- ```tsx
578
- import { useAuth0 } from "react-native-auth0";
579
- const { getCredentials } = useAuth0();
580
- const { accessToken } = await getCredentials();
581
- const r = await fetch("/api/cometchat-token", {
582
- method: "POST",
583
- headers: { Authorization: `Bearer ${accessToken}` },
584
- });
585
- ```
586
-
587
- Backend — use Auth0 Actions or Rules to trigger CRUD webhooks.
588
-
589
- ### 7e. Custom JWT / bespoke auth
590
-
591
- If the user's auth is custom (their own JWT), the pattern is the same: client includes `Authorization: Bearer <jwt>`, server validates + extracts UID + mints CometChat auth token.
592
-
593
- ---
594
-
595
- ## 8. Environment variables — split between client + server
596
-
597
- | Variable | Location | Visibility |
598
- |---|---|---|
599
- | `COMETCHAT_APP_ID` | Client AND server | OK client-side |
600
- | `COMETCHAT_REGION` | Client AND server | OK client-side |
601
- | `COMETCHAT_AUTH_KEY` | **Dev client only.** Remove from production. | Should NEVER ship in a production RN bundle |
602
- | `COMETCHAT_REST_API_KEY` | **Server only.** Your backend's env. | Never ships to client, ever |
603
- | `COMETCHAT_TOKEN_ENDPOINT` | Client | Your backend URL (e.g. `https://api.yourapp.com/cometchat-token`) — safe in client bundle |
604
-
605
- ### Production RN client `.env` (or app.json extra):
606
-
607
- ```
608
- COMETCHAT_APP_ID=your_app_id
609
- COMETCHAT_REGION=us
610
- COMETCHAT_TOKEN_ENDPOINT=https://api.yourapp.com/cometchat-token
611
- # No COMETCHAT_AUTH_KEY in production
612
- # No COMETCHAT_REST_API_KEY — server-only
613
- ```
614
-
615
- ### Server `.env`:
616
-
617
- ```
618
- COMETCHAT_APP_ID=your_app_id
619
- COMETCHAT_REGION=us
620
- COMETCHAT_REST_API_KEY=your_rest_api_key
621
- ```
622
-
623
- ---
624
-
625
- ## 9. Security checklist
626
-
627
- Before releasing to production, verify:
628
-
629
- - [ ] `COMETCHAT_AUTH_KEY` removed from client `.env` / `app.json extra` / any `EXPO_PUBLIC_*` var
630
- - [ ] Production provider uses `authToken` prop, not `authKey`
631
- - [ ] `COMETCHAT_REST_API_KEY` lives only on your backend (check with `grep -r REST_API_KEY src/`)
632
- - [ ] Token endpoint is behind auth — unauthenticated users can't mint a token for an arbitrary UID
633
- - [ ] UID derivation on the token endpoint comes from the authenticated session, NOT from the request body (otherwise anyone can mint a token for anyone)
634
- - [ ] Rate limit on the token endpoint (prevents abuse)
635
- - [ ] HTTPS-only — no HTTP in production
636
- - [ ] User CRUD endpoints are authenticated (or called from webhooks with signature verification)
637
- - [ ] CometChat user deletion happens on account deletion (GDPR / privacy compliance)
638
-
639
- ---
640
-
641
- ## 10. Rate limits + retry
642
-
643
- CometChat's REST API has rate limits per app. For the token endpoint:
644
-
645
- - Default: 100 requests/minute per app
646
- - Token generation is cheap — if you're hitting limits, you're likely minting too often (e.g. one mint per RN screen mount). Mint once per sign-in, cache client-side, reuse until expiry.
647
-
648
- Retry policy:
649
-
650
- - 5xx — retry with exponential backoff (1s, 2s, 4s, give up)
651
- - 4xx — do NOT retry. Surface the error.
652
-
653
- ---
654
-
655
- ## 11. Anti-patterns
656
-
657
- 1. **NEVER ship the REST API Key in an RN bundle.** Not under any env-var name or prefix. Not in `app.json extra`. Not in `EXPO_PUBLIC_*`. Not in a .gitignored file the user commits by accident. If you see yourself writing an env var for `REST_API_KEY` in a client-side config, stop.
658
-
659
- 2. **NEVER let the client specify the UID to mint a token for.** The server must derive UID from the authenticated session. A `POST /cometchat-token { uid: "..." }` that trusts the body is equivalent to no auth — anyone can impersonate anyone.
660
-
661
- 3. **Don't cache the auth token to disk forever.** It expires. Either re-mint on every cold start or store with a short TTL and refresh on 401.
662
-
663
- 4. **Don't use `login({ uid })` in production.** `uid` mode requires an Auth Key on the UIKit settings. In production you should set neither `authKey` on the UIKitSettings nor call `login({ uid })` — both are dev-only patterns.
664
-
665
- 5. **Don't forget user CRUD.** A user who signs up in your app but has no matching CometChat user will get "user does not exist" errors on `login({ authToken })`. The token endpoint mints tokens, but the user must already exist in CometChat.
666
-
667
- 6. **Don't skip the security checklist.** Production bugs in auth are catastrophic.
668
-
669
- 7. **Don't retry 4xx errors.** Token-endpoint 400s are config mistakes (wrong REST API Key, malformed UID, etc.). Retrying makes it worse.
670
-
671
- ---
672
-
673
- ## 12. Verifying production auth works
674
-
675
- 1. Build a production-configuration version of the app (no Auth Key, only AppId + Region + token endpoint).
676
- 2. Log in as a real user through your app's normal flow.
677
- 3. In the RN debugger network tab, confirm `POST /cometchat-token` returns `{ authToken: "..." }`.
678
- 4. Confirm `CometChatUIKit.login({ authToken })` resolves.
679
- 5. Send a message — verify delivery.
680
- 6. Force-close the app, reopen — token fetch + login should happen again on cold start.
681
- 7. (Optional) Wait out the token TTL (default 24hr), verify the 401-refresh path works.
682
-
683
- If any step fails, see `cometchat-native-troubleshooting` § Auth / Token issues.
684
-
685
- ---
686
-
687
- ## Skill routing reference
688
-
689
- | Skill | When to route |
690
- |---|---|
691
- | `cometchat-native-core` | Init / login / provider wrapper chain — prerequisite |
692
- | `cometchat-native-components` | The base component props (nothing production-specific there) |
693
- | `cometchat-native-placement` | Where your chat UI goes (no change in production) |
694
- | `cometchat-native-expo-patterns` | Expo-specific env var wiring (`expo-constants` vs `EXPO_PUBLIC_*`) |
695
- | `cometchat-native-bare-patterns` | Bare RN env var wiring (`react-native-config`) |
696
- | `cometchat-native-theming` | Theme customization (independent of auth) |
697
- | `cometchat-native-features` | Feature flags (polls, extensions, etc. — all still work in prod) |
698
- | `cometchat-native-customization` | If customization depends on server-side data (user tags, metadata) |
699
- | `cometchat-native-production` | This skill — server tokens + user CRUD |
700
- | `cometchat-native-troubleshooting` | 401 on token fetch, "user does not exist" on login, token-endpoint rate limit |