From 364409f7b278bcc753d578818dff737f843d4265 Mon Sep 17 00:00:00 2001 From: Nick Karpenko Date: Wed, 29 Oct 2025 11:31:57 -0400 Subject: [PATCH 1/2] [FEEDS-702] Gen new openapi spec to include `restrict_replies` field for activities --- src/gen/feeds/FeedsApi.ts | 5 +- src/gen/model-decoders/decoders.ts | 30 +++++++- src/gen/models/index.ts | 107 ++++++++++++++++++++++++++--- 3 files changed, 127 insertions(+), 15 deletions(-) diff --git a/src/gen/feeds/FeedsApi.ts b/src/gen/feeds/FeedsApi.ts index 8279783..eb50ae1 100644 --- a/src/gen/feeds/FeedsApi.ts +++ b/src/gen/feeds/FeedsApi.ts @@ -141,6 +141,7 @@ export class FeedsApi { id: request?.id, parent_id: request?.parent_id, poll_id: request?.poll_id, + restrict_replies: request?.restrict_replies, text: request?.text, user_id: request?.user_id, visibility: request?.visibility, @@ -342,9 +343,6 @@ export class FeedsApi { }; const body = { hide: request?.hide, - mute_user: request?.mute_user, - reason: request?.reason, - report: request?.report, show_less: request?.show_less, show_more: request?.show_more, user_id: request?.user_id, @@ -588,6 +586,7 @@ export class FeedsApi { const body = { expires_at: request?.expires_at, poll_id: request?.poll_id, + restrict_replies: request?.restrict_replies, text: request?.text, user_id: request?.user_id, visibility: request?.visibility, diff --git a/src/gen/model-decoders/decoders.ts b/src/gen/model-decoders/decoders.ts index fdcf3c3..063a24e 100644 --- a/src/gen/model-decoders/decoders.ts +++ b/src/gen/model-decoders/decoders.ts @@ -87,6 +87,17 @@ decoders.ActivityDeletedEvent = (input?: Record) => { return decode(typeMappings, input); }; +decoders.ActivityFeedbackEvent = (input?: Record) => { + const typeMappings: TypeMapping = { + created_at: { type: 'DatetimeType', isSingle: true }, + + received_at: { type: 'DatetimeType', isSingle: true }, + + user: { type: 'UserResponseCommonFields', isSingle: true }, + }; + return decode(typeMappings, input); +}; + decoders.ActivityMarkEvent = (input?: Record) => { const typeMappings: TypeMapping = { created_at: { type: 'DatetimeType', isSingle: true }, @@ -2009,6 +2020,23 @@ decoders.FeedResponse = (input?: Record) => { return decode(typeMappings, input); }; +decoders.FeedSuggestionResponse = (input?: Record) => { + const typeMappings: TypeMapping = { + created_at: { type: 'DatetimeType', isSingle: true }, + + updated_at: { type: 'DatetimeType', isSingle: true }, + + created_by: { type: 'UserResponse', isSingle: true }, + + deleted_at: { type: 'DatetimeType', isSingle: true }, + + own_follows: { type: 'FollowResponse', isSingle: false }, + + own_membership: { type: 'FeedMemberResponse', isSingle: true }, + }; + return decode(typeMappings, input); +}; + decoders.FeedUpdatedEvent = (input?: Record) => { const typeMappings: TypeMapping = { created_at: { type: 'DatetimeType', isSingle: true }, @@ -2293,7 +2321,7 @@ decoders.GetFeedViewResponse = (input?: Record) => { decoders.GetFollowSuggestionsResponse = (input?: Record) => { const typeMappings: TypeMapping = { - suggestions: { type: 'FeedResponse', isSingle: false }, + suggestions: { type: 'FeedSuggestionResponse', isSingle: false }, }; return decode(typeMappings, input); }; diff --git a/src/gen/models/index.ts b/src/gen/models/index.ts index a375cfd..9a77a19 100644 --- a/src/gen/models/index.ts +++ b/src/gen/models/index.ts @@ -278,14 +278,36 @@ export interface ActivityDeletedEvent { user?: UserResponseCommonFields; } -export interface ActivityFeedbackRequest { - hide?: boolean; +export interface ActivityFeedbackEvent { + created_at: Date; - mute_user?: boolean; + activity_feedback: ActivityFeedbackEventPayload; - reason?: string; + custom: Record; - report?: boolean; + type: string; + + received_at?: Date; + + user?: UserResponseCommonFields; +} + +export interface ActivityFeedbackEventPayload { + action: string; + + activity_id: string; + + created_at: Date; + + updated_at: Date; + + value: string; + + user: UserResponse; +} + +export interface ActivityFeedbackRequest { + hide?: boolean; show_less?: boolean; @@ -477,6 +499,8 @@ export interface ActivityRequest { poll_id?: string; + restrict_replies?: 'everyone' | 'people_i_follow' | 'nobody'; + text?: string; user_id?: string; @@ -559,6 +583,8 @@ export interface ActivityResponse { is_watched?: boolean; + restrict_replies?: string; + text?: string; visibility_tag?: string; @@ -587,6 +613,8 @@ export interface ActivitySelectorConfig { cutoff_time?: string; + cutoff_window?: string; + min_popularity?: number; sort?: SortParamRequest[]; @@ -599,6 +627,8 @@ export interface ActivitySelectorConfigResponse { cutoff_time?: Date; + cutoff_window?: string; + min_popularity?: number; sort?: SortParamRequest[]; @@ -655,6 +685,8 @@ export interface AddActivityRequest { poll_id?: string; + restrict_replies?: 'everyone' | 'people_i_follow' | 'nobody'; + text?: string; user_id?: string; @@ -2428,15 +2460,15 @@ export interface CallTranscriptionStoppedEvent { } export interface CallType { - app_pk: number; + app: number; created_at: Date; - external_storage: string; + id: number; name: string; - pk: number; + recording_external_storage: string; updated_at: Date; @@ -5014,7 +5046,7 @@ export interface FeedGroup { default_visibility: string; - id: string; + group_id: string; updated_at: Date; @@ -5297,6 +5329,52 @@ export interface FeedResponse { own_membership?: FeedMemberResponse; } +export interface FeedSuggestionResponse { + created_at: Date; + + description: string; + + feed: string; + + follower_count: number; + + following_count: number; + + group_id: string; + + id: string; + + member_count: number; + + name: string; + + pin_count: number; + + updated_at: Date; + + created_by: UserResponse; + + deleted_at?: Date; + + reason?: string; + + recommendation_score?: number; + + visibility?: string; + + filter_tags?: string[]; + + own_capabilities?: FeedOwnCapability[]; + + own_follows?: FollowResponse[]; + + algorithm_scores?: Record; + + custom?: Record; + + own_membership?: FeedMemberResponse; +} + export interface FeedUpdatedEvent { created_at: Date; @@ -6030,7 +6108,9 @@ export interface GetFeedsRateLimitsResponse { export interface GetFollowSuggestionsResponse { duration: string; - suggestions: FeedResponse[]; + suggestions: FeedSuggestionResponse[]; + + algorithm_used?: string; } export interface GetImportResponse { @@ -8878,6 +8958,8 @@ export interface PushProvider { huawei_app_secret?: string; + huawei_host?: string; + xiaomi_app_secret?: string; xiaomi_package_name?: string; @@ -11988,6 +12070,8 @@ export interface UpdateActivityRequest { poll_id?: string; + restrict_replies?: 'everyone' | 'people_i_follow' | 'nobody'; + text?: string; user_id?: string; @@ -12978,7 +13062,7 @@ export interface UpsertPushTemplateRequest { | 'feeds.follow.created' | 'feeds.notification_feed.updated'; - push_provider_type: 'firebase' | 'apn'; + push_provider_type: 'firebase' | 'apn' | 'huawei' | 'xiaomi'; enable_push?: boolean; @@ -13701,6 +13785,7 @@ export type WebhookEvent = | ({ type: 'export.users.success' } & AsyncExportUsersEvent) | ({ type: 'feeds.activity.added' } & ActivityAddedEvent) | ({ type: 'feeds.activity.deleted' } & ActivityDeletedEvent) + | ({ type: 'feeds.activity.feedback' } & ActivityFeedbackEvent) | ({ type: 'feeds.activity.marked' } & ActivityMarkEvent) | ({ type: 'feeds.activity.pinned' } & ActivityPinnedEvent) | ({ type: 'feeds.activity.reaction.added' } & ActivityReactionAddedEvent) From 4d82b36e814231c9147589bb9f0dff0342c80dbc Mon Sep 17 00:00:00 2001 From: Nick Karpenko Date: Wed, 29 Oct 2025 14:04:01 -0400 Subject: [PATCH 2/2] [FEEDS-702] regen openapi spec for CI testing --- src/gen/model-decoders/decoders.ts | 60 ++++++++-- src/gen/models/index.ts | 170 +++++++++++++++++++++++++--- src/gen/moderation/ModerationApi.ts | 2 + 3 files changed, 205 insertions(+), 27 deletions(-) diff --git a/src/gen/model-decoders/decoders.ts b/src/gen/model-decoders/decoders.ts index 063a24e..787e3db 100644 --- a/src/gen/model-decoders/decoders.ts +++ b/src/gen/model-decoders/decoders.ts @@ -1272,7 +1272,7 @@ decoders.ChannelMember = (input?: Record) => { pinned_at: { type: 'DatetimeType', isSingle: true }, - user: { type: 'UserResponse', isSingle: true }, + user: { type: 'User', isSingle: true }, }; return decode(typeMappings, input); }; @@ -1288,6 +1288,29 @@ decoders.ChannelMemberLookup = (input?: Record) => { return decode(typeMappings, input); }; +decoders.ChannelMemberResponse = (input?: Record) => { + const typeMappings: TypeMapping = { + created_at: { type: 'DatetimeType', isSingle: true }, + + updated_at: { type: 'DatetimeType', isSingle: true }, + + archived_at: { type: 'DatetimeType', isSingle: true }, + + ban_expires: { type: 'DatetimeType', isSingle: true }, + + deleted_at: { type: 'DatetimeType', isSingle: true }, + + invite_accepted_at: { type: 'DatetimeType', isSingle: true }, + + invite_rejected_at: { type: 'DatetimeType', isSingle: true }, + + pinned_at: { type: 'DatetimeType', isSingle: true }, + + user: { type: 'UserResponse', isSingle: true }, + }; + return decode(typeMappings, input); +}; + decoders.ChannelMute = (input?: Record) => { const typeMappings: TypeMapping = { created_at: { type: 'DatetimeType', isSingle: true }, @@ -1333,7 +1356,7 @@ decoders.ChannelResponse = (input?: Record) => { truncated_at: { type: 'DatetimeType', isSingle: true }, - members: { type: 'ChannelMember', isSingle: false }, + members: { type: 'ChannelMemberResponse', isSingle: false }, config: { type: 'ChannelConfigWithInfo', isSingle: true }, @@ -1346,7 +1369,7 @@ decoders.ChannelResponse = (input?: Record) => { decoders.ChannelStateResponse = (input?: Record) => { const typeMappings: TypeMapping = { - members: { type: 'ChannelMember', isSingle: false }, + members: { type: 'ChannelMemberResponse', isSingle: false }, messages: { type: 'MessageResponse', isSingle: false }, @@ -1371,7 +1394,7 @@ decoders.ChannelStateResponse = (input?: Record) => { draft: { type: 'DraftResponse', isSingle: true }, - membership: { type: 'ChannelMember', isSingle: true }, + membership: { type: 'ChannelMemberResponse', isSingle: true }, push_preferences: { type: 'ChannelPushPreferences', isSingle: true }, }; @@ -1380,7 +1403,7 @@ decoders.ChannelStateResponse = (input?: Record) => { decoders.ChannelStateResponseFields = (input?: Record) => { const typeMappings: TypeMapping = { - members: { type: 'ChannelMember', isSingle: false }, + members: { type: 'ChannelMemberResponse', isSingle: false }, messages: { type: 'MessageResponse', isSingle: false }, @@ -1405,7 +1428,7 @@ decoders.ChannelStateResponseFields = (input?: Record) => { draft: { type: 'DraftResponse', isSingle: true }, - membership: { type: 'ChannelMember', isSingle: true }, + membership: { type: 'ChannelMemberResponse', isSingle: true }, push_preferences: { type: 'ChannelPushPreferences', isSingle: true }, }; @@ -2627,7 +2650,7 @@ decoders.MemberUpdatedEvent = (input?: Record) => { decoders.MembersResponse = (input?: Record) => { const typeMappings: TypeMapping = { - members: { type: 'ChannelMember', isSingle: false }, + members: { type: 'ChannelMemberResponse', isSingle: false }, }; return decode(typeMappings, input); }; @@ -2822,6 +2845,8 @@ decoders.MessageResponse = (input?: Record) => { draft: { type: 'DraftResponse', isSingle: true }, + member: { type: 'ChannelMemberResponse', isSingle: true }, + pinned_by: { type: 'UserResponse', isSingle: true }, poll: { type: 'PollResponseData', isSingle: true }, @@ -2911,6 +2936,8 @@ decoders.MessageWithChannelResponse = (input?: Record) => { draft: { type: 'DraftResponse', isSingle: true }, + member: { type: 'ChannelMemberResponse', isSingle: true }, + pinned_by: { type: 'UserResponse', isSingle: true }, poll: { type: 'PollResponseData', isSingle: true }, @@ -3770,6 +3797,10 @@ decoders.ReviewQueueItemResponse = (input?: Record) => { feeds_v2_reaction: { type: 'Reaction', isSingle: true }, + feeds_v3_activity: { type: 'ActivityResponse', isSingle: true }, + + feeds_v3_comment: { type: 'CommentResponse', isSingle: true }, + message: { type: 'MessageResponse', isSingle: true }, reaction: { type: 'Reaction', isSingle: true }, @@ -3836,6 +3867,8 @@ decoders.SearchResultMessage = (input?: Record) => { draft: { type: 'DraftResponse', isSingle: true }, + member: { type: 'ChannelMemberResponse', isSingle: true }, + pinned_by: { type: 'UserResponse', isSingle: true }, poll: { type: 'PollResponseData', isSingle: true }, @@ -4218,6 +4251,8 @@ decoders.UpdateCallTypeResponse = (input?: Record) => { decoders.UpdateChannelPartialResponse = (input?: Record) => { const typeMappings: TypeMapping = { + members: { type: 'ChannelMemberResponse', isSingle: false }, + channel: { type: 'ChannelResponse', isSingle: true }, }; return decode(typeMappings, input); @@ -4225,7 +4260,7 @@ decoders.UpdateChannelPartialResponse = (input?: Record) => { decoders.UpdateChannelResponse = (input?: Record) => { const typeMappings: TypeMapping = { - members: { type: 'ChannelMember', isSingle: false }, + members: { type: 'ChannelMemberResponse', isSingle: false }, channel: { type: 'ChannelResponse', isSingle: true }, @@ -4294,6 +4329,13 @@ decoders.UpdateFollowResponse = (input?: Record) => { return decode(typeMappings, input); }; +decoders.UpdateMemberPartialResponse = (input?: Record) => { + const typeMappings: TypeMapping = { + channel_member: { type: 'ChannelMemberResponse', isSingle: true }, + }; + return decode(typeMappings, input); +}; + decoders.UpdateMembershipLevelResponse = (input?: Record) => { const typeMappings: TypeMapping = { membership_level: { type: 'MembershipLevelResponse', isSingle: true }, @@ -4623,7 +4665,7 @@ decoders.WSEvent = (input?: Record) => { me: { type: 'OwnUserResponse', isSingle: true }, - member: { type: 'ChannelMember', isSingle: true }, + member: { type: 'ChannelMemberResponse', isSingle: true }, message: { type: 'MessageResponse', isSingle: true }, diff --git a/src/gen/models/index.ts b/src/gen/models/index.ts index 9a77a19..16b6e61 100644 --- a/src/gen/models/index.ts +++ b/src/gen/models/index.ts @@ -537,6 +537,8 @@ export interface ActivityResponse { reaction_count: number; + restrict_replies: string; + score: number; share_count: number; @@ -583,7 +585,7 @@ export interface ActivityResponse { is_watched?: boolean; - restrict_replies?: string; + moderation_action?: string; text?: string; @@ -1330,6 +1332,10 @@ export interface BanResponse { user?: UserResponse; } +export interface BlockActionRequest { + reason?: string; +} + export interface BlockListConfig { async?: boolean; @@ -2335,6 +2341,22 @@ export interface CallStateResponseFields { call: CallResponse; } +export interface CallStatsLocation { + accuracy_radius_meters?: number; + + city?: string; + + continent?: string; + + country?: string; + + latitude?: number; + + longitude?: number; + + subdivision?: string; +} + export interface CallStatsParticipant { user_id: string; @@ -2364,15 +2386,33 @@ export interface CallStatsParticipantSession { published_tracks: PublishedTrackFlags; + browser?: string; + + browser_version?: string; + cq_score?: number; + current_ip?: string; + + current_sfu?: string; + + distance_to_sfu_kilometers?: number; + ended_at?: Date; publisher_type?: string; + sdk?: string; + + sdk_version?: string; + started_at?: Date; unified_session_id?: string; + + webrtc_version?: string; + + location?: CallStatsLocation; } export interface CallStatsReportReadyEvent { @@ -2962,9 +3002,9 @@ export interface ChannelInput { truncated_by_id?: string; - invites?: ChannelMember[]; + invites?: ChannelMemberRequest[]; - members?: ChannelMember[]; + members?: ChannelMemberRequest[]; config_overrides?: ChannelConfig; @@ -2980,6 +3020,8 @@ export interface ChannelMember { created_at: Date; + is_global_banned: boolean; + notifications_muted: boolean; shadow_banned: boolean; @@ -2992,8 +3034,12 @@ export interface ChannelMember { ban_expires?: Date; + blocked?: boolean; + deleted_at?: Date; + hidden?: boolean; + invite_accepted_at?: Date; invite_rejected_at?: Date; @@ -3004,15 +3050,15 @@ export interface ChannelMember { pinned_at?: Date; - role?: 'member' | 'moderator' | 'admin' | 'owner'; - status?: string; user_id?: string; deleted_messages?: string[]; - user?: UserResponse; + channel?: DenormalizedChannelFields; + + user?: User; } export interface ChannelMemberLookup { @@ -3033,8 +3079,56 @@ export interface ChannelMemberLookup { pinned_at?: Date; } +export interface ChannelMemberRequest { + user_id: string; + + channel_role?: string; + + custom?: Record; + + user?: UserResponse; +} + export interface ChannelMemberResponse { + banned: boolean; + channel_role: string; + + created_at: Date; + + notifications_muted: boolean; + + shadow_banned: boolean; + + updated_at: Date; + + custom: Record; + + archived_at?: Date; + + ban_expires?: Date; + + deleted_at?: Date; + + invite_accepted_at?: Date; + + invite_rejected_at?: Date; + + invited?: boolean; + + is_moderator?: boolean; + + pinned_at?: Date; + + role?: 'member' | 'moderator' | 'admin' | 'owner'; + + status?: string; + + user_id?: string; + + deleted_messages?: string[]; + + user?: UserResponse; } export interface ChannelMessages { @@ -3156,7 +3250,7 @@ export interface ChannelResponse { truncated_at?: Date; - members?: ChannelMember[]; + members?: ChannelMemberResponse[]; own_capabilities?: ChannelOwnCapability[]; @@ -3170,7 +3264,7 @@ export interface ChannelResponse { export interface ChannelStateResponse { duration: string; - members: ChannelMember[]; + members: ChannelMemberResponse[]; messages: MessageResponse[]; @@ -3196,13 +3290,13 @@ export interface ChannelStateResponse { draft?: DraftResponse; - membership?: ChannelMember; + membership?: ChannelMemberResponse; push_preferences?: ChannelPushPreferences; } export interface ChannelStateResponseFields { - members: ChannelMember[]; + members: ChannelMemberResponse[]; messages: MessageResponse[]; @@ -3228,7 +3322,7 @@ export interface ChannelStateResponseFields { draft?: DraftResponse; - membership?: ChannelMember; + membership?: ChannelMemberResponse; push_preferences?: ChannelPushPreferences; } @@ -4465,6 +4559,12 @@ export interface DeleteCommentReactionResponse { reaction: FeedsReactionResponse; } +export interface DeleteCommentRequest { + hard_delete?: boolean; + + reason?: string; +} + export interface DeleteCommentResponse { duration: string; @@ -4601,6 +4701,30 @@ export interface DeliveryReceiptsResponse { enabled?: boolean; } +export interface DenormalizedChannelFields { + created_at?: string; + + created_by_id?: string; + + disabled?: boolean; + + frozen?: boolean; + + id?: string; + + last_message_at?: string; + + member_count?: number; + + team?: string; + + type?: string; + + updated_at?: string; + + custom?: Record; +} + export interface Device { created_at: Date; @@ -7086,7 +7210,7 @@ export interface MemberUpdatedEvent { export interface MembersResponse { duration: string; - members: ChannelMember[]; + members: ChannelMemberResponse[]; } export interface MembershipLevelResponse { @@ -9554,7 +9678,7 @@ export interface QueryMembersPayload { user_id?: string; - members?: ChannelMember[]; + members?: ChannelMemberRequest[]; sort?: SortParamRequest[]; @@ -10508,6 +10632,10 @@ export interface ReviewQueueItemResponse { feeds_v2_reaction?: Reaction; + feeds_v3_activity?: ActivityResponse; + + feeds_v3_comment?: CommentResponse; + message?: MessageResponse; moderation_payload?: ModerationPayload; @@ -11336,6 +11464,7 @@ export interface SubmitActionRequest { | 'mark_reviewed' | 'delete_message' | 'delete_activity' + | 'delete_comment' | 'delete_reaction' | 'ban' | 'custom' @@ -11343,6 +11472,7 @@ export interface SubmitActionRequest { | 'restore' | 'delete_user' | 'unblock' + | 'block' | 'shadow_block' | 'unmask' | 'kick_user' @@ -11354,10 +11484,14 @@ export interface SubmitActionRequest { ban?: BanActionRequest; + block?: BlockActionRequest; + custom?: CustomActionRequest; delete_activity?: DeleteActivityRequest; + delete_comment?: DeleteCommentRequest; + delete_message?: DeleteMessageRequest; delete_reaction?: DeleteReactionRequest; @@ -12336,15 +12470,15 @@ export interface UpdateChannelRequest { user_id?: string; - add_members?: ChannelMember[]; + add_members?: ChannelMemberRequest[]; add_moderators?: string[]; - assign_roles?: ChannelMember[]; + assign_roles?: ChannelMemberRequest[]; demote_moderators?: string[]; - invites?: ChannelMember[]; + invites?: ChannelMemberRequest[]; remove_members?: string[]; @@ -12358,7 +12492,7 @@ export interface UpdateChannelRequest { export interface UpdateChannelResponse { duration: string; - members: ChannelMember[]; + members: ChannelMemberResponse[]; channel?: ChannelResponse; @@ -13674,7 +13808,7 @@ export interface WSEvent { me?: OwnUserResponse; - member?: ChannelMember; + member?: ChannelMemberResponse; message?: MessageResponse; diff --git a/src/gen/moderation/ModerationApi.ts b/src/gen/moderation/ModerationApi.ts index 3a7c083..1ff0dfc 100644 --- a/src/gen/moderation/ModerationApi.ts +++ b/src/gen/moderation/ModerationApi.ts @@ -584,8 +584,10 @@ export class ModerationApi { item_id: request?.item_id, user_id: request?.user_id, ban: request?.ban, + block: request?.block, custom: request?.custom, delete_activity: request?.delete_activity, + delete_comment: request?.delete_comment, delete_message: request?.delete_message, delete_reaction: request?.delete_reaction, delete_user: request?.delete_user,