diff --git a/api_docs/changelog.md b/api_docs/changelog.md index e58229f043..582d8b6892 100644 --- a/api_docs/changelog.md +++ b/api_docs/changelog.md @@ -20,6 +20,12 @@ format used by the Zulip server that they are interacting with. ## Changes in Zulip 10.0 +**Feature level 330** + +* [`POST /register`](/api/register-queue), [`GET /events`](/api/get-events): + Default channels data only includes channel IDs now instead of full + channel data. + **Feature level 329** * [`PATCH /realm/user_settings_defaults`](/api/update-realm-user-settings-defaults), diff --git a/web/src/state_data.ts b/web/src/state_data.ts index 3f241795a9..4a30568369 100644 --- a/web/src/state_data.ts +++ b/web/src/state_data.ts @@ -2,11 +2,7 @@ import {z} from "zod"; import {server_add_bot_schema} from "./bot_types.ts"; import {realm_default_settings_schema} from "./realm_user_settings_defaults.ts"; -import { - api_stream_subscription_schema, - never_subscribed_stream_schema, - stream_schema, -} from "./stream_types.ts"; +import {api_stream_subscription_schema, never_subscribed_stream_schema} from "./stream_types.ts"; import {group_setting_value_schema} from "./types.ts"; import {user_settings_schema} from "./user_settings.ts"; import {user_status_schema} from "./user_status_types.ts"; @@ -477,7 +473,7 @@ export const state_data_schema = z subscriptions: z.array(api_stream_subscription_schema), unsubscribed: z.array(api_stream_subscription_schema), never_subscribed: z.array(never_subscribed_stream_schema), - realm_default_streams: z.array(stream_schema), + realm_default_streams: z.array(z.number()), }) .transform((stream_data) => ({stream_data})), ) diff --git a/web/src/stream_data.ts b/web/src/stream_data.ts index 81c3a488bd..b4e06b68d5 100644 --- a/web/src/stream_data.ts +++ b/web/src/stream_data.ts @@ -698,11 +698,11 @@ export function is_web_public_by_stream_id(stream_id: number): boolean { return sub.is_web_public; } -export function set_realm_default_streams(realm_default_streams: Stream[]): void { +export function set_realm_default_streams(realm_default_streams: number[]): void { default_stream_ids.clear(); - for (const stream of realm_default_streams) { - default_stream_ids.add(stream.stream_id); + for (const stream_id of realm_default_streams) { + default_stream_ids.add(stream_id); } } diff --git a/web/tests/lib/events.cjs b/web/tests/lib/events.cjs index 5edf3c60c4..cc5559554e 100644 --- a/web/tests/lib/events.cjs +++ b/web/tests/lib/events.cjs @@ -165,7 +165,7 @@ exports.fixtures = { default_streams: { type: "default_streams", - default_streams: [streams.devel, streams.test], + default_streams: [streams.devel.stream_id, streams.test.stream_id], }, delete_message: { diff --git a/web/tests/stream_data.test.cjs b/web/tests/stream_data.test.cjs index d20a1ec41a..fe2f91884b 100644 --- a/web/tests/stream_data.test.cjs +++ b/web/tests/stream_data.test.cjs @@ -199,7 +199,7 @@ test("basics", () => { assert.equal(sub_store.maybe_get_stream_name(social.stream_id), "social"); assert.equal(sub_store.maybe_get_stream_name(42), undefined); - stream_data.set_realm_default_streams([denmark]); + stream_data.set_realm_default_streams([denmark.stream_id]); assert.ok(stream_data.is_default_stream_id(denmark.stream_id)); assert.ok(!stream_data.is_default_stream_id(social.stream_id)); assert.ok(!stream_data.is_default_stream_id(999999)); @@ -647,7 +647,7 @@ test("default_stream_names", () => { invite_only: false, }; - stream_data.set_realm_default_streams([announce, general]); + stream_data.set_realm_default_streams([announce.stream_id, general.stream_id]); stream_data.add_sub(announce); stream_data.add_sub(public_stream); stream_data.add_sub(private_stream); @@ -934,7 +934,7 @@ test("remove_default_stream", () => { }; stream_data.add_sub(remove_me); - stream_data.set_realm_default_streams([remove_me]); + stream_data.set_realm_default_streams([remove_me.stream_id]); stream_data.remove_default_stream(remove_me.stream_id); assert.ok(!stream_data.is_default_stream_id(remove_me.stream_id)); }); @@ -1093,7 +1093,7 @@ test("get_invite_stream_data", ({override}) => { override(current_user, "is_admin", true); stream_data.add_sub(orie); - stream_data.set_realm_default_streams([orie]); + stream_data.set_realm_default_streams([orie.stream_id]); const expected_list = [ { diff --git a/zerver/actions/default_streams.py b/zerver/actions/default_streams.py index 9f5cc0355b..0dcdf13871 100644 --- a/zerver/actions/default_streams.py +++ b/zerver/actions/default_streams.py @@ -4,10 +4,7 @@ from typing import Any from django.db import transaction from django.utils.translation import gettext as _ -from zerver.lib.default_streams import ( - get_default_stream_ids_for_realm, - get_default_streams_for_realm_as_dicts, -) +from zerver.lib.default_streams import get_default_stream_ids_for_realm from zerver.lib.exceptions import JsonableError from zerver.models import DefaultStream, DefaultStreamGroup, Realm, Stream from zerver.models.streams import get_default_stream_groups @@ -55,7 +52,7 @@ def lookup_default_stream_groups( def notify_default_streams(realm: Realm) -> None: event = dict( type="default_streams", - default_streams=get_default_streams_for_realm_as_dicts(realm.id), + default_streams=list(get_default_stream_ids_for_realm(realm.id)), ) send_event_on_commit(realm, event, active_non_guest_user_ids(realm.id)) diff --git a/zerver/lib/event_schema.py b/zerver/lib/event_schema.py index ddfe80d17e..b6a8ed31aa 100644 --- a/zerver/lib/event_schema.py +++ b/zerver/lib/event_schema.py @@ -228,7 +228,7 @@ check_default_stream_groups = make_checker(default_stream_groups_event) default_streams_event = event_dict_type( required_keys=[ ("type", Equals("default_streams")), - ("default_streams", ListType(DictType(default_stream_fields))), + ("default_streams", ListType(int)), ] ) check_default_streams = make_checker(default_streams_event) diff --git a/zerver/lib/events.py b/zerver/lib/events.py index 253e1b359e..08f8e97efe 100644 --- a/zerver/lib/events.py +++ b/zerver/lib/events.py @@ -20,7 +20,7 @@ from zerver.lib.alert_words import user_alert_words from zerver.lib.avatar import avatar_url from zerver.lib.bot_config import load_bot_config_template from zerver.lib.compatibility import is_outdated_server -from zerver.lib.default_streams import get_default_streams_for_realm_as_dicts +from zerver.lib.default_streams import get_default_stream_ids_for_realm from zerver.lib.exceptions import JsonableError from zerver.lib.external_accounts import get_default_external_accounts from zerver.lib.integrations import ( @@ -713,7 +713,7 @@ def fetch_initial_state_data( # doesn't have any. state["realm_default_streams"] = [] else: - state["realm_default_streams"] = get_default_streams_for_realm_as_dicts(realm.id) + state["realm_default_streams"] = list(get_default_stream_ids_for_realm(realm.id)) if want("default_stream_groups"): if settings_user.is_guest: @@ -1020,8 +1020,8 @@ def apply_event( if state["is_guest"]: state["realm_default_streams"] = [] else: - state["realm_default_streams"] = get_default_streams_for_realm_as_dicts( - user_profile.realm_id + state["realm_default_streams"] = list( + get_default_stream_ids_for_realm(user_profile.realm_id) ) for field in ["delivery_email", "email", "full_name", "is_billing_admin"]: diff --git a/zerver/openapi/zulip.yaml b/zerver/openapi/zulip.yaml index b3fb7a25c1..4b72c0d0c1 100644 --- a/zerver/openapi/zulip.yaml +++ b/zerver/openapi/zulip.yaml @@ -2085,34 +2085,19 @@ paths: default_streams: type: array description: | - An array of dictionaries where each dictionary - contains details about a single default channel. + An array of IDs of all the [default channels](/help/set-default-streams-for-new-users) + in the organization. + + **Changes**: Before Zulip 10.0 (feature level 330), + we sent array of dictionaries where each dictionary + contained details about a single default stream for + the Zulip organization. items: - $ref: "#/components/schemas/DefaultChannel" + type: integer example: { "type": "default_streams", - "default_streams": - [ - { - "name": "Scotland", - "stream_id": 3, - "is_archived": false, - "description": "Located in the United Kingdom", - "rendered_description": "

Located in the United Kingdom

", - "date_created": 1691057093, - "creator_id": 8, - "invite_only": false, - "is_web_public": false, - "stream_post_policy": 1, - "history_public_to_subscribers": true, - "first_message_id": 1, - "is_recently_active": true, - "message_retention_days": null, - "is_announcement_only": false, - "can_remove_subscribers_group": 2, - }, - ], + "default_streams": [2, 3], "id": 0, } - type: object @@ -15104,13 +15089,16 @@ paths: realm_default_streams: type: array items: - $ref: "#/components/schemas/DefaultChannel" + type: integer description: | Present if `default_streams` is present in `fetch_event_types`. - An array of dictionaries where each dictionary contains details - about a single [default channel](/help/set-default-channels-for-new-users) - for the Zulip organization. + An array of IDs of all the [default channels](/help/set-default-streams-for-new-users) + in the organization. + + **Changes**: Before Zulip 10.0 (feature level 330), we sent + array of dictionaries where each dictionary contained details + about a single default stream for the Zulip organization. realm_default_stream_groups: type: array items: