-- This file is part of the Wire Server implementation.
--
-- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com>
--
-- This program is free software: you can redistribute it and/or modify it under
-- the terms of the GNU Affero General Public License as published by the Free
-- Software Foundation, either version 3 of the License, or (at your option) any
-- later version.
--
-- This program is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
-- details.
--
-- You should have received a copy of the GNU Affero General Public License along
-- with this program. If not, see <https://www.gnu.org/licenses/>.

module Galley.API.Public.TeamMember where

import Galley.API.Teams
import Galley.App
import Wire.API.Routes.API
import Wire.API.Routes.Public.Galley.TeamMember

teamMemberAPI :: API TeamMemberAPI GalleyEffects
teamMemberAPI :: API TeamMemberAPI GalleyEffects
teamMemberAPI =
  forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"get-team-members" ServerT
  (Summary "Get team members"
   :> (CanThrow 'NotATeamMember
       :> (ZLocalUser
           :> ("teams"
               :> (Capture "tid" TeamId
                   :> ("members"
                       :> (QueryParam'
                             '[Optional, Strict, Description "Maximum results to be returned"]
                             "maxResults"
                             (Range 1 HardTruncationLimit Int32)
                           :> (QueryParam'
                                 '[Optional, Strict,
                                   Description
                                     "Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
                                 "pagingState"
                                 TeamMembersPagingState
                               :> Get '[JSON] TeamMembersPage))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get team members"
            :> (CanThrow 'NotATeamMember
                :> (ZLocalUser
                    :> ("teams"
                        :> (Capture "tid" TeamId
                            :> ("members"
                                :> (QueryParam'
                                      '[Optional, Strict,
                                        Description "Maximum results to be returned"]
                                      "maxResults"
                                      (Range 1 HardTruncationLimit Int32)
                                    :> (QueryParam'
                                          '[Optional, Strict,
                                            Description
                                              "Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
                                          "pagingState"
                                          TeamMembersPagingState
                                        :> Get '[JSON] TeamMembersPage)))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> TeamId
-> Maybe (Range 1 HardTruncationLimit Int32)
-> Maybe TeamMembersPagingState
-> Sem
     '[ErrorS 'NotATeamMember, BrigAccess, SparAccess,
       NotificationSubsystem, GundeckAPIAccess, Rpc, ExternalAccess,
       FederatorAccess, BackendNotificationQueueAccess, BotAccess,
       FireAndForget, ClientStore, CodeStore, ProposalStore,
       ConversationStore, SubConversationStore, Random,
       CustomBackendStore, TeamFeatureStore, LegalHoldStore, MemberStore,
       SearchVisibilityStore, ServiceStore, TeamNotificationStore,
       TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     TeamMembersPage
forall (r :: EffectRow).
(Member (ErrorS 'NotATeamMember) r, Member TeamStore r,
 Member (TeamMemberStore CassandraPaging) r) =>
Local UserId
-> TeamId
-> Maybe (Range 1 HardTruncationLimit Int32)
-> Maybe TeamMembersPagingState
-> Sem r TeamMembersPage
getTeamMembers
    API
  (Named
     "get-team-members"
     (Summary "Get team members"
      :> (CanThrow 'NotATeamMember
          :> (ZLocalUser
              :> ("teams"
                  :> (Capture "tid" TeamId
                      :> ("members"
                          :> (QueryParam'
                                '[Optional, Strict, Description "Maximum results to be returned"]
                                "maxResults"
                                (Range 1 HardTruncationLimit Int32)
                              :> (QueryParam'
                                    '[Optional, Strict,
                                      Description
                                        "Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
                                    "pagingState"
                                    TeamMembersPagingState
                                  :> Get '[JSON] TeamMembersPage)))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "get-team-member"
        (Summary "Get single team member"
         :> (CanThrow 'NotATeamMember
             :> (CanThrow 'TeamMemberNotFound
                 :> (ZLocalUser
                     :> ("teams"
                         :> (Capture "tid" TeamId
                             :> ("members"
                                 :> (Capture "uid" UserId :> Get '[JSON] TeamMemberOptPerms))))))))
      :<|> (Named
              "get-team-members-by-ids"
              (Summary "Get team members by user id list"
               :> (Description
                     "The `has_more` field in the response body is always `false`."
                   :> (CanThrow 'NotATeamMember
                       :> (CanThrow 'BulkGetMemberLimitExceeded
                           :> (ZLocalUser
                               :> ("teams"
                                   :> (Capture "tid" TeamId
                                       :> ("get-members-by-ids-using-post"
                                           :> (QueryParam'
                                                 '[Optional, Strict,
                                                   Description "Maximum results to be returned"]
                                                 "maxResults"
                                                 (Range 1 HardTruncationLimit Int32)
                                               :> (ReqBody '[JSON] UserIdList
                                                   :> Post '[JSON] TeamMemberListOptPerms))))))))))
            :<|> (Named
                    "add-team-member"
                    (Summary "Add a new team member"
                     :> (Until 'V4
                         :> (CanThrow 'InvalidPermissions
                             :> (CanThrow 'NoAddToBinding
                                 :> (CanThrow 'NotATeamMember
                                     :> (CanThrow 'NotConnected
                                         :> (CanThrow OperationDenied
                                             :> (CanThrow 'TeamNotFound
                                                 :> (CanThrow 'TooManyTeamMembers
                                                     :> (CanThrow 'TooManyTeamAdmins
                                                         :> (CanThrow 'UserBindingExists
                                                             :> (CanThrow
                                                                   'TooManyTeamMembersOnTeamWithLegalhold
                                                                 :> (ZLocalUser
                                                                     :> (ZConn
                                                                         :> ("teams"
                                                                             :> (Capture
                                                                                   "tid" TeamId
                                                                                 :> ("members"
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           NewTeamMember
                                                                                         :> MultiVerb
                                                                                              'POST
                                                                                              '[JSON]
                                                                                              '[RespondEmpty
                                                                                                  200
                                                                                                  ""]
                                                                                              ()))))))))))))))))))
                  :<|> (Named
                          "delete-team-member"
                          (Summary "Remove an existing team member"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow 'AccessDenied
                                   :> (CanThrow 'TeamMemberNotFound
                                       :> (CanThrow 'TeamNotFound
                                           :> (CanThrow 'NotATeamMember
                                               :> (CanThrow OperationDenied
                                                   :> (ZLocalUser
                                                       :> (ZConn
                                                           :> ("teams"
                                                               :> (Capture "tid" TeamId
                                                                   :> ("members"
                                                                       :> (Capture "uid" UserId
                                                                           :> (ReqBody
                                                                                 '[JSON]
                                                                                 TeamMemberDeleteData
                                                                               :> MultiVerb
                                                                                    'DELETE
                                                                                    '[JSON]
                                                                                    TeamMemberDeleteResultResponseType
                                                                                    TeamMemberDeleteResult))))))))))))))
                        :<|> (Named
                                "delete-non-binding-team-member"
                                (Summary "Remove an existing team member"
                                 :> (Until 'V4
                                     :> (CanThrow AuthenticationError
                                         :> (CanThrow 'AccessDenied
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'TeamNotFound
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (ZLocalUser
                                                                 :> (ZConn
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("members"
                                                                                 :> (Capture
                                                                                       "uid" UserId
                                                                                     :> MultiVerb
                                                                                          'DELETE
                                                                                          '[JSON]
                                                                                          TeamMemberDeleteResultResponseType
                                                                                          TeamMemberDeleteResult))))))))))))))
                              :<|> (Named
                                      "update-team-member"
                                      (Summary "Update an existing team member"
                                       :> (CanThrow 'AccessDenied
                                           :> (CanThrow 'InvalidPermissions
                                               :> (CanThrow 'TeamNotFound
                                                   :> (CanThrow 'TeamMemberNotFound
                                                       :> (CanThrow 'TooManyTeamAdmins
                                                           :> (CanThrow 'NotATeamMember
                                                               :> (CanThrow OperationDenied
                                                                   :> (ZLocalUser
                                                                       :> (ZConn
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("members"
                                                                                       :> (ReqBody
                                                                                             '[JSON]
                                                                                             NewTeamMember
                                                                                           :> MultiVerb
                                                                                                'PUT
                                                                                                '[JSON]
                                                                                                '[RespondEmpty
                                                                                                    200
                                                                                                    ""]
                                                                                                ()))))))))))))))
                                    :<|> Named
                                           "get-team-members-csv"
                                           (Summary "Get all members of the team as a CSV file"
                                            :> (CanThrow 'AccessDenied
                                                :> (Description
                                                      "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                                    :> (ZLocalUser
                                                        :> ("teams"
                                                            :> (Capture "tid" TeamId
                                                                :> ("members"
                                                                    :> ("csv"
                                                                        :> LowLevelStream
                                                                             'GET
                                                                             200
                                                                             '[ '("Content-Disposition",
                                                                                  "attachment; filename=\"wire_team_members.csv\"")]
                                                                             "CSV of team members"
                                                                             CSV))))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "get-team-members"
        (Summary "Get team members"
         :> (CanThrow 'NotATeamMember
             :> (ZLocalUser
                 :> ("teams"
                     :> (Capture "tid" TeamId
                         :> ("members"
                             :> (QueryParam'
                                   '[Optional, Strict, Description "Maximum results to be returned"]
                                   "maxResults"
                                   (Range 1 HardTruncationLimit Int32)
                                 :> (QueryParam'
                                       '[Optional, Strict,
                                         Description
                                           "Optional, when not specified, the first page will be returned.Every returned page contains a `pagingState`, this should be supplied to retrieve the next page."]
                                       "pagingState"
                                       TeamMembersPagingState
                                     :> Get '[JSON] TeamMembersPage))))))))
      :<|> (Named
              "get-team-member"
              (Summary "Get single team member"
               :> (CanThrow 'NotATeamMember
                   :> (CanThrow 'TeamMemberNotFound
                       :> (ZLocalUser
                           :> ("teams"
                               :> (Capture "tid" TeamId
                                   :> ("members"
                                       :> (Capture "uid" UserId
                                           :> Get '[JSON] TeamMemberOptPerms))))))))
            :<|> (Named
                    "get-team-members-by-ids"
                    (Summary "Get team members by user id list"
                     :> (Description
                           "The `has_more` field in the response body is always `false`."
                         :> (CanThrow 'NotATeamMember
                             :> (CanThrow 'BulkGetMemberLimitExceeded
                                 :> (ZLocalUser
                                     :> ("teams"
                                         :> (Capture "tid" TeamId
                                             :> ("get-members-by-ids-using-post"
                                                 :> (QueryParam'
                                                       '[Optional, Strict,
                                                         Description
                                                           "Maximum results to be returned"]
                                                       "maxResults"
                                                       (Range 1 HardTruncationLimit Int32)
                                                     :> (ReqBody '[JSON] UserIdList
                                                         :> Post
                                                              '[JSON]
                                                              TeamMemberListOptPerms))))))))))
                  :<|> (Named
                          "add-team-member"
                          (Summary "Add a new team member"
                           :> (Until 'V4
                               :> (CanThrow 'InvalidPermissions
                                   :> (CanThrow 'NoAddToBinding
                                       :> (CanThrow 'NotATeamMember
                                           :> (CanThrow 'NotConnected
                                               :> (CanThrow OperationDenied
                                                   :> (CanThrow 'TeamNotFound
                                                       :> (CanThrow 'TooManyTeamMembers
                                                           :> (CanThrow 'TooManyTeamAdmins
                                                               :> (CanThrow 'UserBindingExists
                                                                   :> (CanThrow
                                                                         'TooManyTeamMembersOnTeamWithLegalhold
                                                                       :> (ZLocalUser
                                                                           :> (ZConn
                                                                               :> ("teams"
                                                                                   :> (Capture
                                                                                         "tid"
                                                                                         TeamId
                                                                                       :> ("members"
                                                                                           :> (ReqBody
                                                                                                 '[JSON]
                                                                                                 NewTeamMember
                                                                                               :> MultiVerb
                                                                                                    'POST
                                                                                                    '[JSON]
                                                                                                    '[RespondEmpty
                                                                                                        200
                                                                                                        ""]
                                                                                                    ()))))))))))))))))))
                        :<|> (Named
                                "delete-team-member"
                                (Summary "Remove an existing team member"
                                 :> (CanThrow AuthenticationError
                                     :> (CanThrow 'AccessDenied
                                         :> (CanThrow 'TeamMemberNotFound
                                             :> (CanThrow 'TeamNotFound
                                                 :> (CanThrow 'NotATeamMember
                                                     :> (CanThrow OperationDenied
                                                         :> (ZLocalUser
                                                             :> (ZConn
                                                                 :> ("teams"
                                                                     :> (Capture "tid" TeamId
                                                                         :> ("members"
                                                                             :> (Capture
                                                                                   "uid" UserId
                                                                                 :> (ReqBody
                                                                                       '[JSON]
                                                                                       TeamMemberDeleteData
                                                                                     :> MultiVerb
                                                                                          'DELETE
                                                                                          '[JSON]
                                                                                          TeamMemberDeleteResultResponseType
                                                                                          TeamMemberDeleteResult))))))))))))))
                              :<|> (Named
                                      "delete-non-binding-team-member"
                                      (Summary "Remove an existing team member"
                                       :> (Until 'V4
                                           :> (CanThrow AuthenticationError
                                               :> (CanThrow 'AccessDenied
                                                   :> (CanThrow 'TeamMemberNotFound
                                                       :> (CanThrow 'TeamNotFound
                                                           :> (CanThrow 'NotATeamMember
                                                               :> (CanThrow OperationDenied
                                                                   :> (ZLocalUser
                                                                       :> (ZConn
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("members"
                                                                                       :> (Capture
                                                                                             "uid"
                                                                                             UserId
                                                                                           :> MultiVerb
                                                                                                'DELETE
                                                                                                '[JSON]
                                                                                                TeamMemberDeleteResultResponseType
                                                                                                TeamMemberDeleteResult))))))))))))))
                                    :<|> (Named
                                            "update-team-member"
                                            (Summary "Update an existing team member"
                                             :> (CanThrow 'AccessDenied
                                                 :> (CanThrow 'InvalidPermissions
                                                     :> (CanThrow 'TeamNotFound
                                                         :> (CanThrow 'TeamMemberNotFound
                                                             :> (CanThrow 'TooManyTeamAdmins
                                                                 :> (CanThrow 'NotATeamMember
                                                                     :> (CanThrow OperationDenied
                                                                         :> (ZLocalUser
                                                                             :> (ZConn
                                                                                 :> ("teams"
                                                                                     :> (Capture
                                                                                           "tid"
                                                                                           TeamId
                                                                                         :> ("members"
                                                                                             :> (ReqBody
                                                                                                   '[JSON]
                                                                                                   NewTeamMember
                                                                                                 :> MultiVerb
                                                                                                      'PUT
                                                                                                      '[JSON]
                                                                                                      '[RespondEmpty
                                                                                                          200
                                                                                                          ""]
                                                                                                      ()))))))))))))))
                                          :<|> Named
                                                 "get-team-members-csv"
                                                 (Summary
                                                    "Get all members of the team as a CSV file"
                                                  :> (CanThrow 'AccessDenied
                                                      :> (Description
                                                            "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                                          :> (ZLocalUser
                                                              :> ("teams"
                                                                  :> (Capture "tid" TeamId
                                                                      :> ("members"
                                                                          :> ("csv"
                                                                              :> LowLevelStream
                                                                                   'GET
                                                                                   200
                                                                                   '[ '("Content-Disposition",
                                                                                        "attachment; filename=\"wire_team_members.csv\"")]
                                                                                   "CSV of team members"
                                                                                   CSV)))))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"get-team-member" ServerT
  (Summary "Get single team member"
   :> (CanThrow 'NotATeamMember
       :> (CanThrow 'TeamMemberNotFound
           :> (ZLocalUser
               :> ("teams"
                   :> (Capture "tid" TeamId
                       :> ("members"
                           :> (Capture "uid" UserId :> Get '[JSON] TeamMemberOptPerms))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get single team member"
            :> (CanThrow 'NotATeamMember
                :> (CanThrow 'TeamMemberNotFound
                    :> (ZLocalUser
                        :> ("teams"
                            :> (Capture "tid" TeamId
                                :> ("members"
                                    :> (Capture "uid" UserId
                                        :> Get '[JSON] TeamMemberOptPerms)))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> TeamId
-> UserId
-> Sem
     '[ErrorS 'NotATeamMember, ErrorS 'TeamMemberNotFound, BrigAccess,
       SparAccess, NotificationSubsystem, GundeckAPIAccess, Rpc,
       ExternalAccess, FederatorAccess, BackendNotificationQueueAccess,
       BotAccess, FireAndForget, ClientStore, CodeStore, ProposalStore,
       ConversationStore, SubConversationStore, Random,
       CustomBackendStore, TeamFeatureStore, LegalHoldStore, MemberStore,
       SearchVisibilityStore, ServiceStore, TeamNotificationStore,
       TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     TeamMemberOptPerms
forall (r :: EffectRow).
(Member (ErrorS 'TeamMemberNotFound) r,
 Member (ErrorS 'NotATeamMember) r, Member TeamStore r) =>
Local UserId -> TeamId -> UserId -> Sem r TeamMemberOptPerms
getTeamMember
    API
  (Named
     "get-team-member"
     (Summary "Get single team member"
      :> (CanThrow 'NotATeamMember
          :> (CanThrow 'TeamMemberNotFound
              :> (ZLocalUser
                  :> ("teams"
                      :> (Capture "tid" TeamId
                          :> ("members"
                              :> (Capture "uid" UserId :> Get '[JSON] TeamMemberOptPerms)))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "get-team-members-by-ids"
        (Summary "Get team members by user id list"
         :> (Description
               "The `has_more` field in the response body is always `false`."
             :> (CanThrow 'NotATeamMember
                 :> (CanThrow 'BulkGetMemberLimitExceeded
                     :> (ZLocalUser
                         :> ("teams"
                             :> (Capture "tid" TeamId
                                 :> ("get-members-by-ids-using-post"
                                     :> (QueryParam'
                                           '[Optional, Strict,
                                             Description "Maximum results to be returned"]
                                           "maxResults"
                                           (Range 1 HardTruncationLimit Int32)
                                         :> (ReqBody '[JSON] UserIdList
                                             :> Post '[JSON] TeamMemberListOptPerms))))))))))
      :<|> (Named
              "add-team-member"
              (Summary "Add a new team member"
               :> (Until 'V4
                   :> (CanThrow 'InvalidPermissions
                       :> (CanThrow 'NoAddToBinding
                           :> (CanThrow 'NotATeamMember
                               :> (CanThrow 'NotConnected
                                   :> (CanThrow OperationDenied
                                       :> (CanThrow 'TeamNotFound
                                           :> (CanThrow 'TooManyTeamMembers
                                               :> (CanThrow 'TooManyTeamAdmins
                                                   :> (CanThrow 'UserBindingExists
                                                       :> (CanThrow
                                                             'TooManyTeamMembersOnTeamWithLegalhold
                                                           :> (ZLocalUser
                                                               :> (ZConn
                                                                   :> ("teams"
                                                                       :> (Capture "tid" TeamId
                                                                           :> ("members"
                                                                               :> (ReqBody
                                                                                     '[JSON]
                                                                                     NewTeamMember
                                                                                   :> MultiVerb
                                                                                        'POST
                                                                                        '[JSON]
                                                                                        '[RespondEmpty
                                                                                            200 ""]
                                                                                        ()))))))))))))))))))
            :<|> (Named
                    "delete-team-member"
                    (Summary "Remove an existing team member"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow 'AccessDenied
                             :> (CanThrow 'TeamMemberNotFound
                                 :> (CanThrow 'TeamNotFound
                                     :> (CanThrow 'NotATeamMember
                                         :> (CanThrow OperationDenied
                                             :> (ZLocalUser
                                                 :> (ZConn
                                                     :> ("teams"
                                                         :> (Capture "tid" TeamId
                                                             :> ("members"
                                                                 :> (Capture "uid" UserId
                                                                     :> (ReqBody
                                                                           '[JSON]
                                                                           TeamMemberDeleteData
                                                                         :> MultiVerb
                                                                              'DELETE
                                                                              '[JSON]
                                                                              TeamMemberDeleteResultResponseType
                                                                              TeamMemberDeleteResult))))))))))))))
                  :<|> (Named
                          "delete-non-binding-team-member"
                          (Summary "Remove an existing team member"
                           :> (Until 'V4
                               :> (CanThrow AuthenticationError
                                   :> (CanThrow 'AccessDenied
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'TeamNotFound
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (ZLocalUser
                                                           :> (ZConn
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("members"
                                                                           :> (Capture "uid" UserId
                                                                               :> MultiVerb
                                                                                    'DELETE
                                                                                    '[JSON]
                                                                                    TeamMemberDeleteResultResponseType
                                                                                    TeamMemberDeleteResult))))))))))))))
                        :<|> (Named
                                "update-team-member"
                                (Summary "Update an existing team member"
                                 :> (CanThrow 'AccessDenied
                                     :> (CanThrow 'InvalidPermissions
                                         :> (CanThrow 'TeamNotFound
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'TooManyTeamAdmins
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (ZLocalUser
                                                                 :> (ZConn
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("members"
                                                                                 :> (ReqBody
                                                                                       '[JSON]
                                                                                       NewTeamMember
                                                                                     :> MultiVerb
                                                                                          'PUT
                                                                                          '[JSON]
                                                                                          '[RespondEmpty
                                                                                              200
                                                                                              ""]
                                                                                          ()))))))))))))))
                              :<|> Named
                                     "get-team-members-csv"
                                     (Summary "Get all members of the team as a CSV file"
                                      :> (CanThrow 'AccessDenied
                                          :> (Description
                                                "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                              :> (ZLocalUser
                                                  :> ("teams"
                                                      :> (Capture "tid" TeamId
                                                          :> ("members"
                                                              :> ("csv"
                                                                  :> LowLevelStream
                                                                       'GET
                                                                       200
                                                                       '[ '("Content-Disposition",
                                                                            "attachment; filename=\"wire_team_members.csv\"")]
                                                                       "CSV of team members"
                                                                       CSV)))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "get-team-member"
        (Summary "Get single team member"
         :> (CanThrow 'NotATeamMember
             :> (CanThrow 'TeamMemberNotFound
                 :> (ZLocalUser
                     :> ("teams"
                         :> (Capture "tid" TeamId
                             :> ("members"
                                 :> (Capture "uid" UserId :> Get '[JSON] TeamMemberOptPerms))))))))
      :<|> (Named
              "get-team-members-by-ids"
              (Summary "Get team members by user id list"
               :> (Description
                     "The `has_more` field in the response body is always `false`."
                   :> (CanThrow 'NotATeamMember
                       :> (CanThrow 'BulkGetMemberLimitExceeded
                           :> (ZLocalUser
                               :> ("teams"
                                   :> (Capture "tid" TeamId
                                       :> ("get-members-by-ids-using-post"
                                           :> (QueryParam'
                                                 '[Optional, Strict,
                                                   Description "Maximum results to be returned"]
                                                 "maxResults"
                                                 (Range 1 HardTruncationLimit Int32)
                                               :> (ReqBody '[JSON] UserIdList
                                                   :> Post '[JSON] TeamMemberListOptPerms))))))))))
            :<|> (Named
                    "add-team-member"
                    (Summary "Add a new team member"
                     :> (Until 'V4
                         :> (CanThrow 'InvalidPermissions
                             :> (CanThrow 'NoAddToBinding
                                 :> (CanThrow 'NotATeamMember
                                     :> (CanThrow 'NotConnected
                                         :> (CanThrow OperationDenied
                                             :> (CanThrow 'TeamNotFound
                                                 :> (CanThrow 'TooManyTeamMembers
                                                     :> (CanThrow 'TooManyTeamAdmins
                                                         :> (CanThrow 'UserBindingExists
                                                             :> (CanThrow
                                                                   'TooManyTeamMembersOnTeamWithLegalhold
                                                                 :> (ZLocalUser
                                                                     :> (ZConn
                                                                         :> ("teams"
                                                                             :> (Capture
                                                                                   "tid" TeamId
                                                                                 :> ("members"
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           NewTeamMember
                                                                                         :> MultiVerb
                                                                                              'POST
                                                                                              '[JSON]
                                                                                              '[RespondEmpty
                                                                                                  200
                                                                                                  ""]
                                                                                              ()))))))))))))))))))
                  :<|> (Named
                          "delete-team-member"
                          (Summary "Remove an existing team member"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow 'AccessDenied
                                   :> (CanThrow 'TeamMemberNotFound
                                       :> (CanThrow 'TeamNotFound
                                           :> (CanThrow 'NotATeamMember
                                               :> (CanThrow OperationDenied
                                                   :> (ZLocalUser
                                                       :> (ZConn
                                                           :> ("teams"
                                                               :> (Capture "tid" TeamId
                                                                   :> ("members"
                                                                       :> (Capture "uid" UserId
                                                                           :> (ReqBody
                                                                                 '[JSON]
                                                                                 TeamMemberDeleteData
                                                                               :> MultiVerb
                                                                                    'DELETE
                                                                                    '[JSON]
                                                                                    TeamMemberDeleteResultResponseType
                                                                                    TeamMemberDeleteResult))))))))))))))
                        :<|> (Named
                                "delete-non-binding-team-member"
                                (Summary "Remove an existing team member"
                                 :> (Until 'V4
                                     :> (CanThrow AuthenticationError
                                         :> (CanThrow 'AccessDenied
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'TeamNotFound
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (ZLocalUser
                                                                 :> (ZConn
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("members"
                                                                                 :> (Capture
                                                                                       "uid" UserId
                                                                                     :> MultiVerb
                                                                                          'DELETE
                                                                                          '[JSON]
                                                                                          TeamMemberDeleteResultResponseType
                                                                                          TeamMemberDeleteResult))))))))))))))
                              :<|> (Named
                                      "update-team-member"
                                      (Summary "Update an existing team member"
                                       :> (CanThrow 'AccessDenied
                                           :> (CanThrow 'InvalidPermissions
                                               :> (CanThrow 'TeamNotFound
                                                   :> (CanThrow 'TeamMemberNotFound
                                                       :> (CanThrow 'TooManyTeamAdmins
                                                           :> (CanThrow 'NotATeamMember
                                                               :> (CanThrow OperationDenied
                                                                   :> (ZLocalUser
                                                                       :> (ZConn
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("members"
                                                                                       :> (ReqBody
                                                                                             '[JSON]
                                                                                             NewTeamMember
                                                                                           :> MultiVerb
                                                                                                'PUT
                                                                                                '[JSON]
                                                                                                '[RespondEmpty
                                                                                                    200
                                                                                                    ""]
                                                                                                ()))))))))))))))
                                    :<|> Named
                                           "get-team-members-csv"
                                           (Summary "Get all members of the team as a CSV file"
                                            :> (CanThrow 'AccessDenied
                                                :> (Description
                                                      "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                                    :> (ZLocalUser
                                                        :> ("teams"
                                                            :> (Capture "tid" TeamId
                                                                :> ("members"
                                                                    :> ("csv"
                                                                        :> LowLevelStream
                                                                             'GET
                                                                             200
                                                                             '[ '("Content-Disposition",
                                                                                  "attachment; filename=\"wire_team_members.csv\"")]
                                                                             "CSV of team members"
                                                                             CSV))))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"get-team-members-by-ids" ServerT
  (Summary "Get team members by user id list"
   :> (Description
         "The `has_more` field in the response body is always `false`."
       :> (CanThrow 'NotATeamMember
           :> (CanThrow 'BulkGetMemberLimitExceeded
               :> (ZLocalUser
                   :> ("teams"
                       :> (Capture "tid" TeamId
                           :> ("get-members-by-ids-using-post"
                               :> (QueryParam'
                                     '[Optional, Strict,
                                       Description "Maximum results to be returned"]
                                     "maxResults"
                                     (Range 1 HardTruncationLimit Int32)
                                   :> (ReqBody '[JSON] UserIdList
                                       :> Post '[JSON] TeamMemberListOptPerms))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get team members by user id list"
            :> (Description
                  "The `has_more` field in the response body is always `false`."
                :> (CanThrow 'NotATeamMember
                    :> (CanThrow 'BulkGetMemberLimitExceeded
                        :> (ZLocalUser
                            :> ("teams"
                                :> (Capture "tid" TeamId
                                    :> ("get-members-by-ids-using-post"
                                        :> (QueryParam'
                                              '[Optional, Strict,
                                                Description "Maximum results to be returned"]
                                              "maxResults"
                                              (Range 1 HardTruncationLimit Int32)
                                            :> (ReqBody '[JSON] UserIdList
                                                :> Post '[JSON] TeamMemberListOptPerms)))))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> TeamId
-> Maybe (Range 1 HardTruncationLimit Int32)
-> UserIdList
-> Sem
     '[ErrorS 'NotATeamMember, ErrorS 'BulkGetMemberLimitExceeded,
       BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     TeamMemberListOptPerms
forall (r :: EffectRow).
(Member (ErrorS 'BulkGetMemberLimitExceeded) r,
 Member (ErrorS 'NotATeamMember) r, Member TeamStore r) =>
Local UserId
-> TeamId
-> Maybe (Range 1 HardTruncationLimit Int32)
-> UserIdList
-> Sem r TeamMemberListOptPerms
bulkGetTeamMembers
    API
  (Named
     "get-team-members-by-ids"
     (Summary "Get team members by user id list"
      :> (Description
            "The `has_more` field in the response body is always `false`."
          :> (CanThrow 'NotATeamMember
              :> (CanThrow 'BulkGetMemberLimitExceeded
                  :> (ZLocalUser
                      :> ("teams"
                          :> (Capture "tid" TeamId
                              :> ("get-members-by-ids-using-post"
                                  :> (QueryParam'
                                        '[Optional, Strict,
                                          Description "Maximum results to be returned"]
                                        "maxResults"
                                        (Range 1 HardTruncationLimit Int32)
                                      :> (ReqBody '[JSON] UserIdList
                                          :> Post '[JSON] TeamMemberListOptPerms)))))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "add-team-member"
        (Summary "Add a new team member"
         :> (Until 'V4
             :> (CanThrow 'InvalidPermissions
                 :> (CanThrow 'NoAddToBinding
                     :> (CanThrow 'NotATeamMember
                         :> (CanThrow 'NotConnected
                             :> (CanThrow OperationDenied
                                 :> (CanThrow 'TeamNotFound
                                     :> (CanThrow 'TooManyTeamMembers
                                         :> (CanThrow 'TooManyTeamAdmins
                                             :> (CanThrow 'UserBindingExists
                                                 :> (CanThrow 'TooManyTeamMembersOnTeamWithLegalhold
                                                     :> (ZLocalUser
                                                         :> (ZConn
                                                             :> ("teams"
                                                                 :> (Capture "tid" TeamId
                                                                     :> ("members"
                                                                         :> (ReqBody
                                                                               '[JSON] NewTeamMember
                                                                             :> MultiVerb
                                                                                  'POST
                                                                                  '[JSON]
                                                                                  '[RespondEmpty
                                                                                      200 ""]
                                                                                  ()))))))))))))))))))
      :<|> (Named
              "delete-team-member"
              (Summary "Remove an existing team member"
               :> (CanThrow AuthenticationError
                   :> (CanThrow 'AccessDenied
                       :> (CanThrow 'TeamMemberNotFound
                           :> (CanThrow 'TeamNotFound
                               :> (CanThrow 'NotATeamMember
                                   :> (CanThrow OperationDenied
                                       :> (ZLocalUser
                                           :> (ZConn
                                               :> ("teams"
                                                   :> (Capture "tid" TeamId
                                                       :> ("members"
                                                           :> (Capture "uid" UserId
                                                               :> (ReqBody
                                                                     '[JSON] TeamMemberDeleteData
                                                                   :> MultiVerb
                                                                        'DELETE
                                                                        '[JSON]
                                                                        TeamMemberDeleteResultResponseType
                                                                        TeamMemberDeleteResult))))))))))))))
            :<|> (Named
                    "delete-non-binding-team-member"
                    (Summary "Remove an existing team member"
                     :> (Until 'V4
                         :> (CanThrow AuthenticationError
                             :> (CanThrow 'AccessDenied
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'TeamNotFound
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (ZLocalUser
                                                     :> (ZConn
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("members"
                                                                     :> (Capture "uid" UserId
                                                                         :> MultiVerb
                                                                              'DELETE
                                                                              '[JSON]
                                                                              TeamMemberDeleteResultResponseType
                                                                              TeamMemberDeleteResult))))))))))))))
                  :<|> (Named
                          "update-team-member"
                          (Summary "Update an existing team member"
                           :> (CanThrow 'AccessDenied
                               :> (CanThrow 'InvalidPermissions
                                   :> (CanThrow 'TeamNotFound
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'TooManyTeamAdmins
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (ZLocalUser
                                                           :> (ZConn
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("members"
                                                                           :> (ReqBody
                                                                                 '[JSON]
                                                                                 NewTeamMember
                                                                               :> MultiVerb
                                                                                    'PUT
                                                                                    '[JSON]
                                                                                    '[RespondEmpty
                                                                                        200 ""]
                                                                                    ()))))))))))))))
                        :<|> Named
                               "get-team-members-csv"
                               (Summary "Get all members of the team as a CSV file"
                                :> (CanThrow 'AccessDenied
                                    :> (Description
                                          "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                        :> (ZLocalUser
                                            :> ("teams"
                                                :> (Capture "tid" TeamId
                                                    :> ("members"
                                                        :> ("csv"
                                                            :> LowLevelStream
                                                                 'GET
                                                                 200
                                                                 '[ '("Content-Disposition",
                                                                      "attachment; filename=\"wire_team_members.csv\"")]
                                                                 "CSV of team members"
                                                                 CSV))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "get-team-members-by-ids"
        (Summary "Get team members by user id list"
         :> (Description
               "The `has_more` field in the response body is always `false`."
             :> (CanThrow 'NotATeamMember
                 :> (CanThrow 'BulkGetMemberLimitExceeded
                     :> (ZLocalUser
                         :> ("teams"
                             :> (Capture "tid" TeamId
                                 :> ("get-members-by-ids-using-post"
                                     :> (QueryParam'
                                           '[Optional, Strict,
                                             Description "Maximum results to be returned"]
                                           "maxResults"
                                           (Range 1 HardTruncationLimit Int32)
                                         :> (ReqBody '[JSON] UserIdList
                                             :> Post '[JSON] TeamMemberListOptPerms))))))))))
      :<|> (Named
              "add-team-member"
              (Summary "Add a new team member"
               :> (Until 'V4
                   :> (CanThrow 'InvalidPermissions
                       :> (CanThrow 'NoAddToBinding
                           :> (CanThrow 'NotATeamMember
                               :> (CanThrow 'NotConnected
                                   :> (CanThrow OperationDenied
                                       :> (CanThrow 'TeamNotFound
                                           :> (CanThrow 'TooManyTeamMembers
                                               :> (CanThrow 'TooManyTeamAdmins
                                                   :> (CanThrow 'UserBindingExists
                                                       :> (CanThrow
                                                             'TooManyTeamMembersOnTeamWithLegalhold
                                                           :> (ZLocalUser
                                                               :> (ZConn
                                                                   :> ("teams"
                                                                       :> (Capture "tid" TeamId
                                                                           :> ("members"
                                                                               :> (ReqBody
                                                                                     '[JSON]
                                                                                     NewTeamMember
                                                                                   :> MultiVerb
                                                                                        'POST
                                                                                        '[JSON]
                                                                                        '[RespondEmpty
                                                                                            200 ""]
                                                                                        ()))))))))))))))))))
            :<|> (Named
                    "delete-team-member"
                    (Summary "Remove an existing team member"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow 'AccessDenied
                             :> (CanThrow 'TeamMemberNotFound
                                 :> (CanThrow 'TeamNotFound
                                     :> (CanThrow 'NotATeamMember
                                         :> (CanThrow OperationDenied
                                             :> (ZLocalUser
                                                 :> (ZConn
                                                     :> ("teams"
                                                         :> (Capture "tid" TeamId
                                                             :> ("members"
                                                                 :> (Capture "uid" UserId
                                                                     :> (ReqBody
                                                                           '[JSON]
                                                                           TeamMemberDeleteData
                                                                         :> MultiVerb
                                                                              'DELETE
                                                                              '[JSON]
                                                                              TeamMemberDeleteResultResponseType
                                                                              TeamMemberDeleteResult))))))))))))))
                  :<|> (Named
                          "delete-non-binding-team-member"
                          (Summary "Remove an existing team member"
                           :> (Until 'V4
                               :> (CanThrow AuthenticationError
                                   :> (CanThrow 'AccessDenied
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'TeamNotFound
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (ZLocalUser
                                                           :> (ZConn
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("members"
                                                                           :> (Capture "uid" UserId
                                                                               :> MultiVerb
                                                                                    'DELETE
                                                                                    '[JSON]
                                                                                    TeamMemberDeleteResultResponseType
                                                                                    TeamMemberDeleteResult))))))))))))))
                        :<|> (Named
                                "update-team-member"
                                (Summary "Update an existing team member"
                                 :> (CanThrow 'AccessDenied
                                     :> (CanThrow 'InvalidPermissions
                                         :> (CanThrow 'TeamNotFound
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'TooManyTeamAdmins
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (ZLocalUser
                                                                 :> (ZConn
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("members"
                                                                                 :> (ReqBody
                                                                                       '[JSON]
                                                                                       NewTeamMember
                                                                                     :> MultiVerb
                                                                                          'PUT
                                                                                          '[JSON]
                                                                                          '[RespondEmpty
                                                                                              200
                                                                                              ""]
                                                                                          ()))))))))))))))
                              :<|> Named
                                     "get-team-members-csv"
                                     (Summary "Get all members of the team as a CSV file"
                                      :> (CanThrow 'AccessDenied
                                          :> (Description
                                                "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                              :> (ZLocalUser
                                                  :> ("teams"
                                                      :> (Capture "tid" TeamId
                                                          :> ("members"
                                                              :> ("csv"
                                                                  :> LowLevelStream
                                                                       'GET
                                                                       200
                                                                       '[ '("Content-Disposition",
                                                                            "attachment; filename=\"wire_team_members.csv\"")]
                                                                       "CSV of team members"
                                                                       CSV)))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"add-team-member" ServerT
  (Summary "Add a new team member"
   :> (Until 'V4
       :> (CanThrow 'InvalidPermissions
           :> (CanThrow 'NoAddToBinding
               :> (CanThrow 'NotATeamMember
                   :> (CanThrow 'NotConnected
                       :> (CanThrow OperationDenied
                           :> (CanThrow 'TeamNotFound
                               :> (CanThrow 'TooManyTeamMembers
                                   :> (CanThrow 'TooManyTeamAdmins
                                       :> (CanThrow 'UserBindingExists
                                           :> (CanThrow 'TooManyTeamMembersOnTeamWithLegalhold
                                               :> (ZLocalUser
                                                   :> (ZConn
                                                       :> ("teams"
                                                           :> (Capture "tid" TeamId
                                                               :> ("members"
                                                                   :> (ReqBody '[JSON] NewTeamMember
                                                                       :> MultiVerb
                                                                            'POST
                                                                            '[JSON]
                                                                            '[RespondEmpty 200 ""]
                                                                            ()))))))))))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Add a new team member"
            :> (Until 'V4
                :> (CanThrow 'InvalidPermissions
                    :> (CanThrow 'NoAddToBinding
                        :> (CanThrow 'NotATeamMember
                            :> (CanThrow 'NotConnected
                                :> (CanThrow OperationDenied
                                    :> (CanThrow 'TeamNotFound
                                        :> (CanThrow 'TooManyTeamMembers
                                            :> (CanThrow 'TooManyTeamAdmins
                                                :> (CanThrow 'UserBindingExists
                                                    :> (CanThrow
                                                          'TooManyTeamMembersOnTeamWithLegalhold
                                                        :> (ZLocalUser
                                                            :> (ZConn
                                                                :> ("teams"
                                                                    :> (Capture "tid" TeamId
                                                                        :> ("members"
                                                                            :> (ReqBody
                                                                                  '[JSON]
                                                                                  NewTeamMember
                                                                                :> MultiVerb
                                                                                     'POST
                                                                                     '[JSON]
                                                                                     '[RespondEmpty
                                                                                         200 ""]
                                                                                     ())))))))))))))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Sem
     '[Error (Tagged 'InvalidPermissions ()),
       Error (Tagged 'NoAddToBinding ()), ErrorS 'NotATeamMember,
       Error (Tagged 'NotConnected ()), Error (Tagged OperationDenied ()),
       Error (Tagged 'TeamNotFound ()),
       Error (Tagged 'TooManyTeamMembers ()),
       Error (Tagged 'TooManyTeamAdmins ()),
       Error (Tagged 'UserBindingExists ()),
       Error (Tagged 'TooManyTeamMembersOnTeamWithLegalhold ()),
       BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     ()
forall (r :: EffectRow).
(Member BrigAccess r, Member NotificationSubsystem r,
 Member (Error (Tagged 'InvalidPermissions ())) r,
 Member (Error (Tagged 'NoAddToBinding ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged 'NotConnected ())) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member (Error (Tagged 'TeamNotFound ())) r,
 Member (Error (Tagged 'TooManyTeamMembers ())) r,
 Member (Error (Tagged 'TooManyTeamAdmins ())) r,
 Member (Error (Tagged 'UserBindingExists ())) r,
 Member
   (Error (Tagged 'TooManyTeamMembersOnTeamWithLegalhold ())) r,
 Member (Input Opts) r, Member (Input UTCTime) r,
 Member LegalHoldStore r, Member TeamFeatureStore r,
 Member TeamNotificationStore r, Member TeamStore r,
 Member (Logger (Msg -> Msg)) r) =>
Local UserId -> ConnId -> TeamId -> NewTeamMember -> Sem r ()
addTeamMember
    API
  (Named
     "add-team-member"
     (Summary "Add a new team member"
      :> (Until 'V4
          :> (CanThrow 'InvalidPermissions
              :> (CanThrow 'NoAddToBinding
                  :> (CanThrow 'NotATeamMember
                      :> (CanThrow 'NotConnected
                          :> (CanThrow OperationDenied
                              :> (CanThrow 'TeamNotFound
                                  :> (CanThrow 'TooManyTeamMembers
                                      :> (CanThrow 'TooManyTeamAdmins
                                          :> (CanThrow 'UserBindingExists
                                              :> (CanThrow 'TooManyTeamMembersOnTeamWithLegalhold
                                                  :> (ZLocalUser
                                                      :> (ZConn
                                                          :> ("teams"
                                                              :> (Capture "tid" TeamId
                                                                  :> ("members"
                                                                      :> (ReqBody
                                                                            '[JSON] NewTeamMember
                                                                          :> MultiVerb
                                                                               'POST
                                                                               '[JSON]
                                                                               '[RespondEmpty
                                                                                   200 ""]
                                                                               ())))))))))))))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "delete-team-member"
        (Summary "Remove an existing team member"
         :> (CanThrow AuthenticationError
             :> (CanThrow 'AccessDenied
                 :> (CanThrow 'TeamMemberNotFound
                     :> (CanThrow 'TeamNotFound
                         :> (CanThrow 'NotATeamMember
                             :> (CanThrow OperationDenied
                                 :> (ZLocalUser
                                     :> (ZConn
                                         :> ("teams"
                                             :> (Capture "tid" TeamId
                                                 :> ("members"
                                                     :> (Capture "uid" UserId
                                                         :> (ReqBody '[JSON] TeamMemberDeleteData
                                                             :> MultiVerb
                                                                  'DELETE
                                                                  '[JSON]
                                                                  TeamMemberDeleteResultResponseType
                                                                  TeamMemberDeleteResult))))))))))))))
      :<|> (Named
              "delete-non-binding-team-member"
              (Summary "Remove an existing team member"
               :> (Until 'V4
                   :> (CanThrow AuthenticationError
                       :> (CanThrow 'AccessDenied
                           :> (CanThrow 'TeamMemberNotFound
                               :> (CanThrow 'TeamNotFound
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (ZLocalUser
                                               :> (ZConn
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("members"
                                                               :> (Capture "uid" UserId
                                                                   :> MultiVerb
                                                                        'DELETE
                                                                        '[JSON]
                                                                        TeamMemberDeleteResultResponseType
                                                                        TeamMemberDeleteResult))))))))))))))
            :<|> (Named
                    "update-team-member"
                    (Summary "Update an existing team member"
                     :> (CanThrow 'AccessDenied
                         :> (CanThrow 'InvalidPermissions
                             :> (CanThrow 'TeamNotFound
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'TooManyTeamAdmins
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (ZLocalUser
                                                     :> (ZConn
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("members"
                                                                     :> (ReqBody
                                                                           '[JSON] NewTeamMember
                                                                         :> MultiVerb
                                                                              'PUT
                                                                              '[JSON]
                                                                              '[RespondEmpty 200 ""]
                                                                              ()))))))))))))))
                  :<|> Named
                         "get-team-members-csv"
                         (Summary "Get all members of the team as a CSV file"
                          :> (CanThrow 'AccessDenied
                              :> (Description
                                    "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                  :> (ZLocalUser
                                      :> ("teams"
                                          :> (Capture "tid" TeamId
                                              :> ("members"
                                                  :> ("csv"
                                                      :> LowLevelStream
                                                           'GET
                                                           200
                                                           '[ '("Content-Disposition",
                                                                "attachment; filename=\"wire_team_members.csv\"")]
                                                           "CSV of team members"
                                                           CSV)))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "add-team-member"
        (Summary "Add a new team member"
         :> (Until 'V4
             :> (CanThrow 'InvalidPermissions
                 :> (CanThrow 'NoAddToBinding
                     :> (CanThrow 'NotATeamMember
                         :> (CanThrow 'NotConnected
                             :> (CanThrow OperationDenied
                                 :> (CanThrow 'TeamNotFound
                                     :> (CanThrow 'TooManyTeamMembers
                                         :> (CanThrow 'TooManyTeamAdmins
                                             :> (CanThrow 'UserBindingExists
                                                 :> (CanThrow 'TooManyTeamMembersOnTeamWithLegalhold
                                                     :> (ZLocalUser
                                                         :> (ZConn
                                                             :> ("teams"
                                                                 :> (Capture "tid" TeamId
                                                                     :> ("members"
                                                                         :> (ReqBody
                                                                               '[JSON] NewTeamMember
                                                                             :> MultiVerb
                                                                                  'POST
                                                                                  '[JSON]
                                                                                  '[RespondEmpty
                                                                                      200 ""]
                                                                                  ()))))))))))))))))))
      :<|> (Named
              "delete-team-member"
              (Summary "Remove an existing team member"
               :> (CanThrow AuthenticationError
                   :> (CanThrow 'AccessDenied
                       :> (CanThrow 'TeamMemberNotFound
                           :> (CanThrow 'TeamNotFound
                               :> (CanThrow 'NotATeamMember
                                   :> (CanThrow OperationDenied
                                       :> (ZLocalUser
                                           :> (ZConn
                                               :> ("teams"
                                                   :> (Capture "tid" TeamId
                                                       :> ("members"
                                                           :> (Capture "uid" UserId
                                                               :> (ReqBody
                                                                     '[JSON] TeamMemberDeleteData
                                                                   :> MultiVerb
                                                                        'DELETE
                                                                        '[JSON]
                                                                        TeamMemberDeleteResultResponseType
                                                                        TeamMemberDeleteResult))))))))))))))
            :<|> (Named
                    "delete-non-binding-team-member"
                    (Summary "Remove an existing team member"
                     :> (Until 'V4
                         :> (CanThrow AuthenticationError
                             :> (CanThrow 'AccessDenied
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'TeamNotFound
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (ZLocalUser
                                                     :> (ZConn
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("members"
                                                                     :> (Capture "uid" UserId
                                                                         :> MultiVerb
                                                                              'DELETE
                                                                              '[JSON]
                                                                              TeamMemberDeleteResultResponseType
                                                                              TeamMemberDeleteResult))))))))))))))
                  :<|> (Named
                          "update-team-member"
                          (Summary "Update an existing team member"
                           :> (CanThrow 'AccessDenied
                               :> (CanThrow 'InvalidPermissions
                                   :> (CanThrow 'TeamNotFound
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'TooManyTeamAdmins
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (ZLocalUser
                                                           :> (ZConn
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("members"
                                                                           :> (ReqBody
                                                                                 '[JSON]
                                                                                 NewTeamMember
                                                                               :> MultiVerb
                                                                                    'PUT
                                                                                    '[JSON]
                                                                                    '[RespondEmpty
                                                                                        200 ""]
                                                                                    ()))))))))))))))
                        :<|> Named
                               "get-team-members-csv"
                               (Summary "Get all members of the team as a CSV file"
                                :> (CanThrow 'AccessDenied
                                    :> (Description
                                          "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                        :> (ZLocalUser
                                            :> ("teams"
                                                :> (Capture "tid" TeamId
                                                    :> ("members"
                                                        :> ("csv"
                                                            :> LowLevelStream
                                                                 'GET
                                                                 200
                                                                 '[ '("Content-Disposition",
                                                                      "attachment; filename=\"wire_team_members.csv\"")]
                                                                 "CSV of team members"
                                                                 CSV))))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"delete-team-member" ServerT
  (Summary "Remove an existing team member"
   :> (CanThrow AuthenticationError
       :> (CanThrow 'AccessDenied
           :> (CanThrow 'TeamMemberNotFound
               :> (CanThrow 'TeamNotFound
                   :> (CanThrow 'NotATeamMember
                       :> (CanThrow OperationDenied
                           :> (ZLocalUser
                               :> (ZConn
                                   :> ("teams"
                                       :> (Capture "tid" TeamId
                                           :> ("members"
                                               :> (Capture "uid" UserId
                                                   :> (ReqBody '[JSON] TeamMemberDeleteData
                                                       :> MultiVerb
                                                            'DELETE
                                                            '[JSON]
                                                            TeamMemberDeleteResultResponseType
                                                            TeamMemberDeleteResult))))))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Remove an existing team member"
            :> (CanThrow AuthenticationError
                :> (CanThrow 'AccessDenied
                    :> (CanThrow 'TeamMemberNotFound
                        :> (CanThrow 'TeamNotFound
                            :> (CanThrow 'NotATeamMember
                                :> (CanThrow OperationDenied
                                    :> (ZLocalUser
                                        :> (ZConn
                                            :> ("teams"
                                                :> (Capture "tid" TeamId
                                                    :> ("members"
                                                        :> (Capture "uid" UserId
                                                            :> (ReqBody '[JSON] TeamMemberDeleteData
                                                                :> MultiVerb
                                                                     'DELETE
                                                                     '[JSON]
                                                                     TeamMemberDeleteResultResponseType
                                                                     TeamMemberDeleteResult)))))))))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> ConnId
-> TeamId
-> UserId
-> TeamMemberDeleteData
-> Sem
     '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
       ErrorS 'TeamMemberNotFound, Error (Tagged 'TeamNotFound ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     TeamMemberDeleteResult
forall (r :: EffectRow).
(Member BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error AuthenticationError) r,
 Member (Error FederationError) r, Member (Error InvalidInput) r,
 Member (Error (Tagged 'AccessDenied ())) r,
 Member (ErrorS 'TeamMemberNotFound) r,
 Member (Error (Tagged 'TeamNotFound ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member ExternalAccess r, Member (Input Opts) r,
 Member (Input UTCTime) r, Member NotificationSubsystem r,
 Member MemberStore r, Member TeamFeatureStore r,
 Member TeamStore r, Member (Logger (Msg -> Msg)) r) =>
Local UserId
-> ConnId
-> TeamId
-> UserId
-> TeamMemberDeleteData
-> Sem r TeamMemberDeleteResult
deleteTeamMember
    API
  (Named
     "delete-team-member"
     (Summary "Remove an existing team member"
      :> (CanThrow AuthenticationError
          :> (CanThrow 'AccessDenied
              :> (CanThrow 'TeamMemberNotFound
                  :> (CanThrow 'TeamNotFound
                      :> (CanThrow 'NotATeamMember
                          :> (CanThrow OperationDenied
                              :> (ZLocalUser
                                  :> (ZConn
                                      :> ("teams"
                                          :> (Capture "tid" TeamId
                                              :> ("members"
                                                  :> (Capture "uid" UserId
                                                      :> (ReqBody '[JSON] TeamMemberDeleteData
                                                          :> MultiVerb
                                                               'DELETE
                                                               '[JSON]
                                                               TeamMemberDeleteResultResponseType
                                                               TeamMemberDeleteResult)))))))))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "delete-non-binding-team-member"
        (Summary "Remove an existing team member"
         :> (Until 'V4
             :> (CanThrow AuthenticationError
                 :> (CanThrow 'AccessDenied
                     :> (CanThrow 'TeamMemberNotFound
                         :> (CanThrow 'TeamNotFound
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (ZLocalUser
                                         :> (ZConn
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("members"
                                                         :> (Capture "uid" UserId
                                                             :> MultiVerb
                                                                  'DELETE
                                                                  '[JSON]
                                                                  TeamMemberDeleteResultResponseType
                                                                  TeamMemberDeleteResult))))))))))))))
      :<|> (Named
              "update-team-member"
              (Summary "Update an existing team member"
               :> (CanThrow 'AccessDenied
                   :> (CanThrow 'InvalidPermissions
                       :> (CanThrow 'TeamNotFound
                           :> (CanThrow 'TeamMemberNotFound
                               :> (CanThrow 'TooManyTeamAdmins
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (ZLocalUser
                                               :> (ZConn
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("members"
                                                               :> (ReqBody '[JSON] NewTeamMember
                                                                   :> MultiVerb
                                                                        'PUT
                                                                        '[JSON]
                                                                        '[RespondEmpty 200 ""]
                                                                        ()))))))))))))))
            :<|> Named
                   "get-team-members-csv"
                   (Summary "Get all members of the team as a CSV file"
                    :> (CanThrow 'AccessDenied
                        :> (Description
                              "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                            :> (ZLocalUser
                                :> ("teams"
                                    :> (Capture "tid" TeamId
                                        :> ("members"
                                            :> ("csv"
                                                :> LowLevelStream
                                                     'GET
                                                     200
                                                     '[ '("Content-Disposition",
                                                          "attachment; filename=\"wire_team_members.csv\"")]
                                                     "CSV of team members"
                                                     CSV))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "delete-team-member"
        (Summary "Remove an existing team member"
         :> (CanThrow AuthenticationError
             :> (CanThrow 'AccessDenied
                 :> (CanThrow 'TeamMemberNotFound
                     :> (CanThrow 'TeamNotFound
                         :> (CanThrow 'NotATeamMember
                             :> (CanThrow OperationDenied
                                 :> (ZLocalUser
                                     :> (ZConn
                                         :> ("teams"
                                             :> (Capture "tid" TeamId
                                                 :> ("members"
                                                     :> (Capture "uid" UserId
                                                         :> (ReqBody '[JSON] TeamMemberDeleteData
                                                             :> MultiVerb
                                                                  'DELETE
                                                                  '[JSON]
                                                                  TeamMemberDeleteResultResponseType
                                                                  TeamMemberDeleteResult))))))))))))))
      :<|> (Named
              "delete-non-binding-team-member"
              (Summary "Remove an existing team member"
               :> (Until 'V4
                   :> (CanThrow AuthenticationError
                       :> (CanThrow 'AccessDenied
                           :> (CanThrow 'TeamMemberNotFound
                               :> (CanThrow 'TeamNotFound
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (ZLocalUser
                                               :> (ZConn
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("members"
                                                               :> (Capture "uid" UserId
                                                                   :> MultiVerb
                                                                        'DELETE
                                                                        '[JSON]
                                                                        TeamMemberDeleteResultResponseType
                                                                        TeamMemberDeleteResult))))))))))))))
            :<|> (Named
                    "update-team-member"
                    (Summary "Update an existing team member"
                     :> (CanThrow 'AccessDenied
                         :> (CanThrow 'InvalidPermissions
                             :> (CanThrow 'TeamNotFound
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'TooManyTeamAdmins
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (ZLocalUser
                                                     :> (ZConn
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("members"
                                                                     :> (ReqBody
                                                                           '[JSON] NewTeamMember
                                                                         :> MultiVerb
                                                                              'PUT
                                                                              '[JSON]
                                                                              '[RespondEmpty 200 ""]
                                                                              ()))))))))))))))
                  :<|> Named
                         "get-team-members-csv"
                         (Summary "Get all members of the team as a CSV file"
                          :> (CanThrow 'AccessDenied
                              :> (Description
                                    "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                                  :> (ZLocalUser
                                      :> ("teams"
                                          :> (Capture "tid" TeamId
                                              :> ("members"
                                                  :> ("csv"
                                                      :> LowLevelStream
                                                           'GET
                                                           200
                                                           '[ '("Content-Disposition",
                                                                "attachment; filename=\"wire_team_members.csv\"")]
                                                           "CSV of team members"
                                                           CSV)))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"delete-non-binding-team-member" ServerT
  (Summary "Remove an existing team member"
   :> (Until 'V4
       :> (CanThrow AuthenticationError
           :> (CanThrow 'AccessDenied
               :> (CanThrow 'TeamMemberNotFound
                   :> (CanThrow 'TeamNotFound
                       :> (CanThrow 'NotATeamMember
                           :> (CanThrow OperationDenied
                               :> (ZLocalUser
                                   :> (ZConn
                                       :> ("teams"
                                           :> (Capture "tid" TeamId
                                               :> ("members"
                                                   :> (Capture "uid" UserId
                                                       :> MultiVerb
                                                            'DELETE
                                                            '[JSON]
                                                            TeamMemberDeleteResultResponseType
                                                            TeamMemberDeleteResult))))))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Remove an existing team member"
            :> (Until 'V4
                :> (CanThrow AuthenticationError
                    :> (CanThrow 'AccessDenied
                        :> (CanThrow 'TeamMemberNotFound
                            :> (CanThrow 'TeamNotFound
                                :> (CanThrow 'NotATeamMember
                                    :> (CanThrow OperationDenied
                                        :> (ZLocalUser
                                            :> (ZConn
                                                :> ("teams"
                                                    :> (Capture "tid" TeamId
                                                        :> ("members"
                                                            :> (Capture "uid" UserId
                                                                :> MultiVerb
                                                                     'DELETE
                                                                     '[JSON]
                                                                     TeamMemberDeleteResultResponseType
                                                                     TeamMemberDeleteResult)))))))))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> ConnId
-> TeamId
-> UserId
-> Sem
     '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
       ErrorS 'TeamMemberNotFound, Error (Tagged 'TeamNotFound ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     TeamMemberDeleteResult
forall (r :: EffectRow).
(Member BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error AuthenticationError) r,
 Member (Error FederationError) r, Member (Error InvalidInput) r,
 Member (Error (Tagged 'AccessDenied ())) r,
 Member (ErrorS 'TeamMemberNotFound) r,
 Member (Error (Tagged 'TeamNotFound ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member ExternalAccess r, Member (Input Opts) r,
 Member (Input UTCTime) r, Member NotificationSubsystem r,
 Member MemberStore r, Member TeamFeatureStore r,
 Member TeamStore r, Member (Logger (Msg -> Msg)) r) =>
Local UserId
-> ConnId -> TeamId -> UserId -> Sem r TeamMemberDeleteResult
deleteNonBindingTeamMember
    API
  (Named
     "delete-non-binding-team-member"
     (Summary "Remove an existing team member"
      :> (Until 'V4
          :> (CanThrow AuthenticationError
              :> (CanThrow 'AccessDenied
                  :> (CanThrow 'TeamMemberNotFound
                      :> (CanThrow 'TeamNotFound
                          :> (CanThrow 'NotATeamMember
                              :> (CanThrow OperationDenied
                                  :> (ZLocalUser
                                      :> (ZConn
                                          :> ("teams"
                                              :> (Capture "tid" TeamId
                                                  :> ("members"
                                                      :> (Capture "uid" UserId
                                                          :> MultiVerb
                                                               'DELETE
                                                               '[JSON]
                                                               TeamMemberDeleteResultResponseType
                                                               TeamMemberDeleteResult)))))))))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "update-team-member"
        (Summary "Update an existing team member"
         :> (CanThrow 'AccessDenied
             :> (CanThrow 'InvalidPermissions
                 :> (CanThrow 'TeamNotFound
                     :> (CanThrow 'TeamMemberNotFound
                         :> (CanThrow 'TooManyTeamAdmins
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (ZLocalUser
                                         :> (ZConn
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("members"
                                                         :> (ReqBody '[JSON] NewTeamMember
                                                             :> MultiVerb
                                                                  'PUT
                                                                  '[JSON]
                                                                  '[RespondEmpty 200 ""]
                                                                  ()))))))))))))))
      :<|> Named
             "get-team-members-csv"
             (Summary "Get all members of the team as a CSV file"
              :> (CanThrow 'AccessDenied
                  :> (Description
                        "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                      :> (ZLocalUser
                          :> ("teams"
                              :> (Capture "tid" TeamId
                                  :> ("members"
                                      :> ("csv"
                                          :> LowLevelStream
                                               'GET
                                               200
                                               '[ '("Content-Disposition",
                                                    "attachment; filename=\"wire_team_members.csv\"")]
                                               "CSV of team members"
                                               CSV)))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "delete-non-binding-team-member"
        (Summary "Remove an existing team member"
         :> (Until 'V4
             :> (CanThrow AuthenticationError
                 :> (CanThrow 'AccessDenied
                     :> (CanThrow 'TeamMemberNotFound
                         :> (CanThrow 'TeamNotFound
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (ZLocalUser
                                         :> (ZConn
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("members"
                                                         :> (Capture "uid" UserId
                                                             :> MultiVerb
                                                                  'DELETE
                                                                  '[JSON]
                                                                  TeamMemberDeleteResultResponseType
                                                                  TeamMemberDeleteResult))))))))))))))
      :<|> (Named
              "update-team-member"
              (Summary "Update an existing team member"
               :> (CanThrow 'AccessDenied
                   :> (CanThrow 'InvalidPermissions
                       :> (CanThrow 'TeamNotFound
                           :> (CanThrow 'TeamMemberNotFound
                               :> (CanThrow 'TooManyTeamAdmins
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (ZLocalUser
                                               :> (ZConn
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("members"
                                                               :> (ReqBody '[JSON] NewTeamMember
                                                                   :> MultiVerb
                                                                        'PUT
                                                                        '[JSON]
                                                                        '[RespondEmpty 200 ""]
                                                                        ()))))))))))))))
            :<|> Named
                   "get-team-members-csv"
                   (Summary "Get all members of the team as a CSV file"
                    :> (CanThrow 'AccessDenied
                        :> (Description
                              "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                            :> (ZLocalUser
                                :> ("teams"
                                    :> (Capture "tid" TeamId
                                        :> ("members"
                                            :> ("csv"
                                                :> LowLevelStream
                                                     'GET
                                                     200
                                                     '[ '("Content-Disposition",
                                                          "attachment; filename=\"wire_team_members.csv\"")]
                                                     "CSV of team members"
                                                     CSV))))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"update-team-member" ServerT
  (Summary "Update an existing team member"
   :> (CanThrow 'AccessDenied
       :> (CanThrow 'InvalidPermissions
           :> (CanThrow 'TeamNotFound
               :> (CanThrow 'TeamMemberNotFound
                   :> (CanThrow 'TooManyTeamAdmins
                       :> (CanThrow 'NotATeamMember
                           :> (CanThrow OperationDenied
                               :> (ZLocalUser
                                   :> (ZConn
                                       :> ("teams"
                                           :> (Capture "tid" TeamId
                                               :> ("members"
                                                   :> (ReqBody '[JSON] NewTeamMember
                                                       :> MultiVerb
                                                            'PUT
                                                            '[JSON]
                                                            '[RespondEmpty 200 ""]
                                                            ()))))))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Update an existing team member"
            :> (CanThrow 'AccessDenied
                :> (CanThrow 'InvalidPermissions
                    :> (CanThrow 'TeamNotFound
                        :> (CanThrow 'TeamMemberNotFound
                            :> (CanThrow 'TooManyTeamAdmins
                                :> (CanThrow 'NotATeamMember
                                    :> (CanThrow OperationDenied
                                        :> (ZLocalUser
                                            :> (ZConn
                                                :> ("teams"
                                                    :> (Capture "tid" TeamId
                                                        :> ("members"
                                                            :> (ReqBody '[JSON] NewTeamMember
                                                                :> MultiVerb
                                                                     'PUT
                                                                     '[JSON]
                                                                     '[RespondEmpty 200 ""]
                                                                     ())))))))))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> ConnId
-> TeamId
-> NewTeamMember
-> Sem
     '[Error (Tagged 'AccessDenied ()),
       Error (Tagged 'InvalidPermissions ()),
       Error (Tagged 'TeamNotFound ()), ErrorS 'TeamMemberNotFound,
       Error (Tagged 'TooManyTeamAdmins ()), ErrorS 'NotATeamMember,
       Error (Tagged OperationDenied ()), BrigAccess, SparAccess,
       NotificationSubsystem, GundeckAPIAccess, Rpc, ExternalAccess,
       FederatorAccess, BackendNotificationQueueAccess, BotAccess,
       FireAndForget, ClientStore, CodeStore, ProposalStore,
       ConversationStore, SubConversationStore, Random,
       CustomBackendStore, TeamFeatureStore, LegalHoldStore, MemberStore,
       SearchVisibilityStore, ServiceStore, TeamNotificationStore,
       TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     ()
forall (r :: EffectRow).
(Member BrigAccess r, Member (Error (Tagged 'AccessDenied ())) r,
 Member (Error (Tagged 'InvalidPermissions ())) r,
 Member (Error (Tagged 'TeamNotFound ())) r,
 Member (ErrorS 'TeamMemberNotFound) r,
 Member (Error (Tagged 'TooManyTeamAdmins ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member NotificationSubsystem r, Member (Input UTCTime) r,
 Member (Logger (Msg -> Msg)) r, Member TeamStore r) =>
Local UserId -> ConnId -> TeamId -> NewTeamMember -> Sem r ()
updateTeamMember
    API
  (Named
     "update-team-member"
     (Summary "Update an existing team member"
      :> (CanThrow 'AccessDenied
          :> (CanThrow 'InvalidPermissions
              :> (CanThrow 'TeamNotFound
                  :> (CanThrow 'TeamMemberNotFound
                      :> (CanThrow 'TooManyTeamAdmins
                          :> (CanThrow 'NotATeamMember
                              :> (CanThrow OperationDenied
                                  :> (ZLocalUser
                                      :> (ZConn
                                          :> ("teams"
                                              :> (Capture "tid" TeamId
                                                  :> ("members"
                                                      :> (ReqBody '[JSON] NewTeamMember
                                                          :> MultiVerb
                                                               'PUT
                                                               '[JSON]
                                                               '[RespondEmpty 200 ""]
                                                               ())))))))))))))))
  '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
    Rpc, ExternalAccess, FederatorAccess,
    BackendNotificationQueueAccess, BotAccess, FireAndForget,
    ClientStore, CodeStore, ProposalStore, ConversationStore,
    SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
    LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
    TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
    TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
    ListItems CassandraPaging (Remote ConvId),
    ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
    ListItems InternalPaging TeamId, Input AllTeamFeatures,
    Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
    Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
    Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
    Error InvalidInput, Error InternalError, Error FederationError,
    Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
    Final IO]
-> API
     (Named
        "get-team-members-csv"
        (Summary "Get all members of the team as a CSV file"
         :> (CanThrow 'AccessDenied
             :> (Description
                   "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                 :> (ZLocalUser
                     :> ("teams"
                         :> (Capture "tid" TeamId
                             :> ("members"
                                 :> ("csv"
                                     :> LowLevelStream
                                          'GET
                                          200
                                          '[ '("Content-Disposition",
                                               "attachment; filename=\"wire_team_members.csv\"")]
                                          "CSV of team members"
                                          CSV)))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
-> API
     (Named
        "update-team-member"
        (Summary "Update an existing team member"
         :> (CanThrow 'AccessDenied
             :> (CanThrow 'InvalidPermissions
                 :> (CanThrow 'TeamNotFound
                     :> (CanThrow 'TeamMemberNotFound
                         :> (CanThrow 'TooManyTeamAdmins
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (ZLocalUser
                                         :> (ZConn
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("members"
                                                         :> (ReqBody '[JSON] NewTeamMember
                                                             :> MultiVerb
                                                                  'PUT
                                                                  '[JSON]
                                                                  '[RespondEmpty 200 ""]
                                                                  ()))))))))))))))
      :<|> Named
             "get-team-members-csv"
             (Summary "Get all members of the team as a CSV file"
              :> (CanThrow 'AccessDenied
                  :> (Description
                        "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                      :> (ZLocalUser
                          :> ("teams"
                              :> (Capture "tid" TeamId
                                  :> ("members"
                                      :> ("csv"
                                          :> LowLevelStream
                                               'GET
                                               200
                                               '[ '("Content-Disposition",
                                                    "attachment; filename=\"wire_team_members.csv\"")]
                                               "CSV of team members"
                                               CSV)))))))))
     '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
       Rpc, ExternalAccess, FederatorAccess,
       BackendNotificationQueueAccess, BotAccess, FireAndForget,
       ClientStore, CodeStore, ProposalStore, ConversationStore,
       SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
       LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
       TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
forall api1 (r :: EffectRow) api2.
API api1 r -> API api2 r -> API (api1 :<|> api2) r
<@> forall {k} (name :: k) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
forall (name :: Symbol) (r0 :: EffectRow) api.
(HasServer api '[Domain],
 ServerEffects (DeclaredErrorEffects api) r0) =>
ServerT api (Sem (Append (DeclaredErrorEffects api) r0))
-> API (Named name api) r0
mkNamedAPI @"get-team-members-csv" ServerT
  (Summary "Get all members of the team as a CSV file"
   :> (CanThrow 'AccessDenied
       :> (Description
             "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
           :> (ZLocalUser
               :> ("teams"
                   :> (Capture "tid" TeamId
                       :> ("members"
                           :> ("csv"
                               :> LowLevelStream
                                    'GET
                                    200
                                    '[ '("Content-Disposition",
                                         "attachment; filename=\"wire_team_members.csv\"")]
                                    "CSV of team members"
                                    CSV))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get all members of the team as a CSV file"
            :> (CanThrow 'AccessDenied
                :> (Description
                      "The endpoint returns data in chunked transfer encoding. Internal server errors might result in a failed transfer instead of a 500 response."
                    :> (ZLocalUser
                        :> ("teams"
                            :> (Capture "tid" TeamId
                                :> ("members"
                                    :> ("csv"
                                        :> LowLevelStream
                                             'GET
                                             200
                                             '[ '("Content-Disposition",
                                                  "attachment; filename=\"wire_team_members.csv\"")]
                                             "CSV of team members"
                                             CSV)))))))))
        '[BrigAccess, SparAccess, NotificationSubsystem, GundeckAPIAccess,
          Rpc, ExternalAccess, FederatorAccess,
          BackendNotificationQueueAccess, BotAccess, FireAndForget,
          ClientStore, CodeStore, ProposalStore, ConversationStore,
          SubConversationStore, Random, CustomBackendStore, TeamFeatureStore,
          LegalHoldStore, MemberStore, SearchVisibilityStore, ServiceStore,
          TeamNotificationStore, TeamStore, TeamMemberStore InternalPaging,
          TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
          ListItems CassandraPaging (Remote ConvId),
          ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
          ListItems InternalPaging TeamId, Input AllTeamFeatures,
          Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
          Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
          Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
          Error InvalidInput, Error InternalError, Error FederationError,
          Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
          Final IO]))
Local UserId
-> TeamId
-> Sem
     '[Error (Tagged 'AccessDenied ()), BrigAccess, SparAccess,
       NotificationSubsystem, GundeckAPIAccess, Rpc, ExternalAccess,
       FederatorAccess, BackendNotificationQueueAccess, BotAccess,
       FireAndForget, ClientStore, CodeStore, ProposalStore,
       ConversationStore, SubConversationStore, Random,
       CustomBackendStore, TeamFeatureStore, LegalHoldStore, MemberStore,
       SearchVisibilityStore, ServiceStore, TeamNotificationStore,
       TeamStore, TeamMemberStore InternalPaging,
       TeamMemberStore CassandraPaging, ListItems CassandraPaging ConvId,
       ListItems CassandraPaging (Remote ConvId),
       ListItems LegacyPaging ConvId, ListItems LegacyPaging TeamId,
       ListItems InternalPaging TeamId, Input AllTeamFeatures,
       Input (Maybe [TeamId], FeatureDefaults LegalholdConfig),
       Input (Local ()), Input Opts, Input UTCTime, Queue DeleteItem,
       Logger (Msg -> Msg), Error DynError, Input ClientState, Input Env,
       Error InvalidInput, Error InternalError, Error FederationError,
       Async, Delay, Fail, Embed IO, Error JSONResponse, Resource,
       Final IO]
     StreamingBody
forall (r :: EffectRow).
(Member BrigAccess r, Member (Error (Tagged 'AccessDenied ())) r,
 Member (TeamMemberStore InternalPaging) r, Member TeamStore r,
 Member (Final IO) r, Member SparAccess r) =>
Local UserId -> TeamId -> Sem r StreamingBody
getTeamMembersCSV