@cometchat/skills 4.4.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -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 +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- 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 +40 -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 +101 -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-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 +131 -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 +58 -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-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -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-push/SKILL.md +24 -602
- 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-onboarding/SKILL.md +89 -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 +90 -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 +313 -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 +126 -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 +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -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 +116 -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/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -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-core/references/troubleshooting.md +28 -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-push/SKILL.md +53 -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 +909 -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 +130 -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-a11y/SKILL.md +0 -477
- 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-i18n/SKILL.md +0 -419
- 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-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- 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,184 +0,0 @@
|
|
|
1
|
-
# Idle timeout on iOS
|
|
2
|
-
|
|
3
|
-
The iOS Calls SDK v5 has a real idle-timeout API. Set it on the builder with `setIdleTimeoutPeriod(_ value: Int) -> Self` (swiftinterface:289), and react to the timeout via the optional `CallsEventsDelegate.onSessionTimeout()` callback (swiftinterface:30). The SDK runs the timer; you do NOT hand-roll a client-side `Timer`. (If you want an "are you still there?" prompt BEFORE the SDK ends the session, you can still drive a softer client-side warning off participant events — but the timeout itself is the SDK's job.)
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/ios/idle-timeout
|
|
6
|
-
**Read first:** `cometchat-react-calls/references/idle-timeout.md` — settings + archetype timeouts + Pattern A custom timer.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## SDK idle timeout — `setIdleTimeoutPeriod` + `onSessionTimeout`
|
|
11
|
-
|
|
12
|
-
Set the timeout (in seconds) on the builder, then react to the SDK's `onSessionTimeout()` callback. When it fires, report the end to CallKit and the SDK has already torn the session down:
|
|
13
|
-
|
|
14
|
-
```swift
|
|
15
|
-
import CometChatCallsSDK
|
|
16
|
-
|
|
17
|
-
let settings = CallSettingsBuilder()
|
|
18
|
-
.setIdleTimeoutPeriod(120) // swiftinterface:289 setIdleTimeoutPeriod(_ value: Int) -> Self
|
|
19
|
-
.setDelegate(callListener)
|
|
20
|
-
.build()
|
|
21
|
-
// ... generateToken → startSession(callToken:callSetting:view:) ...
|
|
22
|
-
|
|
23
|
-
class CallListener: NSObject, CallsEventsDelegate {
|
|
24
|
-
// swiftinterface:30 — optional CallsEventsDelegate.onSessionTimeout()
|
|
25
|
-
func onSessionTimeout() {
|
|
26
|
-
DispatchQueue.main.async {
|
|
27
|
-
// Report end to CallKit (rule 1.5 — hangup cleanup); SDK already ended the session.
|
|
28
|
-
CallManager.shared.endCall(reason: .remoteEnded)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
The `CallManager.shared.endCall(reason:)` call is critical — see `references/callkit-and-pushkit.md`. CallKit's call card persists on the lock screen unless you report the end.
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## CallKit interaction — endCall reason
|
|
39
|
-
|
|
40
|
-
When your client-side timer fires, you must report the call end to CallKit. The reason matters for system UI:
|
|
41
|
-
|
|
42
|
-
```swift
|
|
43
|
-
let endReason: CXCallEndedReason = .remoteEnded
|
|
44
|
-
// Other options:
|
|
45
|
-
// .failed — error / network issue
|
|
46
|
-
// .remoteEnded — counterparty hung up
|
|
47
|
-
// .unanswered — incoming call not answered
|
|
48
|
-
// .answeredElsewhere — answered on another device
|
|
49
|
-
// .declinedElsewhere — declined on another device
|
|
50
|
-
|
|
51
|
-
provider.reportCall(
|
|
52
|
-
with: callUUID,
|
|
53
|
-
endedAt: Date(),
|
|
54
|
-
reason: endReason,
|
|
55
|
-
)
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Use `.remoteEnded` for idle timeout — it's the closest semantic match (the "remote" effectively ended the call by leaving). Don't use `.failed` (implies error; iOS shows a "call failed" UI).
|
|
59
|
-
|
|
60
|
-
Drive the reporting from your own timer's completion handler — there is no SDK callback to hang this off.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Foreground/background gotcha
|
|
65
|
-
|
|
66
|
-
iOS suspends background JavaScript / WebRTC threads aggressively. If the user backgrounds the app, the call session may pause. The idle timer continues running in the SDK's tracking, but participant-leave events may queue until foreground.
|
|
67
|
-
|
|
68
|
-
Practical implication: idle timeout fires immediately on app return, even if the user only backgrounded for a few seconds. Same as RN.
|
|
69
|
-
|
|
70
|
-
If using CallKit (rule 1.7 in SKILL.md), the background-mode `voip` capability keeps the call alive — but participant tracking may still lag. Test the foreground transition.
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Custom prompt — SwiftUI
|
|
75
|
-
|
|
76
|
-
```swift
|
|
77
|
-
struct IdleTimeoutPrompt: View {
|
|
78
|
-
let onStay: () -> Void
|
|
79
|
-
let onEnd: () -> Void
|
|
80
|
-
|
|
81
|
-
var body: some View {
|
|
82
|
-
VStack(spacing: 16) {
|
|
83
|
-
Text("Still there?")
|
|
84
|
-
.font(.headline)
|
|
85
|
-
Text("You're alone in this call. It'll end in 60 seconds.")
|
|
86
|
-
.multilineTextAlignment(.center)
|
|
87
|
-
.foregroundColor(.secondary)
|
|
88
|
-
HStack(spacing: 12) {
|
|
89
|
-
Button("End now", role: .destructive, action: onEnd)
|
|
90
|
-
.buttonStyle(.bordered)
|
|
91
|
-
Button("Stay", action: onStay)
|
|
92
|
-
.buttonStyle(.borderedProminent)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
.padding(24)
|
|
96
|
-
.background(.regularMaterial, in: RoundedRectangle(cornerRadius: 16))
|
|
97
|
-
.accessibilityElement(children: .contain)
|
|
98
|
-
.accessibilityAddTraits(.isModal)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
Used as an overlay:
|
|
104
|
-
|
|
105
|
-
```swift
|
|
106
|
-
struct CallView: View {
|
|
107
|
-
@State private var showIdlePrompt = false
|
|
108
|
-
|
|
109
|
-
var body: some View {
|
|
110
|
-
ZStack {
|
|
111
|
-
// Call surface
|
|
112
|
-
if showIdlePrompt {
|
|
113
|
-
Color.black.opacity(0.5)
|
|
114
|
-
.ignoresSafeArea()
|
|
115
|
-
.onTapGesture { /* prevent dismiss on backdrop */ }
|
|
116
|
-
IdleTimeoutPrompt(
|
|
117
|
-
onStay: { showIdlePrompt = false; resetIdleTimer() },
|
|
118
|
-
onEnd: { CometChatCalls.endSession() },
|
|
119
|
-
)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
`accessibilityAddTraits(.isModal)` is the SwiftUI equivalent of web's `aria-modal="true"`. VoiceOver focus stays trapped within the prompt.
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## UIKit pattern — UIAlertController
|
|
131
|
-
|
|
132
|
-
For UIKit projects, the simplest path is `UIAlertController`:
|
|
133
|
-
|
|
134
|
-
```swift
|
|
135
|
-
let alert = UIAlertController(
|
|
136
|
-
title: "Still there?",
|
|
137
|
-
message: "You're alone in this call. It'll end in 60 seconds.",
|
|
138
|
-
preferredStyle: .alert,
|
|
139
|
-
)
|
|
140
|
-
alert.addAction(UIAlertAction(title: "Stay", style: .default) { _ in
|
|
141
|
-
resetIdleTimer()
|
|
142
|
-
})
|
|
143
|
-
alert.addAction(UIAlertAction(title: "End now", style: .destructive) { _ in
|
|
144
|
-
CometChatCalls.endSession()
|
|
145
|
-
})
|
|
146
|
-
alert.preferredAction = alert.actions.first // make Stay the default
|
|
147
|
-
present(alert, animated: true)
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
`alert.preferredAction` makes "Stay" the default highlighted action — VoiceOver activates it on triple-click home button as the default response.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Anti-patterns
|
|
155
|
-
|
|
156
|
-
Web sister reference rules apply, plus iOS-specific:
|
|
157
|
-
|
|
158
|
-
1. **Hand-rolling a `Timer` for the timeout itself.** The SDK has `setIdleTimeoutPeriod(_:)` (swiftinterface:289) + `onSessionTimeout()` (swiftinterface:30) — use them. Only a soft "still there?" warning prompt should be client-side.
|
|
159
|
-
2. **`onSessionTimeout` firing without reporting end to CallKit.** Lock-screen call card persists — user sees a stuck "ongoing call" until they manually end it.
|
|
160
|
-
3. **Using `.failed` reason for idle timeout end.** iOS shows "call failed" — wrong semantic. Use `.remoteEnded`.
|
|
161
|
-
4. **Custom prompt that doesn't dim background.** Calls UI keeps rendering behind the prompt; user can interact with controls and call ends prematurely.
|
|
162
|
-
5. **`UIAlertController` from background queue.** Crashes — must be on main. Wrap in `DispatchQueue.main.async`.
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## Verification checklist
|
|
167
|
-
|
|
168
|
-
- [ ] Timeout set via `CallSettingsBuilder.setIdleTimeoutPeriod(_:)` (seconds) — no hand-rolled `Timer` for the timeout
|
|
169
|
-
- [ ] `onSessionTimeout()` delegate callback reports end to CallKit with `.remoteEnded` reason
|
|
170
|
-
- [ ] Custom prompt uses `accessibilityAddTraits(.isModal)` (SwiftUI) or `UIAlertController.preferredStyle = .alert`
|
|
171
|
-
- [ ] Backdrop dimmed; prevents accidental dismiss
|
|
172
|
-
- [ ] All UIKit alert presentations on main thread
|
|
173
|
-
- [ ] Real-device smoke: 2 iPhones in call, hangup from one → other shows prompt after configured delay
|
|
174
|
-
- [ ] Lock-screen smoke: when call times out, lock-screen card disappears (CallKit reported)
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Pointers
|
|
179
|
-
|
|
180
|
-
- `cometchat-react-calls/references/idle-timeout.md` — sister reference (settings, archetype timeouts)
|
|
181
|
-
- `cometchat-ios-calls` SKILL.md
|
|
182
|
-
- `references/callkit-and-pushkit.md` — CallKit reporting end
|
|
183
|
-
- `references/swiftui-uikit-hosting.md` — embedding SwiftUI prompts in UIKit nav
|
|
184
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/ios/idle-timeout
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# In-call chat on iOS
|
|
2
|
-
|
|
3
|
-
> **The iOS Calls SDK v5 has NO in-call chat button.** There is no `setHideChatButton` on `CallSettingsBuilder`, no `onChatButtonClicked` callback on `CallsEventsDelegate`, and no `CometChatCalls.setChatButtonUnreadCount(_:)`. None of these symbols exist — do not emit them.
|
|
4
|
-
|
|
5
|
-
In-call chat is therefore an **app-level composition**, not an SDK feature: you add your OWN chat button to your call UI, and present a sheet hosting the kit's `CometChatMessageList` + `CometChatMessageComposer` over a group keyed to the call's session ID. The Calls SDK is not involved.
|
|
6
|
-
|
|
7
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/ios/in-call-chat
|
|
8
|
-
**Read first:** `cometchat-react-calls/references/in-call-chat.md` — group-as-session architecture + anti-patterns.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Your own chat button (the SDK provides none)
|
|
13
|
-
|
|
14
|
-
Add a button to your call control panel and present the sheet yourself. Track unread count in your own state (from a `CometChat.addMessageListener` on the session group) — there is no SDK badge API.
|
|
15
|
-
|
|
16
|
-
```swift
|
|
17
|
-
import CometChatSDK
|
|
18
|
-
|
|
19
|
-
// In your call UIViewController:
|
|
20
|
-
let chatButton = UIButton(type: .system)
|
|
21
|
-
chatButton.addAction(UIAction { [weak self] _ in
|
|
22
|
-
self?.presentChatSheet() // present on main; you're already on main here
|
|
23
|
-
}, for: .touchUpInside)
|
|
24
|
-
|
|
25
|
-
// Unread badge: maintain your own count from a message listener on the session group,
|
|
26
|
-
// and update chatButton's badge view. There is no CometChatCalls.setChatButtonUnreadCount.
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Sheet presentation (iOS 15+)
|
|
32
|
-
|
|
33
|
-
```swift
|
|
34
|
-
import UIKit
|
|
35
|
-
|
|
36
|
-
class CallViewController: UIViewController {
|
|
37
|
-
func presentChatSheet() {
|
|
38
|
-
let chatVC = InCallChatViewController(sessionId: sessionId)
|
|
39
|
-
let nav = UINavigationController(rootViewController: chatVC)
|
|
40
|
-
|
|
41
|
-
if #available(iOS 15.0, *) {
|
|
42
|
-
if let sheet = nav.sheetPresentationController {
|
|
43
|
-
sheet.detents = [.medium(), .large()]
|
|
44
|
-
sheet.prefersGrabberVisible = true
|
|
45
|
-
sheet.preferredCornerRadius = 16
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
present(nav, animated: true)
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`.detents = [.medium(), .large()]` is iOS 15+'s pull-up sheet API. Matches the BottomSheet UX from RN/Flutter.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## InCallChatViewController
|
|
59
|
-
|
|
60
|
-
```swift
|
|
61
|
-
class InCallChatViewController: UIViewController {
|
|
62
|
-
let sessionId: String
|
|
63
|
-
private var group: Group?
|
|
64
|
-
private var listenerId: String!
|
|
65
|
-
|
|
66
|
-
init(sessionId: String) {
|
|
67
|
-
self.sessionId = sessionId
|
|
68
|
-
super.init(nibName: nil, bundle: nil)
|
|
69
|
-
self.title = "Chat"
|
|
70
|
-
}
|
|
71
|
-
required init?(coder: NSCoder) { fatalError() }
|
|
72
|
-
|
|
73
|
-
override func viewDidLoad() {
|
|
74
|
-
super.viewDidLoad()
|
|
75
|
-
listenerId = "in-call-chat-\(sessionId)"
|
|
76
|
-
|
|
77
|
-
Task {
|
|
78
|
-
do {
|
|
79
|
-
group = try await ensureGroup(sessionId: sessionId)
|
|
80
|
-
try await joinGroup(sessionId: sessionId)
|
|
81
|
-
await MainActor.run {
|
|
82
|
-
self.embedMessageList()
|
|
83
|
-
}
|
|
84
|
-
} catch {
|
|
85
|
-
print("Failed to set up in-call chat:", error)
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
override func viewWillDisappear(_ animated: Bool) {
|
|
91
|
-
super.viewWillDisappear(animated)
|
|
92
|
-
// Clear YOUR unread count on close (no SDK badge API exists).
|
|
93
|
-
NotificationCenter.default.post(name: .inCallChatClosed, object: nil)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private func embedMessageList() {
|
|
97
|
-
guard let group = group else { return }
|
|
98
|
-
// The kit's CometChatMessageList is a UIViewController
|
|
99
|
-
let messageList = CometChatMessageList()
|
|
100
|
-
messageList.group = group
|
|
101
|
-
addChild(messageList)
|
|
102
|
-
view.addSubview(messageList.view)
|
|
103
|
-
// ... AutoLayout pinning to fill view
|
|
104
|
-
messageList.didMove(toParent: self)
|
|
105
|
-
|
|
106
|
-
// Composer
|
|
107
|
-
let composer = CometChatMessageComposer()
|
|
108
|
-
composer.group = group
|
|
109
|
-
addChild(composer)
|
|
110
|
-
view.addSubview(composer.view)
|
|
111
|
-
// ... AutoLayout pinning to bottom
|
|
112
|
-
composer.didMove(toParent: self)
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
func ensureGroup(sessionId: String) async throws -> Group {
|
|
117
|
-
do {
|
|
118
|
-
return try await fetchGroup(sessionId) // CometChat.getGroup wrapper
|
|
119
|
-
} catch {
|
|
120
|
-
let group = Group(guid: sessionId, name: "Call \(sessionId)", groupType: .public, password: "")
|
|
121
|
-
return try await createGroup(group)
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Audio ducking when keyboard opens
|
|
129
|
-
|
|
130
|
-
iOS auto-ducks call audio when the system keyboard opens (the kit handles this). For custom UI you may want to maintain unducked audio for the whole call — explicit override:
|
|
131
|
-
|
|
132
|
-
```swift
|
|
133
|
-
NotificationCenter.default.addObserver(
|
|
134
|
-
forName: UIResponder.keyboardWillShowNotification,
|
|
135
|
-
object: nil, queue: .main
|
|
136
|
-
) { _ in
|
|
137
|
-
// Re-assert non-ducking audio category
|
|
138
|
-
try? AVAudioSession.sharedInstance().setCategory(
|
|
139
|
-
.playAndRecord,
|
|
140
|
-
mode: .voiceChat,
|
|
141
|
-
options: [.allowBluetooth, .defaultToSpeaker]
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Most apps don't need this; the kit's defaults are sensible. Override only if user testing surfaces the audio ducking as confusing.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Anti-patterns
|
|
151
|
-
|
|
152
|
-
Web sister rules apply, plus iOS-specific:
|
|
153
|
-
|
|
154
|
-
1. **Wiring `setHideChatButton` / `onChatButtonClicked` / `setChatButtonUnreadCount`.** None exist on iOS v5. Present your own button + sheet; track unread in your own state.
|
|
155
|
-
2. **`present(nav, animated: true)` from background queue.** Crash. Always main queue.
|
|
156
|
-
3. **Mutating `group` from background.** `group` updates must be on main; `Task { @MainActor in ... }` or `DispatchQueue.main.async`.
|
|
157
|
-
4. **Forgetting `dismiss(animated: true)` on call end.** Sheet stays up over the post-call screen — looks broken.
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Verification checklist
|
|
162
|
-
|
|
163
|
-
- [ ] Your OWN chat button presents the sheet (no `setHideChatButton`/`onChatButtonClicked`/`setChatButtonUnreadCount` — none exist)
|
|
164
|
-
- [ ] Sheet presented on main queue
|
|
165
|
-
- [ ] `UISheetPresentationController` with `[.medium(), .large()]` detents (iOS 15+)
|
|
166
|
-
- [ ] `CometChatMessageList` + `CometChatMessageComposer` embedded as child VCs
|
|
167
|
-
- [ ] Sheet dismissed on call end
|
|
168
|
-
- [ ] Real-device smoke: 2 iPhones in call, send message → badge in other
|
|
169
|
-
- [ ] Sheet drag-down dismisses cleanly
|
|
170
|
-
- [ ] Lock-screen smoke: backgrounded → return → chat sheet still visible if open
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Pointers
|
|
175
|
-
|
|
176
|
-
- `cometchat-react-calls/references/in-call-chat.md` — sister web reference (group-as-session pattern)
|
|
177
|
-
- `cometchat-ios-calls` SKILL.md — the seven hard rules
|
|
178
|
-
- `references/swiftui-uikit-hosting.md` — embedding SwiftUI sheets
|
|
179
|
-
- Canonical docs: https://www.cometchat.com/docs/calls/ios/in-call-chat
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
# CometChat Calls iOS SDK v4 → v5 migration
|
|
2
|
-
|
|
3
|
-
`CometChatCallsSDK` v5 keeps the same session model as v4 — a per-session call token, a `CallSettingsBuilder`, and a static `CometChatCalls` facade. There is **no** `CometChatCalls.login`, **no** `CallSession`/`CallSession.shared`, and **no** `SessionSettings` struct. Auth is per-session via `generateToken`.
|
|
4
|
-
|
|
5
|
-
**Canonical docs:** https://www.cometchat.com/docs/calls/ios/migration-guide-v5
|
|
6
|
-
|
|
7
|
-
> Every symbol below is verified against the v5 `CometChatCallsSDK` Swift interface. Do NOT introduce `CallSession`, `joinSession`, `SessionSettings`, `SessionSettingsBuilder`, `CometChatCallsEventsListener`, `muteAudio`/`pauseVideo`, `setLayout`, or `startScreenShare` — none of these exist in v5.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Step 1 — Bump the SDK
|
|
12
|
-
|
|
13
|
-
**SwiftPM:** Update the `CometChatCallsSDK` package version pin to `5.0.0` or higher.
|
|
14
|
-
|
|
15
|
-
**CocoaPods:**
|
|
16
|
-
```ruby
|
|
17
|
-
# Podfile
|
|
18
|
-
pod 'CometChatCallsSDK', '~> 5.0'
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pod install --repo-update
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Step 2 — Init
|
|
28
|
-
|
|
29
|
-
Init takes a `CallAppSettings` built with `CallAppSettingsBuilder`, passed under the `callsAppSettings:` label (note the `s` — `callsAppSettings`, not `callAppSettings`).
|
|
30
|
-
|
|
31
|
-
```swift
|
|
32
|
-
let callAppSettings = CallAppSettingsBuilder()
|
|
33
|
-
.setAppId("APP_ID")
|
|
34
|
-
.setRegion("REGION")
|
|
35
|
-
.build()
|
|
36
|
-
|
|
37
|
-
CometChatCalls.init(callsAppSettings: callAppSettings, onSuccess: { _ in
|
|
38
|
-
// ready
|
|
39
|
-
}, onError: { error in
|
|
40
|
-
// surface error
|
|
41
|
-
})
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
There is no async/await `init(with:)` form and no `CallAppSettings.Builder()` nested type — use `CallAppSettingsBuilder()`.
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Step 3 — Auth is per-session (no Calls SDK login)
|
|
49
|
-
|
|
50
|
-
> **There is NO `CometChatCalls.login` and NO `CometChatCalls.getLoggedInUser` in v5.** Do not call them — they do not exist on the Calls SDK.
|
|
51
|
-
|
|
52
|
-
Authentication is per call session. Get a call token immediately before starting a session:
|
|
53
|
-
|
|
54
|
-
```swift
|
|
55
|
-
// Chat SDK still owns the user session. Get its auth token from the Chat SDK:
|
|
56
|
-
let authToken = CometChat.getUserAuthToken() // CometChatSDK — User has NO `authToken` property
|
|
57
|
-
|
|
58
|
-
CometChatCalls.generateToken(authToken: authToken, sessionID: sessionID, onSuccess: { token in
|
|
59
|
-
// `token` is the call token you pass to startSession
|
|
60
|
-
}, onError: { error in
|
|
61
|
-
// surface error
|
|
62
|
-
})
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
`generateToken` is `CometChatCalls.generateToken(authToken:sessionID:onSuccess:onError:)`.
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Step 4 — Session settings (`CallSettingsBuilder`, not `SessionSettings`)
|
|
70
|
-
|
|
71
|
-
> **There is NO `SessionSettings` struct and NO `SessionSettingsBuilder`.** Use `CallSettingsBuilder().build()` which returns `CallSettings`.
|
|
72
|
-
|
|
73
|
-
```swift
|
|
74
|
-
let callSettings = CallSettingsBuilder()
|
|
75
|
-
.setIsAudioOnly(false) // was setSessionType(.video) — there is no setSessionType
|
|
76
|
-
.setStartAudioMuted(false)
|
|
77
|
-
.setStartVideoMuted(false)
|
|
78
|
-
.setShowRecordingButton(true) // NOT inverted — there is no hideRecordingButton
|
|
79
|
-
.setMode(.default) // setMode(_ value: DisplayModes) — swiftinterface:281 (.default/.single/.spotlight); NSString overload is deprecated
|
|
80
|
-
.setDelegate(self) // self conforms to CallsEventsDelegate
|
|
81
|
-
.build()
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
There is no `setLayout`, no `setHideChatButton`, no `enableRecording`. Recording-button visibility is `setShowRecordingButton(_:)`; auto-record on start is `setStartRecordingOnCallStart(_:)`.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Step 5 — Start / end the session
|
|
89
|
-
|
|
90
|
-
> **There is NO `joinSession` and NO `CallSession`.** The lifecycle is `generateToken` → `startSession` → `endSession`, all static on `CometChatCalls`.
|
|
91
|
-
|
|
92
|
-
```swift
|
|
93
|
-
// `view` is the UIView the SDK renders the call into.
|
|
94
|
-
CometChatCalls.startSession(callToken: token, callSetting: callSettings, view: callView, onSuccess: { _ in
|
|
95
|
-
// session started
|
|
96
|
-
}, onError: { error in
|
|
97
|
-
// surface error
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
// End the call:
|
|
101
|
-
CometChatCalls.endSession() // EXISTS in v5 — do not say it doesn't
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## Step 6 — Events: `CallsEventsDelegate`, not `CometChatCallsEventsListener`
|
|
107
|
-
|
|
108
|
-
> **The listener protocol is `CallsEventsDelegate`.** `CometChatCallsEventsListener` does not exist. There is no `addEventListener(.someEnum)` granular-subscription API.
|
|
109
|
-
|
|
110
|
-
```swift
|
|
111
|
-
// v5: implement the CallsEventsDelegate protocol (callbacks are @objc optional).
|
|
112
|
-
// Prefer the TYPED forms below (swiftinterface:29-54); the NSDictionary/NSArray
|
|
113
|
-
// overloads still exist but are DEPRECATED.
|
|
114
|
-
extension MyCallController: CallsEventsDelegate {
|
|
115
|
-
func onSessionTimeout() { /* idle timeout — swiftinterface:30 */ }
|
|
116
|
-
func onCallEnded() { /* ... */ }
|
|
117
|
-
func onCallEndButtonPressed() { /* ... */ }
|
|
118
|
-
func onUserJoined(rtcUser: RTCUser) { /* swiftinterface:35 */ }
|
|
119
|
-
func onUserLeft(rtcUser: RTCUser) { /* swiftinterface:38 */ }
|
|
120
|
-
func onUserListChanged(rtcUsers: [RTCUser]) { /* swiftinterface:41 */ }
|
|
121
|
-
func onAudioModeChanged(mode: [CallAudioMode]) { /* swiftinterface:44 */ }
|
|
122
|
-
func onCallSwitchedToVideo(callSwitchedInfo: CallSwitchRequestInfo) { /* swiftinterface:47 */ }
|
|
123
|
-
func onUserMuted(rtcMutedUser: RTCMutedUser) { /* swiftinterface:50 */ }
|
|
124
|
-
func onRecordingToggled(recordingInfo: RTCRecordingInfo) { /* one callback — no Started/Stopped/Failed split — swiftinterface:53 */ }
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Register either via the builder (setDelegate, Step 4) or:
|
|
128
|
-
CometChatCalls.addCallEventListener(observerId: "my-id", delegate: self)
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
There is no `onScreenShareStarted`/`onScreenShareEnded`, no `onChatButtonClicked`, no `onActiveSpeakerUpdated`, and no layout-change callback in v5.
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Step 7 — In-call control method names
|
|
136
|
-
|
|
137
|
-
```diff
|
|
138
|
-
- CometChatCalls.muteAudio(true) // phantom
|
|
139
|
-
+ CometChatCalls.audioMuted(true) // mute
|
|
140
|
-
+ CometChatCalls.audioMuted(false) // unmute
|
|
141
|
-
|
|
142
|
-
- CometChatCalls.pauseVideo(true) // phantom
|
|
143
|
-
+ CometChatCalls.videoPaused(true)
|
|
144
|
-
+ CometChatCalls.videoPaused(false)
|
|
145
|
-
|
|
146
|
-
CometChatCalls.switchCamera() // unchanged
|
|
147
|
-
|
|
148
|
-
- CometChatCalls.setMode(mode) // setMode is on CallSettingsBuilder, not the runtime facade
|
|
149
|
-
+ // layout is fixed at session start via CallSettingsBuilder.setMode(_:) — there is no runtime setLayout
|
|
150
|
-
|
|
151
|
-
CometChatCalls.startRecording() // recording control
|
|
152
|
-
CometChatCalls.stopRecording()
|
|
153
|
-
|
|
154
|
-
CometChatCalls.enterPIPMode() // PiP — NOT CallSession.shared.enablePictureInPictureLayout
|
|
155
|
-
CometChatCalls.exitPIPMode()
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Local screen-share initiation is **not** available on the iOS Calls SDK v5 — there is no `startScreenShare`.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## Chat SDK signaling (ringing mode) — verify these too
|
|
163
|
-
|
|
164
|
-
```diff
|
|
165
|
-
- Call(receiverUid: uid, receiverType: .user, callType: .video)
|
|
166
|
-
+ Call(receiverId: uid, callType: .video, receiverType: .user) // CometChatSDK arg order
|
|
167
|
-
|
|
168
|
-
- callType: .voice
|
|
169
|
-
+ callType: .audio // CallType is .audio / .video / .audioVideo — there is no .voice
|
|
170
|
-
|
|
171
|
-
- CometChat.login(UID:..., authKey:...) // still correct; there is NO loginAsync
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Call delegate is `CometChatCallDelegate` with two-param callbacks, e.g. `onIncomingCallReceived(incomingCall:error:)`; register with `CometChat.addCallListener(_:_:)` (positional labels).
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Verification checklist
|
|
179
|
-
|
|
180
|
-
- [ ] Podfile / Package.swift updated to `~> 5.0`
|
|
181
|
-
- [ ] `pod install --repo-update` (CocoaPods) or SwiftPM resolved cleanly
|
|
182
|
-
- [ ] NO `CometChatCalls.login` anywhere — auth is per-session via `generateToken`
|
|
183
|
-
- [ ] `CallSettingsBuilder().build()` used; no `SessionSettings`/`SessionSettingsBuilder`
|
|
184
|
-
- [ ] `CallsEventsDelegate` implemented; no `CometChatCallsEventsListener`, no `addEventListener(.enum)`
|
|
185
|
-
- [ ] Lifecycle is `generateToken` → `startSession` → `endSession`; no `joinSession`, no `CallSession.shared`
|
|
186
|
-
- [ ] Controls use `audioMuted`/`videoPaused`/`enterPIPMode`/`exitPIPMode`
|
|
187
|
-
- [ ] `Call(receiverId:callType:receiverType:)` arg order; `CallType` has no `.voice`
|
|
188
|
-
- [ ] Real-device smoke: incoming call from iPhone → answer → mute → end
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## Pointers
|
|
193
|
-
|
|
194
|
-
- Canonical migration: https://www.cometchat.com/docs/calls/ios/migration-guide-v5
|
|
195
|
-
- `cometchat-ios-calls/SKILL.md` — seven hard rules (still apply post-v5)
|
|
196
|
-
- `cometchat-ios-calls/references/server-apns-pushkit.md` — PushKit setup (unchanged in v5)
|