-- 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.LegalHold where

import Galley.API.LegalHold
import Galley.App
import Wire.API.Federation.API
import Wire.API.Routes.API
import Wire.API.Routes.Public.Galley.LegalHold

legalHoldAPI :: API LegalHoldAPI GalleyEffects
legalHoldAPI :: API LegalHoldAPI GalleyEffects
legalHoldAPI =
  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 @"create-legal-hold-settings" ServerT
  (Summary "Create legal hold service settings"
   :> (CanThrow 'NotATeamMember
       :> (CanThrow OperationDenied
           :> (CanThrow 'LegalHoldNotEnabled
               :> (CanThrow 'LegalHoldServiceInvalidKey
                   :> (CanThrow 'LegalHoldServiceBadResponse
                       :> (ZLocalUser
                           :> ("teams"
                               :> (Capture "tid" TeamId
                                   :> ("legalhold"
                                       :> ("settings"
                                           :> (ReqBody '[JSON] NewLegalHoldService
                                               :> MultiVerb
                                                    'POST
                                                    '[JSON]
                                                    '[Respond
                                                        201
                                                        "Legal hold service settings created"
                                                        ViewLegalHoldService]
                                                    ViewLegalHoldService))))))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Create legal hold service settings"
            :> (CanThrow 'NotATeamMember
                :> (CanThrow OperationDenied
                    :> (CanThrow 'LegalHoldNotEnabled
                        :> (CanThrow 'LegalHoldServiceInvalidKey
                            :> (CanThrow 'LegalHoldServiceBadResponse
                                :> (ZLocalUser
                                    :> ("teams"
                                        :> (Capture "tid" TeamId
                                            :> ("legalhold"
                                                :> ("settings"
                                                    :> (ReqBody '[JSON] NewLegalHoldService
                                                        :> MultiVerb
                                                             'POST
                                                             '[JSON]
                                                             '[Respond
                                                                 201
                                                                 "Legal hold service settings created"
                                                                 ViewLegalHoldService]
                                                             ViewLegalHoldService)))))))))))))
        '[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]))
QualifiedWithTag 'QLocal UserId
-> TeamId
-> NewLegalHoldService
-> Sem
     '[ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'LegalHoldServiceInvalidKey ()),
       Error (Tagged 'LegalHoldServiceBadResponse ()), 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]
     ViewLegalHoldService
forall (r :: EffectRow).
(Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member (Error (Tagged 'LegalHoldNotEnabled ())) r,
 Member (Error (Tagged 'LegalHoldServiceInvalidKey ())) r,
 Member (Error (Tagged 'LegalHoldServiceBadResponse ())) r,
 Member LegalHoldStore r, Member TeamFeatureStore r,
 Member TeamStore r, Member (Logger (Msg -> Msg)) r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> NewLegalHoldService -> Sem r ViewLegalHoldService
createSettings
    API
  (Named
     "create-legal-hold-settings"
     (Summary "Create legal hold service settings"
      :> (CanThrow 'NotATeamMember
          :> (CanThrow OperationDenied
              :> (CanThrow 'LegalHoldNotEnabled
                  :> (CanThrow 'LegalHoldServiceInvalidKey
                      :> (CanThrow 'LegalHoldServiceBadResponse
                          :> (ZLocalUser
                              :> ("teams"
                                  :> (Capture "tid" TeamId
                                      :> ("legalhold"
                                          :> ("settings"
                                              :> (ReqBody '[JSON] NewLegalHoldService
                                                  :> MultiVerb
                                                       'POST
                                                       '[JSON]
                                                       '[Respond
                                                           201
                                                           "Legal hold service settings created"
                                                           ViewLegalHoldService]
                                                       ViewLegalHoldService)))))))))))))
  '[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-legal-hold-settings"
        (Summary "Get legal hold service settings"
         :> (CanThrow 'NotATeamMember
             :> (CanThrow OperationDenied
                 :> (ZLocalUser
                     :> ("teams"
                         :> (Capture "tid" TeamId
                             :> ("legalhold"
                                 :> ("settings" :> Get '[JSON] ViewLegalHoldService))))))))
      :<|> (Named
              "delete-legal-hold-settings"
              (Summary "Delete legal hold service settings"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow OperationDenied
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'InvalidOperation
                                               :> (CanThrow 'LegalHoldNotEnabled
                                                   :> (CanThrow 'LegalHoldDisableUnimplemented
                                                       :> (CanThrow 'LegalHoldServiceNotRegistered
                                                           :> (CanThrow
                                                                 'UserLegalHoldIllegalOperation
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (Description
                                                                         "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                                       :> (ZLocalUser
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("legalhold"
                                                                                       :> ("settings"
                                                                                           :> (ReqBody
                                                                                                 '[JSON]
                                                                                                 RemoveLegalHoldSettingsRequest
                                                                                               :> MultiVerb
                                                                                                    'DELETE
                                                                                                    '[JSON]
                                                                                                    '[RespondEmpty
                                                                                                        204
                                                                                                        "Legal hold service settings deleted"]
                                                                                                    ())))))))))))))))))))))
            :<|> (Named
                    "get-legal-hold"
                    (Summary "Get legal hold status"
                     :> (CanThrow 'TeamMemberNotFound
                         :> (ZLocalUser
                             :> ("teams"
                                 :> (Capture "tid" TeamId
                                     :> ("legalhold"
                                         :> (Capture "uid" UserId
                                             :> Get '[JSON] UserLegalHoldStatusResponse)))))))
                  :<|> (Named
                          "consent-to-legal-hold"
                          (Summary "Consent to legal hold"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'InvalidOperation
                                               :> (CanThrow 'TeamMemberNotFound
                                                   :> (CanThrow 'UserLegalHoldIllegalOperation
                                                       :> (CanThrow
                                                             'LegalHoldCouldNotBlockConnections
                                                           :> (ZLocalUser
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("legalhold"
                                                                           :> ("consent"
                                                                               :> MultiVerb
                                                                                    'POST
                                                                                    '[JSON]
                                                                                    GrantConsentResultResponseTypes
                                                                                    GrantConsentResult))))))))))))))
                        :<|> (Named
                                "request-legal-hold-device"
                                (Summary "Request legal hold device"
                                 :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                     :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                         :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                             :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                 :> (CanThrow 'NotATeamMember
                                                     :> (CanThrow OperationDenied
                                                         :> (CanThrow 'TeamMemberNotFound
                                                             :> (CanThrow 'LegalHoldNotEnabled
                                                                 :> (CanThrow
                                                                       'UserLegalHoldAlreadyEnabled
                                                                     :> (CanThrow
                                                                           'NoUserLegalHoldConsent
                                                                         :> (CanThrow
                                                                               'LegalHoldServiceBadResponse
                                                                             :> (CanThrow
                                                                                   'LegalHoldServiceNotRegistered
                                                                                 :> (CanThrow
                                                                                       'LegalHoldCouldNotBlockConnections
                                                                                     :> (CanThrow
                                                                                           'MLSLegalholdIncompatible
                                                                                         :> (CanThrow
                                                                                               'UserLegalHoldIllegalOperation
                                                                                             :> (Description
                                                                                                   "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                                 :> (ZLocalUser
                                                                                                     :> ("teams"
                                                                                                         :> (Capture
                                                                                                               "tid"
                                                                                                               TeamId
                                                                                                             :> ("legalhold"
                                                                                                                 :> (Capture
                                                                                                                       "uid"
                                                                                                                       UserId
                                                                                                                     :> MultiVerb
                                                                                                                          'POST
                                                                                                                          '[JSON]
                                                                                                                          RequestDeviceResultResponseType
                                                                                                                          RequestDeviceResult))))))))))))))))))))))
                              :<|> (Named
                                      "disable-legal-hold-for-user"
                                      (Summary "Disable legal hold for user"
                                       :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                           :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                               :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                   :> (CanThrow AuthenticationError
                                                       :> (CanThrow
                                                             ('ActionDenied
                                                                'RemoveConversationMember)
                                                           :> (CanThrow 'NotATeamMember
                                                               :> (CanThrow OperationDenied
                                                                   :> (CanThrow
                                                                         'LegalHoldServiceNotRegistered
                                                                       :> (CanThrow
                                                                             'UserLegalHoldIllegalOperation
                                                                           :> (CanThrow
                                                                                 'LegalHoldCouldNotBlockConnections
                                                                               :> (Description
                                                                                     "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                                   :> (ZLocalUser
                                                                                       :> ("teams"
                                                                                           :> (Capture
                                                                                                 "tid"
                                                                                                 TeamId
                                                                                               :> ("legalhold"
                                                                                                   :> (Capture
                                                                                                         "uid"
                                                                                                         UserId
                                                                                                       :> (ReqBody
                                                                                                             '[JSON]
                                                                                                             DisableLegalHoldForUserRequest
                                                                                                           :> MultiVerb
                                                                                                                'DELETE
                                                                                                                '[JSON]
                                                                                                                DisableLegalHoldForUserResponseType
                                                                                                                DisableLegalHoldForUserResponse))))))))))))))))))
                                    :<|> Named
                                           "approve-legal-hold-device"
                                           (Summary "Approve legal hold device"
                                            :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                                :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                                    :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                        :> (CanThrow AuthenticationError
                                                            :> (CanThrow 'AccessDenied
                                                                :> (CanThrow
                                                                      ('ActionDenied
                                                                         'RemoveConversationMember)
                                                                    :> (CanThrow 'NotATeamMember
                                                                        :> (CanThrow
                                                                              'LegalHoldNotEnabled
                                                                            :> (CanThrow
                                                                                  'UserLegalHoldNotPending
                                                                                :> (CanThrow
                                                                                      'NoLegalHoldDeviceAllocated
                                                                                    :> (CanThrow
                                                                                          'LegalHoldServiceNotRegistered
                                                                                        :> (CanThrow
                                                                                              'UserLegalHoldAlreadyEnabled
                                                                                            :> (CanThrow
                                                                                                  'UserLegalHoldIllegalOperation
                                                                                                :> (CanThrow
                                                                                                      'LegalHoldCouldNotBlockConnections
                                                                                                    :> (Description
                                                                                                          "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                                        :> (ZLocalUser
                                                                                                            :> (ZConn
                                                                                                                :> ("teams"
                                                                                                                    :> (Capture
                                                                                                                          "tid"
                                                                                                                          TeamId
                                                                                                                        :> ("legalhold"
                                                                                                                            :> (Capture
                                                                                                                                  "uid"
                                                                                                                                  UserId
                                                                                                                                :> ("approve"
                                                                                                                                    :> (ReqBody
                                                                                                                                          '[JSON]
                                                                                                                                          ApproveLegalHoldForUserRequest
                                                                                                                                        :> MultiVerb
                                                                                                                                             'PUT
                                                                                                                                             '[JSON]
                                                                                                                                             '[RespondEmpty
                                                                                                                                                 200
                                                                                                                                                 "Legal hold approved"]
                                                                                                                                             ()))))))))))))))))))))))))))))))
     '[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
        "create-legal-hold-settings"
        (Summary "Create legal hold service settings"
         :> (CanThrow 'NotATeamMember
             :> (CanThrow OperationDenied
                 :> (CanThrow 'LegalHoldNotEnabled
                     :> (CanThrow 'LegalHoldServiceInvalidKey
                         :> (CanThrow 'LegalHoldServiceBadResponse
                             :> (ZLocalUser
                                 :> ("teams"
                                     :> (Capture "tid" TeamId
                                         :> ("legalhold"
                                             :> ("settings"
                                                 :> (ReqBody '[JSON] NewLegalHoldService
                                                     :> MultiVerb
                                                          'POST
                                                          '[JSON]
                                                          '[Respond
                                                              201
                                                              "Legal hold service settings created"
                                                              ViewLegalHoldService]
                                                          ViewLegalHoldService))))))))))))
      :<|> (Named
              "get-legal-hold-settings"
              (Summary "Get legal hold service settings"
               :> (CanThrow 'NotATeamMember
                   :> (CanThrow OperationDenied
                       :> (ZLocalUser
                           :> ("teams"
                               :> (Capture "tid" TeamId
                                   :> ("legalhold"
                                       :> ("settings" :> Get '[JSON] ViewLegalHoldService))))))))
            :<|> (Named
                    "delete-legal-hold-settings"
                    (Summary "Delete legal hold service settings"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow AuthenticationError
                                     :> (CanThrow OperationDenied
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                 :> (CanThrow 'InvalidOperation
                                                     :> (CanThrow 'LegalHoldNotEnabled
                                                         :> (CanThrow 'LegalHoldDisableUnimplemented
                                                             :> (CanThrow
                                                                   'LegalHoldServiceNotRegistered
                                                                 :> (CanThrow
                                                                       'UserLegalHoldIllegalOperation
                                                                     :> (CanThrow
                                                                           'LegalHoldCouldNotBlockConnections
                                                                         :> (Description
                                                                               "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                                             :> (ZLocalUser
                                                                                 :> ("teams"
                                                                                     :> (Capture
                                                                                           "tid"
                                                                                           TeamId
                                                                                         :> ("legalhold"
                                                                                             :> ("settings"
                                                                                                 :> (ReqBody
                                                                                                       '[JSON]
                                                                                                       RemoveLegalHoldSettingsRequest
                                                                                                     :> MultiVerb
                                                                                                          'DELETE
                                                                                                          '[JSON]
                                                                                                          '[RespondEmpty
                                                                                                              204
                                                                                                              "Legal hold service settings deleted"]
                                                                                                          ())))))))))))))))))))))
                  :<|> (Named
                          "get-legal-hold"
                          (Summary "Get legal hold status"
                           :> (CanThrow 'TeamMemberNotFound
                               :> (ZLocalUser
                                   :> ("teams"
                                       :> (Capture "tid" TeamId
                                           :> ("legalhold"
                                               :> (Capture "uid" UserId
                                                   :> Get '[JSON] UserLegalHoldStatusResponse)))))))
                        :<|> (Named
                                "consent-to-legal-hold"
                                (Summary "Consent to legal hold"
                                 :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                     :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                         :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                             :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                 :> (CanThrow 'InvalidOperation
                                                     :> (CanThrow 'TeamMemberNotFound
                                                         :> (CanThrow 'UserLegalHoldIllegalOperation
                                                             :> (CanThrow
                                                                   'LegalHoldCouldNotBlockConnections
                                                                 :> (ZLocalUser
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("legalhold"
                                                                                 :> ("consent"
                                                                                     :> MultiVerb
                                                                                          'POST
                                                                                          '[JSON]
                                                                                          GrantConsentResultResponseTypes
                                                                                          GrantConsentResult))))))))))))))
                              :<|> (Named
                                      "request-legal-hold-device"
                                      (Summary "Request legal hold device"
                                       :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                           :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                               :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                   :> (CanThrow
                                                         ('ActionDenied 'RemoveConversationMember)
                                                       :> (CanThrow 'NotATeamMember
                                                           :> (CanThrow OperationDenied
                                                               :> (CanThrow 'TeamMemberNotFound
                                                                   :> (CanThrow 'LegalHoldNotEnabled
                                                                       :> (CanThrow
                                                                             'UserLegalHoldAlreadyEnabled
                                                                           :> (CanThrow
                                                                                 'NoUserLegalHoldConsent
                                                                               :> (CanThrow
                                                                                     'LegalHoldServiceBadResponse
                                                                                   :> (CanThrow
                                                                                         'LegalHoldServiceNotRegistered
                                                                                       :> (CanThrow
                                                                                             'LegalHoldCouldNotBlockConnections
                                                                                           :> (CanThrow
                                                                                                 'MLSLegalholdIncompatible
                                                                                               :> (CanThrow
                                                                                                     'UserLegalHoldIllegalOperation
                                                                                                   :> (Description
                                                                                                         "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                                       :> (ZLocalUser
                                                                                                           :> ("teams"
                                                                                                               :> (Capture
                                                                                                                     "tid"
                                                                                                                     TeamId
                                                                                                                   :> ("legalhold"
                                                                                                                       :> (Capture
                                                                                                                             "uid"
                                                                                                                             UserId
                                                                                                                           :> MultiVerb
                                                                                                                                'POST
                                                                                                                                '[JSON]
                                                                                                                                RequestDeviceResultResponseType
                                                                                                                                RequestDeviceResult))))))))))))))))))))))
                                    :<|> (Named
                                            "disable-legal-hold-for-user"
                                            (Summary "Disable legal hold for user"
                                             :> (MakesFederatedCall
                                                   'Galley "on-conversation-updated"
                                                 :> (MakesFederatedCall
                                                       'Galley "on-mls-message-sent"
                                                     :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                         :> (CanThrow AuthenticationError
                                                             :> (CanThrow
                                                                   ('ActionDenied
                                                                      'RemoveConversationMember)
                                                                 :> (CanThrow 'NotATeamMember
                                                                     :> (CanThrow OperationDenied
                                                                         :> (CanThrow
                                                                               'LegalHoldServiceNotRegistered
                                                                             :> (CanThrow
                                                                                   'UserLegalHoldIllegalOperation
                                                                                 :> (CanThrow
                                                                                       'LegalHoldCouldNotBlockConnections
                                                                                     :> (Description
                                                                                           "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                                         :> (ZLocalUser
                                                                                             :> ("teams"
                                                                                                 :> (Capture
                                                                                                       "tid"
                                                                                                       TeamId
                                                                                                     :> ("legalhold"
                                                                                                         :> (Capture
                                                                                                               "uid"
                                                                                                               UserId
                                                                                                             :> (ReqBody
                                                                                                                   '[JSON]
                                                                                                                   DisableLegalHoldForUserRequest
                                                                                                                 :> MultiVerb
                                                                                                                      'DELETE
                                                                                                                      '[JSON]
                                                                                                                      DisableLegalHoldForUserResponseType
                                                                                                                      DisableLegalHoldForUserResponse))))))))))))))))))
                                          :<|> Named
                                                 "approve-legal-hold-device"
                                                 (Summary "Approve legal hold device"
                                                  :> (MakesFederatedCall
                                                        'Galley "on-conversation-updated"
                                                      :> (MakesFederatedCall
                                                            'Galley "on-mls-message-sent"
                                                          :> (MakesFederatedCall
                                                                'Brig "get-users-by-ids"
                                                              :> (CanThrow AuthenticationError
                                                                  :> (CanThrow 'AccessDenied
                                                                      :> (CanThrow
                                                                            ('ActionDenied
                                                                               'RemoveConversationMember)
                                                                          :> (CanThrow
                                                                                'NotATeamMember
                                                                              :> (CanThrow
                                                                                    'LegalHoldNotEnabled
                                                                                  :> (CanThrow
                                                                                        'UserLegalHoldNotPending
                                                                                      :> (CanThrow
                                                                                            'NoLegalHoldDeviceAllocated
                                                                                          :> (CanThrow
                                                                                                'LegalHoldServiceNotRegistered
                                                                                              :> (CanThrow
                                                                                                    'UserLegalHoldAlreadyEnabled
                                                                                                  :> (CanThrow
                                                                                                        'UserLegalHoldIllegalOperation
                                                                                                      :> (CanThrow
                                                                                                            'LegalHoldCouldNotBlockConnections
                                                                                                          :> (Description
                                                                                                                "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                                              :> (ZLocalUser
                                                                                                                  :> (ZConn
                                                                                                                      :> ("teams"
                                                                                                                          :> (Capture
                                                                                                                                "tid"
                                                                                                                                TeamId
                                                                                                                              :> ("legalhold"
                                                                                                                                  :> (Capture
                                                                                                                                        "uid"
                                                                                                                                        UserId
                                                                                                                                      :> ("approve"
                                                                                                                                          :> (ReqBody
                                                                                                                                                '[JSON]
                                                                                                                                                ApproveLegalHoldForUserRequest
                                                                                                                                              :> MultiVerb
                                                                                                                                                   'PUT
                                                                                                                                                   '[JSON]
                                                                                                                                                   '[RespondEmpty
                                                                                                                                                       200
                                                                                                                                                       "Legal hold approved"]
                                                                                                                                                   ())))))))))))))))))))))))))))))))
     '[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-legal-hold-settings" ServerT
  (Summary "Get legal hold service settings"
   :> (CanThrow 'NotATeamMember
       :> (CanThrow OperationDenied
           :> (ZLocalUser
               :> ("teams"
                   :> (Capture "tid" TeamId
                       :> ("legalhold"
                           :> ("settings" :> Get '[JSON] ViewLegalHoldService))))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get legal hold service settings"
            :> (CanThrow 'NotATeamMember
                :> (CanThrow OperationDenied
                    :> (ZLocalUser
                        :> ("teams"
                            :> (Capture "tid" TeamId
                                :> ("legalhold"
                                    :> ("settings" :> Get '[JSON] ViewLegalHoldService)))))))))
        '[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]))
QualifiedWithTag 'QLocal UserId
-> TeamId
-> Sem
     '[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]
     ViewLegalHoldService
forall (r :: EffectRow).
(Member (ErrorS 'NotATeamMember) r, Member LegalHoldStore r,
 Member TeamFeatureStore r, Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> Sem r ViewLegalHoldService
getSettings
    API
  (Named
     "get-legal-hold-settings"
     (Summary "Get legal hold service settings"
      :> (CanThrow 'NotATeamMember
          :> (CanThrow OperationDenied
              :> (ZLocalUser
                  :> ("teams"
                      :> (Capture "tid" TeamId
                          :> ("legalhold"
                              :> ("settings" :> Get '[JSON] ViewLegalHoldService)))))))))
  '[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-legal-hold-settings"
        (Summary "Delete legal hold service settings"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow OperationDenied
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'InvalidOperation
                                         :> (CanThrow 'LegalHoldNotEnabled
                                             :> (CanThrow 'LegalHoldDisableUnimplemented
                                                 :> (CanThrow 'LegalHoldServiceNotRegistered
                                                     :> (CanThrow 'UserLegalHoldIllegalOperation
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (Description
                                                                   "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                                 :> (ZLocalUser
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("legalhold"
                                                                                 :> ("settings"
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           RemoveLegalHoldSettingsRequest
                                                                                         :> MultiVerb
                                                                                              'DELETE
                                                                                              '[JSON]
                                                                                              '[RespondEmpty
                                                                                                  204
                                                                                                  "Legal hold service settings deleted"]
                                                                                              ())))))))))))))))))))))
      :<|> (Named
              "get-legal-hold"
              (Summary "Get legal hold status"
               :> (CanThrow 'TeamMemberNotFound
                   :> (ZLocalUser
                       :> ("teams"
                           :> (Capture "tid" TeamId
                               :> ("legalhold"
                                   :> (Capture "uid" UserId
                                       :> Get '[JSON] UserLegalHoldStatusResponse)))))))
            :<|> (Named
                    "consent-to-legal-hold"
                    (Summary "Consent to legal hold"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'InvalidOperation
                                         :> (CanThrow 'TeamMemberNotFound
                                             :> (CanThrow 'UserLegalHoldIllegalOperation
                                                 :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                     :> (ZLocalUser
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("legalhold"
                                                                     :> ("consent"
                                                                         :> MultiVerb
                                                                              'POST
                                                                              '[JSON]
                                                                              GrantConsentResultResponseTypes
                                                                              GrantConsentResult))))))))))))))
                  :<|> (Named
                          "request-legal-hold-device"
                          (Summary "Request legal hold device"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'NotATeamMember
                                               :> (CanThrow OperationDenied
                                                   :> (CanThrow 'TeamMemberNotFound
                                                       :> (CanThrow 'LegalHoldNotEnabled
                                                           :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                               :> (CanThrow 'NoUserLegalHoldConsent
                                                                   :> (CanThrow
                                                                         'LegalHoldServiceBadResponse
                                                                       :> (CanThrow
                                                                             'LegalHoldServiceNotRegistered
                                                                           :> (CanThrow
                                                                                 'LegalHoldCouldNotBlockConnections
                                                                               :> (CanThrow
                                                                                     'MLSLegalholdIncompatible
                                                                                   :> (CanThrow
                                                                                         'UserLegalHoldIllegalOperation
                                                                                       :> (Description
                                                                                             "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                           :> (ZLocalUser
                                                                                               :> ("teams"
                                                                                                   :> (Capture
                                                                                                         "tid"
                                                                                                         TeamId
                                                                                                       :> ("legalhold"
                                                                                                           :> (Capture
                                                                                                                 "uid"
                                                                                                                 UserId
                                                                                                               :> MultiVerb
                                                                                                                    'POST
                                                                                                                    '[JSON]
                                                                                                                    RequestDeviceResultResponseType
                                                                                                                    RequestDeviceResult))))))))))))))))))))))
                        :<|> (Named
                                "disable-legal-hold-for-user"
                                (Summary "Disable legal hold for user"
                                 :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                     :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                         :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                             :> (CanThrow AuthenticationError
                                                 :> (CanThrow
                                                       ('ActionDenied 'RemoveConversationMember)
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (CanThrow
                                                                   'LegalHoldServiceNotRegistered
                                                                 :> (CanThrow
                                                                       'UserLegalHoldIllegalOperation
                                                                     :> (CanThrow
                                                                           'LegalHoldCouldNotBlockConnections
                                                                         :> (Description
                                                                               "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                             :> (ZLocalUser
                                                                                 :> ("teams"
                                                                                     :> (Capture
                                                                                           "tid"
                                                                                           TeamId
                                                                                         :> ("legalhold"
                                                                                             :> (Capture
                                                                                                   "uid"
                                                                                                   UserId
                                                                                                 :> (ReqBody
                                                                                                       '[JSON]
                                                                                                       DisableLegalHoldForUserRequest
                                                                                                     :> MultiVerb
                                                                                                          'DELETE
                                                                                                          '[JSON]
                                                                                                          DisableLegalHoldForUserResponseType
                                                                                                          DisableLegalHoldForUserResponse))))))))))))))))))
                              :<|> Named
                                     "approve-legal-hold-device"
                                     (Summary "Approve legal hold device"
                                      :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                  :> (CanThrow AuthenticationError
                                                      :> (CanThrow 'AccessDenied
                                                          :> (CanThrow
                                                                ('ActionDenied
                                                                   'RemoveConversationMember)
                                                              :> (CanThrow 'NotATeamMember
                                                                  :> (CanThrow 'LegalHoldNotEnabled
                                                                      :> (CanThrow
                                                                            'UserLegalHoldNotPending
                                                                          :> (CanThrow
                                                                                'NoLegalHoldDeviceAllocated
                                                                              :> (CanThrow
                                                                                    'LegalHoldServiceNotRegistered
                                                                                  :> (CanThrow
                                                                                        'UserLegalHoldAlreadyEnabled
                                                                                      :> (CanThrow
                                                                                            'UserLegalHoldIllegalOperation
                                                                                          :> (CanThrow
                                                                                                'LegalHoldCouldNotBlockConnections
                                                                                              :> (Description
                                                                                                    "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                                  :> (ZLocalUser
                                                                                                      :> (ZConn
                                                                                                          :> ("teams"
                                                                                                              :> (Capture
                                                                                                                    "tid"
                                                                                                                    TeamId
                                                                                                                  :> ("legalhold"
                                                                                                                      :> (Capture
                                                                                                                            "uid"
                                                                                                                            UserId
                                                                                                                          :> ("approve"
                                                                                                                              :> (ReqBody
                                                                                                                                    '[JSON]
                                                                                                                                    ApproveLegalHoldForUserRequest
                                                                                                                                  :> MultiVerb
                                                                                                                                       'PUT
                                                                                                                                       '[JSON]
                                                                                                                                       '[RespondEmpty
                                                                                                                                           200
                                                                                                                                           "Legal hold approved"]
                                                                                                                                       ())))))))))))))))))))))))))))))
     '[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-legal-hold-settings"
        (Summary "Get legal hold service settings"
         :> (CanThrow 'NotATeamMember
             :> (CanThrow OperationDenied
                 :> (ZLocalUser
                     :> ("teams"
                         :> (Capture "tid" TeamId
                             :> ("legalhold"
                                 :> ("settings" :> Get '[JSON] ViewLegalHoldService))))))))
      :<|> (Named
              "delete-legal-hold-settings"
              (Summary "Delete legal hold service settings"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow OperationDenied
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'InvalidOperation
                                               :> (CanThrow 'LegalHoldNotEnabled
                                                   :> (CanThrow 'LegalHoldDisableUnimplemented
                                                       :> (CanThrow 'LegalHoldServiceNotRegistered
                                                           :> (CanThrow
                                                                 'UserLegalHoldIllegalOperation
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (Description
                                                                         "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                                       :> (ZLocalUser
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("legalhold"
                                                                                       :> ("settings"
                                                                                           :> (ReqBody
                                                                                                 '[JSON]
                                                                                                 RemoveLegalHoldSettingsRequest
                                                                                               :> MultiVerb
                                                                                                    'DELETE
                                                                                                    '[JSON]
                                                                                                    '[RespondEmpty
                                                                                                        204
                                                                                                        "Legal hold service settings deleted"]
                                                                                                    ())))))))))))))))))))))
            :<|> (Named
                    "get-legal-hold"
                    (Summary "Get legal hold status"
                     :> (CanThrow 'TeamMemberNotFound
                         :> (ZLocalUser
                             :> ("teams"
                                 :> (Capture "tid" TeamId
                                     :> ("legalhold"
                                         :> (Capture "uid" UserId
                                             :> Get '[JSON] UserLegalHoldStatusResponse)))))))
                  :<|> (Named
                          "consent-to-legal-hold"
                          (Summary "Consent to legal hold"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'InvalidOperation
                                               :> (CanThrow 'TeamMemberNotFound
                                                   :> (CanThrow 'UserLegalHoldIllegalOperation
                                                       :> (CanThrow
                                                             'LegalHoldCouldNotBlockConnections
                                                           :> (ZLocalUser
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("legalhold"
                                                                           :> ("consent"
                                                                               :> MultiVerb
                                                                                    'POST
                                                                                    '[JSON]
                                                                                    GrantConsentResultResponseTypes
                                                                                    GrantConsentResult))))))))))))))
                        :<|> (Named
                                "request-legal-hold-device"
                                (Summary "Request legal hold device"
                                 :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                     :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                         :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                             :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                 :> (CanThrow 'NotATeamMember
                                                     :> (CanThrow OperationDenied
                                                         :> (CanThrow 'TeamMemberNotFound
                                                             :> (CanThrow 'LegalHoldNotEnabled
                                                                 :> (CanThrow
                                                                       'UserLegalHoldAlreadyEnabled
                                                                     :> (CanThrow
                                                                           'NoUserLegalHoldConsent
                                                                         :> (CanThrow
                                                                               'LegalHoldServiceBadResponse
                                                                             :> (CanThrow
                                                                                   'LegalHoldServiceNotRegistered
                                                                                 :> (CanThrow
                                                                                       'LegalHoldCouldNotBlockConnections
                                                                                     :> (CanThrow
                                                                                           'MLSLegalholdIncompatible
                                                                                         :> (CanThrow
                                                                                               'UserLegalHoldIllegalOperation
                                                                                             :> (Description
                                                                                                   "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                                 :> (ZLocalUser
                                                                                                     :> ("teams"
                                                                                                         :> (Capture
                                                                                                               "tid"
                                                                                                               TeamId
                                                                                                             :> ("legalhold"
                                                                                                                 :> (Capture
                                                                                                                       "uid"
                                                                                                                       UserId
                                                                                                                     :> MultiVerb
                                                                                                                          'POST
                                                                                                                          '[JSON]
                                                                                                                          RequestDeviceResultResponseType
                                                                                                                          RequestDeviceResult))))))))))))))))))))))
                              :<|> (Named
                                      "disable-legal-hold-for-user"
                                      (Summary "Disable legal hold for user"
                                       :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                           :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                               :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                   :> (CanThrow AuthenticationError
                                                       :> (CanThrow
                                                             ('ActionDenied
                                                                'RemoveConversationMember)
                                                           :> (CanThrow 'NotATeamMember
                                                               :> (CanThrow OperationDenied
                                                                   :> (CanThrow
                                                                         'LegalHoldServiceNotRegistered
                                                                       :> (CanThrow
                                                                             'UserLegalHoldIllegalOperation
                                                                           :> (CanThrow
                                                                                 'LegalHoldCouldNotBlockConnections
                                                                               :> (Description
                                                                                     "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                                   :> (ZLocalUser
                                                                                       :> ("teams"
                                                                                           :> (Capture
                                                                                                 "tid"
                                                                                                 TeamId
                                                                                               :> ("legalhold"
                                                                                                   :> (Capture
                                                                                                         "uid"
                                                                                                         UserId
                                                                                                       :> (ReqBody
                                                                                                             '[JSON]
                                                                                                             DisableLegalHoldForUserRequest
                                                                                                           :> MultiVerb
                                                                                                                'DELETE
                                                                                                                '[JSON]
                                                                                                                DisableLegalHoldForUserResponseType
                                                                                                                DisableLegalHoldForUserResponse))))))))))))))))))
                                    :<|> Named
                                           "approve-legal-hold-device"
                                           (Summary "Approve legal hold device"
                                            :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                                :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                                    :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                        :> (CanThrow AuthenticationError
                                                            :> (CanThrow 'AccessDenied
                                                                :> (CanThrow
                                                                      ('ActionDenied
                                                                         'RemoveConversationMember)
                                                                    :> (CanThrow 'NotATeamMember
                                                                        :> (CanThrow
                                                                              'LegalHoldNotEnabled
                                                                            :> (CanThrow
                                                                                  'UserLegalHoldNotPending
                                                                                :> (CanThrow
                                                                                      'NoLegalHoldDeviceAllocated
                                                                                    :> (CanThrow
                                                                                          'LegalHoldServiceNotRegistered
                                                                                        :> (CanThrow
                                                                                              'UserLegalHoldAlreadyEnabled
                                                                                            :> (CanThrow
                                                                                                  'UserLegalHoldIllegalOperation
                                                                                                :> (CanThrow
                                                                                                      'LegalHoldCouldNotBlockConnections
                                                                                                    :> (Description
                                                                                                          "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                                        :> (ZLocalUser
                                                                                                            :> (ZConn
                                                                                                                :> ("teams"
                                                                                                                    :> (Capture
                                                                                                                          "tid"
                                                                                                                          TeamId
                                                                                                                        :> ("legalhold"
                                                                                                                            :> (Capture
                                                                                                                                  "uid"
                                                                                                                                  UserId
                                                                                                                                :> ("approve"
                                                                                                                                    :> (ReqBody
                                                                                                                                          '[JSON]
                                                                                                                                          ApproveLegalHoldForUserRequest
                                                                                                                                        :> MultiVerb
                                                                                                                                             'PUT
                                                                                                                                             '[JSON]
                                                                                                                                             '[RespondEmpty
                                                                                                                                                 200
                                                                                                                                                 "Legal hold approved"]
                                                                                                                                             ()))))))))))))))))))))))))))))))
     '[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-legal-hold-settings" (((HasAnnotation 'Remote "galley" "on-conversation-updated",
  (HasAnnotation 'Remote "galley" "on-mls-message-sent",
   (HasAnnotation 'Remote "brig" "get-users-by-ids",
    () :: Constraint))) =>
 QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> RemoveLegalHoldSettingsRequest
 -> Sem
      '[Error AuthenticationError, Error (Tagged OperationDenied ()),
        ErrorS 'NotATeamMember,
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        Error (Tagged 'InvalidOperation ()),
        Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'LegalHoldDisableUnimplemented ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      ())
-> Dict (HasAnnotation 'Remote "galley" "on-conversation-updated")
-> Dict (HasAnnotation 'Remote "galley" "on-mls-message-sent")
-> Dict (HasAnnotation 'Remote "brig" "get-users-by-ids")
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> RemoveLegalHoldSettingsRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged OperationDenied ()),
       ErrorS 'NotATeamMember,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'LegalHoldDisableUnimplemented ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 (c :: Constraint) r a. SolveCallsFed c r a => (c => r) -> a
callsFed ((QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> RemoveLegalHoldSettingsRequest
 -> Sem
      '[Error AuthenticationError, Error (Tagged OperationDenied ()),
        ErrorS 'NotATeamMember,
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        Error (Tagged 'InvalidOperation ()),
        Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'LegalHoldDisableUnimplemented ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      ())
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> RemoveLegalHoldSettingsRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged OperationDenied ()),
       ErrorS 'NotATeamMember,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'LegalHoldDisableUnimplemented ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 x a. ToHasAnnotations x => a -> a
exposeAnnotations QualifiedWithTag 'QLocal UserId
-> TeamId
-> RemoveLegalHoldSettingsRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged OperationDenied ()),
       ErrorS 'NotATeamMember,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'LegalHoldDisableUnimplemented ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error AuthenticationError) r,
 Member (Error FederationError) r, Member (Error InternalError) r,
 Member
   (Error (Tagged ('ActionDenied 'RemoveConversationMember) ())) r,
 Member (Error (Tagged 'LegalHoldCouldNotBlockConnections ())) r,
 Member (Error (Tagged 'LegalHoldDisableUnimplemented ())) r,
 Member (Error (Tagged 'LegalHoldNotEnabled ())) r,
 Member (Error (Tagged 'LegalHoldServiceNotRegistered ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member (Error (Tagged 'UserLegalHoldIllegalOperation ())) r,
 Member ExternalAccess r, Member FederatorAccess r,
 Member FireAndForget r, Member NotificationSubsystem r,
 Member (Input Env) r, Member (Input (Local ())) r,
 Member (Input UTCTime) r, Member LegalHoldStore r,
 Member (ListItems LegacyPaging ConvId) r, Member MemberStore r,
 Member ProposalStore r, Member (Logger (Msg -> Msg)) r,
 Member Random r, Member SubConversationStore r,
 Member TeamFeatureStore r,
 Member (TeamMemberStore InternalPaging) r, Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> RemoveLegalHoldSettingsRequest -> Sem r ()
removeSettingsInternalPaging))
    API
  (Named
     "delete-legal-hold-settings"
     (Summary "Delete legal hold service settings"
      :> (MakesFederatedCall 'Galley "on-conversation-updated"
          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                  :> (CanThrow AuthenticationError
                      :> (CanThrow OperationDenied
                          :> (CanThrow 'NotATeamMember
                              :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                  :> (CanThrow 'InvalidOperation
                                      :> (CanThrow 'LegalHoldNotEnabled
                                          :> (CanThrow 'LegalHoldDisableUnimplemented
                                              :> (CanThrow 'LegalHoldServiceNotRegistered
                                                  :> (CanThrow 'UserLegalHoldIllegalOperation
                                                      :> (CanThrow
                                                            'LegalHoldCouldNotBlockConnections
                                                          :> (Description
                                                                "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                              :> (ZLocalUser
                                                                  :> ("teams"
                                                                      :> (Capture "tid" TeamId
                                                                          :> ("legalhold"
                                                                              :> ("settings"
                                                                                  :> (ReqBody
                                                                                        '[JSON]
                                                                                        RemoveLegalHoldSettingsRequest
                                                                                      :> MultiVerb
                                                                                           'DELETE
                                                                                           '[JSON]
                                                                                           '[RespondEmpty
                                                                                               204
                                                                                               "Legal hold service settings deleted"]
                                                                                           ()))))))))))))))))))))))
  '[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-legal-hold"
        (Summary "Get legal hold status"
         :> (CanThrow 'TeamMemberNotFound
             :> (ZLocalUser
                 :> ("teams"
                     :> (Capture "tid" TeamId
                         :> ("legalhold"
                             :> (Capture "uid" UserId
                                 :> Get '[JSON] UserLegalHoldStatusResponse)))))))
      :<|> (Named
              "consent-to-legal-hold"
              (Summary "Consent to legal hold"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                               :> (CanThrow 'InvalidOperation
                                   :> (CanThrow 'TeamMemberNotFound
                                       :> (CanThrow 'UserLegalHoldIllegalOperation
                                           :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                               :> (ZLocalUser
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("legalhold"
                                                               :> ("consent"
                                                                   :> MultiVerb
                                                                        'POST
                                                                        '[JSON]
                                                                        GrantConsentResultResponseTypes
                                                                        GrantConsentResult))))))))))))))
            :<|> (Named
                    "request-legal-hold-device"
                    (Summary "Request legal hold device"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'NotATeamMember
                                         :> (CanThrow OperationDenied
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'LegalHoldNotEnabled
                                                     :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                         :> (CanThrow 'NoUserLegalHoldConsent
                                                             :> (CanThrow
                                                                   'LegalHoldServiceBadResponse
                                                                 :> (CanThrow
                                                                       'LegalHoldServiceNotRegistered
                                                                     :> (CanThrow
                                                                           'LegalHoldCouldNotBlockConnections
                                                                         :> (CanThrow
                                                                               'MLSLegalholdIncompatible
                                                                             :> (CanThrow
                                                                                   'UserLegalHoldIllegalOperation
                                                                                 :> (Description
                                                                                       "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                     :> (ZLocalUser
                                                                                         :> ("teams"
                                                                                             :> (Capture
                                                                                                   "tid"
                                                                                                   TeamId
                                                                                                 :> ("legalhold"
                                                                                                     :> (Capture
                                                                                                           "uid"
                                                                                                           UserId
                                                                                                         :> MultiVerb
                                                                                                              'POST
                                                                                                              '[JSON]
                                                                                                              RequestDeviceResultResponseType
                                                                                                              RequestDeviceResult))))))))))))))))))))))
                  :<|> (Named
                          "disable-legal-hold-for-user"
                          (Summary "Disable legal hold for user"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow AuthenticationError
                                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (CanThrow 'LegalHoldServiceNotRegistered
                                                           :> (CanThrow
                                                                 'UserLegalHoldIllegalOperation
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (Description
                                                                         "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                       :> (ZLocalUser
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("legalhold"
                                                                                       :> (Capture
                                                                                             "uid"
                                                                                             UserId
                                                                                           :> (ReqBody
                                                                                                 '[JSON]
                                                                                                 DisableLegalHoldForUserRequest
                                                                                               :> MultiVerb
                                                                                                    'DELETE
                                                                                                    '[JSON]
                                                                                                    DisableLegalHoldForUserResponseType
                                                                                                    DisableLegalHoldForUserResponse))))))))))))))))))
                        :<|> Named
                               "approve-legal-hold-device"
                               (Summary "Approve legal hold device"
                                :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                    :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                        :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                            :> (CanThrow AuthenticationError
                                                :> (CanThrow 'AccessDenied
                                                    :> (CanThrow
                                                          ('ActionDenied 'RemoveConversationMember)
                                                        :> (CanThrow 'NotATeamMember
                                                            :> (CanThrow 'LegalHoldNotEnabled
                                                                :> (CanThrow
                                                                      'UserLegalHoldNotPending
                                                                    :> (CanThrow
                                                                          'NoLegalHoldDeviceAllocated
                                                                        :> (CanThrow
                                                                              'LegalHoldServiceNotRegistered
                                                                            :> (CanThrow
                                                                                  'UserLegalHoldAlreadyEnabled
                                                                                :> (CanThrow
                                                                                      'UserLegalHoldIllegalOperation
                                                                                    :> (CanThrow
                                                                                          'LegalHoldCouldNotBlockConnections
                                                                                        :> (Description
                                                                                              "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                            :> (ZLocalUser
                                                                                                :> (ZConn
                                                                                                    :> ("teams"
                                                                                                        :> (Capture
                                                                                                              "tid"
                                                                                                              TeamId
                                                                                                            :> ("legalhold"
                                                                                                                :> (Capture
                                                                                                                      "uid"
                                                                                                                      UserId
                                                                                                                    :> ("approve"
                                                                                                                        :> (ReqBody
                                                                                                                              '[JSON]
                                                                                                                              ApproveLegalHoldForUserRequest
                                                                                                                            :> MultiVerb
                                                                                                                                 'PUT
                                                                                                                                 '[JSON]
                                                                                                                                 '[RespondEmpty
                                                                                                                                     200
                                                                                                                                     "Legal hold approved"]
                                                                                                                                 ()))))))))))))))))))))))))))))
     '[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-legal-hold-settings"
        (Summary "Delete legal hold service settings"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow OperationDenied
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'InvalidOperation
                                         :> (CanThrow 'LegalHoldNotEnabled
                                             :> (CanThrow 'LegalHoldDisableUnimplemented
                                                 :> (CanThrow 'LegalHoldServiceNotRegistered
                                                     :> (CanThrow 'UserLegalHoldIllegalOperation
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (Description
                                                                   "This endpoint can lead to the following events being sent:\n- ClientRemoved event to members with a legalhold client (via brig)\n- UserLegalHoldDisabled event to contacts of members with a legalhold client (via brig)"
                                                                 :> (ZLocalUser
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("legalhold"
                                                                                 :> ("settings"
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           RemoveLegalHoldSettingsRequest
                                                                                         :> MultiVerb
                                                                                              'DELETE
                                                                                              '[JSON]
                                                                                              '[RespondEmpty
                                                                                                  204
                                                                                                  "Legal hold service settings deleted"]
                                                                                              ())))))))))))))))))))))
      :<|> (Named
              "get-legal-hold"
              (Summary "Get legal hold status"
               :> (CanThrow 'TeamMemberNotFound
                   :> (ZLocalUser
                       :> ("teams"
                           :> (Capture "tid" TeamId
                               :> ("legalhold"
                                   :> (Capture "uid" UserId
                                       :> Get '[JSON] UserLegalHoldStatusResponse)))))))
            :<|> (Named
                    "consent-to-legal-hold"
                    (Summary "Consent to legal hold"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'InvalidOperation
                                         :> (CanThrow 'TeamMemberNotFound
                                             :> (CanThrow 'UserLegalHoldIllegalOperation
                                                 :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                     :> (ZLocalUser
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("legalhold"
                                                                     :> ("consent"
                                                                         :> MultiVerb
                                                                              'POST
                                                                              '[JSON]
                                                                              GrantConsentResultResponseTypes
                                                                              GrantConsentResult))))))))))))))
                  :<|> (Named
                          "request-legal-hold-device"
                          (Summary "Request legal hold device"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                           :> (CanThrow 'NotATeamMember
                                               :> (CanThrow OperationDenied
                                                   :> (CanThrow 'TeamMemberNotFound
                                                       :> (CanThrow 'LegalHoldNotEnabled
                                                           :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                               :> (CanThrow 'NoUserLegalHoldConsent
                                                                   :> (CanThrow
                                                                         'LegalHoldServiceBadResponse
                                                                       :> (CanThrow
                                                                             'LegalHoldServiceNotRegistered
                                                                           :> (CanThrow
                                                                                 'LegalHoldCouldNotBlockConnections
                                                                               :> (CanThrow
                                                                                     'MLSLegalholdIncompatible
                                                                                   :> (CanThrow
                                                                                         'UserLegalHoldIllegalOperation
                                                                                       :> (Description
                                                                                             "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                           :> (ZLocalUser
                                                                                               :> ("teams"
                                                                                                   :> (Capture
                                                                                                         "tid"
                                                                                                         TeamId
                                                                                                       :> ("legalhold"
                                                                                                           :> (Capture
                                                                                                                 "uid"
                                                                                                                 UserId
                                                                                                               :> MultiVerb
                                                                                                                    'POST
                                                                                                                    '[JSON]
                                                                                                                    RequestDeviceResultResponseType
                                                                                                                    RequestDeviceResult))))))))))))))))))))))
                        :<|> (Named
                                "disable-legal-hold-for-user"
                                (Summary "Disable legal hold for user"
                                 :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                     :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                         :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                             :> (CanThrow AuthenticationError
                                                 :> (CanThrow
                                                       ('ActionDenied 'RemoveConversationMember)
                                                     :> (CanThrow 'NotATeamMember
                                                         :> (CanThrow OperationDenied
                                                             :> (CanThrow
                                                                   'LegalHoldServiceNotRegistered
                                                                 :> (CanThrow
                                                                       'UserLegalHoldIllegalOperation
                                                                     :> (CanThrow
                                                                           'LegalHoldCouldNotBlockConnections
                                                                         :> (Description
                                                                               "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                             :> (ZLocalUser
                                                                                 :> ("teams"
                                                                                     :> (Capture
                                                                                           "tid"
                                                                                           TeamId
                                                                                         :> ("legalhold"
                                                                                             :> (Capture
                                                                                                   "uid"
                                                                                                   UserId
                                                                                                 :> (ReqBody
                                                                                                       '[JSON]
                                                                                                       DisableLegalHoldForUserRequest
                                                                                                     :> MultiVerb
                                                                                                          'DELETE
                                                                                                          '[JSON]
                                                                                                          DisableLegalHoldForUserResponseType
                                                                                                          DisableLegalHoldForUserResponse))))))))))))))))))
                              :<|> Named
                                     "approve-legal-hold-device"
                                     (Summary "Approve legal hold device"
                                      :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                                  :> (CanThrow AuthenticationError
                                                      :> (CanThrow 'AccessDenied
                                                          :> (CanThrow
                                                                ('ActionDenied
                                                                   'RemoveConversationMember)
                                                              :> (CanThrow 'NotATeamMember
                                                                  :> (CanThrow 'LegalHoldNotEnabled
                                                                      :> (CanThrow
                                                                            'UserLegalHoldNotPending
                                                                          :> (CanThrow
                                                                                'NoLegalHoldDeviceAllocated
                                                                              :> (CanThrow
                                                                                    'LegalHoldServiceNotRegistered
                                                                                  :> (CanThrow
                                                                                        'UserLegalHoldAlreadyEnabled
                                                                                      :> (CanThrow
                                                                                            'UserLegalHoldIllegalOperation
                                                                                          :> (CanThrow
                                                                                                'LegalHoldCouldNotBlockConnections
                                                                                              :> (Description
                                                                                                    "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                                  :> (ZLocalUser
                                                                                                      :> (ZConn
                                                                                                          :> ("teams"
                                                                                                              :> (Capture
                                                                                                                    "tid"
                                                                                                                    TeamId
                                                                                                                  :> ("legalhold"
                                                                                                                      :> (Capture
                                                                                                                            "uid"
                                                                                                                            UserId
                                                                                                                          :> ("approve"
                                                                                                                              :> (ReqBody
                                                                                                                                    '[JSON]
                                                                                                                                    ApproveLegalHoldForUserRequest
                                                                                                                                  :> MultiVerb
                                                                                                                                       'PUT
                                                                                                                                       '[JSON]
                                                                                                                                       '[RespondEmpty
                                                                                                                                           200
                                                                                                                                           "Legal hold approved"]
                                                                                                                                       ())))))))))))))))))))))))))))))
     '[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-legal-hold" ServerT
  (Summary "Get legal hold status"
   :> (CanThrow 'TeamMemberNotFound
       :> (ZLocalUser
           :> ("teams"
               :> (Capture "tid" TeamId
                   :> ("legalhold"
                       :> (Capture "uid" UserId
                           :> Get '[JSON] UserLegalHoldStatusResponse)))))))
  (Sem
     (Append
        (DeclaredErrorEffects
           (Summary "Get legal hold status"
            :> (CanThrow 'TeamMemberNotFound
                :> (ZLocalUser
                    :> ("teams"
                        :> (Capture "tid" TeamId
                            :> ("legalhold"
                                :> (Capture "uid" UserId
                                    :> Get '[JSON] UserLegalHoldStatusResponse))))))))
        '[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]))
QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Sem
     '[Error (Tagged '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]
     UserLegalHoldStatusResponse
forall (r :: EffectRow).
(Member (Error InternalError) r,
 Member (Error (Tagged 'TeamMemberNotFound ())) r,
 Member LegalHoldStore r, Member TeamStore r,
 Member (Logger (Msg -> Msg)) r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> UserId -> Sem r UserLegalHoldStatusResponse
getUserStatus
    API
  (Named
     "get-legal-hold"
     (Summary "Get legal hold status"
      :> (CanThrow 'TeamMemberNotFound
          :> (ZLocalUser
              :> ("teams"
                  :> (Capture "tid" TeamId
                      :> ("legalhold"
                          :> (Capture "uid" UserId
                              :> Get '[JSON] UserLegalHoldStatusResponse))))))))
  '[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
        "consent-to-legal-hold"
        (Summary "Consent to legal hold"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                         :> (CanThrow 'InvalidOperation
                             :> (CanThrow 'TeamMemberNotFound
                                 :> (CanThrow 'UserLegalHoldIllegalOperation
                                     :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                         :> (ZLocalUser
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("legalhold"
                                                         :> ("consent"
                                                             :> MultiVerb
                                                                  'POST
                                                                  '[JSON]
                                                                  GrantConsentResultResponseTypes
                                                                  GrantConsentResult))))))))))))))
      :<|> (Named
              "request-legal-hold-device"
              (Summary "Request legal hold device"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                               :> (CanThrow 'NotATeamMember
                                   :> (CanThrow OperationDenied
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'LegalHoldNotEnabled
                                               :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                   :> (CanThrow 'NoUserLegalHoldConsent
                                                       :> (CanThrow 'LegalHoldServiceBadResponse
                                                           :> (CanThrow
                                                                 'LegalHoldServiceNotRegistered
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (CanThrow
                                                                         'MLSLegalholdIncompatible
                                                                       :> (CanThrow
                                                                             'UserLegalHoldIllegalOperation
                                                                           :> (Description
                                                                                 "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                               :> (ZLocalUser
                                                                                   :> ("teams"
                                                                                       :> (Capture
                                                                                             "tid"
                                                                                             TeamId
                                                                                           :> ("legalhold"
                                                                                               :> (Capture
                                                                                                     "uid"
                                                                                                     UserId
                                                                                                   :> MultiVerb
                                                                                                        'POST
                                                                                                        '[JSON]
                                                                                                        RequestDeviceResultResponseType
                                                                                                        RequestDeviceResult))))))))))))))))))))))
            :<|> (Named
                    "disable-legal-hold-for-user"
                    (Summary "Disable legal hold for user"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow AuthenticationError
                                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (CanThrow 'LegalHoldServiceNotRegistered
                                                     :> (CanThrow 'UserLegalHoldIllegalOperation
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (Description
                                                                   "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                 :> (ZLocalUser
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("legalhold"
                                                                                 :> (Capture
                                                                                       "uid" UserId
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           DisableLegalHoldForUserRequest
                                                                                         :> MultiVerb
                                                                                              'DELETE
                                                                                              '[JSON]
                                                                                              DisableLegalHoldForUserResponseType
                                                                                              DisableLegalHoldForUserResponse))))))))))))))))))
                  :<|> Named
                         "approve-legal-hold-device"
                         (Summary "Approve legal hold device"
                          :> (MakesFederatedCall 'Galley "on-conversation-updated"
                              :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                  :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                      :> (CanThrow AuthenticationError
                                          :> (CanThrow 'AccessDenied
                                              :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                  :> (CanThrow 'NotATeamMember
                                                      :> (CanThrow 'LegalHoldNotEnabled
                                                          :> (CanThrow 'UserLegalHoldNotPending
                                                              :> (CanThrow
                                                                    'NoLegalHoldDeviceAllocated
                                                                  :> (CanThrow
                                                                        'LegalHoldServiceNotRegistered
                                                                      :> (CanThrow
                                                                            'UserLegalHoldAlreadyEnabled
                                                                          :> (CanThrow
                                                                                'UserLegalHoldIllegalOperation
                                                                              :> (CanThrow
                                                                                    'LegalHoldCouldNotBlockConnections
                                                                                  :> (Description
                                                                                        "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                      :> (ZLocalUser
                                                                                          :> (ZConn
                                                                                              :> ("teams"
                                                                                                  :> (Capture
                                                                                                        "tid"
                                                                                                        TeamId
                                                                                                      :> ("legalhold"
                                                                                                          :> (Capture
                                                                                                                "uid"
                                                                                                                UserId
                                                                                                              :> ("approve"
                                                                                                                  :> (ReqBody
                                                                                                                        '[JSON]
                                                                                                                        ApproveLegalHoldForUserRequest
                                                                                                                      :> MultiVerb
                                                                                                                           'PUT
                                                                                                                           '[JSON]
                                                                                                                           '[RespondEmpty
                                                                                                                               200
                                                                                                                               "Legal hold approved"]
                                                                                                                           ())))))))))))))))))))))))))))
     '[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-legal-hold"
        (Summary "Get legal hold status"
         :> (CanThrow 'TeamMemberNotFound
             :> (ZLocalUser
                 :> ("teams"
                     :> (Capture "tid" TeamId
                         :> ("legalhold"
                             :> (Capture "uid" UserId
                                 :> Get '[JSON] UserLegalHoldStatusResponse)))))))
      :<|> (Named
              "consent-to-legal-hold"
              (Summary "Consent to legal hold"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                               :> (CanThrow 'InvalidOperation
                                   :> (CanThrow 'TeamMemberNotFound
                                       :> (CanThrow 'UserLegalHoldIllegalOperation
                                           :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                               :> (ZLocalUser
                                                   :> ("teams"
                                                       :> (Capture "tid" TeamId
                                                           :> ("legalhold"
                                                               :> ("consent"
                                                                   :> MultiVerb
                                                                        'POST
                                                                        '[JSON]
                                                                        GrantConsentResultResponseTypes
                                                                        GrantConsentResult))))))))))))))
            :<|> (Named
                    "request-legal-hold-device"
                    (Summary "Request legal hold device"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                     :> (CanThrow 'NotATeamMember
                                         :> (CanThrow OperationDenied
                                             :> (CanThrow 'TeamMemberNotFound
                                                 :> (CanThrow 'LegalHoldNotEnabled
                                                     :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                         :> (CanThrow 'NoUserLegalHoldConsent
                                                             :> (CanThrow
                                                                   'LegalHoldServiceBadResponse
                                                                 :> (CanThrow
                                                                       'LegalHoldServiceNotRegistered
                                                                     :> (CanThrow
                                                                           'LegalHoldCouldNotBlockConnections
                                                                         :> (CanThrow
                                                                               'MLSLegalholdIncompatible
                                                                             :> (CanThrow
                                                                                   'UserLegalHoldIllegalOperation
                                                                                 :> (Description
                                                                                       "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                                     :> (ZLocalUser
                                                                                         :> ("teams"
                                                                                             :> (Capture
                                                                                                   "tid"
                                                                                                   TeamId
                                                                                                 :> ("legalhold"
                                                                                                     :> (Capture
                                                                                                           "uid"
                                                                                                           UserId
                                                                                                         :> MultiVerb
                                                                                                              'POST
                                                                                                              '[JSON]
                                                                                                              RequestDeviceResultResponseType
                                                                                                              RequestDeviceResult))))))))))))))))))))))
                  :<|> (Named
                          "disable-legal-hold-for-user"
                          (Summary "Disable legal hold for user"
                           :> (MakesFederatedCall 'Galley "on-conversation-updated"
                               :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                   :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                       :> (CanThrow AuthenticationError
                                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                               :> (CanThrow 'NotATeamMember
                                                   :> (CanThrow OperationDenied
                                                       :> (CanThrow 'LegalHoldServiceNotRegistered
                                                           :> (CanThrow
                                                                 'UserLegalHoldIllegalOperation
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (Description
                                                                         "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                       :> (ZLocalUser
                                                                           :> ("teams"
                                                                               :> (Capture
                                                                                     "tid" TeamId
                                                                                   :> ("legalhold"
                                                                                       :> (Capture
                                                                                             "uid"
                                                                                             UserId
                                                                                           :> (ReqBody
                                                                                                 '[JSON]
                                                                                                 DisableLegalHoldForUserRequest
                                                                                               :> MultiVerb
                                                                                                    'DELETE
                                                                                                    '[JSON]
                                                                                                    DisableLegalHoldForUserResponseType
                                                                                                    DisableLegalHoldForUserResponse))))))))))))))))))
                        :<|> Named
                               "approve-legal-hold-device"
                               (Summary "Approve legal hold device"
                                :> (MakesFederatedCall 'Galley "on-conversation-updated"
                                    :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                        :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                            :> (CanThrow AuthenticationError
                                                :> (CanThrow 'AccessDenied
                                                    :> (CanThrow
                                                          ('ActionDenied 'RemoveConversationMember)
                                                        :> (CanThrow 'NotATeamMember
                                                            :> (CanThrow 'LegalHoldNotEnabled
                                                                :> (CanThrow
                                                                      'UserLegalHoldNotPending
                                                                    :> (CanThrow
                                                                          'NoLegalHoldDeviceAllocated
                                                                        :> (CanThrow
                                                                              'LegalHoldServiceNotRegistered
                                                                            :> (CanThrow
                                                                                  'UserLegalHoldAlreadyEnabled
                                                                                :> (CanThrow
                                                                                      'UserLegalHoldIllegalOperation
                                                                                    :> (CanThrow
                                                                                          'LegalHoldCouldNotBlockConnections
                                                                                        :> (Description
                                                                                              "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                            :> (ZLocalUser
                                                                                                :> (ZConn
                                                                                                    :> ("teams"
                                                                                                        :> (Capture
                                                                                                              "tid"
                                                                                                              TeamId
                                                                                                            :> ("legalhold"
                                                                                                                :> (Capture
                                                                                                                      "uid"
                                                                                                                      UserId
                                                                                                                    :> ("approve"
                                                                                                                        :> (ReqBody
                                                                                                                              '[JSON]
                                                                                                                              ApproveLegalHoldForUserRequest
                                                                                                                            :> MultiVerb
                                                                                                                                 'PUT
                                                                                                                                 '[JSON]
                                                                                                                                 '[RespondEmpty
                                                                                                                                     200
                                                                                                                                     "Legal hold approved"]
                                                                                                                                 ()))))))))))))))))))))))))))))
     '[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 @"consent-to-legal-hold" (((HasAnnotation 'Remote "galley" "on-conversation-updated",
  (HasAnnotation 'Remote "galley" "on-mls-message-sent",
   (HasAnnotation 'Remote "brig" "get-users-by-ids",
    () :: Constraint))) =>
 QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> Sem
      '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        Error (Tagged 'InvalidOperation ()),
        Error (Tagged 'TeamMemberNotFound ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      GrantConsentResult)
-> Dict (HasAnnotation 'Remote "galley" "on-conversation-updated")
-> Dict (HasAnnotation 'Remote "galley" "on-mls-message-sent")
-> Dict (HasAnnotation 'Remote "brig" "get-users-by-ids")
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     GrantConsentResult
forall (c :: Constraint) r a. SolveCallsFed c r a => (c => r) -> a
callsFed ((QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> Sem
      '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        Error (Tagged 'InvalidOperation ()),
        Error (Tagged 'TeamMemberNotFound ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      GrantConsentResult)
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     GrantConsentResult
forall x a. ToHasAnnotations x => a -> a
exposeAnnotations QualifiedWithTag 'QLocal UserId
-> TeamId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       Error (Tagged 'InvalidOperation ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     GrantConsentResult
forall (r :: EffectRow).
(Member BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error FederationError) r,
 Member (Error InternalError) r,
 Member
   (Error (Tagged ('ActionDenied 'RemoveConversationMember) ())) r,
 Member (Error (Tagged 'LegalHoldCouldNotBlockConnections ())) r,
 Member (Error (Tagged 'TeamMemberNotFound ())) r,
 Member (Error (Tagged 'UserLegalHoldIllegalOperation ())) r,
 Member ExternalAccess r, Member FederatorAccess r,
 Member NotificationSubsystem r, Member (Input Env) r,
 Member (Input UTCTime) r, Member LegalHoldStore r,
 Member (ListItems LegacyPaging ConvId) r, Member MemberStore r,
 Member ProposalStore r, Member (Logger (Msg -> Msg)) r,
 Member Random r, Member SubConversationStore r,
 Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> Sem r GrantConsentResult
grantConsent))
    API
  (Named
     "consent-to-legal-hold"
     (Summary "Consent to legal hold"
      :> (MakesFederatedCall 'Galley "on-conversation-updated"
          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                  :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                      :> (CanThrow 'InvalidOperation
                          :> (CanThrow 'TeamMemberNotFound
                              :> (CanThrow 'UserLegalHoldIllegalOperation
                                  :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                      :> (ZLocalUser
                                          :> ("teams"
                                              :> (Capture "tid" TeamId
                                                  :> ("legalhold"
                                                      :> ("consent"
                                                          :> MultiVerb
                                                               'POST
                                                               '[JSON]
                                                               GrantConsentResultResponseTypes
                                                               GrantConsentResult)))))))))))))))
  '[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
        "request-legal-hold-device"
        (Summary "Request legal hold device"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                         :> (CanThrow 'NotATeamMember
                             :> (CanThrow OperationDenied
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'LegalHoldNotEnabled
                                         :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                             :> (CanThrow 'NoUserLegalHoldConsent
                                                 :> (CanThrow 'LegalHoldServiceBadResponse
                                                     :> (CanThrow 'LegalHoldServiceNotRegistered
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (CanThrow 'MLSLegalholdIncompatible
                                                                 :> (CanThrow
                                                                       'UserLegalHoldIllegalOperation
                                                                     :> (Description
                                                                           "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                         :> (ZLocalUser
                                                                             :> ("teams"
                                                                                 :> (Capture
                                                                                       "tid" TeamId
                                                                                     :> ("legalhold"
                                                                                         :> (Capture
                                                                                               "uid"
                                                                                               UserId
                                                                                             :> MultiVerb
                                                                                                  'POST
                                                                                                  '[JSON]
                                                                                                  RequestDeviceResultResponseType
                                                                                                  RequestDeviceResult))))))))))))))))))))))
      :<|> (Named
              "disable-legal-hold-for-user"
              (Summary "Disable legal hold for user"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (CanThrow 'LegalHoldServiceNotRegistered
                                               :> (CanThrow 'UserLegalHoldIllegalOperation
                                                   :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                       :> (Description
                                                             "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                           :> (ZLocalUser
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("legalhold"
                                                                           :> (Capture "uid" UserId
                                                                               :> (ReqBody
                                                                                     '[JSON]
                                                                                     DisableLegalHoldForUserRequest
                                                                                   :> MultiVerb
                                                                                        'DELETE
                                                                                        '[JSON]
                                                                                        DisableLegalHoldForUserResponseType
                                                                                        DisableLegalHoldForUserResponse))))))))))))))))))
            :<|> Named
                   "approve-legal-hold-device"
                   (Summary "Approve legal hold device"
                    :> (MakesFederatedCall 'Galley "on-conversation-updated"
                        :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                            :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                :> (CanThrow AuthenticationError
                                    :> (CanThrow 'AccessDenied
                                        :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                            :> (CanThrow 'NotATeamMember
                                                :> (CanThrow 'LegalHoldNotEnabled
                                                    :> (CanThrow 'UserLegalHoldNotPending
                                                        :> (CanThrow 'NoLegalHoldDeviceAllocated
                                                            :> (CanThrow
                                                                  'LegalHoldServiceNotRegistered
                                                                :> (CanThrow
                                                                      'UserLegalHoldAlreadyEnabled
                                                                    :> (CanThrow
                                                                          'UserLegalHoldIllegalOperation
                                                                        :> (CanThrow
                                                                              'LegalHoldCouldNotBlockConnections
                                                                            :> (Description
                                                                                  "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                :> (ZLocalUser
                                                                                    :> (ZConn
                                                                                        :> ("teams"
                                                                                            :> (Capture
                                                                                                  "tid"
                                                                                                  TeamId
                                                                                                :> ("legalhold"
                                                                                                    :> (Capture
                                                                                                          "uid"
                                                                                                          UserId
                                                                                                        :> ("approve"
                                                                                                            :> (ReqBody
                                                                                                                  '[JSON]
                                                                                                                  ApproveLegalHoldForUserRequest
                                                                                                                :> MultiVerb
                                                                                                                     'PUT
                                                                                                                     '[JSON]
                                                                                                                     '[RespondEmpty
                                                                                                                         200
                                                                                                                         "Legal hold approved"]
                                                                                                                     ()))))))))))))))))))))))))))
     '[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
        "consent-to-legal-hold"
        (Summary "Consent to legal hold"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                         :> (CanThrow 'InvalidOperation
                             :> (CanThrow 'TeamMemberNotFound
                                 :> (CanThrow 'UserLegalHoldIllegalOperation
                                     :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                         :> (ZLocalUser
                                             :> ("teams"
                                                 :> (Capture "tid" TeamId
                                                     :> ("legalhold"
                                                         :> ("consent"
                                                             :> MultiVerb
                                                                  'POST
                                                                  '[JSON]
                                                                  GrantConsentResultResponseTypes
                                                                  GrantConsentResult))))))))))))))
      :<|> (Named
              "request-legal-hold-device"
              (Summary "Request legal hold device"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                               :> (CanThrow 'NotATeamMember
                                   :> (CanThrow OperationDenied
                                       :> (CanThrow 'TeamMemberNotFound
                                           :> (CanThrow 'LegalHoldNotEnabled
                                               :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                   :> (CanThrow 'NoUserLegalHoldConsent
                                                       :> (CanThrow 'LegalHoldServiceBadResponse
                                                           :> (CanThrow
                                                                 'LegalHoldServiceNotRegistered
                                                               :> (CanThrow
                                                                     'LegalHoldCouldNotBlockConnections
                                                                   :> (CanThrow
                                                                         'MLSLegalholdIncompatible
                                                                       :> (CanThrow
                                                                             'UserLegalHoldIllegalOperation
                                                                           :> (Description
                                                                                 "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                               :> (ZLocalUser
                                                                                   :> ("teams"
                                                                                       :> (Capture
                                                                                             "tid"
                                                                                             TeamId
                                                                                           :> ("legalhold"
                                                                                               :> (Capture
                                                                                                     "uid"
                                                                                                     UserId
                                                                                                   :> MultiVerb
                                                                                                        'POST
                                                                                                        '[JSON]
                                                                                                        RequestDeviceResultResponseType
                                                                                                        RequestDeviceResult))))))))))))))))))))))
            :<|> (Named
                    "disable-legal-hold-for-user"
                    (Summary "Disable legal hold for user"
                     :> (MakesFederatedCall 'Galley "on-conversation-updated"
                         :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                             :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                 :> (CanThrow AuthenticationError
                                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                         :> (CanThrow 'NotATeamMember
                                             :> (CanThrow OperationDenied
                                                 :> (CanThrow 'LegalHoldServiceNotRegistered
                                                     :> (CanThrow 'UserLegalHoldIllegalOperation
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (Description
                                                                   "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                                 :> (ZLocalUser
                                                                     :> ("teams"
                                                                         :> (Capture "tid" TeamId
                                                                             :> ("legalhold"
                                                                                 :> (Capture
                                                                                       "uid" UserId
                                                                                     :> (ReqBody
                                                                                           '[JSON]
                                                                                           DisableLegalHoldForUserRequest
                                                                                         :> MultiVerb
                                                                                              'DELETE
                                                                                              '[JSON]
                                                                                              DisableLegalHoldForUserResponseType
                                                                                              DisableLegalHoldForUserResponse))))))))))))))))))
                  :<|> Named
                         "approve-legal-hold-device"
                         (Summary "Approve legal hold device"
                          :> (MakesFederatedCall 'Galley "on-conversation-updated"
                              :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                                  :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                      :> (CanThrow AuthenticationError
                                          :> (CanThrow 'AccessDenied
                                              :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                                  :> (CanThrow 'NotATeamMember
                                                      :> (CanThrow 'LegalHoldNotEnabled
                                                          :> (CanThrow 'UserLegalHoldNotPending
                                                              :> (CanThrow
                                                                    'NoLegalHoldDeviceAllocated
                                                                  :> (CanThrow
                                                                        'LegalHoldServiceNotRegistered
                                                                      :> (CanThrow
                                                                            'UserLegalHoldAlreadyEnabled
                                                                          :> (CanThrow
                                                                                'UserLegalHoldIllegalOperation
                                                                              :> (CanThrow
                                                                                    'LegalHoldCouldNotBlockConnections
                                                                                  :> (Description
                                                                                        "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                      :> (ZLocalUser
                                                                                          :> (ZConn
                                                                                              :> ("teams"
                                                                                                  :> (Capture
                                                                                                        "tid"
                                                                                                        TeamId
                                                                                                      :> ("legalhold"
                                                                                                          :> (Capture
                                                                                                                "uid"
                                                                                                                UserId
                                                                                                              :> ("approve"
                                                                                                                  :> (ReqBody
                                                                                                                        '[JSON]
                                                                                                                        ApproveLegalHoldForUserRequest
                                                                                                                      :> MultiVerb
                                                                                                                           'PUT
                                                                                                                           '[JSON]
                                                                                                                           '[RespondEmpty
                                                                                                                               200
                                                                                                                               "Legal hold approved"]
                                                                                                                           ())))))))))))))))))))))))))))
     '[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 @"request-legal-hold-device" (((HasAnnotation 'Remote "galley" "on-conversation-updated",
  (HasAnnotation 'Remote "galley" "on-mls-message-sent",
   (HasAnnotation 'Remote "brig" "get-users-by-ids",
    () :: Constraint))) =>
 QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> UserId
 -> Sem
      '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
        Error (Tagged 'TeamMemberNotFound ()),
        Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
        Error (Tagged 'NoUserLegalHoldConsent ()),
        Error (Tagged 'LegalHoldServiceBadResponse ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()),
        Error (Tagged 'MLSLegalholdIncompatible ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()), 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]
      RequestDeviceResult)
-> Dict (HasAnnotation 'Remote "galley" "on-conversation-updated")
-> Dict (HasAnnotation 'Remote "galley" "on-mls-message-sent")
-> Dict (HasAnnotation 'Remote "brig" "get-users-by-ids")
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'NoUserLegalHoldConsent ()),
       Error (Tagged 'LegalHoldServiceBadResponse ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()),
       Error (Tagged 'MLSLegalholdIncompatible ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()), 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]
     RequestDeviceResult
forall (c :: Constraint) r a. SolveCallsFed c r a => (c => r) -> a
callsFed ((QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> UserId
 -> Sem
      '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
        Error (Tagged 'TeamMemberNotFound ()),
        Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
        Error (Tagged 'NoUserLegalHoldConsent ()),
        Error (Tagged 'LegalHoldServiceBadResponse ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()),
        Error (Tagged 'MLSLegalholdIncompatible ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()), 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]
      RequestDeviceResult)
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'NoUserLegalHoldConsent ()),
       Error (Tagged 'LegalHoldServiceBadResponse ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()),
       Error (Tagged 'MLSLegalholdIncompatible ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()), 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]
     RequestDeviceResult
forall x a. ToHasAnnotations x => a -> a
exposeAnnotations QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> Sem
     '[Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'TeamMemberNotFound ()),
       Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'NoUserLegalHoldConsent ()),
       Error (Tagged 'LegalHoldServiceBadResponse ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()),
       Error (Tagged 'MLSLegalholdIncompatible ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()), 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]
     RequestDeviceResult
forall (r :: EffectRow).
(Member BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error FederationError) r,
 Member (Error InternalError) r,
 Member
   (Error (Tagged ('ActionDenied 'RemoveConversationMember) ())) r,
 Member (Error (Tagged 'LegalHoldCouldNotBlockConnections ())) r,
 Member (Error (Tagged 'LegalHoldNotEnabled ())) r,
 Member (Error (Tagged 'LegalHoldServiceBadResponse ())) r,
 Member (Error (Tagged 'LegalHoldServiceNotRegistered ())) r,
 Member (Error (Tagged 'MLSLegalholdIncompatible ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged 'NoUserLegalHoldConsent ())) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member (Error (Tagged 'TeamMemberNotFound ())) r,
 Member (Error (Tagged 'UserLegalHoldAlreadyEnabled ())) r,
 Member (Error (Tagged 'UserLegalHoldIllegalOperation ())) r,
 Member ExternalAccess r, Member FederatorAccess r,
 Member NotificationSubsystem r, Member (Input (Local ())) r,
 Member (Input Env) r, Member (Input UTCTime) r,
 Member LegalHoldStore r, Member (ListItems LegacyPaging ConvId) r,
 Member MemberStore r, Member ProposalStore r,
 Member (Logger (Msg -> Msg)) r, Member Random r,
 Member SubConversationStore r, Member TeamFeatureStore r,
 Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId -> UserId -> Sem r RequestDeviceResult
requestDevice))
    API
  (Named
     "request-legal-hold-device"
     (Summary "Request legal hold device"
      :> (MakesFederatedCall 'Galley "on-conversation-updated"
          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                  :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                      :> (CanThrow 'NotATeamMember
                          :> (CanThrow OperationDenied
                              :> (CanThrow 'TeamMemberNotFound
                                  :> (CanThrow 'LegalHoldNotEnabled
                                      :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                          :> (CanThrow 'NoUserLegalHoldConsent
                                              :> (CanThrow 'LegalHoldServiceBadResponse
                                                  :> (CanThrow 'LegalHoldServiceNotRegistered
                                                      :> (CanThrow
                                                            'LegalHoldCouldNotBlockConnections
                                                          :> (CanThrow 'MLSLegalholdIncompatible
                                                              :> (CanThrow
                                                                    'UserLegalHoldIllegalOperation
                                                                  :> (Description
                                                                        "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                      :> (ZLocalUser
                                                                          :> ("teams"
                                                                              :> (Capture
                                                                                    "tid" TeamId
                                                                                  :> ("legalhold"
                                                                                      :> (Capture
                                                                                            "uid"
                                                                                            UserId
                                                                                          :> MultiVerb
                                                                                               'POST
                                                                                               '[JSON]
                                                                                               RequestDeviceResultResponseType
                                                                                               RequestDeviceResult)))))))))))))))))))))))
  '[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
        "disable-legal-hold-for-user"
        (Summary "Disable legal hold for user"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (CanThrow 'LegalHoldServiceNotRegistered
                                         :> (CanThrow 'UserLegalHoldIllegalOperation
                                             :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                 :> (Description
                                                       "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                     :> (ZLocalUser
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("legalhold"
                                                                     :> (Capture "uid" UserId
                                                                         :> (ReqBody
                                                                               '[JSON]
                                                                               DisableLegalHoldForUserRequest
                                                                             :> MultiVerb
                                                                                  'DELETE
                                                                                  '[JSON]
                                                                                  DisableLegalHoldForUserResponseType
                                                                                  DisableLegalHoldForUserResponse))))))))))))))))))
      :<|> Named
             "approve-legal-hold-device"
             (Summary "Approve legal hold device"
              :> (MakesFederatedCall 'Galley "on-conversation-updated"
                  :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                      :> (MakesFederatedCall 'Brig "get-users-by-ids"
                          :> (CanThrow AuthenticationError
                              :> (CanThrow 'AccessDenied
                                  :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                      :> (CanThrow 'NotATeamMember
                                          :> (CanThrow 'LegalHoldNotEnabled
                                              :> (CanThrow 'UserLegalHoldNotPending
                                                  :> (CanThrow 'NoLegalHoldDeviceAllocated
                                                      :> (CanThrow 'LegalHoldServiceNotRegistered
                                                          :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                              :> (CanThrow
                                                                    'UserLegalHoldIllegalOperation
                                                                  :> (CanThrow
                                                                        'LegalHoldCouldNotBlockConnections
                                                                      :> (Description
                                                                            "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                          :> (ZLocalUser
                                                                              :> (ZConn
                                                                                  :> ("teams"
                                                                                      :> (Capture
                                                                                            "tid"
                                                                                            TeamId
                                                                                          :> ("legalhold"
                                                                                              :> (Capture
                                                                                                    "uid"
                                                                                                    UserId
                                                                                                  :> ("approve"
                                                                                                      :> (ReqBody
                                                                                                            '[JSON]
                                                                                                            ApproveLegalHoldForUserRequest
                                                                                                          :> MultiVerb
                                                                                                               'PUT
                                                                                                               '[JSON]
                                                                                                               '[RespondEmpty
                                                                                                                   200
                                                                                                                   "Legal hold approved"]
                                                                                                               ())))))))))))))))))))))))))
     '[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
        "request-legal-hold-device"
        (Summary "Request legal hold device"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                         :> (CanThrow 'NotATeamMember
                             :> (CanThrow OperationDenied
                                 :> (CanThrow 'TeamMemberNotFound
                                     :> (CanThrow 'LegalHoldNotEnabled
                                         :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                             :> (CanThrow 'NoUserLegalHoldConsent
                                                 :> (CanThrow 'LegalHoldServiceBadResponse
                                                     :> (CanThrow 'LegalHoldServiceNotRegistered
                                                         :> (CanThrow
                                                               'LegalHoldCouldNotBlockConnections
                                                             :> (CanThrow 'MLSLegalholdIncompatible
                                                                 :> (CanThrow
                                                                       'UserLegalHoldIllegalOperation
                                                                     :> (Description
                                                                           "This endpoint can lead to the following events being sent:\n- LegalHoldClientRequested event to contacts of the user the device is requested for, if they didn't already have a legalhold client (via brig)"
                                                                         :> (ZLocalUser
                                                                             :> ("teams"
                                                                                 :> (Capture
                                                                                       "tid" TeamId
                                                                                     :> ("legalhold"
                                                                                         :> (Capture
                                                                                               "uid"
                                                                                               UserId
                                                                                             :> MultiVerb
                                                                                                  'POST
                                                                                                  '[JSON]
                                                                                                  RequestDeviceResultResponseType
                                                                                                  RequestDeviceResult))))))))))))))))))))))
      :<|> (Named
              "disable-legal-hold-for-user"
              (Summary "Disable legal hold for user"
               :> (MakesFederatedCall 'Galley "on-conversation-updated"
                   :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                       :> (MakesFederatedCall 'Brig "get-users-by-ids"
                           :> (CanThrow AuthenticationError
                               :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                   :> (CanThrow 'NotATeamMember
                                       :> (CanThrow OperationDenied
                                           :> (CanThrow 'LegalHoldServiceNotRegistered
                                               :> (CanThrow 'UserLegalHoldIllegalOperation
                                                   :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                       :> (Description
                                                             "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                           :> (ZLocalUser
                                                               :> ("teams"
                                                                   :> (Capture "tid" TeamId
                                                                       :> ("legalhold"
                                                                           :> (Capture "uid" UserId
                                                                               :> (ReqBody
                                                                                     '[JSON]
                                                                                     DisableLegalHoldForUserRequest
                                                                                   :> MultiVerb
                                                                                        'DELETE
                                                                                        '[JSON]
                                                                                        DisableLegalHoldForUserResponseType
                                                                                        DisableLegalHoldForUserResponse))))))))))))))))))
            :<|> Named
                   "approve-legal-hold-device"
                   (Summary "Approve legal hold device"
                    :> (MakesFederatedCall 'Galley "on-conversation-updated"
                        :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                            :> (MakesFederatedCall 'Brig "get-users-by-ids"
                                :> (CanThrow AuthenticationError
                                    :> (CanThrow 'AccessDenied
                                        :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                            :> (CanThrow 'NotATeamMember
                                                :> (CanThrow 'LegalHoldNotEnabled
                                                    :> (CanThrow 'UserLegalHoldNotPending
                                                        :> (CanThrow 'NoLegalHoldDeviceAllocated
                                                            :> (CanThrow
                                                                  'LegalHoldServiceNotRegistered
                                                                :> (CanThrow
                                                                      'UserLegalHoldAlreadyEnabled
                                                                    :> (CanThrow
                                                                          'UserLegalHoldIllegalOperation
                                                                        :> (CanThrow
                                                                              'LegalHoldCouldNotBlockConnections
                                                                            :> (Description
                                                                                  "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                                :> (ZLocalUser
                                                                                    :> (ZConn
                                                                                        :> ("teams"
                                                                                            :> (Capture
                                                                                                  "tid"
                                                                                                  TeamId
                                                                                                :> ("legalhold"
                                                                                                    :> (Capture
                                                                                                          "uid"
                                                                                                          UserId
                                                                                                        :> ("approve"
                                                                                                            :> (ReqBody
                                                                                                                  '[JSON]
                                                                                                                  ApproveLegalHoldForUserRequest
                                                                                                                :> MultiVerb
                                                                                                                     'PUT
                                                                                                                     '[JSON]
                                                                                                                     '[RespondEmpty
                                                                                                                         200
                                                                                                                         "Legal hold approved"]
                                                                                                                     ()))))))))))))))))))))))))))
     '[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 @"disable-legal-hold-for-user" (((HasAnnotation 'Remote "galley" "on-conversation-updated",
  (HasAnnotation 'Remote "galley" "on-mls-message-sent",
   (HasAnnotation 'Remote "brig" "get-users-by-ids",
    () :: Constraint))) =>
 QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> UserId
 -> DisableLegalHoldForUserRequest
 -> Sem
      '[Error AuthenticationError,
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      DisableLegalHoldForUserResponse)
-> Dict (HasAnnotation 'Remote "galley" "on-conversation-updated")
-> Dict (HasAnnotation 'Remote "galley" "on-mls-message-sent")
-> Dict (HasAnnotation 'Remote "brig" "get-users-by-ids")
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     DisableLegalHoldForUserResponse
forall (c :: Constraint) r a. SolveCallsFed c r a => (c => r) -> a
callsFed ((QualifiedWithTag 'QLocal UserId
 -> TeamId
 -> UserId
 -> DisableLegalHoldForUserRequest
 -> Sem
      '[Error AuthenticationError,
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      DisableLegalHoldForUserResponse)
-> QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     DisableLegalHoldForUserResponse
forall x a. ToHasAnnotations x => a -> a
exposeAnnotations QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError,
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged OperationDenied ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
     DisableLegalHoldForUserResponse
forall (r :: EffectRow).
(Member BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error AuthenticationError) r,
 Member (Error FederationError) r, Member (Error InternalError) r,
 Member
   (Error (Tagged ('ActionDenied 'RemoveConversationMember) ())) r,
 Member (Error (Tagged 'LegalHoldCouldNotBlockConnections ())) r,
 Member (Error (Tagged 'LegalHoldServiceNotRegistered ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged OperationDenied ())) r,
 Member (Error (Tagged 'UserLegalHoldIllegalOperation ())) r,
 Member ExternalAccess r, Member FederatorAccess r,
 Member NotificationSubsystem r, Member (Input Env) r,
 Member (Input (Local ())) r, Member (Input UTCTime) r,
 Member LegalHoldStore r, Member (ListItems LegacyPaging ConvId) r,
 Member MemberStore r, Member ProposalStore r,
 Member (Logger (Msg -> Msg)) r, Member Random r,
 Member SubConversationStore r, Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> TeamId
-> UserId
-> DisableLegalHoldForUserRequest
-> Sem r DisableLegalHoldForUserResponse
disableForUser))
    API
  (Named
     "disable-legal-hold-for-user"
     (Summary "Disable legal hold for user"
      :> (MakesFederatedCall 'Galley "on-conversation-updated"
          :> (MakesFederatedCall 'Galley "on-mls-message-sent"
              :> (MakesFederatedCall 'Brig "get-users-by-ids"
                  :> (CanThrow AuthenticationError
                      :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                          :> (CanThrow 'NotATeamMember
                              :> (CanThrow OperationDenied
                                  :> (CanThrow 'LegalHoldServiceNotRegistered
                                      :> (CanThrow 'UserLegalHoldIllegalOperation
                                          :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                              :> (Description
                                                    "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                  :> (ZLocalUser
                                                      :> ("teams"
                                                          :> (Capture "tid" TeamId
                                                              :> ("legalhold"
                                                                  :> (Capture "uid" UserId
                                                                      :> (ReqBody
                                                                            '[JSON]
                                                                            DisableLegalHoldForUserRequest
                                                                          :> MultiVerb
                                                                               'DELETE
                                                                               '[JSON]
                                                                               DisableLegalHoldForUserResponseType
                                                                               DisableLegalHoldForUserResponse)))))))))))))))))))
  '[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
        "approve-legal-hold-device"
        (Summary "Approve legal hold device"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow 'AccessDenied
                             :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                 :> (CanThrow 'NotATeamMember
                                     :> (CanThrow 'LegalHoldNotEnabled
                                         :> (CanThrow 'UserLegalHoldNotPending
                                             :> (CanThrow 'NoLegalHoldDeviceAllocated
                                                 :> (CanThrow 'LegalHoldServiceNotRegistered
                                                     :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                         :> (CanThrow 'UserLegalHoldIllegalOperation
                                                             :> (CanThrow
                                                                   'LegalHoldCouldNotBlockConnections
                                                                 :> (Description
                                                                       "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                     :> (ZLocalUser
                                                                         :> (ZConn
                                                                             :> ("teams"
                                                                                 :> (Capture
                                                                                       "tid" TeamId
                                                                                     :> ("legalhold"
                                                                                         :> (Capture
                                                                                               "uid"
                                                                                               UserId
                                                                                             :> ("approve"
                                                                                                 :> (ReqBody
                                                                                                       '[JSON]
                                                                                                       ApproveLegalHoldForUserRequest
                                                                                                     :> MultiVerb
                                                                                                          'PUT
                                                                                                          '[JSON]
                                                                                                          '[RespondEmpty
                                                                                                              200
                                                                                                              "Legal hold approved"]
                                                                                                          ())))))))))))))))))))))))))
     '[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
        "disable-legal-hold-for-user"
        (Summary "Disable legal hold for user"
         :> (MakesFederatedCall 'Galley "on-conversation-updated"
             :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                 :> (MakesFederatedCall 'Brig "get-users-by-ids"
                     :> (CanThrow AuthenticationError
                         :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                             :> (CanThrow 'NotATeamMember
                                 :> (CanThrow OperationDenied
                                     :> (CanThrow 'LegalHoldServiceNotRegistered
                                         :> (CanThrow 'UserLegalHoldIllegalOperation
                                             :> (CanThrow 'LegalHoldCouldNotBlockConnections
                                                 :> (Description
                                                       "This endpoint can lead to the following events being sent:\n- ClientRemoved event to the user owning the client (via brig)\n- UserLegalHoldDisabled event to contacts of the user owning the client (via brig)"
                                                     :> (ZLocalUser
                                                         :> ("teams"
                                                             :> (Capture "tid" TeamId
                                                                 :> ("legalhold"
                                                                     :> (Capture "uid" UserId
                                                                         :> (ReqBody
                                                                               '[JSON]
                                                                               DisableLegalHoldForUserRequest
                                                                             :> MultiVerb
                                                                                  'DELETE
                                                                                  '[JSON]
                                                                                  DisableLegalHoldForUserResponseType
                                                                                  DisableLegalHoldForUserResponse))))))))))))))))))
      :<|> Named
             "approve-legal-hold-device"
             (Summary "Approve legal hold device"
              :> (MakesFederatedCall 'Galley "on-conversation-updated"
                  :> (MakesFederatedCall 'Galley "on-mls-message-sent"
                      :> (MakesFederatedCall 'Brig "get-users-by-ids"
                          :> (CanThrow AuthenticationError
                              :> (CanThrow 'AccessDenied
                                  :> (CanThrow ('ActionDenied 'RemoveConversationMember)
                                      :> (CanThrow 'NotATeamMember
                                          :> (CanThrow 'LegalHoldNotEnabled
                                              :> (CanThrow 'UserLegalHoldNotPending
                                                  :> (CanThrow 'NoLegalHoldDeviceAllocated
                                                      :> (CanThrow 'LegalHoldServiceNotRegistered
                                                          :> (CanThrow 'UserLegalHoldAlreadyEnabled
                                                              :> (CanThrow
                                                                    'UserLegalHoldIllegalOperation
                                                                  :> (CanThrow
                                                                        'LegalHoldCouldNotBlockConnections
                                                                      :> (Description
                                                                            "This endpoint can lead to the following events being sent:\n- ClientAdded event to the user owning the client (via brig)\n- UserLegalHoldEnabled event to contacts of the user owning the client (via brig)\n- ClientRemoved event to the user, if removing old client due to max number (via brig)"
                                                                          :> (ZLocalUser
                                                                              :> (ZConn
                                                                                  :> ("teams"
                                                                                      :> (Capture
                                                                                            "tid"
                                                                                            TeamId
                                                                                          :> ("legalhold"
                                                                                              :> (Capture
                                                                                                    "uid"
                                                                                                    UserId
                                                                                                  :> ("approve"
                                                                                                      :> (ReqBody
                                                                                                            '[JSON]
                                                                                                            ApproveLegalHoldForUserRequest
                                                                                                          :> MultiVerb
                                                                                                               'PUT
                                                                                                               '[JSON]
                                                                                                               '[RespondEmpty
                                                                                                                   200
                                                                                                                   "Legal hold approved"]
                                                                                                               ())))))))))))))))))))))))))
     '[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 @"approve-legal-hold-device" (((HasAnnotation 'Remote "galley" "on-conversation-updated",
  (HasAnnotation 'Remote "galley" "on-mls-message-sent",
   (HasAnnotation 'Remote "brig" "get-users-by-ids",
    () :: Constraint))) =>
 QualifiedWithTag 'QLocal UserId
 -> ConnId
 -> TeamId
 -> UserId
 -> ApproveLegalHoldForUserRequest
 -> Sem
      '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'UserLegalHoldNotPending ()),
        Error (Tagged 'NoLegalHoldDeviceAllocated ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      ())
-> Dict (HasAnnotation 'Remote "galley" "on-conversation-updated")
-> Dict (HasAnnotation 'Remote "galley" "on-mls-message-sent")
-> Dict (HasAnnotation 'Remote "brig" "get-users-by-ids")
-> QualifiedWithTag 'QLocal UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldNotPending ()),
       Error (Tagged 'NoLegalHoldDeviceAllocated ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 (c :: Constraint) r a. SolveCallsFed c r a => (c => r) -> a
callsFed ((QualifiedWithTag 'QLocal UserId
 -> ConnId
 -> TeamId
 -> UserId
 -> ApproveLegalHoldForUserRequest
 -> Sem
      '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
        Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
        ErrorS 'NotATeamMember, Error (Tagged 'LegalHoldNotEnabled ()),
        Error (Tagged 'UserLegalHoldNotPending ()),
        Error (Tagged 'NoLegalHoldDeviceAllocated ()),
        Error (Tagged 'LegalHoldServiceNotRegistered ()),
        Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
        Error (Tagged 'UserLegalHoldIllegalOperation ()),
        Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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]
      ())
-> QualifiedWithTag 'QLocal UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldNotPending ()),
       Error (Tagged 'NoLegalHoldDeviceAllocated ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 x a. ToHasAnnotations x => a -> a
exposeAnnotations QualifiedWithTag 'QLocal UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Sem
     '[Error AuthenticationError, Error (Tagged 'AccessDenied ()),
       Error (Tagged ('ActionDenied 'RemoveConversationMember) ()),
       ErrorS 'NotATeamMember, Error (Tagged 'LegalHoldNotEnabled ()),
       Error (Tagged 'UserLegalHoldNotPending ()),
       Error (Tagged 'NoLegalHoldDeviceAllocated ()),
       Error (Tagged 'LegalHoldServiceNotRegistered ()),
       Error (Tagged 'UserLegalHoldAlreadyEnabled ()),
       Error (Tagged 'UserLegalHoldIllegalOperation ()),
       Error (Tagged 'LegalHoldCouldNotBlockConnections ()), 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 BackendNotificationQueueAccess r, Member BrigAccess r,
 Member ConversationStore r, Member (Error AuthenticationError) r,
 Member (Error FederationError) r, Member (Error InternalError) r,
 Member (Error (Tagged 'AccessDenied ())) r,
 Member
   (Error (Tagged ('ActionDenied 'RemoveConversationMember) ())) r,
 Member (Error (Tagged 'LegalHoldCouldNotBlockConnections ())) r,
 Member (Error (Tagged 'LegalHoldNotEnabled ())) r,
 Member (Error (Tagged 'LegalHoldServiceNotRegistered ())) r,
 Member (Error (Tagged 'NoLegalHoldDeviceAllocated ())) r,
 Member (ErrorS 'NotATeamMember) r,
 Member (Error (Tagged 'UserLegalHoldAlreadyEnabled ())) r,
 Member (Error (Tagged 'UserLegalHoldIllegalOperation ())) r,
 Member (Error (Tagged 'UserLegalHoldNotPending ())) r,
 Member ExternalAccess r, Member FederatorAccess r,
 Member NotificationSubsystem r, Member (Input (Local ())) r,
 Member (Input Env) r, Member (Input UTCTime) r,
 Member LegalHoldStore r, Member (ListItems LegacyPaging ConvId) r,
 Member MemberStore r, Member ProposalStore r,
 Member (Logger (Msg -> Msg)) r, Member Random r,
 Member SubConversationStore r, Member TeamFeatureStore r,
 Member TeamStore r) =>
QualifiedWithTag 'QLocal UserId
-> ConnId
-> TeamId
-> UserId
-> ApproveLegalHoldForUserRequest
-> Sem r ()
approveDevice))