async def _generate_channel_entities(
        self, client: httpx.AsyncClient
    ) -> AsyncGenerator[ChunkEntity, None]:
        """Generate SlackChannelEntity objects from Slack using conversations.list.

        Endpoint: https://slack.com/api/conversations.list
        Available scope(s) for reading channels, groups, etc.:
            channels:read, groups:read, im:read, mpim:read
        """
        url = "https://slack.com/api/conversations.list"
        params = {"limit": 200}  # Adjust page size as desired

        while True:
            data = await self._get_with_auth(client, url, params=params)

            for channel in data.get("channels", []):
                yield SlackChannelEntity(
                    entity_id=channel["id"],
                    channel_id=channel["id"],
                    name=channel.get("name"),
                    is_channel=channel.get("is_channel", False),
                    is_group=channel.get("is_group", False),
                    is_im=channel.get("is_im", False),
                    is_mpim=channel.get("is_mpim", False),
                    is_archived=channel.get("is_archived", False),
                    created=channel.get("created"),
                    creator=channel.get("creator"),
                    members=channel.get("members", []),
                    topic=channel.get("topic"),
                    purpose=channel.get("purpose"),
                )

            # Slack pagination uses next_cursor in response_metadata
            next_cursor = data.get("response_metadata", {}).get("next_cursor")
            if not next_cursor:
                break
            params["cursor"] = next_cursor
Generate SlackChannelEntity objects from Slack using conversations.list.

        Endpoint: https://slack.com/api/conversations.list
        Available scope(s) for reading channels, groups, etc.:
            channels:read, groups:read, im:read, mpim:read
        
backend/airweave/platform/sources/slack.py