@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.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +44 -0
- package/LICENSE +21 -0
- package/MIGRATING.md +187 -0
- package/README.md +52 -156
- package/RULES.md +125 -0
- package/bin/cometchat-skills.mjs +1280 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +156 -74
- package/peers.yaml +355 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +94 -0
- package/registry/android-v6.json +177 -0
- package/registry/angular-v5.json +154 -0
- package/registry/flutter-calls-v5.json +94 -0
- package/registry/flutter-v6.json +159 -0
- package/registry/ios-calls-v5.json +99 -0
- package/registry/ios-v5.json +152 -0
- package/registry/rn-calls-v5.json +99 -0
- package/registry/rn-v5.json +169 -0
- package/registry/sdk-android-v5.json +93 -0
- package/registry/sdk-jsv4.json +93 -0
- package/registry/web-calls-v5.json +94 -0
- package/registry/web-v7.json +154 -0
- package/skills/cometchat/SKILL.md +47 -2096
- package/skills/cometchat-a11y/SKILL.md +44 -472
- package/skills/cometchat-analytics/SKILL.md +61 -0
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +41 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +102 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-audit/SKILL.md +61 -0
- package/skills/cometchat-compliance/SKILL.md +63 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +132 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +59 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-i18n/SKILL.md +35 -404
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +182 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +113 -0
- package/skills/cometchat-ios-core/references/docs-map.md +124 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +219 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-production/SKILL.md +67 -723
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-testing/SKILL.md +36 -355
- package/skills/cometchat-ios-troubleshooting/SKILL.md +31 -989
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-migrate-from-getstream/SKILL.md +65 -0
- package/skills/cometchat-migrate-from-getstream/references/concept-map.md +98 -0
- package/skills/cometchat-migrate-from-getstream/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-getstream/references/feature-map.md +108 -0
- package/skills/cometchat-migrate-from-getstream/references/inventory.md +82 -0
- package/skills/cometchat-migrate-from-getstream/references/native-build.md +9 -0
- package/skills/cometchat-migrate-from-getstream/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-sendbird/SKILL.md +64 -0
- package/skills/cometchat-migrate-from-sendbird/references/concept-map.md +99 -0
- package/skills/cometchat-migrate-from-sendbird/references/data-migration.md +74 -0
- package/skills/cometchat-migrate-from-sendbird/references/feature-map.md +104 -0
- package/skills/cometchat-migrate-from-sendbird/references/inventory.md +86 -0
- package/skills/cometchat-migrate-from-sendbird/references/native-build.md +10 -0
- package/skills/cometchat-migrate-from-sendbird/references/report-template.md +59 -0
- package/skills/cometchat-migrate-from-twilio/SKILL.md +52 -0
- package/skills/cometchat-migrate-from-twilio/references/concept-map.md +49 -0
- package/skills/cometchat-migrate-from-twilio/references/data-migration.md +50 -0
- package/skills/cometchat-migrate-from-twilio/references/feature-map.md +27 -0
- package/skills/cometchat-migrate-from-twilio/references/inventory.md +53 -0
- package/skills/cometchat-migrate-from-twilio/references/report-template.md +52 -0
- package/skills/cometchat-moderation/SKILL.md +58 -0
- package/skills/cometchat-onboarding/SKILL.md +92 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +105 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +335 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +79 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +133 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +174 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/layout.md +150 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-production/SKILL.md +84 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/skills/cometchat-react-v7-testing/SKILL.md +60 -0
- package/skills/cometchat-react-v7-troubleshooting/SKILL.md +47 -0
- package/skills/cometchat-security/SKILL.md +80 -0
- package/skills/cometchat-self-host/SKILL.md +56 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +932 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +134 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -1,477 +1,49 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-a11y
|
|
3
|
-
description:
|
|
3
|
+
description: "Keep a CometChat integration accessible — the UI Kit is designed targeting WCAG 2.1 AA with keyboard navigation (verify per component in its docs; full conformance still needs manual testing), and this skill makes sure the HOST app doesn't break that, covering contrast, focus, screen-reader context, reduced motion, RTL, and calls accessibility. Cross-family. Triggers: 'is cometchat accessible', 'WCAG / 508 / ADA compliance', 'screen reader support', 'keyboard navigation', 'a11y audit', 'accessible chat', 'contrast/focus issues in chat'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "
|
|
5
|
+
compatibility: "CometChat UI Kits (React v7 · Angular v5 · React Native v5 · iOS v5 · Android v6 · Flutter v6). Kit components are designed targeting WCAG 2.1 AA + keyboard navigation (the Angular docs state this explicitly; other families are not individually documented, and full conformance needs manual testing / a VPAT). Host wiring is per platform."
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "cometchat a11y accessibility wcag
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
> **Ground truth:**
|
|
13
|
-
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## The
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const l2 = luminance(hex2);
|
|
51
|
-
return (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Pull the values from your CSS variables
|
|
55
|
-
const fg = getComputedStyle(document.documentElement).getPropertyValue("--cometchat-text-color").trim();
|
|
56
|
-
const bg = getComputedStyle(document.documentElement).getPropertyValue("--cometchat-background-color").trim();
|
|
57
|
-
const ratio = contrastRatio(fg, bg);
|
|
58
|
-
if (ratio < 4.5) {
|
|
59
|
-
console.warn(`Text/background contrast ${ratio.toFixed(2)}:1 fails WCAG AA (need ≥4.5:1)`);
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
In CI, add this to your test suite. The skill writes a starter version into `tests/a11y/contrast.test.ts`.
|
|
64
|
-
|
|
65
|
-
### React Native / native / Flutter — manual audit at theme-design time
|
|
66
|
-
|
|
67
|
-
Use a contrast-checker tool (browser extensions, https://webaim.org/resources/contrastchecker/) on the theme tokens before shipping. There's no runtime DOM to audit on native.
|
|
68
|
-
|
|
69
|
-
The kit's default theme tokens pass AA. Custom palettes need the audit.
|
|
70
|
-
|
|
71
|
-
**Common fail:** brand purple #6750A4 against white background = 6.6:1 (passes). Same purple against `#F0F0F0` light gray = 5.7:1 (passes). Same purple against `#999999` muted gray = 2.8:1 (FAILS). Watch for muted backgrounds in dark-mode toggles, secondary buttons, and "subtle" surfaces.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## 2. Focus management on chat screen entry
|
|
76
|
-
|
|
77
|
-
When the user navigates to a chat screen (clicked a conversation, opened the chat tab, accepted a deep link), focus should land on a meaningful control — usually the message composer or the latest message.
|
|
78
|
-
|
|
79
|
-
### React (web)
|
|
80
|
-
|
|
81
|
-
```tsx
|
|
82
|
-
import { useEffect, useRef } from "react";
|
|
83
|
-
|
|
84
|
-
export function ChatScreen() {
|
|
85
|
-
const composerRef = useRef<HTMLElement>(null);
|
|
86
|
-
|
|
87
|
-
useEffect(() => {
|
|
88
|
-
// After mount + animations, focus the composer
|
|
89
|
-
const timer = setTimeout(() => {
|
|
90
|
-
composerRef.current?.focus();
|
|
91
|
-
}, 100);
|
|
92
|
-
return () => clearTimeout(timer);
|
|
93
|
-
}, []);
|
|
94
|
-
|
|
95
|
-
return (
|
|
96
|
-
<div>
|
|
97
|
-
<CometChatMessageHeader />
|
|
98
|
-
<CometChatMessageList />
|
|
99
|
-
<CometChatMessageComposer ref={composerRef} />
|
|
100
|
-
</div>
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
The kit's `CometChatMessageComposer` is a plain function component (no `forwardRef` in v6), so passing it a `ref` is a no-op. Wrap it in a focusable container and reach the input through the DOM: `composerRef.current?.querySelector("input, [contenteditable]")?.focus()`.
|
|
106
|
-
|
|
107
|
-
### React Native
|
|
108
|
-
|
|
109
|
-
```tsx
|
|
110
|
-
import { useRef, useEffect } from "react";
|
|
111
|
-
import { findNodeHandle, AccessibilityInfo } from "react-native";
|
|
112
|
-
|
|
113
|
-
export function ChatScreen() {
|
|
114
|
-
const composerRef = useRef(null);
|
|
115
|
-
|
|
116
|
-
useEffect(() => {
|
|
117
|
-
const handle = findNodeHandle(composerRef.current);
|
|
118
|
-
if (handle) {
|
|
119
|
-
AccessibilityInfo.setAccessibilityFocus(handle);
|
|
120
|
-
}
|
|
121
|
-
}, []);
|
|
122
|
-
|
|
123
|
-
return (
|
|
124
|
-
<View>
|
|
125
|
-
<CometChatMessageHeader />
|
|
126
|
-
<CometChatMessageList />
|
|
127
|
-
<CometChatMessageComposer ref={composerRef} />
|
|
128
|
-
</View>
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### Angular
|
|
134
|
-
|
|
135
|
-
```ts
|
|
136
|
-
@Component({...})
|
|
137
|
-
export class ChatComponent implements AfterViewInit {
|
|
138
|
-
@ViewChild("composer") composer!: ElementRef;
|
|
139
|
-
|
|
140
|
-
ngAfterViewInit() {
|
|
141
|
-
setTimeout(() => this.composer.nativeElement.focus(), 100);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Native Android (Kotlin)
|
|
147
|
-
|
|
148
|
-
```kotlin
|
|
149
|
-
override fun onResume() {
|
|
150
|
-
super.onResume()
|
|
151
|
-
composerView.requestFocus()
|
|
152
|
-
composerView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### Native iOS (Swift)
|
|
157
|
-
|
|
158
|
-
```swift
|
|
159
|
-
override func viewDidAppear(_ animated: Bool) {
|
|
160
|
-
super.viewDidAppear(animated)
|
|
161
|
-
UIAccessibility.post(notification: .screenChanged, argument: composerView)
|
|
162
|
-
}
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Flutter
|
|
166
|
-
|
|
167
|
-
```dart
|
|
168
|
-
final FocusNode _composerFocus = FocusNode();
|
|
169
|
-
|
|
170
|
-
@override
|
|
171
|
-
void initState() {
|
|
172
|
-
super.initState();
|
|
173
|
-
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
174
|
-
_composerFocus.requestFocus();
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// Then on the composer widget: focusNode: _composerFocus
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## 3. Live region for new messages
|
|
184
|
-
|
|
185
|
-
Screen reader users need an audible announcement when a new message arrives — otherwise they have to navigate to the message list and re-read it.
|
|
186
|
-
|
|
187
|
-
### Web / Angular — ARIA live region
|
|
188
|
-
|
|
189
|
-
```html
|
|
190
|
-
<!-- A visually-hidden region that screen readers announce -->
|
|
191
|
-
<div
|
|
192
|
-
aria-live="polite"
|
|
193
|
-
aria-atomic="true"
|
|
194
|
-
style="position: absolute; left: -9999px; height: 1px; width: 1px; overflow: hidden;"
|
|
195
|
-
id="message-announcer"></div>
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
```ts
|
|
199
|
-
// Listen for new messages and announce
|
|
200
|
-
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
201
|
-
|
|
202
|
-
const listenerId = "a11y-message-announcer";
|
|
203
|
-
CometChat.addMessageListener(listenerId, new CometChat.MessageListener({
|
|
204
|
-
onTextMessageReceived: (msg: CometChat.TextMessage) => {
|
|
205
|
-
const senderName = msg.getSender().getName();
|
|
206
|
-
const text = msg.getText();
|
|
207
|
-
const region = document.getElementById("message-announcer");
|
|
208
|
-
if (region) {
|
|
209
|
-
// Clearing first ensures the same text re-announces
|
|
210
|
-
region.textContent = "";
|
|
211
|
-
setTimeout(() => {
|
|
212
|
-
region.textContent = `New message from ${senderName}: ${text}`;
|
|
213
|
-
}, 100);
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
}));
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
`aria-live="polite"` waits for the user to finish speaking before announcing. Use `aria-live="assertive"` only for urgent messages (like incoming calls) — too aggressive for chat.
|
|
220
|
-
|
|
221
|
-
### React Native
|
|
222
|
-
|
|
223
|
-
```ts
|
|
224
|
-
import { AccessibilityInfo } from "react-native";
|
|
225
|
-
|
|
226
|
-
CometChat.addMessageListener(listenerId, new CometChat.MessageListener({
|
|
227
|
-
onTextMessageReceived: (msg) => {
|
|
228
|
-
const text = `New message from ${msg.getSender().getName()}: ${msg.getText()}`;
|
|
229
|
-
AccessibilityInfo.announceForAccessibility(text);
|
|
230
|
-
},
|
|
231
|
-
}));
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Native Android / iOS / Flutter
|
|
235
|
-
|
|
236
|
-
Each platform has an equivalent — Android `View.announceForAccessibility(text)`, iOS `UIAccessibility.post(notification: .announcement, argument: text)`, Flutter `SemanticsService.announce(text, TextDirection.ltr)`. Same shape; the SDK callback is the trigger.
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## 4. Keyboard navigation
|
|
241
|
-
|
|
242
|
-
The kit's components are keyboard-accessible by default. Custom wrapping is what breaks it.
|
|
243
|
-
|
|
244
|
-
### Anti-pattern — `<div onClick>` for clickable items
|
|
245
|
-
|
|
246
|
-
```tsx
|
|
247
|
-
// ✗ WRONG — keyboard users can't activate
|
|
248
|
-
<div onClick={() => openConversation(c)}>{c.name}</div>
|
|
249
|
-
|
|
250
|
-
// ✓ RIGHT — `<button>` is keyboard + screen-reader native
|
|
251
|
-
<button onClick={() => openConversation(c)}>{c.name}</button>
|
|
252
|
-
|
|
253
|
-
// ✓ ALSO RIGHT — div with explicit ARIA + keyboard handlers
|
|
254
|
-
<div
|
|
255
|
-
role="button"
|
|
256
|
-
tabIndex={0}
|
|
257
|
-
onClick={() => openConversation(c)}
|
|
258
|
-
onKeyDown={(e) => {
|
|
259
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
openConversation(c);
|
|
262
|
-
}
|
|
263
|
-
}}
|
|
264
|
-
>
|
|
265
|
-
{c.name}
|
|
266
|
-
</div>
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
### Skip links
|
|
270
|
-
|
|
271
|
-
For long conversation lists, add a skip-to-message-composer link:
|
|
272
|
-
|
|
273
|
-
```html
|
|
274
|
-
<a href="#message-composer" class="skip-link">Skip to message composer</a>
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
```css
|
|
278
|
-
.skip-link {
|
|
279
|
-
position: absolute;
|
|
280
|
-
left: -9999px;
|
|
281
|
-
z-index: 999;
|
|
282
|
-
}
|
|
283
|
-
.skip-link:focus {
|
|
284
|
-
left: 0;
|
|
285
|
-
top: 0;
|
|
286
|
-
background: white;
|
|
287
|
-
padding: 8px;
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
The kit's components already include skip links where applicable; custom wrapping should preserve them.
|
|
292
|
-
|
|
293
|
-
### Keyboard shortcuts
|
|
294
|
-
|
|
295
|
-
For productivity apps:
|
|
296
|
-
|
|
297
|
-
```ts
|
|
298
|
-
useEffect(() => {
|
|
299
|
-
const handler = (e: KeyboardEvent) => {
|
|
300
|
-
// Cmd/Ctrl + K → focus search
|
|
301
|
-
if ((e.metaKey || e.ctrlKey) && e.key === "k") {
|
|
302
|
-
e.preventDefault();
|
|
303
|
-
searchRef.current?.focus();
|
|
304
|
-
}
|
|
305
|
-
// Escape → close any open thread / modal
|
|
306
|
-
if (e.key === "Escape") {
|
|
307
|
-
closeOpenThread();
|
|
308
|
-
}
|
|
309
|
-
};
|
|
310
|
-
window.addEventListener("keydown", handler);
|
|
311
|
-
return () => window.removeEventListener("keydown", handler);
|
|
312
|
-
}, []);
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
Document the shortcuts in your in-app help — discoverability matters.
|
|
316
|
-
|
|
317
|
-
---
|
|
318
|
-
|
|
319
|
-
## 5. Reduced motion
|
|
320
|
-
|
|
321
|
-
Animations help most users; they cause physical discomfort or distraction for users with vestibular disorders, ADHD, or who simply prefer less movement. WCAG 2.1 AA requires honoring the OS preference.
|
|
322
|
-
|
|
323
|
-
### Web / Angular — CSS
|
|
324
|
-
|
|
325
|
-
```css
|
|
326
|
-
@media (prefers-reduced-motion: reduce) {
|
|
327
|
-
/* Disable kit animations + your custom ones */
|
|
328
|
-
* {
|
|
329
|
-
animation-duration: 0.01ms !important;
|
|
330
|
-
animation-iteration-count: 1 !important;
|
|
331
|
-
transition-duration: 0.01ms !important;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
### React Native
|
|
337
|
-
|
|
338
|
-
```ts
|
|
339
|
-
import { AccessibilityInfo } from "react-native";
|
|
340
|
-
|
|
341
|
-
const [reduceMotion, setReduceMotion] = useState(false);
|
|
342
|
-
|
|
343
|
-
useEffect(() => {
|
|
344
|
-
AccessibilityInfo.isReduceMotionEnabled().then(setReduceMotion);
|
|
345
|
-
const sub = AccessibilityInfo.addEventListener("reduceMotionChanged", setReduceMotion);
|
|
346
|
-
return () => sub.remove();
|
|
347
|
-
}, []);
|
|
348
|
-
|
|
349
|
-
// In animations
|
|
350
|
-
<Animated.View
|
|
351
|
-
style={{
|
|
352
|
-
transform: [{ scale: reduceMotion ? 1 : animatedValue }],
|
|
353
|
-
}}
|
|
354
|
-
/>
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
### Native iOS
|
|
358
|
-
|
|
359
|
-
```swift
|
|
360
|
-
let reduceMotion = UIAccessibility.isReduceMotionEnabled
|
|
361
|
-
if !reduceMotion {
|
|
362
|
-
UIView.animate(withDuration: 0.3) { ... }
|
|
363
|
-
} else {
|
|
364
|
-
// Apply final state without animation
|
|
365
|
-
}
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Native Android
|
|
369
|
-
|
|
370
|
-
```kotlin
|
|
371
|
-
val reduceMotion = Settings.Global.getFloat(
|
|
372
|
-
contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f
|
|
373
|
-
) == 0.0f
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Flutter
|
|
377
|
-
|
|
378
|
-
```dart
|
|
379
|
-
final reduceMotion = MediaQuery.of(context).disableAnimations;
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
The skill defaults to wrapping the typing indicator + message-bubble entrance animations in reduce-motion guards. Other kit animations need similar treatment if you've customized them.
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
## Calls a11y
|
|
387
|
-
|
|
388
|
-
Calls have specific a11y considerations beyond chat:
|
|
389
|
-
|
|
390
|
-
1. **Focus on call screen entry → end-call button.** Avoids accidental hangup but ensures the user can quickly exit.
|
|
391
|
-
2. **Announce incoming calls.** Live region (web/RN) or `UIAccessibility.post(.announcement)` (iOS) — "Incoming call from Alice."
|
|
392
|
-
3. **Mute/end button labels.** "Mute microphone" not just "Mute" — clarify what's being toggled.
|
|
393
|
-
4. **No flashing — recording indicator uses dot, not strobe.** WCAG 2.3 forbids more than 3 flashes/sec to prevent seizures.
|
|
394
|
-
5. **Caption support if recording.** Production calling apps with live captioning hook in via the platform's speech-recognition API and overlay text on the call screen.
|
|
395
|
-
|
|
396
|
-
---
|
|
397
|
-
|
|
398
|
-
## Testing — automated + manual
|
|
399
|
-
|
|
400
|
-
### Web automated
|
|
401
|
-
|
|
402
|
-
```bash
|
|
403
|
-
npm install --save-dev @axe-core/playwright
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
```ts
|
|
407
|
-
import { test, expect } from "@playwright/test";
|
|
408
|
-
import AxeBuilder from "@axe-core/playwright";
|
|
409
|
-
|
|
410
|
-
test("chat screen passes axe AA", async ({ page }) => {
|
|
411
|
-
await page.goto("/messages");
|
|
412
|
-
const results = await new AxeBuilder({ page }).withTags(["wcag2a", "wcag2aa"]).analyze();
|
|
413
|
-
expect(results.violations).toEqual([]);
|
|
414
|
-
});
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
### Native automated
|
|
418
|
-
|
|
419
|
-
iOS: Xcode → Accessibility Inspector → Audit. Android: Accessibility Scanner app on a real device.
|
|
420
|
-
|
|
421
|
-
### Manual
|
|
422
|
-
|
|
423
|
-
- **Keyboard-only navigation** — unplug your mouse, complete a full chat flow. Tab through every control.
|
|
424
|
-
- **VoiceOver (iOS) / TalkBack (Android) / NVDA (Windows) / VoiceOver (macOS)** — listen to the kit; verify announcements make sense.
|
|
425
|
-
- **Browser zoom 200%** — kit should remain usable at 200% zoom on a 1280×720 viewport (WCAG 1.4.10 reflow).
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
|
-
## Anti-patterns
|
|
430
|
-
|
|
431
|
-
1. **Custom themes without a contrast audit.** Brand colors silently fail AA.
|
|
432
|
-
2. **`<div onClick>` for clickable items.** Keyboard users can't activate.
|
|
433
|
-
3. **No live region for new messages.** Screen reader users miss messages.
|
|
434
|
-
4. **Auto-playing video on call screen.** Some users browse with autoplay disabled — kit handles this; custom UI must too.
|
|
435
|
-
5. **Focus stays on the trigger button after opening chat.** User has to manually re-navigate.
|
|
436
|
-
6. **Ignoring `prefers-reduced-motion`.** Vestibular-disorder users get disoriented.
|
|
437
|
-
7. **`aria-live="assertive"` for chat messages.** Interrupts the user mid-sentence; reserve for genuinely urgent (incoming call).
|
|
438
|
-
8. **Skipping label specificity.** "Mute" alone is ambiguous; "Mute microphone" / "Unmute microphone" is clear.
|
|
439
|
-
9. **Color-only signals.** "Read" status as just a checkmark color — add a visible text label for color-blind users.
|
|
440
|
-
10. **No test coverage for a11y.** Regressions slip in. Automate the easy checks (axe-core); manual-test the rest per release.
|
|
441
|
-
|
|
442
|
-
---
|
|
443
|
-
|
|
444
|
-
## Verification checklist
|
|
445
|
-
|
|
446
|
-
**Cross-family:**
|
|
447
|
-
- [ ] Custom theme passes AA contrast (4.5:1 text, 3:1 large text + UI components)
|
|
448
|
-
- [ ] Focus lands on a meaningful control on chat screen entry
|
|
449
|
-
- [ ] Live region / accessibility announcement on new message receive
|
|
450
|
-
- [ ] No `<div onClick>` patterns — buttons are buttons
|
|
451
|
-
- [ ] `prefers-reduced-motion` / `isReduceMotionEnabled` honored for animations
|
|
452
|
-
- [ ] Mute/end/camera labels are specific (not just "Mute")
|
|
453
|
-
- [ ] Incoming-call announcement (`assertive` live region OR platform announcement API)
|
|
454
|
-
- [ ] No flashing > 3 Hz (recording dot uses fade, not strobe)
|
|
455
|
-
|
|
456
|
-
**Web/Angular:**
|
|
457
|
-
- [ ] axe-core / Playwright a11y test in CI; passes WCAG AA tags
|
|
458
|
-
- [ ] `<html lang="...">` set to current locale (consumes `cometchat-i18n` skill output)
|
|
459
|
-
- [ ] Skip-to-composer link present
|
|
460
|
-
- [ ] Browser zoom 200% smoke test
|
|
461
|
-
|
|
462
|
-
**Native (Android/iOS/Flutter):**
|
|
463
|
-
- [ ] TalkBack / VoiceOver smoke test on a real device
|
|
464
|
-
- [ ] Reduced motion preference observed (`UIAccessibility.isReduceMotionEnabled`, etc.)
|
|
465
|
-
- [ ] Focus restored on screen pop (not just push)
|
|
466
|
-
- [ ] Touch targets ≥ 44×44 pt (iOS) / 48×48 dp (Android) — kit defaults pass; custom UI must too
|
|
467
|
-
|
|
468
|
-
---
|
|
469
|
-
|
|
470
|
-
## Pointers
|
|
471
|
-
|
|
472
|
-
- `cometchat-i18n` — sister skill; `<html lang>` and screen-reader pronunciation of translated strings depend on locale set correctly
|
|
473
|
-
- `cometchat-{family}-customization` — when customizing kit components, preserve their built-in a11y attributes
|
|
474
|
-
- `cometchat-{family}-troubleshooting` — when a11y tools report issues that look kit-internal
|
|
475
|
-
- WCAG 2.1 AA reference — https://www.w3.org/WAI/WCAG21/quickref/?levels=aa
|
|
476
|
-
- Material Design accessibility — https://m3.material.io/foundations/accessible-design
|
|
477
|
-
- Apple HIG accessibility — https://developer.apple.com/design/human-interface-guidelines/accessibility
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat a11y accessibility wcag screen-reader keyboard focus contrast rtl section508"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
> **Ground truth:** the UI Kit components are documented as **designed targeting WCAG 2.1 Level AA** with **keyboard navigation** built in (the Angular component docs state this most explicitly; note the docs' own caveat that full conformance still requires manual testing — do not assert a blanket AA/VPAT claim to the user without it). Treat AA as the design target, not a certified guarantee. Accessibility failures in a CometChat app are almost always **host-side regressions** — global CSS, a broken focus order, a container with no accessible name, or motion that ignores the user's preference. Verify component-level a11y claims against the component's own docs page (`cometchat-<family>-components` → docs-map); this skill owns the host-side discipline the kit can't control.
|
|
13
|
+
|
|
14
|
+
## Use this skill when
|
|
15
|
+
An accessibility review (WCAG / Section 508 / ADA / EN 301 549), a screen-reader or keyboard complaint, or "make our chat accessible." Procurement for public-sector, education, healthcare and large enterprises requires this.
|
|
16
|
+
|
|
17
|
+
## Start from what the kit gives you
|
|
18
|
+
The kit ships accessible components: keyboard-operable lists/composer, focus handling, and semantics **designed targeting** AA (the design target — not a certified guarantee; see above). On web it sets ARIA roles and names itself — the conversation/user rosters render as a labelled `listbox` and manage roving focus — so don't override or strip them. Your job is to **not break it** and to make the surrounding app equally accessible. Two rules first:
|
|
19
|
+
1. **Don't let global CSS leak into the `.cometchat` subtree** (web) — a global `outline:none`, a low-contrast override, a `text-align`/flex reset, or a Tailwind base can strip focus rings or break contrast the kit set correctly. Scope your resets away from the kit (`RULES.md` → CSS isolation).
|
|
20
|
+
2. **Give the chat container a real, labelled home** — a sized region (a11y needs a visible, non-collapsed surface too) with an accessible name (e.g. an `aria-label`/landmark on web, an accessibility label on native) so screen-reader users can find and enter it.
|
|
21
|
+
|
|
22
|
+
## The checklist (host-side)
|
|
23
|
+
- **Keyboard:** every path reachable and operable by keyboard — open a conversation, type, send, open thread, close. Don't trap focus; return focus sensibly when a panel/dialog closes. Don't remove focus outlines; if you restyle them, keep a visible focus indicator.
|
|
24
|
+
- **Screen reader:** the surface and its regions have accessible names; your own buttons around the kit have labels (not icon-only with no `aria-label`/accessibility label). New-message announcements: verify the kit's live-region behavior on your target reader (VoiceOver/NVDA/TalkBack) and don't suppress it with `aria-hidden` on an ancestor.
|
|
25
|
+
- **Contrast:** if you theme the kit (`cometchat-<family>-customization`), keep text/UI contrast at **AA** (4.5:1 text, 3:1 large text/UI). Check both light and dark themes — a brand color that passes on light can fail on dark.
|
|
26
|
+
- **Reduced motion:** honor `prefers-reduced-motion` (web) / the OS "reduce motion" setting (native) in any animation you add around the chat; don't force motion the user opted out of.
|
|
27
|
+
- **Text scaling / zoom:** the surface must remain usable at 200% zoom / large Dynamic Type — don't cap font sizes or clip at large text.
|
|
28
|
+
- **RTL:** direction-correct for RTL locales (pairs with `cometchat-i18n`).
|
|
29
|
+
- **Targets:** your custom controls meet the minimum touch-target size; don't shrink the kit's.
|
|
30
|
+
|
|
31
|
+
## Calls accessibility (if you use calling)
|
|
32
|
+
- Request camera/mic with clear, user-visible prompts and reasons.
|
|
33
|
+
- Provide accessible labels for call controls you add (mute, end, camera).
|
|
34
|
+
- Where available, surface captions/transcription; ensure incoming-call UI is announced and keyboard/AT-operable.
|
|
35
|
+
|
|
36
|
+
## Test it
|
|
37
|
+
- **Automated (web):** run `axe`/Lighthouse on the chat screen — fix contrast, missing names, and ARIA misuse it flags. (Automated tools catch ~a third of issues; do the manual pass too.)
|
|
38
|
+
- **Manual:** tab through the whole flow with the mouse unplugged; drive it with VoiceOver / NVDA / TalkBack; zoom to 200%; toggle reduced motion; switch to dark. Fix what breaks in YOUR wiring; if a genuine kit-component gap appears, verify against the component docs and report it (don't hand-patch kit internals).
|
|
39
|
+
|
|
40
|
+
## Common pitfalls
|
|
41
|
+
1. **Global CSS stripping focus rings or contrast** inside `.cometchat` — scope resets away.
|
|
42
|
+
2. **Icon-only custom buttons with no label** — add accessible names.
|
|
43
|
+
3. **Unlabelled, collapsed, or unreachable chat container** — size it and name it.
|
|
44
|
+
4. **Animations ignoring reduced-motion.**
|
|
45
|
+
5. **Contrast checked in one theme only** — check light and dark.
|
|
46
|
+
6. **Assuming automated tools are enough** — they miss keyboard/reader flow; test manually.
|
|
47
|
+
|
|
48
|
+
## Verify it works
|
|
49
|
+
The chat flow is fully keyboard-operable with a visible focus indicator · a screen reader announces the surface, messages, and your controls · contrast passes AA in light and dark · the UI holds at 200% zoom / large type · reduced-motion is honored · RTL mirrors correctly · axe/Lighthouse on the chat screen is clean of contrast/name/ARIA errors.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cometchat-analytics
|
|
3
|
+
description: "See what your chat is doing — pull usage & message metrics via REST, stream real-time events to your data/observability stack via webhooks, monitor client-side errors & the init/login path, and read push/call logs. Cross-family: metrics/webhooks are server-side; client error monitoring wires per family. Triggers: 'chat analytics', 'usage metrics', 'message volume', 'monitor cometchat', 'observability', 'send chat events to datadog/segment/bigquery', 'track delivery', 'error monitoring for chat', 'dashboards for chat'."
|
|
4
|
+
license: "MIT"
|
|
5
|
+
compatibility: "CometChat Metrics REST API (usage · message) · Webhooks · Notification/Call logs · on-prem Prometheus/Grafana/Loki. Client error monitoring via each family's error boundary / listeners."
|
|
6
|
+
metadata:
|
|
7
|
+
author: "CometChat"
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat analytics observability metrics webhooks monitoring datadog sentry dashboards"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
> **Ground truth:** shapes are FETCHED from the live docs — `{DOCS_BASE}/rest-api/metrics/usage-metrics`, `/rest-api/metrics/message-metrics`, `/fundamentals/webhooks` (+ `/rest-api/management-apis/webhooks/overview`), `/notifications/logs`, `/rest-api/calls-apis/get-call`, and on-prem `/on-premise-deployment/docker/monitoring`. `DOCS_BASE = https://www.cometchat.com/docs`; append `.md`. Verify each metric field / event name against the docs before charting it; don't invent a metric.
|
|
13
|
+
|
|
14
|
+
## Use this skill when
|
|
15
|
+
You need visibility into chat: product analytics (DAU, messages, retention), an ops/observability signal (delivery, errors, latency), or feeding chat events into an existing warehouse/monitoring stack.
|
|
16
|
+
|
|
17
|
+
## Three layers of visibility
|
|
18
|
+
| Layer | Source | Use it for |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| **Aggregate metrics** | Metrics REST API (usage + message) | dashboards, MAU/DAU, message volume, growth |
|
|
21
|
+
| **Real-time events** | Webhooks | stream every message/user/group/call event to your pipeline |
|
|
22
|
+
| **Client health** | your error monitor + the kit's error boundary/listeners | init/login failures, render errors, UX latency |
|
|
23
|
+
|
|
24
|
+
## 1. Aggregate metrics (REST, server-side)
|
|
25
|
+
- **Usage metrics** (`{DOCS_BASE}/rest-api/metrics/usage-metrics`) — active users and usage over time.
|
|
26
|
+
- **Message metrics** (`{DOCS_BASE}/rest-api/metrics/message-metrics`) — message volume/counts.
|
|
27
|
+
- **Call metrics** — per-call detail incl. participant metrics via `{DOCS_BASE}/rest-api/calls-apis/get-call`.
|
|
28
|
+
Call these from a server job with the **REST API Key** (never client-side), on a schedule, into your BI tool. Fetch the exact query params + response fields from each page before building the report.
|
|
29
|
+
|
|
30
|
+
## 2. Real-time events → your stack (webhooks)
|
|
31
|
+
Webhooks POST an HTTPS notification to your server on message / user / group / call events (`{DOCS_BASE}/fundamentals/webhooks`; configure via `/rest-api/management-apis/webhooks/overview`). This is how you get chat into **Segment / BigQuery / Snowflake / Datadog / a data lake** in real time:
|
|
32
|
+
1. Stand up an HTTPS endpoint (returns 200 to ack). Secure it with the **Basic Auth** credentials CometChat sends on every webhook request (`{DOCS_BASE}/fundamentals/webhooks` — the docs describe Basic Auth only, with no payload-signature scheme, so validate the `Authorization` header rather than looking for an HMAC signature).
|
|
33
|
+
2. Subscribe to the events you need (don't fan out everything if you only need message.sent).
|
|
34
|
+
3. Transform + forward to your warehouse/observability sink; make the handler idempotent and fast (queue heavy work).
|
|
35
|
+
The same webhook stream doubles as a **tamper-evident audit log** for `cometchat-compliance`.
|
|
36
|
+
|
|
37
|
+
## 3. Client-side error & performance monitoring (per family)
|
|
38
|
+
The metrics API won't tell you a user's chat failed to load — instrument the client:
|
|
39
|
+
- **Capture kit render errors** — on the React families via the error boundary's hook (React v7: `CometChatErrorBoundary` `onError`; Angular/RN have the equivalent); on iOS/Android/Flutter (no error-boundary construct) via the SDK error listeners / the kit's error-state views. Forward to Sentry/Datadog with context.
|
|
40
|
+
- **Instrument the critical path** — wrap init, the token fetch, and login in spans/breadcrumbs; a spike in login failures is your earliest incident signal (often Region or token issues).
|
|
41
|
+
- **Listen for connection state** — the SDK's connection/websocket listeners tell you when clients drop; count reconnects.
|
|
42
|
+
- **Don't log secrets or message bodies** to your monitor — log UIDs/event types/latencies, not content (privacy + `cometchat-compliance`).
|
|
43
|
+
Wire these through the resolved family's `-core`/`-production`/`-troubleshooting` skills.
|
|
44
|
+
|
|
45
|
+
## 4. Delivery & call logs
|
|
46
|
+
- **Push delivery logs** (`{DOCS_BASE}/notifications/logs`) — FCM/APNs/email/SMS delivery, ~14-day retention; enable when diagnosing "notifications not arriving" and export before they age out.
|
|
47
|
+
- **Call logs** — the Calls REST APIs for per-call quality/participant metrics.
|
|
48
|
+
|
|
49
|
+
## 5. Self-host observability
|
|
50
|
+
On-prem ships **Prometheus + Grafana + Loki + Promtail** (`{DOCS_BASE}/on-premise-deployment/docker/monitoring`): service metrics, dashboards, alerts, and centralized logs — wire alerts (P95 latency, error rate, WS capacity) to your on-call. SaaS customers use the Metrics API + webhooks instead.
|
|
51
|
+
|
|
52
|
+
## Common pitfalls
|
|
53
|
+
1. **Metrics API called client-side** — it needs the REST API Key; server only.
|
|
54
|
+
2. **Webhook handler slow or non-idempotent** — retries pile up; ack fast, queue the work, dedupe.
|
|
55
|
+
3. **Charting an invented metric** — fetch the real fields from the metrics pages.
|
|
56
|
+
4. **Logging message content to your monitor** — privacy/compliance risk; log metadata, not bodies.
|
|
57
|
+
5. **No client error monitoring** — you'll hear about outages from users, not dashboards; wire the error boundary + login-path spans.
|
|
58
|
+
6. **Relying on push logs after they age out** — export within the retention window.
|
|
59
|
+
|
|
60
|
+
## Verify it works
|
|
61
|
+
Usage/message metrics return real numbers into your dashboard · a test message triggers your webhook and lands in your warehouse/monitor · a forced init/login failure shows up in your error monitor with context · push/call logs are readable when needed · (on-prem) Grafana shows the services and alerts fire.
|